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