LMMS
Loading...
Searching...
No Matches
MainWindow.h
Go to the documentation of this file.
1/*
2 * MainWindow.h - declaration of class MainWindow, the main window of LMMS
3 *
4 * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25#ifndef LMMS_GUI_MAIN_WINDOW_H
26#define LMMS_GUI_MAIN_WINDOW_H
27
28#include <QBasicTimer>
29#include <QTimer>
30#include <QList>
31#include <QMainWindow>
32#include <QMdiArea>
33
34#include "ConfigManager.h"
35
36class QAction;
37class QDomElement;
38class QGridLayout;
39
40namespace lmms
41{
42
43namespace gui
44{
45
46class PluginView;
47class SubWindow;
48class ToolButton;
49
50
51class MainWindow : public QMainWindow
52{
53 Q_OBJECT
54public:
55 QMdiArea* workspace()
56 {
57 return static_cast<QMdiArea*>(m_workspace);
58 }
59
60 QWidget* toolBar()
61 {
62 return m_toolBar;
63 }
64
65 int addWidgetToToolBar( QWidget * _w, int _row = -1, int _col = -1 );
66 void addSpacingToToolBar( int _size );
67
68 // wrap the widget with a window decoration and add it to the workspace
69 LMMS_EXPORT SubWindow* addWindowedWidget(QWidget *w, Qt::WindowFlags windowFlags = QFlag(0));
70
71
72 void refocus();
73
90 bool mayChangeProject(bool stopPlayback);
91
92 // Auto save timer intervals. The slider in SetupDialog.cpp wants
93 // minutes and the rest milliseconds.
94 static const int DEFAULT_SAVE_INTERVAL_MINUTES = 2;
96
97 static const int m_autoSaveShortTime = 10 * 1000; // 10s short loop
98
100 value( "ui", "saveinterval" ).toInt()
101 * 60 * 1000 )
102 {
103 if( msec < m_autoSaveShortTime ) // No 'saveinterval' in .lmmsrc.xml
104 {
106 }
107 m_autoSaveTimer.start( msec );
108 }
109
111 {
112 return m_autoSaveTimer.interval();
113 }
114
115 enum class SessionState
116 {
119 };
120
121 void setSession( SessionState session )
122 {
123 m_session = session;
124 }
125
127 {
128 return m_session;
129 }
130
131 void sessionCleanup();
132
133 void clearKeyModifiers();
134
135 bool isShiftPressed() const { return m_keyMods.m_shift; }
136
137 static void saveWidgetState( QWidget * _w, QDomElement & _de );
138 static void restoreWidgetState( QWidget * _w, const QDomElement & _de );
139 void setAllSubWindowsDetached(bool detached);
140
141 bool eventFilter(QObject* watched, QEvent* event) override;
142
143signals:
144 void detachAllSubWindows(bool detached);
145
146public slots:
147 void resetWindowTitle();
148
149 void emptySlot();
150 void createNewProject();
151 void openProject();
152 bool saveProject();
153 bool saveProjectAs();
156 void showSettingsDialog();
157 void aboutLMMS();
158 void help();
160 void togglePatternEditorWin(bool forceShow = false);
161 void toggleSongEditorWin();
163 void toggleMicrotunerWin();
164 void toggleMixerWin();
165 void togglePianoRollWin();
167 void toggleFullscreen();
168
170
172 void undo();
173 void redo();
174
175 void autoSave();
176
177private slots:
178 void onExportProjectMidi();
179
180protected:
181 void closeEvent( QCloseEvent * _ce ) override;
182 void keyPressEvent( QKeyEvent * _ke ) override;
183 void keyReleaseEvent( QKeyEvent * _ke ) override;
184 void timerEvent( QTimerEvent * _ev ) override;
185
186
187private:
188 MainWindow();
190 ~MainWindow() override;
191
192 void finalize();
193
194 void toggleWindow( QWidget *window, bool forceShow = false );
195
196 void exportProject(bool multiExport = false);
197 void handleSaveResult(QString const & filename, bool songSavedSuccessfully);
198 bool guiSaveProject();
199 bool guiSaveProjectAs( const QString & filename );
200
201 class MovableQMdiArea : public QMdiArea
202 {
203 public:
204 MovableQMdiArea(QWidget* parent = nullptr);
206 protected:
207 void mousePressEvent(QMouseEvent* event) override;
208 void mouseMoveEvent(QMouseEvent* event) override;
209 void mouseReleaseEvent(QMouseEvent* event) override;
210 private:
214 };
215
217
218 QWidget * m_toolBar;
219 QGridLayout * m_toolBarLayout;
220
222 {
224 m_ctrl( false ),
225 m_shift( false ),
226 m_alt( false )
227 {
228 }
229 bool m_ctrl;
231 bool m_alt;
233
234 QMenu * m_toolsMenu;
235 QAction * m_undoAction;
236 QAction * m_redoAction;
237 QList<PluginView *> m_tools;
238
239 QBasicTimer m_updateTimer;
242
243 friend class GuiApplication;
244
245 QMenu * m_viewMenu;
246
248
250
252
253private slots:
254 void browseHelp();
255 void showTool( QAction * _idx );
256 void updateViewMenu();
257 void updateConfig( QAction * _who );
258 void onToggleMetronome();
259 void onExportProject();
261 void onImportProject();
262 void onSongModified();
264
265signals:
267 void initProgress(const QString &msg);
268
269} ;
270
271} // namespace gui
272
273} // namespace lmms
274
275#endif // LMMS_GUI_MAIN_WINDOW_H
static ConfigManager * inst()
Definition ConfigManager.h:62
Definition MainWindow.h:202
void mousePressEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1638
~MovableQMdiArea()
Definition MainWindow.h:205
void mouseReleaseEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1696
bool m_isBeingMoved
Definition MainWindow.h:211
int m_lastX
Definition MainWindow.h:212
MovableQMdiArea(QWidget *parent=nullptr)
Definition MainWindow.cpp:1631
void mouseMoveEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1647
int m_lastY
Definition MainWindow.h:213
void toggleControllerRack()
Definition MainWindow.cpp:1169
MainWindow(const MainWindow &)
void handleSaveResult(QString const &filename, bool songSavedSuccessfully)
Definition MainWindow.cpp:1544
void finalize()
Definition MainWindow.cpp:264
bool guiSaveProject()
Definition MainWindow.cpp:1560
void createNewProject()
Definition MainWindow.cpp:734
void timerEvent(QTimerEvent *_ev) override
Definition MainWindow.cpp:1365
void toggleAutomationEditorWin()
Definition MainWindow.cpp:1016
QBasicTimer m_updateTimer
Definition MainWindow.h:239
QWidget * m_toolBar
Definition MainWindow.h:218
void toggleWindow(QWidget *window, bool forceShow=false)
Definition MainWindow.cpp:918
int addWidgetToToolBar(QWidget *_w, int _row=-1, int _col=-1)
Definition MainWindow.cpp:513
void browseHelp()
Definition MainWindow.cpp:1385
void undo()
Definition MainWindow.cpp:1221
void toggleSongEditorWin()
Definition MainWindow.cpp:992
bool eventFilter(QObject *watched, QEvent *event) override
Definition MainWindow.cpp:1268
void addSpacingToToolBar(int _size)
Definition MainWindow.cpp:530
bool maximized
Definition MainWindow.h:251
void onExportProjectTracks()
Definition MainWindow.cpp:1583
void onImportProject()
Definition MainWindow.cpp:1588
void refocus()
Definition MainWindow.cpp:962
void redo()
Definition MainWindow.cpp:1229
MainWindow()
Definition MainWindow.cpp:82
void toggleFullscreen()
Definition MainWindow.cpp:942
void togglePianoRollWin()
Definition MainWindow.cpp:1008
void onToggleMetronome()
Definition MainWindow.cpp:1161
SessionState getSession()
Definition MainWindow.h:126
void onExportProject()
Definition MainWindow.cpp:1578
void autoSave()
Definition MainWindow.cpp:1396
void onExportProjectMidi()
Definition MainWindow.cpp:1419
void updateUndoRedoButtons()
Definition MainWindow.cpp:1211
void onSongModified()
Definition MainWindow.cpp:1613
~MainWindow() override
Definition MainWindow.cpp:244
bool guiSaveProjectAs(const QString &filename)
Definition MainWindow.cpp:1569
struct lmms::gui::MainWindow::keyModifiers m_keyMods
void onProjectFileNameChanged()
Definition MainWindow.cpp:1625
void autoSaveTimerReset(int msec=ConfigManager::inst() -> value("ui", "saveinterval").toInt() *60 *1000)
Definition MainWindow.h:99
static const int DEFAULT_SAVE_INTERVAL_MINUTES
Definition MainWindow.h:94
bool saveProject()
Definition MainWindow.cpp:769
void showSettingsDialog()
Definition MainWindow.cpp:887
void updatePlayPauseIcons()
Definition MainWindow.cpp:1177
void resetWindowTitle()
Definition MainWindow.cpp:572
bool saveProjectAsNewVersion()
Definition MainWindow.cpp:845
void aboutLMMS()
Definition MainWindow.cpp:896
QMdiArea * workspace()
Definition MainWindow.h:55
void emptySlot()
Definition MainWindow.cpp:728
LMMS_EXPORT SubWindow * addWindowedWidget(QWidget *w, Qt::WindowFlags windowFlags=QFlag(0))
Definition MainWindow.cpp:539
void initProgress(const QString &msg)
static void saveWidgetState(QWidget *_w, QDomElement &_de)
Definition MainWindow.cpp:666
QGridLayout * m_toolBarLayout
Definition MainWindow.h:219
void updateConfig(QAction *_who)
Definition MainWindow.cpp:1128
SessionState
Definition MainWindow.h:116
@ Recover
Definition MainWindow.h:118
@ Normal
Definition MainWindow.h:117
void setSession(SessionState session)
Definition MainWindow.h:121
int m_autoSaveInterval
Definition MainWindow.h:241
void clearKeyModifiers()
Definition MainWindow.cpp:656
QMenu * m_toolsMenu
Definition MainWindow.h:234
void togglePatternEditorWin(bool forceShow=false)
Definition MainWindow.cpp:984
void exportProject(bool multiExport=false)
Definition MainWindow.cpp:1458
ToolButton * m_metronomeToggle
Definition MainWindow.h:247
MovableQMdiArea * m_workspace
Definition MainWindow.h:216
static const int m_autoSaveShortTime
Definition MainWindow.h:97
void sessionCleanup()
Definition MainWindow.cpp:1258
void detachAllSubWindows(bool detached)
void saveProjectAsDefaultTemplate()
Definition MainWindow.cpp:864
static const int DEFAULT_AUTO_SAVE_INTERVAL
Definition MainWindow.h:95
void keyPressEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1307
void showTool(QAction *_idx)
Definition MainWindow.cpp:1374
bool isShiftPressed() const
Definition MainWindow.h:135
void openProject()
Definition MainWindow.cpp:745
void toggleMicrotunerWin()
Definition MainWindow.cpp:1031
QAction * m_undoAction
Definition MainWindow.h:235
void help()
Definition MainWindow.cpp:904
int getAutoSaveTimerInterval()
Definition MainWindow.h:110
void keyReleaseEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1342
static void restoreWidgetState(QWidget *_w, const QDomElement &_de)
Definition MainWindow.cpp:691
QMenu * m_viewMenu
Definition MainWindow.h:245
QWidget * toolBar()
Definition MainWindow.h:60
void closeEvent(QCloseEvent *_ce) override
Definition MainWindow.cpp:1237
friend class GuiApplication
Definition MainWindow.h:243
void toggleProjectNotesWin()
Definition MainWindow.cpp:1000
void updateViewMenu()
Definition MainWindow.cpp:1039
SessionState m_session
Definition MainWindow.h:249
void toggleMixerWin()
Definition MainWindow.cpp:1024
void setAllSubWindowsDetached(bool detached)
Definition MainWindow.cpp:566
QList< PluginView * > m_tools
Definition MainWindow.h:237
QAction * m_redoAction
Definition MainWindow.h:236
bool mayChangeProject(bool stopPlayback)
Asks whether changes made to the project are to be saved.
Definition MainWindow.cpp:598
QTimer m_autoSaveTimer
Definition MainWindow.h:240
bool saveProjectAs()
Definition MainWindow.cpp:789
Definition PluginView.h:36
The SubWindow class.
Definition SubWindow.h:53
Definition ToolButton.h:34
UINT_D64 w
Definition inflate.c:942
static PuglViewHint int value
Definition pugl.h:1708
static uintptr_t parent
Definition pugl.h:1644
const char * msg
Definition missing_descriptor.c:20
Definition AudioPortAudio.cpp:209
Definition AudioAlsa.cpp:35
QString filename
Definition HydrogenImport.cpp:42
#define false
Definition ordinals.h:83
bool m_alt
Definition MainWindow.h:231
bool m_ctrl
Definition MainWindow.h:229
keyModifiers()
Definition MainWindow.h:223
bool m_shift
Definition MainWindow.h:230