-
-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Maximize button for resizable instruments #7514
base: master
Are you sure you want to change the base?
Changes from 1 commit
9a1eaac
eec9df1
f5d2544
cdef4b5
0921c97
4b0beb4
e85699f
e3560df
e69204f
9aab76b
f677b8c
8b4976e
a594002
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -249,6 +249,10 @@ int SubWindow::frameWidth() const | |
} | ||
|
||
|
||
void SubWindow::updateTitleBar() | ||
{ | ||
adjustTitleBar(); | ||
} | ||
|
||
|
||
/** | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -59,7 +59,6 @@ | |
#include "MainWindow.h" | ||
#include "PianoView.h" | ||
#include "PluginFactory.h" | ||
#include "PluginView.h" | ||
#include "Song.h" | ||
#include "StringPairDrag.h" | ||
#include "SubWindow.h" | ||
|
@@ -284,30 +283,10 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) : | |
updateInstrumentView(); | ||
|
||
QMdiSubWindow* subWin = getGUI()->mainWindow()->addWindowedWidget( this ); | ||
Qt::WindowFlags flags = subWin->windowFlags(); | ||
|
||
if (m_instrumentView->isResizable()) | ||
{ | ||
// TODO As of writing SlicerT is the only resizable instrument. Is this code specific to SlicerT? | ||
const auto extraSpace = QSize(12, 208); | ||
subWin->setMaximumSize(m_instrumentView->maximumSize() + extraSpace); | ||
subWin->setMinimumSize(m_instrumentView->minimumSize() + extraSpace); | ||
|
||
flags &= ~Qt::MSWindowsFixedSizeDialogHint; | ||
flags |= Qt::WindowMaximizeButtonHint; | ||
} | ||
else | ||
{ | ||
flags |= Qt::MSWindowsFixedSizeDialogHint; | ||
flags &= ~Qt::WindowMaximizeButtonHint; | ||
|
||
// Hide the Size and Maximize options from the system menu since the dialog size is fixed. | ||
QMenu * systemMenu = subWin->systemMenu(); | ||
systemMenu->actions().at(2)->setVisible(false); // Size | ||
systemMenu->actions().at(4)->setVisible(false); // Maximize | ||
} | ||
|
||
subWin->setWindowFlags(flags); | ||
// The previous call should have given us a sub window parent. Therefore | ||
// we can reuse this method. | ||
updateSubWindowState(); | ||
|
||
subWin->setWindowIcon(embed::getIconPixmap("instrument_track")); | ||
subWin->hide(); | ||
|
@@ -413,6 +392,8 @@ void InstrumentTrackWindow::modelChanged() | |
m_tuningView->keymapCombo()->setModel(m_track->m_microtuner.keymapModel()); | ||
m_tuningView->rangeImportCheckbox()->setModel(m_track->m_microtuner.keyRangeImportModel()); | ||
updateName(); | ||
|
||
updateSubWindowState(); | ||
} | ||
|
||
|
||
|
@@ -717,5 +698,66 @@ void InstrumentTrackWindow::adjustTabSize(QWidget *w) | |
w->update(); | ||
} | ||
|
||
QMdiSubWindow* InstrumentTrackWindow::findSubWindowInParents() | ||
{ | ||
// TODO Move to helper? Does not seem to be provided by Qt. | ||
auto p = parentWidget(); | ||
|
||
while (p != nullptr) | ||
{ | ||
auto mdiSubWindow = dynamic_cast<QMdiSubWindow*>(p); | ||
if (mdiSubWindow) | ||
{ | ||
return mdiSubWindow; | ||
} | ||
else | ||
{ | ||
p = p->parentWidget(); | ||
} | ||
} | ||
|
||
return nullptr; | ||
} | ||
|
||
void InstrumentTrackWindow::updateSubWindowState() | ||
JohannesLorenz marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What I find strange about this method: It is no way specific to Instrument Track SubWindows (except the "isResizable" which I plan to generalize to both Instruments and Effects, i.e. to I guess your PR is only required for instruments, because they are the only SubWindow type that can be maximized and can both be resizable or not? In this case, the issue will occur for Effects sooner or later. And for the other SubWindow types, I assume it might not harm? The advantage of putting that code into |
||
{ | ||
auto subWindow = findSubWindowInParents(); | ||
if (subWindow && m_instrumentView) | ||
{ | ||
Qt::WindowFlags flags = subWindow->windowFlags(); | ||
|
||
if (m_instrumentView->isResizable()) | ||
{ | ||
// TODO As of writing SlicerT is the only resizable instrument. Is this code specific to SlicerT? | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note, this is still not fixed - see my previous comment. |
||
const auto extraSpace = QSize(12, 208); | ||
subWindow->setMaximumSize(m_instrumentView->maximumSize() + extraSpace); | ||
subWindow->setMinimumSize(m_instrumentView->minimumSize() + extraSpace); | ||
|
||
flags &= ~Qt::MSWindowsFixedSizeDialogHint; | ||
flags |= Qt::WindowMaximizeButtonHint; | ||
} | ||
else | ||
{ | ||
flags |= Qt::MSWindowsFixedSizeDialogHint; | ||
flags &= ~Qt::WindowMaximizeButtonHint; | ||
|
||
// Hide the Size and Maximize options from the system menu since the dialog size is fixed. | ||
QMenu * systemMenu = subWindow->systemMenu(); | ||
systemMenu->actions().at(2)->setVisible(false); // Size | ||
systemMenu->actions().at(4)->setVisible(false); // Maximize | ||
} | ||
|
||
subWindow->setWindowFlags(flags); | ||
|
||
// TODO This is only needed if the sub window is implemented with LMMS' own SubWindow class. | ||
// If an QMdiSubWindow is used everything works automatically. It seems that SubWindow is | ||
// missing some implementation details that QMdiSubWindow has. | ||
auto subWin = dynamic_cast<SubWindow*>(subWindow); | ||
if (subWin) | ||
{ | ||
subWin->updateTitleBar(); | ||
} | ||
} | ||
} | ||
|
||
} // namespace lmms::gui |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These 2 are other good candidates for "inlining".