1 // Copyright (c) 2016 The SigViewer Development Team
2 // Licensed under the GNU General Public License (GPL)
3 // https://www.gnu.org/licenses/gpl
4 
5 
6 #ifndef MAIN_WINDOW_MODEL_IMPL_H
7 #define MAIN_WINDOW_MODEL_IMPL_H
8 
9 #include "gui/application_context.h"
10 
11 #include <QStringList>
12 #include <QTabWidget>
13 #include <QMap>
14 
15 
16 class QAction;
17 
18 namespace sigviewer
19 {
20 
21 class MainWindow;
22 
23 //-------------------------------------------------------------------------
24 class MainWindowModelImpl : public QObject, public MainWindowModel
25 {
26     Q_OBJECT
27 public:
28     //-------------------------------------------------------------------------
29     MainWindowModelImpl (QSharedPointer<ApplicationContext> application_context);
30 
31     //-------------------------------------------------------------------------
32     virtual  ~MainWindowModelImpl ();
33 
34     //-------------------------------------------------------------------------
35     virtual QSharedPointer<SignalVisualisationModel> createSignalVisualisation (QString const& title,
36                                                                                 ChannelManager const& channel_manager);
37 
38     //-------------------------------------------------------------------------
39     virtual QSharedPointer<SignalVisualisationModel> createSignalVisualisationOfFile (QSharedPointer<FileContext> file_ctx);
40 
41     //-------------------------------------------------------------------------
42     virtual void closeCurrentFileTabs ();
43 
44     //-------------------------------------------------------------------------
45     virtual QSharedPointer<SignalVisualisationModel> getCurrentSignalVisualisationModel ();
46 
47     //-------------------------------------------------------------------------
48     virtual QSharedPointer<EventView> getCurrentEventView ();
49 
50 public slots:
51     //-------------------------------------------------------------------------
52     void tabChanged (int tab_index);
53 
54     //-------------------------------------------------------------------------
55     void closeTab (int tab_index);
56 
57 private slots:
58     //-------------------------------------------------------------------------
59     void recentFileActivated(QAction* recent_file_action);
60 
61     //-------------------------------------------------------------------------
62     void recentFileMenuAboutToShow();
63 
64     //-------------------------------------------------------------------------
65     void resetCurrentFileName (QString const& file_name);
66 
67 private:
68     //-------------------------------------------------------------------------
69     void loadSettings();
70 
71     //-------------------------------------------------------------------------
72     void saveSettings();
73 
74     //-------------------------------------------------------------------------
75     int createSignalVisualisationImpl (ChannelManager const& channel_manager,
76                                        QSharedPointer<EventManager> event_manager);
77 
78     //-------------------------------------------------------------------------
79     void storeAndInitTabContext (QSharedPointer<TabContext> context, int tab_index);
80 
81     static int const NUMBER_RECENT_FILES_;
82 
83     QSharedPointer<ApplicationContext> application_context_;
84     MainWindow* main_window_;
85     QTabWidget* tab_widget_;
86     QStringList recent_file_list_;
87     std::map<int, QSharedPointer<SignalVisualisationModel> > browser_models_;
88     QMap<int, QSharedPointer<EventView> > event_views_;
89     std::map<int, QSharedPointer<TabContext> > tab_contexts_;
90 
91     //-------------------------------------------------------------------------
92     // not allowed
93     MainWindowModelImpl(const MainWindowModelImpl&);
94     const MainWindowModelImpl& operator=(const MainWindowModelImpl&);
95 
96 };
97 
98 }
99 
100 #endif
101 
102