diff --git a/mainwindow.cpp b/mainwindow.cpp index 2ca0470be..060447494 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -80,11 +80,6 @@ void MainWindow::setup_layout(bool reset) { addDockWidget(Qt::BottomDockWidgetArea, panel_timeline); panel_graph_editor->setFloating(true); -// workaround for strange Qt dock bug (see https://bugreports.qt.io/browse/QTBUG-65592) -#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) - resizeDocks({panel_project}, {40}, Qt::Horizontal); -#endif - // load panels from file if (!reset) { QFile panel_config(get_config_path() + "/layout"); @@ -209,22 +204,22 @@ MainWindow::MainWindow(QWidget *parent, const QString &an) : } } - // load preferred language from file - QString language_file = external_translation_file.isEmpty() ? - config.language_file : - external_translation_file; + // load preferred language from file + QString language_file = external_translation_file.isEmpty() ? + config.language_file : + external_translation_file; - if (!language_file.isEmpty() - && QFileInfo::exists(language_file)) { - QTranslator* translator = new QTranslator(this); - translator->load(language_file); - QApplication::installTranslator(translator); - } + if (!language_file.isEmpty() + && QFileInfo::exists(language_file)) { + QTranslator* translator = new QTranslator(this); + translator->load(language_file); + QApplication::installTranslator(translator); + } alloc_panels(this); QStatusBar* statusBar = new QStatusBar(this); - statusBar->showMessage(tr("Welcome to %1").arg(appName)); + statusBar->showMessage(tr("Welcome to %1").arg(appName)); setStatusBar(statusBar); setup_menus(); @@ -752,7 +747,7 @@ void MainWindow::setup_menus() { full_screen->setProperty("id", "fullscreen"); full_screen->setCheckable(true); - view_menu->addAction(tr("Full Screen Viewer"), this, SLOT(full_screen_viewer()))->setProperty("id", "fullscreenviewer"); + view_menu->addAction(tr("Full Screen Viewer"), this, SLOT(full_screen_viewer()))->setProperty("id", "fullscreenviewer"); // INITIALIZE PLAYBACK MENU @@ -817,11 +812,11 @@ void MainWindow::setup_menus() { window_sequenceviewer_action->setCheckable(true); window_sequenceviewer_action->setData(reinterpret_cast(panel_sequence_viewer)); - window_menu->addSeparator(); + window_menu->addSeparator(); - window_menu->addAction(tr("Maximize Panel"), this, SLOT(maximize_panel()), QKeySequence("`"))->setProperty("id", "maximizepanel"); + window_menu->addAction(tr("Maximize Panel"), this, SLOT(maximize_panel()), QKeySequence("`"))->setProperty("id", "maximizepanel"); - window_menu->addSeparator(); + window_menu->addSeparator(); window_menu->addAction(tr("Reset to Default Layout"), this, SLOT(reset_layout()))->setProperty("id", "resetdefaultlayout"); @@ -1207,34 +1202,34 @@ void MainWindow::next_cut() { QDockWidget* focused_panel = get_focused_panel(); if (sequence != nullptr && (panel_timeline == focused_panel || panel_sequence_viewer == focused_panel)) { panel_timeline->next_cut(); - } + } } void MainWindow::maximize_panel() { - // toggles between normal state and a state of one panel being maximized - if (temp_panel_state.isEmpty()) { - // get currently hovered panel - QDockWidget* focused_panel = get_focused_panel(true); + // toggles between normal state and a state of one panel being maximized + if (temp_panel_state.isEmpty()) { + // get currently hovered panel + QDockWidget* focused_panel = get_focused_panel(true); - // if the mouse is in fact hovering over a panel - if (focused_panel != nullptr) { - // store the current state of panels - temp_panel_state = saveState(); + // if the mouse is in fact hovering over a panel + if (focused_panel != nullptr) { + // store the current state of panels + temp_panel_state = saveState(); - // remove all dock widgets (kind of painful having to do each individually) - if (focused_panel != panel_project) removeDockWidget(panel_project); - if (focused_panel != panel_effect_controls) removeDockWidget(panel_effect_controls); - if (focused_panel != panel_timeline) removeDockWidget(panel_timeline); - if (focused_panel != panel_sequence_viewer) removeDockWidget(panel_sequence_viewer); - if (focused_panel != panel_footage_viewer) removeDockWidget(panel_footage_viewer); - } - } else { - // we must be maximized, restore previous state - restoreState(temp_panel_state); + // remove all dock widgets (kind of painful having to do each individually) + if (focused_panel != panel_project) removeDockWidget(panel_project); + if (focused_panel != panel_effect_controls) removeDockWidget(panel_effect_controls); + if (focused_panel != panel_timeline) removeDockWidget(panel_timeline); + if (focused_panel != panel_sequence_viewer) removeDockWidget(panel_sequence_viewer); + if (focused_panel != panel_footage_viewer) removeDockWidget(panel_footage_viewer); + } + } else { + // we must be maximized, restore previous state + restoreState(temp_panel_state); - // clear temp panel state for next maximize call - temp_panel_state.clear(); - } + // clear temp panel state for next maximize call + temp_panel_state.clear(); + } } void MainWindow::preferences() @@ -1249,15 +1244,15 @@ void MainWindow::zoom_in_tracks() { } void MainWindow::zoom_out_tracks() { - panel_timeline->decrease_track_height(); + panel_timeline->decrease_track_height(); } void MainWindow::full_screen_viewer() { - if (get_focused_panel() == panel_footage_viewer) { - panel_footage_viewer->viewer_widget->set_fullscreen(); - } else { - panel_sequence_viewer->viewer_widget->set_fullscreen(); - } + if (get_focused_panel() == panel_footage_viewer) { + panel_footage_viewer->viewer_widget->set_fullscreen(); + } else { + panel_sequence_viewer->viewer_widget->set_fullscreen(); + } } void MainWindow::windowMenu_About_To_Be_Shown() { @@ -1643,9 +1638,9 @@ void MainWindow::toggle_panel_visibility() { QDockWidget* w = reinterpret_cast(action->data().value()); w->setVisible(!w->isVisible()); - // layout has changed, we're no longer in maximized panel mode, - // so we clear this byte array - temp_panel_state.clear(); + // layout has changed, we're no longer in maximized panel mode, + // so we clear this byte array + temp_panel_state.clear(); } void MainWindow::set_timecode_view() { diff --git a/panels/viewer.cpp b/panels/viewer.cpp index 47b1a26da..999bb882c 100644 --- a/panels/viewer.cpp +++ b/panels/viewer.cpp @@ -587,44 +587,46 @@ long Viewer::get_seq_out() { } void Viewer::setup_ui() { - QWidget* contents = new QWidget(this); + QWidget* contents = new QWidget(); QVBoxLayout* layout = new QVBoxLayout(contents); layout->setSpacing(0); layout->setMargin(0); - viewer_container = new ViewerContainer(contents); + setWidget(contents); + + viewer_container = new ViewerContainer(); viewer_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); layout->addWidget(viewer_container); - headers = new TimelineHeader(contents); + headers = new TimelineHeader(); layout->addWidget(headers); - horizontal_bar = new ResizableScrollBar(contents); + horizontal_bar = new ResizableScrollBar(); horizontal_bar->setSingleStep(20); horizontal_bar->setOrientation(Qt::Horizontal); layout->addWidget(horizontal_bar); - QWidget* lower_controls = new QWidget(contents); + QWidget* lower_controls = new QWidget(); QHBoxLayout* lower_control_layout = new QHBoxLayout(lower_controls); lower_control_layout->setMargin(0); // current time code - QWidget* current_timecode_container = new QWidget(lower_controls); + QWidget* current_timecode_container = new QWidget(); QHBoxLayout* current_timecode_container_layout = new QHBoxLayout(current_timecode_container); current_timecode_container_layout->setSpacing(0); current_timecode_container_layout->setMargin(0); - current_timecode_slider = new LabelSlider(current_timecode_container); + current_timecode_slider = new LabelSlider(); lower_control_layout->addWidget(current_timecode_container); - QWidget* playback_controls = new QWidget(lower_controls); + QWidget* playback_controls = new QWidget(); QHBoxLayout* playback_control_layout = new QHBoxLayout(playback_controls); playback_control_layout->setSpacing(0); playback_control_layout->setMargin(0); - go_to_start_button = new QPushButton(playback_controls); + go_to_start_button = new QPushButton(); QIcon goToStartIcon; goToStartIcon.addFile(QStringLiteral(":/icons/prev.png"), QSize(), QIcon::Normal, QIcon::Off); goToStartIcon.addFile(QStringLiteral(":/icons/prev-disabled.png"), QSize(), QIcon::Disabled, QIcon::Off); @@ -632,7 +634,7 @@ void Viewer::setup_ui() { connect(go_to_start_button, SIGNAL(clicked(bool)), this, SLOT(go_to_in())); playback_control_layout->addWidget(go_to_start_button); - prev_frame_button = new QPushButton(playback_controls); + prev_frame_button = new QPushButton(); QIcon rewindIcon; rewindIcon.addFile(QStringLiteral(":/icons/rew.png"), QSize(), QIcon::Normal, QIcon::Off); rewindIcon.addFile(QStringLiteral(":/icons/rew-disabled.png"), QSize(), QIcon::Disabled, QIcon::Off); @@ -640,14 +642,14 @@ void Viewer::setup_ui() { connect(prev_frame_button, SIGNAL(clicked(bool)), this, SLOT(previous_frame())); playback_control_layout->addWidget(prev_frame_button); - play_button = new QPushButton(playback_controls); + play_button = new QPushButton(); playIcon.addFile(QStringLiteral(":/icons/play.png"), QSize(), QIcon::Normal, QIcon::On); playIcon.addFile(QStringLiteral(":/icons/play-disabled.png"), QSize(), QIcon::Disabled, QIcon::On); play_button->setIcon(playIcon); connect(play_button, SIGNAL(clicked(bool)), this, SLOT(toggle_play())); playback_control_layout->addWidget(play_button); - next_frame_button = new QPushButton(playback_controls); + next_frame_button = new QPushButton(); QIcon ffIcon; ffIcon.addFile(QStringLiteral(":/icons/ff.png"), QSize(), QIcon::Normal, QIcon::On); ffIcon.addFile(QStringLiteral(":/icons/ff-disabled.png"), QSize(), QIcon::Disabled, QIcon::Off); @@ -655,7 +657,7 @@ void Viewer::setup_ui() { connect(next_frame_button, SIGNAL(clicked(bool)), this, SLOT(next_frame())); playback_control_layout->addWidget(next_frame_button); - go_to_end_frame = new QPushButton(playback_controls); + go_to_end_frame = new QPushButton(); QIcon nextIcon; nextIcon.addFile(QStringLiteral(":/icons/next.png"), QSize(), QIcon::Normal, QIcon::Off); nextIcon.addFile(QStringLiteral(":/icons/next-disabled.png"), QSize(), QIcon::Disabled, QIcon::Off); @@ -665,21 +667,19 @@ void Viewer::setup_ui() { lower_control_layout->addWidget(playback_controls); - QWidget* end_timecode_container = new QWidget(lower_controls); + QWidget* end_timecode_container = new QWidget(); QHBoxLayout* end_timecode_layout = new QHBoxLayout(end_timecode_container); end_timecode_layout->setSpacing(0); end_timecode_layout->setMargin(0); - end_timecode = new QLabel(end_timecode_container); - end_timecode->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + end_timecode = new QLabel(); + end_timecode->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); end_timecode_layout->addWidget(end_timecode); lower_control_layout->addWidget(end_timecode_container); layout->addWidget(lower_controls); - - setWidget(contents); } void Viewer::set_media(Media* m) { diff --git a/ui/viewercontainer.cpp b/ui/viewercontainer.cpp index d6e3f0dcd..2a30dafbc 100644 --- a/ui/viewercontainer.cpp +++ b/ui/viewercontainer.cpp @@ -20,9 +20,6 @@ ViewerContainer::ViewerContainer(QWidget *parent) : horizontal_scrollbar = new QScrollBar(Qt::Horizontal, this); vertical_scrollbar = new QScrollBar(Qt::Vertical, this); - horizontal_scrollbar->setVisible(false); - vertical_scrollbar->setVisible(false); - horizontal_scrollbar->setSingleStep(20); vertical_scrollbar->setSingleStep(20); @@ -112,6 +109,8 @@ void ViewerContainer::adjust() { horizontal_scrollbar->setValue(horizontal_scrollbar->maximum()/2); vertical_scrollbar->setValue(vertical_scrollbar->maximum()/2); + + adjust_scrollbars(); } } else { // if the zoom size is smaller than the available area, scale the surface down @@ -129,7 +128,7 @@ void ViewerContainer::adjust() { } } -void ViewerContainer::resizeEvent(QResizeEvent *event) { +void ViewerContainer::adjust_scrollbars() { horizontal_scrollbar->move(0, height()-horizontal_scrollbar->height()); horizontal_scrollbar->setFixedWidth(qMax(0, width()-vertical_scrollbar->width())); horizontal_scrollbar->setPageStep(width()); @@ -137,7 +136,9 @@ void ViewerContainer::resizeEvent(QResizeEvent *event) { vertical_scrollbar->move(width() - vertical_scrollbar->width(), 0); vertical_scrollbar->setFixedHeight(qMax(0, height()-horizontal_scrollbar->height())); vertical_scrollbar->setPageStep(height()); +} +void ViewerContainer::resizeEvent(QResizeEvent *event) { event->accept(); adjust(); } diff --git a/ui/viewercontainer.h b/ui/viewercontainer.h index e9e54937d..00dfc8fdd 100644 --- a/ui/viewercontainer.h +++ b/ui/viewercontainer.h @@ -24,6 +24,9 @@ public: ViewerWidget* child; void adjust(); + // manually moves scrollbars into the correct position + void adjust_scrollbars(); + protected: void resizeEvent(QResizeEvent *event);