From 83cf67fe7bda447d26be8a3849f0e643575f61a2 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 15 Dec 2019 19:56:12 +1100 Subject: [PATCH] implemented majority of export dialog widget layout --- app/dialog/export/CMakeLists.txt | 4 ++ app/dialog/export/export.cpp | 82 ++++++++++++++++++--- app/dialog/export/export.h | 5 ++ app/dialog/export/exportaudiotab.cpp | 36 ++++++++++ app/dialog/export/exportaudiotab.h | 12 ++++ app/dialog/export/exportvideotab.cpp | 104 +++++++++++++++++++++++++++ app/dialog/export/exportvideotab.h | 17 +++++ app/widget/viewer/viewer.h | 2 +- 8 files changed, 250 insertions(+), 12 deletions(-) create mode 100644 app/dialog/export/exportaudiotab.cpp create mode 100644 app/dialog/export/exportaudiotab.h create mode 100644 app/dialog/export/exportvideotab.cpp create mode 100644 app/dialog/export/exportvideotab.h diff --git a/app/dialog/export/CMakeLists.txt b/app/dialog/export/CMakeLists.txt index 0908dc68f..948ccc6b1 100644 --- a/app/dialog/export/CMakeLists.txt +++ b/app/dialog/export/CMakeLists.txt @@ -18,5 +18,9 @@ set(OLIVE_SOURCES ${OLIVE_SOURCES} dialog/export/export.h dialog/export/export.cpp + dialog/export/exportaudiotab.h + dialog/export/exportaudiotab.cpp + dialog/export/exportvideotab.h + dialog/export/exportvideotab.cpp PARENT_SCOPE ) diff --git a/app/dialog/export/export.cpp b/app/dialog/export/export.cpp index 66d58a562..064daa677 100644 --- a/app/dialog/export/export.cpp +++ b/app/dialog/export/export.cpp @@ -1,13 +1,18 @@ #include "export.h" #include +#include #include #include #include -#include #include +#include #include +#include "exportvideotab.h" +#include "exportaudiotab.h" +#include "ui/icons/icons.h" + ExportDialog::ExportDialog(QWidget *parent) : QDialog(parent) { @@ -18,21 +23,76 @@ ExportDialog::ExportDialog(QWidget *parent) : QWidget* preferences_area = new QWidget(); QGridLayout* preferences_layout = new QGridLayout(preferences_area); - preferences_layout->addWidget(new QLabel(tr("Filename:")), 0, 0); - preferences_layout->addWidget(new QLineEdit(), 0, 1); - preferences_layout->addWidget(new QLabel(tr("Preset:")), 1, 0); - preferences_layout->addWidget(new QComboBox(), 1, 1); + + int row = 0; + + QLabel* fn_lbl = new QLabel(tr("Filename:")); + fn_lbl->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + preferences_layout->addWidget(fn_lbl, row, 0); + QLineEdit* filename_edit = new QLineEdit(); + preferences_layout->addWidget(filename_edit, row, 1, 1, 2); + QPushButton* file_browse_btn = new QPushButton(); + file_browse_btn->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + file_browse_btn->setIcon(olive::icon::Folder); + preferences_layout->addWidget(file_browse_btn, row, 3); + + row++; + + QLabel* preset_lbl = new QLabel(tr("Preset:")); + preset_lbl->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + preferences_layout->addWidget(preset_lbl, row, 0); + preferences_layout->addWidget(new QComboBox(), row, 1); + QPushButton* preset_load_btn = new QPushButton(); + preset_load_btn->setIcon(olive::icon::Open); + preset_load_btn->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + preferences_layout->addWidget(preset_load_btn, row, 2); + QPushButton* preset_save_btn = new QPushButton(); + preset_save_btn->setIcon(olive::icon::Save); + preset_save_btn->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + preferences_layout->addWidget(preset_save_btn, row, 3); + + row++; + + QFrame* horizontal_line = new QFrame(); + horizontal_line->setFrameShape(QFrame::HLine); + horizontal_line->setFrameShadow(QFrame::Sunken); + preferences_layout->addWidget(horizontal_line, row, 0, 1, 4); + + row++; + + preferences_layout->addWidget(new QLabel(tr("Format:")), row, 0); + preferences_layout->addWidget(new QComboBox(), row, 1, 1, 3); + + row++; + QTabWidget* preferences_tabs = new QTabWidget(); - preferences_tabs->addTab(new QWidget(), tr("Video")); - preferences_tabs->addTab(new QWidget(), tr("Audio")); - preferences_layout->addWidget(preferences_tabs, 2, 0, 1, 2); - preferences_layout->addWidget(new QPushButton(tr("Export")), 3, 0); - preferences_layout->addWidget(new QPushButton(tr("Cancel")), 3, 1); + QScrollArea* video_area = new QScrollArea(); + video_area->setWidgetResizable(true); + video_area->setWidget(new ExportVideoTab()); + preferences_tabs->addTab(video_area, tr("Video")); + QScrollArea* audio_area = new QScrollArea(); + audio_area->setWidgetResizable(true); + audio_area->setWidget(new ExportAudioTab()); + preferences_tabs->addTab(audio_area, tr("Audio")); + preferences_layout->addWidget(preferences_tabs, row, 0, 1, 4); + + row++; + + QDialogButtonBox* buttons = new QDialogButtonBox(); + buttons->setCenterButtons(true); + buttons->addButton(tr("Export"), QDialogButtonBox::AcceptRole); + buttons->addButton(QDialogButtonBox::Cancel); + connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); + connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); + preferences_layout->addWidget(buttons, row, 0, 1, 4); + splitter->addWidget(preferences_area); QWidget* preview_area = new QWidget(); QVBoxLayout* preview_layout = new QVBoxLayout(preview_area); preview_layout->addWidget(new QLabel(tr("Preview"))); - preview_layout->addWidget(new QOpenGLWidget()); + preview_viewer_ = new ViewerWidget(); + preview_viewer_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + preview_layout->addWidget(preview_viewer_); splitter->addWidget(preview_area); } diff --git a/app/dialog/export/export.h b/app/dialog/export/export.h index 57d5efba4..6f4dff434 100644 --- a/app/dialog/export/export.h +++ b/app/dialog/export/export.h @@ -3,10 +3,15 @@ #include +#include "widget/viewer/viewer.h" + class ExportDialog : public QDialog { public: ExportDialog(QWidget* parent = nullptr); + +private: + ViewerWidget* preview_viewer_; }; #endif // EXPORTDIALOG_H diff --git a/app/dialog/export/exportaudiotab.cpp b/app/dialog/export/exportaudiotab.cpp new file mode 100644 index 000000000..4e8a0539a --- /dev/null +++ b/app/dialog/export/exportaudiotab.cpp @@ -0,0 +1,36 @@ +#include "exportaudiotab.h" + +#include +#include +#include + +ExportAudioTab::ExportAudioTab(QWidget* parent) : + QWidget(parent) +{ + QVBoxLayout* outer_layout = new QVBoxLayout(this); + + QGridLayout* layout = new QGridLayout(); + outer_layout->addLayout(layout); + + int row = 0; + + layout->addWidget(new QLabel(tr("Codec:")), row, 0); + layout->addWidget(new QComboBox(), row, 1); + + row++; + + layout->addWidget(new QLabel(tr("Sample Rate:")), row, 0); + layout->addWidget(new QComboBox(), row, 1); + + row++; + + layout->addWidget(new QLabel(tr("Channel Layout:")), row, 0); + layout->addWidget(new QComboBox(), row, 1); + + row++; + + layout->addWidget(new QLabel(tr("Format:")), row, 0); + layout->addWidget(new QComboBox(), row, 1); + + outer_layout->addStretch(); +} diff --git a/app/dialog/export/exportaudiotab.h b/app/dialog/export/exportaudiotab.h new file mode 100644 index 000000000..22ef86f5d --- /dev/null +++ b/app/dialog/export/exportaudiotab.h @@ -0,0 +1,12 @@ +#ifndef EXPORTAUDIOTAB_H +#define EXPORTAUDIOTAB_H + +#include + +class ExportAudioTab : public QWidget +{ +public: + ExportAudioTab(QWidget* parent = nullptr); +}; + +#endif // EXPORTAUDIOTAB_H diff --git a/app/dialog/export/exportvideotab.cpp b/app/dialog/export/exportvideotab.cpp new file mode 100644 index 000000000..c2cee7012 --- /dev/null +++ b/app/dialog/export/exportvideotab.cpp @@ -0,0 +1,104 @@ +#include "exportvideotab.h" + +#include +#include +#include +#include +#include + +#include "widget/slider/integerslider.h" + +ExportVideoTab::ExportVideoTab(QWidget *parent) : + QWidget(parent) +{ + QVBoxLayout* outer_layout = new QVBoxLayout(this); + + outer_layout->addWidget(SetupResolutionSection()); + + outer_layout->addWidget(SetupColorSection()); + + outer_layout->addWidget(SetupCodecSection()); + + outer_layout->addStretch(); +} + +QWidget* ExportVideoTab::SetupResolutionSection() +{ + int row = 0; + + QGroupBox* resolution_group = new QGroupBox(); + resolution_group->setTitle(tr("Basic")); + + QGridLayout* layout = new QGridLayout(resolution_group); + + layout->addWidget(new QLabel(tr("Width:")), row, 0); + + IntegerSlider* width_slider = new IntegerSlider(); + layout->addWidget(width_slider, row, 1); + + row++; + + layout->addWidget(new QLabel(tr("Height:")), row, 0); + + IntegerSlider* height_slider = new IntegerSlider(); + layout->addWidget(height_slider, row, 1); + + row++; + + layout->addWidget(new QLabel(tr("Maintain Aspect Ratio:")), row, 0); + layout->addWidget(new QCheckBox(), row, 1); + + row++; + + layout->addWidget(new QLabel(tr("Scaling Method:")), row, 0); + layout->addWidget(new QComboBox(), row, 1); + + row++; + + layout->addWidget(new QLabel(tr("Frame Rate:")), row, 0); + layout->addWidget(new QComboBox(), row, 1); + + return resolution_group; +} + +QWidget* ExportVideoTab::SetupColorSection() +{ + int row = 0; + + QGroupBox* color_group = new QGroupBox(); + color_group->setTitle(tr("Color Management")); + + QGridLayout* color_layout = new QGridLayout(color_group); + + color_layout->addWidget(new QLabel(tr("Display:")), row, 0); + color_layout->addWidget(new QComboBox(), row, 1); + + row++; + + color_layout->addWidget(new QLabel(tr("View:")), row, 0); + color_layout->addWidget(new QComboBox(), row, 1); + + row++; + + color_layout->addWidget(new QLabel(tr("Look:")), row, 0); + color_layout->addWidget(new QComboBox(), row, 1); + + row++; + + return color_group; +} + +QWidget *ExportVideoTab::SetupCodecSection() +{ + int row = 0; + + QGroupBox* codec_group = new QGroupBox(); + codec_group->setTitle(tr("Codec")); + + QGridLayout* codec_layout = new QGridLayout(codec_group); + + codec_layout->addWidget(new QLabel(tr("Codec:")), row, 0); + codec_layout->addWidget(new QComboBox(), row, 1); + + return codec_group; +} diff --git a/app/dialog/export/exportvideotab.h b/app/dialog/export/exportvideotab.h new file mode 100644 index 000000000..ce3643fe3 --- /dev/null +++ b/app/dialog/export/exportvideotab.h @@ -0,0 +1,17 @@ +#ifndef EXPORTVIDEOTAB_H +#define EXPORTVIDEOTAB_H + +#include + +class ExportVideoTab : public QWidget +{ +public: + ExportVideoTab(QWidget* parent = nullptr); + +private: + QWidget* SetupResolutionSection(); + QWidget* SetupColorSection(); + QWidget* SetupCodecSection(); +}; + +#endif // EXPORTVIDEOTAB_H diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 178085f29..21aa699aa 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -45,7 +45,7 @@ class ViewerWidget : public QWidget { Q_OBJECT public: - ViewerWidget(QWidget* parent); + ViewerWidget(QWidget* parent = nullptr); void SetPlaybackControlsEnabled(bool enabled);