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 // TODO Remove this function, since m_shift can get stuck down.
136 // [[deprecated]]
138 {
139 return m_keyMods.m_shift;
140 }
141
142 static void saveWidgetState( QWidget * _w, QDomElement & _de );
143 static void restoreWidgetState( QWidget * _w, const QDomElement & _de );
144 void setAllSubWindowsDetached(bool detached);
145
146 bool eventFilter(QObject* watched, QEvent* event) override;
147
148signals:
149 void detachAllSubWindows(bool detached);
150
151public slots:
152 void resetWindowTitle();
153
154 void emptySlot();
155 void createNewProject();
156 void openProject();
157 bool saveProject();
158 bool saveProjectAs();
161 void showSettingsDialog();
162 void aboutLMMS();
163 void help();
165 void togglePatternEditorWin(bool forceShow = false);
166 void toggleSongEditorWin();
168 void toggleMicrotunerWin();
169 void toggleMixerWin();
170 void togglePianoRollWin();
172 void toggleFullscreen();
173
175
177 void undo();
178 void redo();
179
180 void autoSave();
181
182private slots:
183 void onExportProjectMidi();
184
185protected:
186 void closeEvent( QCloseEvent * _ce ) override;
187 void focusOutEvent( QFocusEvent * _fe ) override;
188 void keyPressEvent( QKeyEvent * _ke ) override;
189 void keyReleaseEvent( QKeyEvent * _ke ) override;
190 void timerEvent( QTimerEvent * _ev ) override;
191
192
193private:
194 MainWindow();
196 ~MainWindow() override;
197
198 void finalize();
199
200 void toggleWindow( QWidget *window, bool forceShow = false );
201
202 void exportProject(bool multiExport = false);
203 void handleSaveResult(QString const & filename, bool songSavedSuccessfully);
204 bool guiSaveProject();
205 bool guiSaveProjectAs( const QString & filename );
206
207 class MovableQMdiArea : public QMdiArea
208 {
209 public:
210 MovableQMdiArea(QWidget* parent = nullptr);
212 protected:
213 void mousePressEvent(QMouseEvent* event) override;
214 void mouseMoveEvent(QMouseEvent* event) override;
215 void mouseReleaseEvent(QMouseEvent* event) override;
216 private:
220 };
221
223
224 QWidget * m_toolBar;
225 QGridLayout * m_toolBarLayout;
226
228 {
230 m_ctrl( false ),
231 m_shift( false ),
232 m_alt( false )
233 {
234 }
235 bool m_ctrl;
237 bool m_alt;
239
240 QMenu * m_toolsMenu;
241 QAction * m_undoAction;
242 QAction * m_redoAction;
243 QList<PluginView *> m_tools;
244
245 QBasicTimer m_updateTimer;
248
249 friend class GuiApplication;
250
251 QMenu * m_viewMenu;
252
254
256
258
259private slots:
260 void browseHelp();
261 void showTool( QAction * _idx );
262 void updateViewMenu();
263 void updateConfig( QAction * _who );
264 void onToggleMetronome();
265 void onExportProject();
267 void onImportProject();
268 void onSongModified();
270
271signals:
273 void initProgress(const QString &msg);
274
275} ;
276
277} // namespace gui
278
279} // namespace lmms
280
281#endif // LMMS_GUI_MAIN_WINDOW_H
static ConfigManager * inst()
Definition ConfigManager.h:62
Definition MainWindow.h:208
void mousePressEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1633
~MovableQMdiArea()
Definition MainWindow.h:211
void mouseReleaseEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1691
bool m_isBeingMoved
Definition MainWindow.h:217
int m_lastX
Definition MainWindow.h:218
MovableQMdiArea(QWidget *parent=nullptr)
Definition MainWindow.cpp:1626
void mouseMoveEvent(QMouseEvent *event) override
Definition MainWindow.cpp:1642
int m_lastY
Definition MainWindow.h:219
void toggleControllerRack()
Definition MainWindow.cpp:1179
MainWindow(const MainWindow &)
void handleSaveResult(QString const &filename, bool songSavedSuccessfully)
Definition MainWindow.cpp:1539
void finalize()
Definition MainWindow.cpp:262
bool guiSaveProject()
Definition MainWindow.cpp:1555
void createNewProject()
Definition MainWindow.cpp:744
void timerEvent(QTimerEvent *_ev) override
Definition MainWindow.cpp:1360
void toggleAutomationEditorWin()
Definition MainWindow.cpp:1026
QBasicTimer m_updateTimer
Definition MainWindow.h:245
QWidget * m_toolBar
Definition MainWindow.h:224
void toggleWindow(QWidget *window, bool forceShow=false)
Definition MainWindow.cpp:928
int addWidgetToToolBar(QWidget *_w, int _row=-1, int _col=-1)
Definition MainWindow.cpp:511
void browseHelp()
Definition MainWindow.cpp:1380
void undo()
Definition MainWindow.cpp:1231
void toggleSongEditorWin()
Definition MainWindow.cpp:1002
bool eventFilter(QObject *watched, QEvent *event) override
Definition MainWindow.cpp:1278
void addSpacingToToolBar(int _size)
Definition MainWindow.cpp:528
bool maximized
Definition MainWindow.h:257
void onExportProjectTracks()
Definition MainWindow.cpp:1578
void onImportProject()
Definition MainWindow.cpp:1583
void refocus()
Definition MainWindow.cpp:972
void redo()
Definition MainWindow.cpp:1239
MainWindow()
Definition MainWindow.cpp:82
void toggleFullscreen()
Definition MainWindow.cpp:952
void togglePianoRollWin()
Definition MainWindow.cpp:1018
void focusOutEvent(QFocusEvent *_fe) override
Definition MainWindow.cpp:1290
void onToggleMetronome()
Definition MainWindow.cpp:1171
SessionState getSession()
Definition MainWindow.h:126
void onExportProject()
Definition MainWindow.cpp:1573
void autoSave()
Definition MainWindow.cpp:1391
void onExportProjectMidi()
Definition MainWindow.cpp:1414
void updateUndoRedoButtons()
Definition MainWindow.cpp:1221
void onSongModified()
Definition MainWindow.cpp:1608
~MainWindow() override
Definition MainWindow.cpp:242
bool guiSaveProjectAs(const QString &filename)
Definition MainWindow.cpp:1564
struct lmms::gui::MainWindow::keyModifiers m_keyMods
void onProjectFileNameChanged()
Definition MainWindow.cpp:1620
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:779
void showSettingsDialog()
Definition MainWindow.cpp:897
void updatePlayPauseIcons()
Definition MainWindow.cpp:1187
void resetWindowTitle()
Definition MainWindow.cpp:570
bool saveProjectAsNewVersion()
Definition MainWindow.cpp:855
void aboutLMMS()
Definition MainWindow.cpp:906
QMdiArea * workspace()
Definition MainWindow.h:55
void emptySlot()
Definition MainWindow.cpp:738
LMMS_EXPORT SubWindow * addWindowedWidget(QWidget *w, Qt::WindowFlags windowFlags=QFlag(0))
Definition MainWindow.cpp:537
void initProgress(const QString &msg)
static void saveWidgetState(QWidget *_w, QDomElement &_de)
Definition MainWindow.cpp:664
QGridLayout * m_toolBarLayout
Definition MainWindow.h:225
void updateConfig(QAction *_who)
Definition MainWindow.cpp:1138
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:247
void clearKeyModifiers()
Definition MainWindow.cpp:654
QMenu * m_toolsMenu
Definition MainWindow.h:240
void togglePatternEditorWin(bool forceShow=false)
Definition MainWindow.cpp:994
void exportProject(bool multiExport=false)
Definition MainWindow.cpp:1453
ToolButton * m_metronomeToggle
Definition MainWindow.h:253
MovableQMdiArea * m_workspace
Definition MainWindow.h:222
static const int m_autoSaveShortTime
Definition MainWindow.h:97
void sessionCleanup()
Definition MainWindow.cpp:1268
void detachAllSubWindows(bool detached)
void saveProjectAsDefaultTemplate()
Definition MainWindow.cpp:874
static const int DEFAULT_AUTO_SAVE_INTERVAL
Definition MainWindow.h:95
void keyPressEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1302
void showTool(QAction *_idx)
Definition MainWindow.cpp:1369
void openProject()
Definition MainWindow.cpp:755
void toggleMicrotunerWin()
Definition MainWindow.cpp:1041
QAction * m_undoAction
Definition MainWindow.h:241
void help()
Definition MainWindow.cpp:914
int getAutoSaveTimerInterval()
Definition MainWindow.h:110
void keyReleaseEvent(QKeyEvent *_ke) override
Definition MainWindow.cpp:1337
static void restoreWidgetState(QWidget *_w, const QDomElement &_de)
Definition MainWindow.cpp:692
QMenu * m_viewMenu
Definition MainWindow.h:251
QWidget * toolBar()
Definition MainWindow.h:60
void closeEvent(QCloseEvent *_ce) override
Definition MainWindow.cpp:1247
friend class GuiApplication
Definition MainWindow.h:249
void toggleProjectNotesWin()
Definition MainWindow.cpp:1010
void updateViewMenu()
Definition MainWindow.cpp:1049
bool isShiftPressed()
Definition MainWindow.h:137
SessionState m_session
Definition MainWindow.h:255
void toggleMixerWin()
Definition MainWindow.cpp:1034
void setAllSubWindowsDetached(bool detached)
Definition MainWindow.cpp:564
QList< PluginView * > m_tools
Definition MainWindow.h:243
QAction * m_redoAction
Definition MainWindow.h:242
bool mayChangeProject(bool stopPlayback)
Asks whether changes made to the project are to be saved.
Definition MainWindow.cpp:596
QTimer m_autoSaveTimer
Definition MainWindow.h:246
bool saveProjectAs()
Definition MainWindow.cpp:799
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:223
Definition AudioAlsa.cpp:35
QString filename
Definition HydrogenImport.cpp:42
#define false
Definition ordinals.h:83
bool m_alt
Definition MainWindow.h:237
bool m_ctrl
Definition MainWindow.h:235
keyModifiers()
Definition MainWindow.h:229
bool m_shift
Definition MainWindow.h:236