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

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 "showimagedialog.h"
0008 
0009 #include <KConfigGroup>
0010 #include <KLocalizedString>
0011 #include <KSharedConfig>
0012 #include <KStandardAction>
0013 #include <KWindowConfig>
0014 #include <QDialogButtonBox>
0015 #include <QMenu>
0016 #include <QPushButton>
0017 #include <QVBoxLayout>
0018 #include <QWindow>
0019 
0020 namespace
0021 {
0022 static const char myShowImageDialogGroupName[] = "ShowImageDialog";
0023 }
0024 ShowImageDialog::ShowImageDialog(RocketChatAccount *account, QWidget *parent)
0025     : QDialog(parent)
0026     , mShowImageWidget(new ShowImageWidget(account, this))
0027     , mClipboardMenu(new QMenu(this))
0028 {
0029     setWindowTitle(i18nc("@title:window", "Display Image"));
0030     auto mainLayout = new QVBoxLayout(this);
0031     mainLayout->setObjectName(QStringLiteral("mainLayout"));
0032 
0033     mShowImageWidget->setObjectName(QStringLiteral("mShowImageWidget"));
0034     mainLayout->addWidget(mShowImageWidget);
0035 
0036     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Close | QDialogButtonBox::Save, this);
0037     buttonBox->setObjectName(QStringLiteral("button"));
0038 
0039     mClipboardImageAction = KStandardAction::copy(mShowImageWidget, &ShowImageWidget::copyImage, this);
0040     mClipboardImageAction->setObjectName(QStringLiteral("clipboardLocationAction"));
0041     mClipboardImageAction->setText(i18n("Copy Image to Clipboard"));
0042 
0043     auto clipboardLocationAction = new QAction(QIcon::fromTheme(QStringLiteral("edit-copy")), i18n("Copy Location to Clipboard"), this);
0044     clipboardLocationAction->setObjectName(QStringLiteral("clipboardLocationAction"));
0045     connect(clipboardLocationAction, &QAction::triggered, mShowImageWidget, &ShowImageWidget::copyLocation);
0046 
0047     mClipboardMenu->setObjectName(QStringLiteral("mClipboardMenu"));
0048     mClipboardMenu->addAction(mClipboardImageAction);
0049     mClipboardMenu->addAction(clipboardLocationAction);
0050 
0051     auto clipboardButton = new QToolButton(this);
0052     clipboardButton->setObjectName(QStringLiteral("clipboardButton"));
0053 
0054     clipboardButton->setMenu(mClipboardMenu);
0055     clipboardButton->setPopupMode(QToolButton::MenuButtonPopup);
0056     clipboardButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
0057     buttonBox->addButton(clipboardButton, QDialogButtonBox::ActionRole);
0058     clipboardButton->setDefaultAction(clipboardLocationAction);
0059 
0060     connect(buttonBox, &QDialogButtonBox::rejected, this, &ShowImageDialog::reject);
0061     connect(buttonBox->button(QDialogButtonBox::Save), &QPushButton::clicked, mShowImageWidget, &ShowImageWidget::saveAs);
0062     mainLayout->addWidget(buttonBox);
0063     readConfig();
0064 }
0065 
0066 ShowImageDialog::~ShowImageDialog()
0067 {
0068     writeConfig();
0069 }
0070 
0071 void ShowImageDialog::setImageInfo(const ShowImageWidget::ImageInfo &info)
0072 {
0073     mShowImageWidget->setImageInfo(info);
0074     if (info.isAnimatedImage) {
0075         mClipboardImageAction->setEnabled(false);
0076     }
0077 }
0078 
0079 void ShowImageDialog::readConfig()
0080 {
0081     create(); // ensure a window is created
0082     windowHandle()->resize(QSize(800, 600));
0083     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1String(myShowImageDialogGroupName));
0084     KWindowConfig::restoreWindowSize(windowHandle(), group);
0085     resize(windowHandle()->size()); // workaround for QTBUG-40584
0086 }
0087 
0088 void ShowImageDialog::writeConfig()
0089 {
0090     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1String(myShowImageDialogGroupName));
0091     KWindowConfig::saveWindowSize(windowHandle(), group);
0092 }
0093 
0094 #include "moc_showimagedialog.cpp"