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