MainBar: Catch errors listing the config keys
[pulseview.git] / pv / mainwindow.hpp
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2012 Joel Holdsworth <joel@airwebreathe.org.uk>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
19  */
20
21 #ifndef PULSEVIEW_PV_MAINWINDOW_HPP
22 #define PULSEVIEW_PV_MAINWINDOW_HPP
23
24 #include <list>
25 #include <memory>
26
27 #include <QMainWindow>
28
29 #include "session.hpp"
30
31 struct srd_decoder;
32
33 class QVBoxLayout;
34
35 namespace sigrok {
36 class OutputFormat;
37 }
38
39 namespace pv {
40
41 class DeviceManager;
42
43 namespace toolbars {
44 class ContextBar;
45 class MainBar;
46 }
47
48 namespace view {
49 class View;
50 }
51
52 namespace widgets {
53 #ifdef ENABLE_DECODE
54 class DecoderMenu;
55 #endif
56 }
57
58 class MainWindow : public QMainWindow
59 {
60         Q_OBJECT
61
62 private:
63         /**
64          * Name of the setting used to remember the directory
65          * containing the last file that was opened.
66          */
67         static const char *SettingOpenDirectory;
68
69         /**
70          * Name of the setting used to remember the directory
71          * containing the last file that was saved.
72          */
73         static const char *SettingSaveDirectory;
74
75 public:
76         explicit MainWindow(DeviceManager &device_manager,
77                 const char *open_file_name = NULL,
78                 QWidget *parent = 0);
79
80         QAction* action_open() const;
81         QAction* action_save_as() const;
82         QAction* action_connect() const;
83         QAction* action_quit() const;
84         QAction* action_view_zoom_in() const;
85         QAction* action_view_zoom_out() const;
86         QAction* action_view_zoom_fit() const;
87         QAction* action_view_zoom_one_to_one() const;
88         QAction* action_view_show_cursors() const;
89         QAction* action_about() const;
90
91 #ifdef ENABLE_DECODE
92         QMenu* menu_decoder_add() const;
93 #endif
94
95         void run_stop();
96
97         void select_device(std::shared_ptr<devices::Device> device);
98
99 public Q_SLOTS:
100         void export_file(std::shared_ptr<sigrok::OutputFormat> format);
101
102 private:
103         void setup_ui();
104
105         void save_ui_settings();
106
107         void restore_ui_settings();
108
109         void session_error(const QString text, const QString info_text);
110
111         /**
112          * Updates the device list in the toolbar
113          */
114         void update_device_list();      
115
116 private:
117         void closeEvent(QCloseEvent *event);
118
119         void keyReleaseEvent(QKeyEvent *event);
120
121 private Q_SLOTS:
122         void load_file(QString file_name);
123
124         void show_session_error(
125                 const QString text, const QString info_text);
126
127         void on_actionOpen_triggered();
128         void on_actionSaveAs_triggered();
129         void on_actionQuit_triggered();
130
131         void on_actionConnect_triggered();
132
133         void on_actionViewZoomIn_triggered();
134
135         void on_actionViewZoomOut_triggered();
136
137         void on_actionViewZoomFit_triggered();
138
139         void on_actionViewZoomOneToOne_triggered();
140
141         void on_actionViewShowCursors_triggered();
142
143         void on_actionAbout_triggered();
144
145         void add_decoder(srd_decoder *decoder);
146
147         void capture_state_changed(int state);
148         void device_selected();
149
150 private:
151         DeviceManager &device_manager_;
152
153         Session session_;
154
155         pv::view::View *view_;
156
157         QWidget *central_widget_;
158         QVBoxLayout *vertical_layout_;
159
160         toolbars::MainBar *main_bar_;
161
162         QAction *const action_open_;
163         QAction *const action_save_as_;
164         QAction *const action_connect_;
165         QAction *const action_quit_;
166         QAction *const action_view_zoom_in_;
167         QAction *const action_view_zoom_out_;
168         QAction *const action_view_zoom_fit_;
169         QAction *const action_view_zoom_one_to_one_;
170         QAction *const action_view_show_cursors_;
171         QAction *const action_about_;
172
173 #ifdef ENABLE_DECODE
174         QMenu *const menu_decoders_add_;
175 #endif
176 };
177
178 } // namespace pv
179
180 #endif // PULSEVIEW_PV_MAINWINDOW_HPP