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
23using namespace KIO;
24
25SkipDialog::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
88SkipDialog::~SkipDialog()
89{
90}
91
92void SkipDialog::cancelPressed()
93{
94 done(KIO::Result_Cancel);
95}
96
97void SkipDialog::skipPressed()
98{
99 done(KIO::Result_Skip);
100}
101
102void SkipDialog::autoSkipPressed()
103{
104 done(KIO::Result_AutoSkip);
105}
106
107void SkipDialog::retryPressed()
108{
109 done(KIO::Result_Retry);
110}
111
112#include "moc_skipdialog.cpp"
113

source code of kio/src/widgets/skipdialog.cpp