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