]> sigrok.org Git - pulseview.git/blame - pv/mainwindow.hpp
MainWindow: Use a QTabWidget to display the QDockWidgets
[pulseview.git] / pv / mainwindow.hpp
CommitLineData
d7bed479 1/*
b3f22de0 2 * This file is part of the PulseView project.
d7bed479
JH
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
7a01bd36
JH
21#ifndef PULSEVIEW_PV_MAINWINDOW_HPP
22#define PULSEVIEW_PV_MAINWINDOW_HPP
d7bed479 23
18203d86 24#include <list>
dd3fd4df 25#include <map>
f9abf97e 26#include <memory>
b1264f56 27
d7bed479 28#include <QMainWindow>
3b84fd0b 29#include <QTabWidget>
d7bed479 30
f65cd27b 31#include "session.hpp"
f4e57597 32#include "views/viewbase.hpp"
2953961c 33
269528f5
JH
34struct srd_decoder;
35
7d5425ef 36class QVBoxLayout;
7d5425ef 37
51e77110
JH
38namespace pv {
39
107ca6d3 40class DeviceManager;
94574501 41
f4c92e1c 42namespace toolbars {
404aad0e 43class ContextBar;
7c657094 44class MainBar;
f4c92e1c 45}
51e77110
JH
46
47namespace view {
48class View;
49}
50
f0d37dab 51namespace widgets {
e79171dc 52#ifdef ENABLE_DECODE
f0d37dab 53class DecoderMenu;
19be0af1 54#endif
f0d37dab
JH
55}
56
d7bed479
JH
57class MainWindow : public QMainWindow
58{
59 Q_OBJECT
60
33e1afbe
SA
61private:
62 static const QString WindowTitle;
63
d7bed479 64public:
107ca6d3 65 explicit MainWindow(DeviceManager &device_manager,
e3c79b07
JH
66 std::string open_file_name = std::string(),
67 std::string open_file_format = std::string(),
1d478458 68 QWidget *parent = 0);
d7bed479 69
47e9e7bb
SA
70 ~MainWindow();
71
c7b03d9d 72 QAction* action_view_sticky_scrolling() const;
0fb9d645 73 QAction* action_view_coloured_bg() const;
69654681
JH
74 QAction* action_about() const;
75
f4e57597 76 std::shared_ptr<views::ViewBase> get_active_view() const;
168bd8ac 77
f4e57597
SA
78 std::shared_ptr<views::ViewBase> add_view(const QString &title,
79 views::ViewType type, Session &session);
7cd2b5f3 80
101e7a9b
SA
81 std::shared_ptr<Session> add_session();
82
36a8185e
SA
83 void remove_session(std::shared_ptr<Session> session);
84
d7bed479 85private:
7d5425ef
JH
86 void setup_ui();
87
93f683ad
SA
88 void save_ui_settings();
89
90 void restore_ui_settings();
91
1c4c23b8 92private:
93f683ad
SA
93 void closeEvent(QCloseEvent *event);
94
d290e89f
SA
95 virtual QMenu* createPopupMenu();
96
55547a45
SA
97 virtual bool restoreState(const QByteArray &state, int version = 0);
98
e9213170 99private Q_SLOTS:
f4e57597 100 void on_add_view(const QString &title, views::ViewType type,
3a21afa6
SA
101 Session *session);
102
33e1afbe
SA
103 void on_focus_changed();
104
c9da5118 105 void on_new_session();
33e1afbe 106 void on_session_name_changed();
c9da5118 107 void on_new_view(Session *session);
36a8185e 108 void on_view_close_clicked();
c9da5118 109
c7b03d9d
SA
110 void on_actionViewStickyScrolling_triggered();
111
0fb9d645
SA
112 void on_actionViewColouredBg_triggered();
113
ef7e3146
JH
114 void on_actionAbout_triggered();
115
7d5425ef 116private:
8dbbc7f0 117 DeviceManager &device_manager_;
d4984fe7 118
36a8185e 119 std::list< std::shared_ptr<Session> > sessions_;
18203d86 120
25272fee 121 std::map< std::shared_ptr<QDockWidget>,
f4e57597 122 std::shared_ptr<views::ViewBase> > view_docks_;
7d5425ef 123
3b84fd0b
SA
124 std::map< std::shared_ptr<Session>, QMainWindow*> session_windows_;
125
126 QTabWidget session_selector_;
127
c7b03d9d 128 QAction *const action_view_sticky_scrolling_;
0fb9d645 129 QAction *const action_view_coloured_bg_;
69654681 130 QAction *const action_about_;
d7bed479
JH
131};
132
51e77110
JH
133} // namespace pv
134
7a01bd36 135#endif // PULSEVIEW_PV_MAINWINDOW_HPP