implemented #424
This commit is contained in:
+64
-26
@@ -70,31 +70,55 @@ MainWindow* olive::MainWindow;
|
||||
|
||||
#define DEFAULT_CSS "QPushButton::checked { background: rgb(25, 25, 25); }"
|
||||
|
||||
void MainWindow::setup_layout(bool reset) {
|
||||
panel_project->show();
|
||||
panel_effect_controls->show();
|
||||
panel_footage_viewer->show();
|
||||
panel_sequence_viewer->show();
|
||||
panel_timeline->show();
|
||||
panel_graph_editor->hide();
|
||||
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_project);
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_graph_editor);
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_footage_viewer);
|
||||
tabifyDockWidget(panel_footage_viewer, panel_effect_controls);
|
||||
panel_footage_viewer->raise();
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_sequence_viewer);
|
||||
addDockWidget(Qt::BottomDockWidgetArea, panel_timeline);
|
||||
|
||||
void MainWindow::setup_layout(bool reset) {
|
||||
// load panels from file
|
||||
if (!reset) {
|
||||
QFile panel_config(get_config_path() + "/layout");
|
||||
if (panel_config.exists() && panel_config.open(QFile::ReadOnly)) {
|
||||
restoreState(panel_config.readAll(), 0);
|
||||
panel_config.close();
|
||||
} else {
|
||||
reset = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (reset) {
|
||||
// remove all panels from the main window
|
||||
for (int i=0;i<olive::panels.size();i++) {
|
||||
removeDockWidget(olive::panels.at(i));
|
||||
}
|
||||
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_project);
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_graph_editor);
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_footage_viewer);
|
||||
tabifyDockWidget(panel_footage_viewer, panel_effect_controls);
|
||||
panel_footage_viewer->raise();
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_sequence_viewer);
|
||||
addDockWidget(Qt::BottomDockWidgetArea, panel_timeline);
|
||||
|
||||
panel_project->show();
|
||||
panel_effect_controls->show();
|
||||
panel_footage_viewer->show();
|
||||
panel_sequence_viewer->show();
|
||||
panel_timeline->show();
|
||||
panel_graph_editor->hide();
|
||||
|
||||
panel_project->setFloating(false);
|
||||
panel_effect_controls->setFloating(false);
|
||||
panel_footage_viewer->setFloating(false);
|
||||
panel_sequence_viewer->setFloating(false);
|
||||
panel_timeline->setFloating(false);
|
||||
panel_graph_editor->setFloating(true);
|
||||
|
||||
resizeDocks({panel_project, panel_footage_viewer, panel_sequence_viewer},
|
||||
{width()/3, width()/3, width()/3},
|
||||
Qt::Horizontal);
|
||||
|
||||
resizeDocks({panel_project, panel_timeline},
|
||||
{height()/2, height()/2},
|
||||
Qt::Vertical);
|
||||
}
|
||||
|
||||
layout()->update();
|
||||
}
|
||||
|
||||
@@ -102,8 +126,6 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
first_show(true)
|
||||
{
|
||||
qRegisterMetaType<ClipPtr>();
|
||||
|
||||
init_custom_cursors();
|
||||
|
||||
open_debug_file();
|
||||
@@ -223,9 +245,6 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
|
||||
olive::Global->check_for_autorecovery_file();
|
||||
|
||||
// set up panel layout
|
||||
setup_layout(false);
|
||||
|
||||
// set up output audio device
|
||||
init_audio();
|
||||
|
||||
@@ -892,26 +911,45 @@ void MainWindow::paintEvent(QPaintEvent *event) {
|
||||
QMainWindow::paintEvent(event);
|
||||
|
||||
if (first_show) {
|
||||
// set this to false immediately to prevent anything here being called again
|
||||
first_show = false;
|
||||
|
||||
/**
|
||||
* @brief Set up the dock widget layout on the main window
|
||||
*
|
||||
* For some reason, Qt didn't like this in the constructor. It would lead to several geometry issues with HiDPI
|
||||
* on Windows, and also seemed to break QMainWindow::restoreState() which is why it took so long to implement
|
||||
* saving/restoring panel layouts. Putting it in showEvent() didn't help either, nor did putting it in
|
||||
* changeEvent() (QEvent::type() == QEvent::Polish). This is the only place it's functioned as expected.
|
||||
*/
|
||||
setup_layout(false);
|
||||
|
||||
/**
|
||||
Signal that window has finished loading.
|
||||
*/
|
||||
emit finished_first_paint();
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWindow::event(QEvent *e)
|
||||
void MainWindow::changeEvent(QEvent *e)
|
||||
{
|
||||
if (e->type() == QEvent::LanguageChange) {
|
||||
|
||||
// if this was a LanguageEvent, run the retranslation function
|
||||
Retranslate();
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
||||
// otherwise pass it to the base class
|
||||
QMainWindow::changeEvent(e);
|
||||
|
||||
}
|
||||
return QMainWindow::event(e);
|
||||
}
|
||||
|
||||
void MainWindow::reset_layout() {
|
||||
setup_layout(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void MainWindow::maximize_panel() {
|
||||
// toggles between normal state and a state of one panel being maximized
|
||||
if (temp_panel_state.isEmpty()) {
|
||||
|
||||
+11
-1
@@ -109,7 +109,17 @@ protected:
|
||||
*/
|
||||
virtual void paintEvent(QPaintEvent *) override;
|
||||
|
||||
virtual bool event(QEvent* e) override;
|
||||
/**
|
||||
* @brief Change event
|
||||
*
|
||||
* Overridden to handle language changes (e->type() == QEvent::LanguageChange) by calling Retranslate().
|
||||
*
|
||||
* See documentation for QWidget::changeEvent() for more information.
|
||||
*
|
||||
* @param e
|
||||
* @return
|
||||
*/
|
||||
virtual void changeEvent(QEvent* e) override;
|
||||
|
||||
private slots:
|
||||
/**
|
||||
|
||||
@@ -2060,8 +2060,6 @@ void Timeline::set_tool() {
|
||||
|
||||
void olive::timeline::MultiplyTrackSizesByDPI()
|
||||
{
|
||||
qDebug() << QApplication::desktop()->devicePixelRatio();
|
||||
|
||||
kTrackDefaultHeight *= QApplication::desktop()->devicePixelRatio();
|
||||
kTrackMinHeight *= QApplication::desktop()->devicePixelRatio();
|
||||
kTrackHeightIncrement *= QApplication::desktop()->devicePixelRatio();
|
||||
|
||||
+11
-6
@@ -26,7 +26,8 @@
|
||||
QVector<Panel*> olive::panels;
|
||||
|
||||
Panel::Panel(QWidget *parent) : QDockWidget (parent) {
|
||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
// setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
|
||||
// setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
|
||||
olive::panels.append(this);
|
||||
}
|
||||
@@ -39,13 +40,17 @@ Panel::~Panel()
|
||||
void Panel::changeEvent(QEvent *e)
|
||||
{
|
||||
if (e->type() == QEvent::LanguageChange) {
|
||||
/**
|
||||
|
||||
NOTE: While overriding changeEvent() is the official documented way of handling runtime language change events,
|
||||
I found it buggy to do it this way (some panels would change and others wouldn't, and the panels that did/didn't
|
||||
change would be different each time). The current workaround is calling Retranslate() on each panel manually
|
||||
from MainWindow::Retranslate which is triggered by its own changeEvent() that seems fairly reliable. Currently
|
||||
this function is mostly a no-op.
|
||||
|
||||
*/
|
||||
// Retranslate();
|
||||
} else {
|
||||
QDockWidget::changeEvent(e);
|
||||
}
|
||||
}
|
||||
|
||||
void Panel::Retranslate()
|
||||
{
|
||||
qDebug() << "like what?";
|
||||
}
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ class Panel : public QDockWidget {
|
||||
public:
|
||||
Panel(QWidget* parent = nullptr);
|
||||
virtual ~Panel() override;
|
||||
virtual void Retranslate();
|
||||
virtual void Retranslate() = 0;
|
||||
protected:
|
||||
virtual void changeEvent(QEvent* e) override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user