exportdialog: ignore scroll events on widgets
Fixes usability issue where scrolling tabs on the export dialog could inadvertently change parameters
This commit is contained in:
@@ -133,7 +133,7 @@ ExportDialog::ExportDialog(ViewerOutput *viewer_node, QWidget *parent) :
|
|||||||
audio_enabled_ = new QCheckBox(tr("Export Audio"));
|
audio_enabled_ = new QCheckBox(tr("Export Audio"));
|
||||||
av_enabled_layout->addWidget(audio_enabled_);
|
av_enabled_layout->addWidget(audio_enabled_);
|
||||||
|
|
||||||
subtitles_enabled_ = new QCheckBox(tr("Export Subtitle"));
|
subtitles_enabled_ = new QCheckBox(tr("Export Subtitles"));
|
||||||
av_enabled_layout->addWidget(subtitles_enabled_);
|
av_enabled_layout->addWidget(subtitles_enabled_);
|
||||||
|
|
||||||
preferences_layout->addLayout(av_enabled_layout, row, 0, 1, 4);
|
preferences_layout->addLayout(av_enabled_layout, row, 0, 1, 4);
|
||||||
@@ -142,6 +142,8 @@ ExportDialog::ExportDialog(ViewerOutput *viewer_node, QWidget *parent) :
|
|||||||
|
|
||||||
preferences_tabs_ = new QTabWidget();
|
preferences_tabs_ = new QTabWidget();
|
||||||
|
|
||||||
|
scroll_blocker_ = new NodeParamViewScrollBlocker(this);
|
||||||
|
|
||||||
color_manager_ = viewer_node_->project()->color_manager();
|
color_manager_ = viewer_node_->project()->color_manager();
|
||||||
video_tab_ = new ExportVideoTab(color_manager_);
|
video_tab_ = new ExportVideoTab(color_manager_);
|
||||||
AddPreferencesTab(video_tab_, tr("Video"));
|
AddPreferencesTab(video_tab_, tr("Video"));
|
||||||
@@ -248,6 +250,15 @@ ExportDialog::ExportDialog(ViewerOutput *viewer_node, QWidget *parent) :
|
|||||||
preview_viewer_->ConnectViewerNode(viewer_node_);
|
preview_viewer_->ConnectViewerNode(viewer_node_);
|
||||||
preview_viewer_->SetColorMenuEnabled(false);
|
preview_viewer_->SetColorMenuEnabled(false);
|
||||||
preview_viewer_->SetColorTransform(video_tab_->CurrentOCIOColorSpace());
|
preview_viewer_->SetColorTransform(video_tab_->CurrentOCIOColorSpace());
|
||||||
|
|
||||||
|
qApp->installEventFilter(this);
|
||||||
|
|
||||||
|
connect(video_enabled_, &QCheckBox::toggled, video_tab_, &QWidget::setEnabled);
|
||||||
|
video_tab_->setEnabled(video_enabled_->isChecked());
|
||||||
|
connect(audio_enabled_, &QCheckBox::toggled, audio_tab_, &QWidget::setEnabled);
|
||||||
|
audio_tab_->setEnabled(audio_enabled_->isChecked());
|
||||||
|
connect(subtitles_enabled_, &QCheckBox::toggled, subtitle_tab_, &QWidget::setEnabled);
|
||||||
|
subtitle_tab_->setEnabled(subtitles_enabled_->isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
rational ExportDialog::GetSelectedTimebase() const
|
rational ExportDialog::GetSelectedTimebase() const
|
||||||
@@ -716,6 +727,22 @@ void ExportDialog::SetParams(const EncodingParams &e)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ExportDialog::eventFilter(QObject *o, QEvent *e)
|
||||||
|
{
|
||||||
|
// Any parameters in scrollable areas, ignore wheel events so the user doesn't unwittingly change
|
||||||
|
// them while trying to scroll through the pages
|
||||||
|
if (e->type() == QEvent::Wheel) {
|
||||||
|
while ((o = o->parent())) {
|
||||||
|
if (o == video_tab_ || o == audio_tab_ || o == subtitle_tab_) {
|
||||||
|
e->ignore();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super::eventFilter(o, e);
|
||||||
|
}
|
||||||
|
|
||||||
void ExportDialog::done(int r)
|
void ExportDialog::done(int r)
|
||||||
{
|
{
|
||||||
preview_viewer_->ConnectViewerNode(nullptr);
|
preview_viewer_->ConnectViewerNode(nullptr);
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
#include "exportsubtitlestab.h"
|
#include "exportsubtitlestab.h"
|
||||||
#include "exportvideotab.h"
|
#include "exportvideotab.h"
|
||||||
#include "task/export/export.h"
|
#include "task/export/export.h"
|
||||||
|
#include "widget/nodeparamview/nodeparamviewwidgetbridge.h"
|
||||||
#include "widget/viewer/viewer.h"
|
#include "widget/viewer/viewer.h"
|
||||||
|
|
||||||
namespace olive {
|
namespace olive {
|
||||||
@@ -58,6 +59,8 @@ public:
|
|||||||
EncodingParams GenerateParams() const;
|
EncodingParams GenerateParams() const;
|
||||||
void SetParams(const EncodingParams &e);
|
void SetParams(const EncodingParams &e);
|
||||||
|
|
||||||
|
virtual bool eventFilter(QObject *o, QEvent *e) override;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void done(int r) override;
|
virtual void done(int r) override;
|
||||||
|
|
||||||
@@ -113,6 +116,8 @@ private:
|
|||||||
QWidget* preferences_area_;
|
QWidget* preferences_area_;
|
||||||
QCheckBox *export_bkg_box_;
|
QCheckBox *export_bkg_box_;
|
||||||
|
|
||||||
|
NodeParamViewScrollBlocker *scroll_blocker_;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void BrowseFilename();
|
void BrowseFilename();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user