1 | /* |
2 | This file is part of the KDE libraries |
3 | SPDX-FileCopyrightText: 2000 David Faure <faure@kde.org> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.0-only |
6 | */ |
7 | |
8 | #include "kio/skipdialog.h" |
9 | |
10 | #include <assert.h> |
11 | #include <stdio.h> |
12 | |
13 | #include <QDialogButtonBox> |
14 | #include <QLabel> |
15 | #include <QPushButton> |
16 | #include <QVBoxLayout> |
17 | #include <QWidget> |
18 | |
19 | #include <KGuiItem> |
20 | #include <KLocalizedString> |
21 | #include <KStandardGuiItem> |
22 | |
23 | using namespace KIO; |
24 | |
25 | SkipDialog::SkipDialog(QWidget *parent, KIO::SkipDialog_Options options, const QString &_error_text) |
26 | : QDialog(parent) |
27 | , d(nullptr) |
28 | { |
29 | setWindowTitle(i18n("Information" )); |
30 | |
31 | QVBoxLayout *layout = new QVBoxLayout(this); |
32 | |
33 | auto *label = new QLabel(_error_text, this); |
34 | label->setTextFormat(Qt::PlainText); |
35 | label->setWordWrap(true); |
36 | layout->addWidget(label); |
37 | |
38 | QDialogButtonBox *buttonBox = new QDialogButtonBox(this); |
39 | layout->addWidget(buttonBox); |
40 | |
41 | const bool isMultiple = options & SkipDialog_MultipleItems; |
42 | const bool isInvalidChars = options & SkipDialog_Replace_Invalid_Chars; |
43 | const bool hideRetry = options & SkipDialog_Hide_Retry; |
44 | |
45 | // Retrying to e.g. copy a file with "*" in the name to a fat32 |
46 | // partition will always fail |
47 | if (isInvalidChars) { |
48 | QPushButton *replaceCharButton = new QPushButton(i18n("Replace" )); |
49 | connect(sender: replaceCharButton, signal: &QAbstractButton::clicked, context: this, slot: [this]() { |
50 | done(KIO::Result_ReplaceInvalidChars); |
51 | }); |
52 | buttonBox->addButton(button: replaceCharButton, role: QDialogButtonBox::ActionRole); |
53 | } else if (!hideRetry) { |
54 | QPushButton *retryButton = new QPushButton(i18n("Retry" )); |
55 | connect(sender: retryButton, signal: &QAbstractButton::clicked, context: this, slot: &SkipDialog::retryPressed); |
56 | buttonBox->addButton(button: retryButton, role: QDialogButtonBox::ActionRole); |
57 | } |
58 | |
59 | if (isMultiple) { |
60 | if (isInvalidChars) { |
61 | QPushButton *autoReplaceButton = new QPushButton(i18n("Replace All" )); |
62 | connect(sender: autoReplaceButton, signal: &QAbstractButton::clicked, context: this, slot: [this]() { |
63 | done(KIO::Result_ReplaceAllInvalidChars); |
64 | }); |
65 | buttonBox->addButton(button: autoReplaceButton, role: QDialogButtonBox::ActionRole); |
66 | } |
67 | |
68 | QPushButton *skipButton = new QPushButton(i18n("Skip" )); |
69 | connect(sender: skipButton, signal: &QAbstractButton::clicked, context: this, slot: &SkipDialog::skipPressed); |
70 | buttonBox->addButton(button: skipButton, role: QDialogButtonBox::ActionRole); |
71 | |
72 | QPushButton *autoSkipButton = new QPushButton(i18n("Skip All" )); |
73 | connect(sender: autoSkipButton, signal: &QAbstractButton::clicked, context: this, slot: &SkipDialog::autoSkipPressed); |
74 | buttonBox->addButton(button: autoSkipButton, role: QDialogButtonBox::ActionRole); |
75 | } |
76 | |
77 | auto *cancelBtn = buttonBox->addButton(button: QDialogButtonBox::Cancel); |
78 | // If it's one item and the Retry button is hidden, replace the Cancel |
79 | // button text with OK |
80 | if (hideRetry && !isMultiple) { |
81 | KGuiItem::assign(button: cancelBtn, item: KStandardGuiItem::ok()); |
82 | } |
83 | connect(sender: buttonBox, signal: &QDialogButtonBox::rejected, context: this, slot: &SkipDialog::cancelPressed); |
84 | |
85 | resize(sizeHint()); |
86 | } |
87 | |
88 | SkipDialog::~SkipDialog() |
89 | { |
90 | } |
91 | |
92 | void SkipDialog::cancelPressed() |
93 | { |
94 | done(KIO::Result_Cancel); |
95 | } |
96 | |
97 | void SkipDialog::skipPressed() |
98 | { |
99 | done(KIO::Result_Skip); |
100 | } |
101 | |
102 | void SkipDialog::autoSkipPressed() |
103 | { |
104 | done(KIO::Result_AutoSkip); |
105 | } |
106 | |
107 | void SkipDialog::retryPressed() |
108 | { |
109 | done(KIO::Result_Retry); |
110 | } |
111 | |
112 | #include "moc_skipdialog.cpp" |
113 | |