1 #ifndef TOURHANDLER_H 2 #define TOURHANDLER_H 3 4 #include "libmscore/xml.h" 5 6 namespace Ms { 7 8 //--------------------------------------------------------- 9 // TourMessage 10 //--------------------------------------------------------- 11 12 struct TourMessage { 13 QString message; 14 QList<QString> widgetNames; TourMessageTourMessage15 TourMessage(QString m, QList<QString> w) : message(m), widgetNames(w) {} 16 }; 17 18 //--------------------------------------------------------- 19 // Tour 20 //--------------------------------------------------------- 21 22 class Tour 23 { 24 QList<TourMessage> _messages; 25 QMultiMap<QString, QWidget*> nameToWidget; 26 QString _tourName; 27 bool _completed = false; 28 29 public: Tour(QString name)30 Tour(QString name) { _tourName = name; } 31 addMessage(QString m,QList<QString> w)32 void addMessage(QString m, QList<QString> w) { TourMessage message(m, w); 33 _messages.append(message); } messages()34 QList<TourMessage> messages() { return _messages; } 35 getWidgetsByName(QString n)36 QList<QWidget*> getWidgetsByName(QString n) { return nameToWidget.values(n); } addNameAndWidget(QString n,QWidget * w)37 void addNameAndWidget(QString n, QWidget* w) { nameToWidget.insert(n, w); } clearWidgets()38 void clearWidgets() { nameToWidget.clear(); } hasNameForWidget(QString n)39 bool hasNameForWidget(QString n) { return nameToWidget.contains(n); } 40 setTourName(QString n)41 void setTourName(QString n) { _tourName = n; } tourName()42 QString tourName() { return _tourName; } 43 setCompleted(bool c)44 void setCompleted(bool c) { _completed = c; } completed()45 bool completed() { return _completed; } 46 }; 47 48 //--------------------------------------------------------- 49 // OverlayWidget 50 //--------------------------------------------------------- 51 52 class OverlayWidget : public QWidget 53 { 54 void newParent(); 55 bool eventFilter(QObject * obj, QEvent * ev); 56 virtual bool event(QEvent* ev); 57 virtual void paintEvent(QPaintEvent *); 58 59 QList<QWidget*> widgets; 60 61 public: 62 OverlayWidget(QList<QWidget*> widgetList, QWidget* parent = 0); 63 }; 64 65 //--------------------------------------------------------- 66 // TourHandler 67 //--------------------------------------------------------- 68 69 class TourHandler : public QObject 70 { 71 Q_OBJECT 72 73 QMap<QObject*, QMap<QEvent::Type, QString>*> eventHandler; 74 75 void loadTour(XmlReader& tourXml); 76 77 static void displayTour(Tour* tour); 78 static void positionMessage(QList<QWidget*> widgets, QMessageBox* mbox); 79 static QHash<QString, Tour*> allTours; 80 static QHash<QString, Tour*> shortcutToTour; 81 static QMap<QString, QMap<QString, QString>*> eventNameLookup; 82 static QList<QWidget*> getWidgetsByNames(Tour* tour, QList<QString> names); 83 84 bool delayedWelcomeTour = false; 85 86 public slots: 87 void showWelcomeTour(); 88 89 public: TourHandler(QObject * parent)90 TourHandler(QObject* parent) : QObject(parent) {} 91 void loadTours(); 92 void resetCompletedTours(); 93 void readCompletedTours(); 94 void writeCompletedTours(); 95 96 bool eventFilter(QObject *obj, QEvent* event); 97 static void startTour(QString tourName); 98 void attachTour(QObject* obj, QEvent::Type eventType, QString tourName); 99 100 static void addWidgetToTour(QString tourName, QWidget* widget, QString widgetName); 101 static void clearWidgetsFromTour(QString tourName); 102 allTourShortcuts()103 static QList<QString> allTourShortcuts() { return shortcutToTour.keys(); } 104 delayWelcomeTour()105 void delayWelcomeTour() { delayedWelcomeTour = true; } 106 void showDelayedWelcomeTour(); 107 }; 108 109 } 110 111 #endif // TOURHANDLER_H 112