Skip to content

Commit

Permalink
Sub windows refactor #204
Browse files Browse the repository at this point in the history
Fix several issues in how (sub) windows work. This is primarily a crash/bug fix.
  • Loading branch information
rodlie committed Jul 3, 2024
1 parent 4766029 commit a07973b
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 30 deletions.
78 changes: 51 additions & 27 deletions src/app/GUI/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ MainWindow::MainWindow(Document& document,
const QString &openProject,
QWidget * const parent)
: QMainWindow(parent)
, mShutdown(false)
, mWelcomeDialog(nullptr)
//, mCentralWidget(nullptr)
, mStackWidget(nullptr)
Expand Down Expand Up @@ -138,6 +139,7 @@ MainWindow::MainWindow(Document& document,
, mAutoSaveTimer(nullptr)
, mAboutWidget(nullptr)
, mAboutWindow(nullptr)
, mViewTimelineAct(nullptr)
, mTimelineWindow(nullptr)
, mTimelineWindowAct(nullptr)
, mRenderWindow(nullptr)
Expand Down Expand Up @@ -422,6 +424,7 @@ MainWindow::MainWindow(Document& document,

MainWindow::~MainWindow()
{
mShutdown = true;
std::cout << "Closing Friction, please wait ... " << std::endl;
if (mAutoSaveTimer->isActive()) { mAutoSaveTimer->stop(); }
writeSettings();
Expand Down Expand Up @@ -1009,14 +1012,14 @@ void MainWindow::setupMenuBar()
else { showNormal(); }
});

const auto viewTimelineAct = mViewMenu->addAction(tr("View Timeline"));
viewTimelineAct->setCheckable(true);
viewTimelineAct->setChecked(true);
viewTimelineAct->setShortcut(QKeySequence(Qt::Key_T));
connect(viewTimelineAct, &QAction::triggered,
mViewTimelineAct = mViewMenu->addAction(tr("View Timeline"));
mViewTimelineAct->setCheckable(true);
mViewTimelineAct->setChecked(true);
mViewTimelineAct->setShortcut(QKeySequence(Qt::Key_T));
connect(mViewTimelineAct, &QAction::triggered,
this, [this](bool triggered) {
if (mTimelineWindowAct->isChecked()) {
openTimelineWindow();
mViewTimelineAct->setChecked(true); // ignore if window
} else {
mUI->setDockVisible(tr("Timeline"), triggered);
}
Expand All @@ -1026,12 +1029,9 @@ void MainWindow::setupMenuBar()
mTimelineWindowAct->setCheckable(true);
connect(mTimelineWindowAct, &QAction::triggered,
this, [this](bool triggered) {
if (!triggered) {
mUI->addDockWidget(tr("Timeline"), mTimeline);
mTimelineWindow->deleteLater();
} else {
openTimelineWindow();
}
if (mShutdown) { return; }
if (!triggered) { mTimelineWindow->close(); }
else { openTimelineWindow(); }
AppSupport::setSettings("ui",
"TimelineWindow",
triggered);
Expand All @@ -1041,14 +1041,9 @@ void MainWindow::setupMenuBar()
mRenderWindowAct->setCheckable(true);
connect(mRenderWindowAct, &QAction::triggered,
this, [this](bool triggered) {
if (!triggered) {
mTabQueueIndex = mTabProperties->addTab(mRenderWidget,
QIcon::fromTheme("render_animation"),
tr("Queue"));
mRenderWindow->deleteLater();
} else {
openRenderQueueWindow();
}
if (mShutdown) { return; }
if (!triggered) { mRenderWindow->close(); }
else { openRenderQueueWindow(); }
AppSupport::setSettings("ui",
"RenderWindow",
triggered);
Expand Down Expand Up @@ -1234,28 +1229,57 @@ void MainWindow::openTimelineWindow()
true,
true,
true);
mUI->setDockVisible(tr("Timeline"), false);
connect(mTimelineWindow, &Window::closed,
this, [this]() {
if (mShutdown) { return; }
closedTimelineWindow();
});
} else {
mTimelineWindow->addWidget(mTimeline);
}
mTimelineWindowAct->setChecked(true);
mUI->setDockVisible(tr("Timeline"), false);
mTimelineWindow->focusWindow();
}

void MainWindow::openRenderQueueWindow(const bool &focus)
void MainWindow::closedTimelineWindow()
{
mTimelineWindowAct->setChecked(false);
mUI->addDockWidget(tr("Timeline"), mTimeline);
}

void MainWindow::openRenderQueueWindow()
{
mRenderWindowAct->setChecked(true);
mTabProperties->removeTab(mTabQueueIndex);
mRenderWidget->setVisible(true);
if (!mRenderWindow) {
mTabProperties->removeTab(mTabQueueIndex);
mRenderWidget->setVisible(true);
mRenderWindow = new Window(this,
mRenderWidget,
tr("Renderer"),
QString("RenderWindow"),
focus,
true,
true,
false);
connect(mRenderWindow, &Window::closed,
this, [this]() {
if (mShutdown) { return; }
closedRenderQueueWindow();
});
} else {
mRenderWindow->addWidget(mRenderWidget);
}
if (!focus) { return; }
mRenderWindow->focusWindow();
}

void MainWindow::closedRenderQueueWindow()
{
mRenderWindowAct->setChecked(false);
mTabQueueIndex = mTabProperties->addTab(mRenderWidget,
QIcon::fromTheme("render_animation"),
tr("Queue"));
}

void MainWindow::openWelcomeDialog()
{
mStackWidget->setCurrentIndex(mStackIndexWelcome);
Expand Down Expand Up @@ -1648,7 +1672,7 @@ void MainWindow::readSettings(const QString &openProject)
mRenderWindowAct->blockSignals(false);

if (isTimelineWindow) { openTimelineWindow(); }
if (isRenderWindow) { openRenderQueueWindow(false); }
if (isRenderWindow) { openRenderQueueWindow(); }

if (isFull) { showFullScreen(); }
else if (isMax) { showMaximized(); }
Expand Down
6 changes: 5 additions & 1 deletion src/app/GUI/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ class MainWindow : public QMainWindow
void showEvent(QShowEvent *e);

private:
bool mShutdown;
QWidget *mWelcomeDialog;
//CentralWidget *mCentralWidget;
QStackedWidget *mStackWidget;
Expand Down Expand Up @@ -396,13 +397,16 @@ class MainWindow : public QMainWindow
Window *mAboutWindow;
void openAboutWindow();

QAction *mViewTimelineAct;
Window *mTimelineWindow;
QAction *mTimelineWindowAct;
void openTimelineWindow();
void closedTimelineWindow();

Window *mRenderWindow;
QAction *mRenderWindowAct;
void openRenderQueueWindow(const bool &focus = true);
void openRenderQueueWindow();
void closedRenderQueueWindow();

protected:
void keyPressEvent(QKeyEvent *event);
Expand Down
11 changes: 9 additions & 2 deletions src/app/GUI/window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "appsupport.h"

#include <QDebug>
#include <QVBoxLayout>
#include <QWindow>

#include "mainwindow.h"
Expand All @@ -38,6 +37,7 @@ Window::Window(QWidget *parent,
bool blockEscKey,
bool forwardKeys)
: QDialog(parent)
, mLayout(nullptr)
, mBlockEscKey(blockEscKey)
, mForwardKeys(forwardKeys)
{
Expand All @@ -51,7 +51,7 @@ Window::Window(QWidget *parent,
setObjectName(id);

setContentsMargins(0, 0, 0, 0);
QVBoxLayout *mLayout = new QVBoxLayout(this);
mLayout = new QVBoxLayout(this);
mLayout->setMargin(0);
mLayout->addWidget(child);

Expand All @@ -69,6 +69,12 @@ void Window::focusWindow()
if (windowHandle()) { windowHandle()->requestActivate(); }
}

void Window::addWidget(QWidget *child)
{
if (!child) { return; }
mLayout->addWidget(child);
}

void Window::keyPressEvent(QKeyEvent *event)
{
if (mForwardKeys) {
Expand All @@ -82,6 +88,7 @@ void Window::closeEvent(QCloseEvent *event)
{
qDebug() << "closed window" << objectName();
saveState();
emit closed();
QDialog::closeEvent(event);
}

Expand Down
6 changes: 6 additions & 0 deletions src/app/GUI/window.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#define WINDOW_H

#include <QDialog>
#include <QVBoxLayout>
#include <QKeyEvent>
#include <QCloseEvent>

Expand All @@ -42,12 +43,17 @@ class Window : public QDialog
bool forwardKeys = false);
~Window();
void focusWindow();
void addWidget(QWidget *child);

signals:
void closed();

protected:
void keyPressEvent(QKeyEvent *event) override;
void closeEvent(QCloseEvent *event) override;

private:
QVBoxLayout *mLayout;
void loadState(bool visible = true);
void saveState();
bool mBlockEscKey;
Expand Down

0 comments on commit a07973b

Please sign in to comment.