File indexing completed on 2023-12-03 05:04:27
0001 /* 0002 * Print dialog 0003 * 0004 * SPDX-FileCopyrightText: 2023 Alexander Reinholdt <alexander.reinholdt@kdemail.net> 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 // application specific includes 0009 #include "smb4kprintdialog.h" 0010 #include "core/smb4kclient.h" 0011 #include "core/smb4ksettings.h" 0012 0013 // Qt includes 0014 #include <QDialogButtonBox> 0015 #include <QDir> 0016 #include <QVBoxLayout> 0017 #include <QWindow> 0018 0019 // KDE includes 0020 #include <KConfigGroup> 0021 #include <KFileItem> 0022 #include <KIconLoader> 0023 #include <KLocalizedString> 0024 #include <KWindowConfig> 0025 0026 Smb4KPrintDialog::Smb4KPrintDialog(QWidget *parent) 0027 : QDialog(parent) 0028 { 0029 setWindowTitle(i18n("Print Dialog")); 0030 setAttribute(Qt::WA_DeleteOnClose, true); 0031 0032 QVBoxLayout *layout = new QVBoxLayout(this); 0033 0034 QWidget *descriptionWidget = new QWidget(this); 0035 0036 QHBoxLayout *descriptionWidgetLayout = new QHBoxLayout(descriptionWidget); 0037 0038 QLabel *descriptionPixmap = new QLabel(descriptionWidget); 0039 descriptionPixmap->setPixmap(KDE::icon(QStringLiteral("printer")).pixmap(KIconLoader::SizeHuge)); 0040 descriptionPixmap->setAlignment(Qt::AlignBottom); 0041 descriptionPixmap->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); 0042 0043 descriptionWidgetLayout->addWidget(descriptionPixmap); 0044 0045 m_descriptionText = new QLabel(this); 0046 m_descriptionText->setText(i18n("Print a file.")); 0047 m_descriptionText->setWordWrap(true); 0048 m_descriptionText->setAlignment(Qt::AlignBottom); 0049 m_descriptionText->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); 0050 0051 descriptionWidgetLayout->addWidget(m_descriptionText); 0052 0053 layout->addWidget(descriptionWidget); 0054 0055 QWidget *inputWidget = new QWidget(this); 0056 0057 QGridLayout *inputWidgetLayout = new QGridLayout(inputWidget); 0058 inputWidgetLayout->setContentsMargins(0, 0, 0, 0); 0059 0060 QLabel *fileLabel = new QLabel(i18n("File:"), inputWidget); 0061 m_fileInput = new KUrlRequester(QUrl::fromLocalFile(QDir::homePath() + QDir::separator()), inputWidget); 0062 m_fileInput->setMode(KFile::File | KFile::LocalOnly | KFile::ExistingOnly); 0063 connect(m_fileInput, &KUrlComboRequester::textChanged, this, &Smb4KPrintDialog::slotUrlChanged); 0064 0065 inputWidgetLayout->addWidget(fileLabel, 0, 0); 0066 inputWidgetLayout->addWidget(m_fileInput, 0, 1); 0067 0068 QLabel *copiesLabel = new QLabel(i18n("Copies:"), inputWidget); 0069 m_copiesInput = new QSpinBox(inputWidget); 0070 m_copiesInput->setValue(1); 0071 m_copiesInput->setMinimum(1); 0072 connect(m_copiesInput, &QSpinBox::valueChanged, this, &Smb4KPrintDialog::slotCopiesChanged); 0073 0074 inputWidgetLayout->addWidget(copiesLabel, 1, 0); 0075 inputWidgetLayout->addWidget(m_copiesInput, 1, 1); 0076 0077 layout->addWidget(inputWidget); 0078 0079 QDialogButtonBox *buttonBox = new QDialogButtonBox(this); 0080 0081 m_cancelButton = buttonBox->addButton(QDialogButtonBox::Cancel); 0082 m_cancelButton->setShortcut(QKeySequence::Cancel); 0083 m_cancelButton->setDefault(true); 0084 connect(m_cancelButton, &QPushButton::clicked, this, &Smb4KPrintDialog::reject); 0085 0086 m_printButton = buttonBox->addButton(i18n("Print"), QDialogButtonBox::ActionRole); 0087 m_printButton->setShortcut(QKeySequence::Print); 0088 m_printButton->setEnabled(false); 0089 connect(m_printButton, &QPushButton::clicked, this, &Smb4KPrintDialog::slotPrintFile); 0090 0091 layout->addWidget(buttonBox); 0092 0093 setMinimumWidth(sizeHint().width() > 350 ? sizeHint().width() : 350); 0094 0095 create(); 0096 0097 KConfigGroup group(Smb4KSettings::self()->config(), "PrintDialog"); 0098 QSize dialogSize; 0099 0100 // FIXME: Insert completion objects? 0101 0102 if (group.exists()) { 0103 KWindowConfig::restoreWindowSize(windowHandle(), group); 0104 dialogSize = windowHandle()->size(); 0105 } else { 0106 dialogSize = sizeHint(); 0107 } 0108 0109 resize(dialogSize); // workaround for QTBUG-40584 0110 } 0111 0112 Smb4KPrintDialog::~Smb4KPrintDialog() 0113 { 0114 } 0115 0116 bool Smb4KPrintDialog::setPrinterShare(SharePtr printer) 0117 { 0118 if (!printer->isPrinter()) { 0119 return false; 0120 } 0121 0122 m_descriptionText->setText(i18n("Print a file to printer <b>%1</b>.", printer->displayString())); 0123 0124 m_printer = printer; 0125 0126 return true; 0127 } 0128 0129 void Smb4KPrintDialog::enablePrintButton() 0130 { 0131 QUrl pathUrl = m_fileInput->url(); 0132 int copies = m_copiesInput->value(); 0133 0134 m_printButton->setEnabled(pathUrl.isValid() && copies > 0); 0135 } 0136 0137 void Smb4KPrintDialog::slotPrintFile() 0138 { 0139 Smb4KClient::self()->printFile(m_printer, KFileItem(m_fileInput->url()), m_copiesInput->value()); 0140 0141 KConfigGroup group(Smb4KSettings::self()->config(), "PrintDialog"); 0142 KWindowConfig::saveWindowSize(windowHandle(), group); 0143 0144 // FIXME: Save completion objects? 0145 0146 accept(); 0147 } 0148 0149 void Smb4KPrintDialog::slotUrlChanged(const QString &path) 0150 { 0151 Q_UNUSED(path) 0152 enablePrintButton(); 0153 } 0154 0155 void Smb4KPrintDialog::slotCopiesChanged(int copies) 0156 { 0157 Q_UNUSED(copies) 0158 enablePrintButton(); 0159 }