File indexing completed on 2024-12-01 03:41:20
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 0008 #include "kio/skipdialog.h" 0009 0010 #include <assert.h> 0011 #include <stdio.h> 0012 0013 #include <QDialogButtonBox> 0014 #include <QLabel> 0015 #include <QPushButton> 0016 #include <QVBoxLayout> 0017 #include <QWidget> 0018 0019 #include <KGuiItem> 0020 #include <KLocalizedString> 0021 #include <KStandardGuiItem> 0022 0023 using namespace KIO; 0024 0025 SkipDialog::SkipDialog(QWidget *parent, KIO::SkipDialog_Options options, const QString &_error_text) 0026 : QDialog(parent) 0027 , d(nullptr) 0028 { 0029 setWindowTitle(i18n("Information")); 0030 0031 QVBoxLayout *layout = new QVBoxLayout(this); 0032 0033 auto *label = new QLabel(_error_text, this); 0034 label->setWordWrap(true); 0035 layout->addWidget(label); 0036 0037 QDialogButtonBox *buttonBox = new QDialogButtonBox(this); 0038 layout->addWidget(buttonBox); 0039 0040 const bool isMultiple = options & SkipDialog_MultipleItems; 0041 const bool isInvalidChars = options & SkipDialog_Replace_Invalid_Chars; 0042 const bool hideRetry = options & SkipDialog_Hide_Retry; 0043 0044 // Retrying to e.g. copy a file with "*" in the name to a fat32 0045 // partition will always fail 0046 if (isInvalidChars) { 0047 QPushButton *replaceCharButton = new QPushButton(i18n("Replace")); 0048 connect(replaceCharButton, &QAbstractButton::clicked, this, [this]() { 0049 done(KIO::Result_ReplaceInvalidChars); 0050 }); 0051 buttonBox->addButton(replaceCharButton, QDialogButtonBox::ActionRole); 0052 } else if (!hideRetry) { 0053 QPushButton *retryButton = new QPushButton(i18n("Retry")); 0054 connect(retryButton, &QAbstractButton::clicked, this, &SkipDialog::retryPressed); 0055 buttonBox->addButton(retryButton, QDialogButtonBox::ActionRole); 0056 } 0057 0058 if (isMultiple) { 0059 if (isInvalidChars) { 0060 QPushButton *autoReplaceButton = new QPushButton(i18n("Replace All")); 0061 connect(autoReplaceButton, &QAbstractButton::clicked, this, [this]() { 0062 done(KIO::Result_ReplaceAllInvalidChars); 0063 }); 0064 buttonBox->addButton(autoReplaceButton, QDialogButtonBox::ActionRole); 0065 } 0066 0067 QPushButton *skipButton = new QPushButton(i18n("Skip")); 0068 connect(skipButton, &QAbstractButton::clicked, this, &SkipDialog::skipPressed); 0069 buttonBox->addButton(skipButton, QDialogButtonBox::ActionRole); 0070 0071 QPushButton *autoSkipButton = new QPushButton(i18n("Skip All")); 0072 connect(autoSkipButton, &QAbstractButton::clicked, this, &SkipDialog::autoSkipPressed); 0073 buttonBox->addButton(autoSkipButton, QDialogButtonBox::ActionRole); 0074 } 0075 0076 auto *cancelBtn = buttonBox->addButton(QDialogButtonBox::Cancel); 0077 // If it's one item and the Retry button is hidden, replace the Cancel 0078 // button text with OK 0079 if (hideRetry && !isMultiple) { 0080 KGuiItem::assign(cancelBtn, KStandardGuiItem::ok()); 0081 } 0082 connect(buttonBox, &QDialogButtonBox::rejected, this, &SkipDialog::cancelPressed); 0083 0084 resize(sizeHint()); 0085 } 0086 0087 SkipDialog::~SkipDialog() 0088 { 0089 } 0090 0091 void SkipDialog::cancelPressed() 0092 { 0093 done(KIO::Result_Cancel); 0094 } 0095 0096 void SkipDialog::skipPressed() 0097 { 0098 done(KIO::Result_Skip); 0099 } 0100 0101 void SkipDialog::autoSkipPressed() 0102 { 0103 done(KIO::Result_AutoSkip); 0104 } 0105 0106 void SkipDialog::retryPressed() 0107 { 0108 done(KIO::Result_Retry); 0109 } 0110 0111 #include "moc_skipdialog.cpp"