File indexing completed on 2024-05-19 05:04:06
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"