Skip to content

Commit

Permalink
First working version that restores main sequencer and mixer windows …
Browse files Browse the repository at this point in the history
…position size and maximized state.
  • Loading branch information
akimaze committed Feb 4, 2024
1 parent ab84157 commit b26ef0a
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Makefile.Qt
Original file line number Diff line number Diff line change
Expand Up @@ -1567,7 +1567,7 @@ bin/radium_check_recent_libxcb: X11/check_recent_libxcb.c

$(P)EditorWidget.h: $(BUILD_DEPENDENCIES)

$(T)Qt_Main.o: $(BUILD_DEPENDENCIES) $(P)Qt_Main.cpp $(P)EditorWidget.h $(P)Qt_instruments_proc.h $(QM)QM_MixerWidget.h Qt/helpers.h audio/SampleRecorder_proc.h common/nag.h Qt/KeyboardFocusFrame.hpp common/Process.hpp Qt/Timer.hpp
$(T)Qt_Main.o: $(BUILD_DEPENDENCIES) $(P)Qt_Main.cpp $(P)EditorWidget.h $(P)Qt_instruments_proc.h $(P)Qt_SaveRestoreWindows.h $(QM)QM_MixerWidget.h Qt/helpers.h audio/SampleRecorder_proc.h common/nag.h Qt/KeyboardFocusFrame.hpp common/Process.hpp Qt/Timer.hpp
$(MOC) Qt/Qt_Main.cpp > Qt/mQt_Main.cpp
cd Qt && $(MOC) -DFOR_LINUX Timer.hpp > mTimer.hpp
$(CCC2) $(P)Qt_Main.cpp $(QTOPT) $(SNDFILEOPT) $(BOOST_INCLUDE) -DRADIUM_VERSION=\"$(RADIUM_VERSION)\" -Wno-null-dereference # -Wno-deprecated-declarations -Wno-shadow
Expand Down
14 changes: 8 additions & 6 deletions Qt/Qt_Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "Qt_AutoBackups_proc.h"
#include "Qt_Bs_edit_proc.h"
#include "Qt_PresetBrowser.h"
#include "Qt_SaveRestoreWindows.h"

#include "Timer.hpp"
#include "mTimer.hpp"
Expand Down Expand Up @@ -2624,13 +2625,14 @@ class CalledPeriodically : radium::Timer {

// Show mixer briefly to workaround a Qt quirk/bug causing SceneRect size to be calculated from invisible items when the scene hasn't been shown yet.
// (Fixes extremely large Mixer scene rect if previewing preset before opening the mixer for the first time)
{
// This breaks opening mixer window at startup form configuration - don't know needed anymore I do not see any difference when commented
/*{
if(num_calls_at_this_point==50/_interval)
GFX_ShowMixer();
if(num_calls_at_this_point==70/_interval)
GFX_HideMixer();
}
}*/

// Force full keyboard focus to the main window after startup. This seems to be the only reliable way. (if you think this is unnecessary, see if left alt works to start navigating menues after startup while using the fvwm window manager)
{
Expand Down Expand Up @@ -3972,11 +3974,11 @@ int radium_main(const char *arg){

updateWidgetRecursively(g_main_window);

main_window->adjustSize();
//main_window->adjustSize(); // that shrink window
main_window->updateGeometry();
main_window->resize(main_window->width()+100, main_window->height()+100);
//main_window->resize(main_window->width()+100, main_window->height()+100); // that changes window size

moveWindowToCentre(main_window, g_startup_rect);
//moveWindowToCentre(main_window, g_startup_rect); // that changes window position
main_window->show();
main_window->raise();
main_window->activateWindow();
Expand Down Expand Up @@ -4028,11 +4030,11 @@ int radium_main(const char *arg){
// Hide mixer widget at startup.
GFX_showHideMixerWidget();


// Hide preset browser at startup.
if (SETTINGS_read_bool("preset_browser_visible", false)==false)
hidePresetBrowserAtStartup();

restoreWindowsState(main_window);

#if USE_QT_VISUAL
again:
Expand Down
31 changes: 28 additions & 3 deletions Qt/Qt_MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <QCloseEvent>
#pragma GCC diagnostic pop

#include <QWindow>
#include <QStatusBar>
#include <QMenuBar>
#include <QUrl>
Expand Down Expand Up @@ -95,7 +96,7 @@ static HWND gtk_hwnd = NULL;
#include "Qt_MyQSlider.h"
#include "Qt_MyQCheckBox.h"
#include "Qt_PresetBrowser.h"

#include "Qt_SaveRestoreWindows.h"

class Bottom_bar_widget;
static QVector<Bottom_bar_widget*> g_bottom_bars; // need to be defined here since it's used by the upperleft widget.
Expand Down Expand Up @@ -123,7 +124,7 @@ struct MyQMenuBar : QMenuBar {
*/

bool g_user_interaction_enabled = true;

extern bool doquit;

#if USE_GTK_VISUAL

Expand Down Expand Up @@ -504,10 +505,32 @@ class MyQMainWindow : public QWidget{
activateWindow();
}

void loadWindowsState() {

// // sequnecer window
// bool inOwnWindow = SETTINGS_read_bool("sequencer_in_own_window", false);
// if (inOwnWindow)
// {
// configureSequencerWidget(true, sequencerInMainTabs());
// bool maximized = SETTINGS_read_bool("sequencer_window_state", false);
// int x = SETTINGS_read_int("sequencer_window_x", 0);
// int y = SETTINGS_read_int("sequencer_window_y", 0);
// int width = SETTINGS_read_int("sequencer_window_width", 1024);
// int height = SETTINGS_read_int("sequencer_window_height", 550);
// printf("Loaded settings: %d, %d, %d, %d \n", x, y, width, height);
// QWidget * sequencerWindow = SEQUENCER_getWidget()->window();
// sequencerWindow->setGeometry(x, y, width, height);
// if (maximized)
// sequencerWindow->showMaximized();
// }
}

void closeEvent(QCloseEvent *ce) override{
CancelMaybeNavigateMenus();
ce->ignore();
quit();
if(doquit==true)
saveWindowsState(this);
}

#if 0
Expand Down Expand Up @@ -600,7 +623,7 @@ QWidget *g_main_window = NULL;
void SetupMainWindow(void){

//QMainWindow *main_window = new QMainWindow(NULL, "Radium", Qt::WStyle_Customize | Qt::WStyle_NoBorder);// | Qt::WStyle_Dialog);
QWidget *main_window = new MyQMainWindow();//NULL, "Radium");
MyQMainWindow *main_window = new MyQMainWindow();//NULL, "Radium");
g_main_window = main_window;
g_static_toplevel_widgets.push_back(main_window);

Expand Down Expand Up @@ -777,6 +800,8 @@ void SetupMainWindow(void){
#endif // USE_QT_VISUAL

g_editor = editor;

main_window->loadWindowsState();
}

void GFX_SetMinimumWindowWidth(struct Tracker_Windows *tvisual, int width){
Expand Down
107 changes: 107 additions & 0 deletions Qt/Qt_SaveRestoreWindows.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
#pragma once

#include <QWidget>
#include <cstdio>
#include "../common/settings_proc.h"
#include "Qt_sequencer_proc.h"
#include "../api/api_proc.h"


void saveWindowsState(QWidget * mainWindow) {
printf("\n ***Saving windows state*** \n");
SETTINGS_write_bool("windows_settings_saved", true);

SETTINGS_write_bool("main_window_maximized", mainWindow->isMaximized());
SETTINGS_write_int("main_window_x", mainWindow->pos().x());
SETTINGS_write_int("main_window_y", mainWindow->pos().y());
SETTINGS_write_int("main_window_width", mainWindow->size().width());
SETTINGS_write_int("main_window_height", mainWindow->size().height());
printf("Saved main window settings: %d, %d, %d, %d \n", mainWindow->pos().x(), mainWindow->pos().y(), mainWindow->size().width(), mainWindow->size().height());

SETTINGS_write_bool("sequencer_in_own_window", sequencerInWindow());
if (sequencerInWindow())
{
printf("Sequencer in own window saving settings \n");
QWidget * sequencerWindow = SEQUENCER_getWidget()->window();
// When using configureSequencerWidget() we need be sure that
// second parameter has proper value
SETTINGS_write_bool("position_sequencer_widget_in_mixer", false);
SETTINGS_write_bool("sequencer_window_maximized", sequencerWindow->isMaximized());
SETTINGS_write_int("sequencer_window_x", sequencerWindow->pos().x());
SETTINGS_write_int("sequencer_window_y", sequencerWindow->pos().y());
SETTINGS_write_int("sequencer_window_width", sequencerWindow->size().width());
SETTINGS_write_int("sequencer_window_height", sequencerWindow->size().height());
printf("Saved sequencer settings: %d, %d, %d, %d \n", sequencerWindow->pos().x(), sequencerWindow->pos().y(), sequencerWindow->size().width(), sequencerWindow->size().height());
}

SETTINGS_write_bool("main_mixer_in_own_window", mainMixerInWindow());
if (mainMixerInWindow())
{
printf("Mixer in own window saving settings \n");
QWidget * mixerWindow = API_gui_get_widget(gui_getMainMixerGui())->window();
SETTINGS_write_bool("main_mixer_window_maximized", mixerWindow->isMaximized());
SETTINGS_write_int("main_mixer_window_x", mixerWindow->pos().x());
SETTINGS_write_int("main_mixer_window_y", mixerWindow->pos().y());
SETTINGS_write_int("main_mixer_window_width", mixerWindow->size().width());
SETTINGS_write_int("main_mixer_window_height", mixerWindow->size().height());
printf("Saved mixer settings: %d, %d, %d, %d \n", mixerWindow->pos().x(), mixerWindow->pos().y(), mixerWindow->size().width(), mixerWindow->size().height());
}
}

void restoreWindowsState(QWidget * mainWindow) {
if (!SETTINGS_read_bool("windows_settings_saved", false))
return;

printf("\n ***loading windows state*** \n");
// sequnecer window
bool inOwnWindow = SETTINGS_read_bool("sequencer_in_own_window", false);
if (inOwnWindow)
{
printf("Sequencer in own window loading settings \n");
// When using configureSequencerWidget() we need be sure that
// second parameter has proper value
SETTINGS_write_bool("position_sequencer_widget_in_mixer", false);
configureSequencerWidget(true, true);

bool maximized = SETTINGS_read_bool("sequencer_window_maximized", false);
int x = SETTINGS_read_int("sequencer_window_x", 0);
int y = SETTINGS_read_int("sequencer_window_y", 0);
int width = SETTINGS_read_int("sequencer_window_width", 1024);
int height = SETTINGS_read_int("sequencer_window_height", 550);
printf("Loaded sequencer settings: %d, %d, %d, %d \n", x, y, width, height);
QWidget * sequencerWindow = SEQUENCER_getWidget()->window();
sequencerWindow->setGeometry(x, y, width, height);
if (maximized)
sequencerWindow->showMaximized();
}

inOwnWindow = SETTINGS_read_bool("main_mixer_in_own_window", false);
if (inOwnWindow)
{
printf("Mixer in own window loading settings \n");
setMainMixerInWindow(true);
GFX_ShowMixer();
QWidget * mixerWindow = API_gui_get_widget(gui_getMainMixerGui())->window();
bool maximized = SETTINGS_read_bool("main_mixer_window_maximized", false);
int x = SETTINGS_read_int("main_mixer_window_x", 0);
int y = SETTINGS_read_int("main_mixer_window_y", 0);
int width = SETTINGS_read_int("main_mixer_window_width", 1024);
int height = SETTINGS_read_int("main_mixer_window_height", 550);
printf("Loaded mixer settings: %d, %d, %d, %d \n", x, y, width, height);

mixerWindow->setGeometry(x, y, width, height);
if (maximized)
mixerWindow->showMaximized();
}

printf("Loading main window state \n");
bool maximized = SETTINGS_read_bool("main_window_maximized", false);
int x = SETTINGS_read_int("main_window_x", 0);
int y = SETTINGS_read_int("main_window_y", 0);
int width = SETTINGS_read_int("main_window_width", 1024);
int height = SETTINGS_read_int("main_window_height", 550);
printf("Loaded main window settings: %d, %d, %d, %d \n", x, y, width, height);
mainWindow->setGeometry(x, y, width, height);
if (maximized)
mainWindow->showMaximized();
}

0 comments on commit b26ef0a

Please sign in to comment.