tutorialize deck editors

Took 8 seconds

Took 12 minutes
This commit is contained in:
Lukas Brübach
2025-12-07 22:03:07 +01:00
parent f6a1f34864
commit 54ee406a58
4 changed files with 58 additions and 0 deletions

View File

@@ -5,6 +5,7 @@
#include "../../interface/pixel_map_generator.h"
#include "../../interface/widgets/cards/card_info_frame_widget.h"
#include "../../interface/widgets/deck_analytics/deck_analytics_widget.h"
#include "../../interface/widgets/general/tutorial/tutorial_controller.h"
#include "../../interface/widgets/visual_deck_editor/visual_deck_editor_widget.h"
#include "../tab_deck_editor.h"
#include "../tab_supervisor.h"
@@ -50,6 +51,31 @@ TabDeckEditorVisual::TabDeckEditorVisual(TabSupervisor *_tabSupervisor) : Abstra
loadLayout();
databaseDisplayDockWidget->setHidden(true);
tutorialController = new TutorialController(this);
auto sequence = TutorialSequence();
sequence.addStep({tabContainer->visualDeckView, "View your deck here.",
[this]() { tabContainer->setCurrentWidget(tabContainer->visualDeckView); }});
sequence.addStep({printingSelectorDockWidget, "Change the printings in your deck here."});
tutorialController->addSequence(sequence);
auto vddSequence = tabContainer->visualDatabaseDisplay->addTutorialSteps();
vddSequence.steps.prepend({tabContainer->visualDatabaseDisplay, "View the database here",
[this]() { tabContainer->setCurrentWidget(tabContainer->visualDatabaseDisplay); }});
tutorialController->addSequence(vddSequence);
}
void TabDeckEditorVisual::showEvent(QShowEvent *ev)
{
QWidget::showEvent(ev);
if (!tutorialStarted) {
tutorialStarted = true;
// Start on next event loop iteration so everything is fully painted
QTimer::singleShot(0, tutorialController, [this] { tutorialController->start(); });
}
}
/** @brief Creates the central frame containing the tab container. */

View File

@@ -4,6 +4,7 @@
#include "../tab.h"
#include "tab_deck_editor_visual_tab_widget.h"
class TutorialController;
/**
* @class TabDeckEditorVisual
* @ingroup DeckEditorTabs
@@ -55,7 +56,12 @@ class TabDeckEditorVisual : public AbstractTabDeckEditor
{
Q_OBJECT
private:
TutorialController *tutorialController = nullptr;
bool tutorialStarted = false;
protected slots:
void showEvent(QShowEvent *ev) override;
/**
* @brief Load the editor layout from settings.
*/

View File

@@ -5,6 +5,7 @@
#include "../../../filters/syntax_help.h"
#include "../../pixel_map_generator.h"
#include "../cards/card_info_picture_with_text_overlay_widget.h"
#include "../general/tutorial/tutorial_controller.h"
#include "../quick_settings/settings_button_widget.h"
#include "../utility/custom_line_edit.h"
#include "visual_database_display_color_filter_widget.h"
@@ -192,6 +193,28 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
retranslateUi();
}
TutorialSequence VisualDatabaseDisplayWidget::addTutorialSteps()
{
auto sequence = TutorialSequence();
sequence.addStep({colorFilterWidget, "Filter the database by colors with these controls"});
sequence.addStep({displayModeButton, "You can change back to the old table display-style with this button."});
sequence.addStep({filterContainer, "Use these controls for quick access to common filters."});
sequence.addStep(
{quickFilterSaveLoadWidget, "This button will let you save and load all currently applied filters to files."});
sequence.addStep({quickFilterNameWidget,
"This button will let you apply name filters. Optionally, you can import every card in "
"your deck as a name filter and then save this as a filter using the save/load button "
"to make your own quick access collections!"});
sequence.addStep({mainTypeFilterWidget, "Use these buttons to quickly filter by card types."});
sequence.addStep({quickFilterSubTypeWidget, "This button will let you apply filters for card sub-types."});
sequence.addStep(
{quickFilterSetWidget,
"This button will let you apply filters for card sets. You can also filter to the X most recent sets. "
"Filtering to a set will display all printings of a card within that set."});
return sequence;
}
void VisualDatabaseDisplayWidget::initialize()
{
databaseLoadIndicator->setVisible(false);

View File

@@ -14,6 +14,7 @@
#include "../cards/card_size_widget.h"
#include "../general/layout_containers/flow_widget.h"
#include "../general/layout_containers/overlap_control_widget.h"
#include "../general/tutorial/tutorial_controller.h"
#include "../utility/custom_line_edit.h"
#include "visual_database_display_color_filter_widget.h"
#include "visual_database_display_filter_save_load_widget.h"
@@ -30,6 +31,7 @@
#include <libcockatrice/models/deck_list/deck_list_model.h>
#include <qscrollarea.h>
class TutorialController;
inline Q_LOGGING_CATEGORY(VisualDatabaseDisplayLog, "visual_database_display");
class VisualDatabaseDisplayWidget : public QWidget
@@ -59,6 +61,7 @@ public:
VisualDatabaseDisplayColorFilterWidget *colorFilterWidget;
public slots:
TutorialSequence addTutorialSteps();
void searchModelChanged();
signals: