File indexing completed on 2024-05-12 04:57:16

0001 /*
0002     SPDX-FileCopyrightText: 2007-2009 Sergio Pistone <sergio_pistone@yahoo.com.ar>
0003     SPDX-FileCopyrightText: 2010-2022 Mladen Milinkovic <max@smoothware.net>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "mainwindow.h"
0009 #include "appglobal.h"
0010 #include "application.h"
0011 #include "gui/playerwidget.h"
0012 #include "gui/treeview/lineswidget.h"
0013 #include "gui/currentlinewidget.h"
0014 #include "videoplayer/videoplayer.h"
0015 #include "gui/waveform/waveformwidget.h"
0016 #include "gui/subtitlemeta/subtitlemetawidget.h"
0017 
0018 #include <QGridLayout>
0019 #include <QDockWidget>
0020 #include <QStatusBar>
0021 
0022 #include <QMenuBar>
0023 #include <QMainWindow>
0024 #include <KToolBar>
0025 #include <KActionCollection>
0026 #include <KConfigGroup>
0027 
0028 #include <KLocalizedString>
0029 
0030 using namespace SubtitleComposer;
0031 
0032 MainWindow::MainWindow()
0033     : KXmlGuiWindow(nullptr)
0034 {
0035     VideoPlayer::instance()->setParent(this);
0036 
0037     QDockWidget *waveformDock = new QDockWidget(i18n("Waveform"), this);
0038     waveformDock->setObjectName(QStringLiteral("waveform_dock"));
0039     waveformDock->setAllowedAreas(Qt::AllDockWidgetAreas);
0040     waveformDock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
0041     waveformDock->setFloating(false);
0042 
0043     m_waveformWidget = new WaveformWidget(waveformDock);
0044     m_waveformWidget->setContentsMargins(0, 0, 0, 0);
0045 
0046     waveformDock->setWidget(m_waveformWidget);
0047     waveformDock->setTitleBarWidget(m_waveformWidget->toolbarWidget());
0048     addDockWidget(Qt::RightDockWidgetArea, waveformDock);
0049 
0050 
0051     QDockWidget *playerDock = new QDockWidget(i18n("Video Player"), this);
0052     playerDock->setObjectName(QStringLiteral("player_dock"));
0053     playerDock->setAllowedAreas(Qt::AllDockWidgetAreas);
0054     playerDock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetVerticalTitleBar);
0055     playerDock->setFloating(false);
0056 
0057     m_playerWidget = new PlayerWidget(playerDock);
0058     m_playerWidget->setContentsMargins(0, 0, 0, 0);
0059 
0060     playerDock->setWidget(m_playerWidget);
0061     playerDock->setTitleBarWidget(m_playerWidget->infoSidebarWidget());
0062     addDockWidget(Qt::TopDockWidgetArea, playerDock);
0063 
0064 
0065     QDockWidget *cssDock = new QDockWidget(i18n("Styles and Comments"), this);
0066     cssDock->setObjectName(QStringLiteral("submeta_dock"));
0067     cssDock->setAllowedAreas(Qt::AllDockWidgetAreas);
0068     cssDock->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
0069     cssDock->setFloating(false);
0070 
0071     m_metaWidget = new SubtitleMetaWidget(cssDock);
0072     m_metaWidget->setContentsMargins(0, 0, 0, 0);
0073 
0074     cssDock->setWidget(m_metaWidget);
0075     cssDock->setTitleBarWidget(m_metaWidget->dockTitleBar());
0076     addDockWidget(Qt::TopDockWidgetArea, cssDock);
0077 
0078 
0079     QWidget *mainWidget = new QWidget(this);
0080     mainWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
0081 
0082     m_linesWidget = new LinesWidget(mainWidget);
0083 
0084     m_curLineWidget = new CurrentLineWidget(mainWidget);
0085     m_curLineWidget->setMaximumHeight(m_curLineWidget->minimumSizeHint().height());
0086 
0087     QLayout *mainWidgetLayout = new QBoxLayout(QBoxLayout::TopToBottom, mainWidget);
0088     mainWidgetLayout->setContentsMargins(0, 1, 0, 0);
0089     mainWidgetLayout->setSpacing(2);
0090     mainWidgetLayout->addWidget(m_linesWidget);
0091     mainWidgetLayout->addWidget(m_curLineWidget);
0092 
0093     setCentralWidget(mainWidget);
0094 
0095     statusBar()->addPermanentWidget(m_waveformWidget->progressWidget());
0096 
0097     connect(m_linesWidget, &LinesWidget::currentLineChanged, m_waveformWidget, &WaveformWidget::onSubtitleChanged);
0098 
0099     statusBar()->show();
0100     toolBar()->show();
0101     menuBar()->show();
0102 }
0103 
0104 MainWindow::~MainWindow()
0105 {
0106     app()->saveConfig();
0107 }
0108 
0109 void
0110 MainWindow::loadConfig()
0111 {
0112     setCorner(Qt::TopLeftCorner, Qt::TopDockWidgetArea);
0113     setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
0114     setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
0115     setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea);
0116 }
0117 
0118 void
0119 MainWindow::saveConfig()
0120 {
0121 }
0122 
0123 QMenu *
0124 MainWindow::createPopupMenu()
0125 {
0126     QMenu *menu = KXmlGuiWindow::createPopupMenu();
0127 
0128     menu->addSeparator();
0129     QAction *showStatusBarAction = actionCollection()->action(KStandardAction::name(KStandardAction::ShowStatusbar));
0130     menu->addAction(showStatusBarAction);
0131 
0132     return menu;
0133 }
0134 
0135 bool
0136 MainWindow::queryClose()
0137 {
0138     return app()->closeSubtitle();
0139 }