File indexing completed on 2024-05-12 16:27:14

0001 /*
0002    SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "createvideomessagewizard.h"
0008 #include "createvideomessagewidget.h"
0009 #include "misc/lineeditcatchreturnkey.h"
0010 #include "showvideowidget.h"
0011 #include <KConfigGroup>
0012 #include <KLocalizedString>
0013 #include <KSharedConfig>
0014 #include <KWindowConfig>
0015 #include <QLabel>
0016 #include <QLineEdit>
0017 #include <QPushButton>
0018 #include <QVBoxLayout>
0019 #include <QWindow>
0020 
0021 namespace
0022 {
0023 static const char myConfigCreateVideoMessageWizardGroupName[] = "CreateVideoMessageWizard";
0024 }
0025 CreateVideoMessageWizard::CreateVideoMessageWizard(RocketChatAccount *account, QWidget *parent)
0026     : QWizard(parent)
0027     , mCreateVideoMessagePage(new CreateVideoMessagePage(this))
0028     , mCreateMessagePage(new GenerateVideoMessagePage(account, this))
0029 {
0030     setWindowTitle(i18nc("@title:window", "Create Video Message"));
0031     setPage(CreateVideo, mCreateVideoMessagePage);
0032     setPage(CreateMessage, mCreateMessagePage);
0033     readConfig();
0034     connect(this, &CreateVideoMessageWizard::currentIdChanged, this, &CreateVideoMessageWizard::slotCurrentIdChanged);
0035     setButtonText(QWizard::FinishButton, i18n("Send"));
0036     connect(this, &CreateVideoMessageWizard::finished, this, &CreateVideoMessageWizard::slotAccepted);
0037     mCreateVideoMessagePage->loadSettings();
0038 }
0039 
0040 CreateVideoMessageWizard::~CreateVideoMessageWizard()
0041 {
0042     writeConfig();
0043 }
0044 
0045 void CreateVideoMessageWizard::slotAccepted()
0046 {
0047     mCreateVideoMessagePage->saveSettings();
0048     accepted();
0049 }
0050 
0051 void CreateVideoMessageWizard::slotCurrentIdChanged(int id)
0052 {
0053     if (id == CreateMessage) {
0054         mCreateMessagePage->setFileNamePath(mCreateVideoMessagePage->fileNamePath().toLocalFile());
0055     }
0056 }
0057 
0058 CreateVideoMessageWizard::CreateVideoMessageInfo CreateVideoMessageWizard::videoMessageInfo() const
0059 {
0060     CreateVideoMessageInfo info;
0061     info.mDescription = mCreateMessagePage->description();
0062     info.mFileName = mCreateMessagePage->fileName();
0063     info.mFileUrl = mCreateMessagePage->fileNameUrl();
0064     return info;
0065 }
0066 
0067 void CreateVideoMessageWizard::readConfig()
0068 {
0069     create(); // ensure a window is created
0070     windowHandle()->resize(QSize(800, 600));
0071     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1String(myConfigCreateVideoMessageWizardGroupName));
0072     KWindowConfig::restoreWindowSize(windowHandle(), group);
0073     resize(windowHandle()->size()); // workaround for QTBUG-40584
0074 }
0075 
0076 void CreateVideoMessageWizard::writeConfig()
0077 {
0078     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1String(myConfigCreateVideoMessageWizardGroupName));
0079     KWindowConfig::saveWindowSize(windowHandle(), group);
0080 }
0081 
0082 CreateVideoMessagePage::CreateVideoMessagePage(QWidget *parent)
0083     : QWizardPage(parent)
0084     , mCreateVideoMessageWidget(new CreateVideoMessageWidget(this))
0085 {
0086     auto mainLayout = new QVBoxLayout(this);
0087     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0088 
0089     mCreateVideoMessageWidget->setObjectName(QStringLiteral("mCreateVideoMessageWidget"));
0090     mainLayout->addWidget(mCreateVideoMessageWidget);
0091     connect(mCreateVideoMessageWidget, &CreateVideoMessageWidget::recordDone, this, &CreateVideoMessagePage::completeChanged);
0092 }
0093 
0094 CreateVideoMessagePage::~CreateVideoMessagePage() = default;
0095 
0096 void CreateVideoMessagePage::loadSettings()
0097 {
0098     mCreateVideoMessageWidget->loadSettings();
0099 }
0100 
0101 void CreateVideoMessagePage::saveSettings()
0102 {
0103     mCreateVideoMessageWidget->saveSettings();
0104 }
0105 
0106 QUrl CreateVideoMessagePage::fileNamePath() const
0107 {
0108     return mCreateVideoMessageWidget->temporaryFilePath();
0109 }
0110 
0111 bool CreateVideoMessagePage::isComplete() const
0112 {
0113     return !mCreateVideoMessageWidget->temporaryFilePath().isEmpty();
0114 }
0115 
0116 bool CreateVideoMessagePage::validatePage()
0117 {
0118     return !mCreateVideoMessageWidget->temporaryFilePath().isEmpty();
0119 }
0120 
0121 GenerateVideoMessagePage::GenerateVideoMessagePage(RocketChatAccount *account, QWidget *parent)
0122     : QWizardPage(parent)
0123     , mShowVideoWidget(new ShowVideoWidget(account, this))
0124     , mFileName(new QLineEdit(this))
0125     , mDescription(new QLineEdit(this))
0126 {
0127     auto mainLayout = new QVBoxLayout(this);
0128     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0129 
0130     mShowVideoWidget->setObjectName(QStringLiteral("mShowVideoWidget"));
0131     mainLayout->addWidget(mShowVideoWidget);
0132 
0133     auto label = new QLabel(i18n("Filename:"), this);
0134     label->setObjectName(QStringLiteral("label-filename"));
0135     label->setTextFormat(Qt::PlainText);
0136     mainLayout->addWidget(label);
0137 
0138     mFileName->setObjectName(QStringLiteral("mFileName"));
0139     mDescription->setObjectName(QStringLiteral("mDescription"));
0140 
0141     new LineEditCatchReturnKey(mFileName, this);
0142     new LineEditCatchReturnKey(mDescription, this);
0143 
0144     mainLayout->addWidget(mFileName);
0145 
0146     label = new QLabel(i18n("Description:"), this);
0147     label->setObjectName(QStringLiteral("label-description"));
0148     label->setTextFormat(Qt::PlainText);
0149     mainLayout->addWidget(label);
0150 
0151     mainLayout->addWidget(mDescription);
0152 }
0153 
0154 GenerateVideoMessagePage::~GenerateVideoMessagePage() = default;
0155 
0156 QString GenerateVideoMessagePage::fileName() const
0157 {
0158     return mFileName->text();
0159 }
0160 
0161 QString GenerateVideoMessagePage::description() const
0162 {
0163     return mDescription->text();
0164 }
0165 
0166 void GenerateVideoMessagePage::setFileNamePath(const QString &url)
0167 {
0168     mShowVideoWidget->setVideoPath(url);
0169 }
0170 
0171 QUrl GenerateVideoMessagePage::fileNameUrl() const
0172 {
0173     return mShowVideoWidget->videoUrl();
0174 }
0175 
0176 QDebug operator<<(QDebug d, const CreateVideoMessageWizard::CreateVideoMessageInfo &t)
0177 {
0178     d << " mDescription " << t.mDescription;
0179     d << " mFileName " << t.mFileName;
0180     d << " mDescription " << t.mDescription;
0181     return d;
0182 }
0183 
0184 bool CreateVideoMessageWizard::CreateVideoMessageInfo::isValid() const
0185 {
0186     return mFileUrl.isValid();
0187 }
0188 
0189 #include "moc_createvideomessagewizard.cpp"