1 // SPDX-FileCopyrightText: 2005 Pino Toscano <toscano.pino@tiscali.it>
2 // SPDX-License-Identifier: GPL-2.0-or-later
3
4 #include "kigfiledialog.h"
5
6 #include <cassert>
7
8 #include <QPointer>
9 #include <QPushButton>
10 #include <QVBoxLayout>
11
12 #include <KLocalizedString>
13 #include <KMessageBox>
14
KigFileDialog(const QString & startDir,const QString & filter,const QString & caption,QWidget * parent)15 KigFileDialog::KigFileDialog( const QString& startDir, const QString& filter,
16 const QString& caption, QWidget* parent )
17 : QFileDialog( parent, caption, startDir, filter ),
18 mow( 0L )
19 {
20 setAcceptMode( QFileDialog::AcceptSave );
21 setFileMode( QFileDialog::AnyFile );
22 moptcaption = i18n( "Options" );
23 }
24
setOptionsWidget(QWidget * w)25 void KigFileDialog::setOptionsWidget( QWidget* w )
26 {
27 mow = w;
28 }
29
accept()30 void KigFileDialog::accept()
31 {
32 // i know this is an ugly hack, but i hadn't found other ways to get
33 // the selected file name _before_ the dialog is accept()'ed or
34 // reject()'ed... in every case, below we make sure to accept() or
35 // reject()...
36 setResult( QDialog::Accepted );
37
38 QString sFile = selectedFile();
39
40 if ( QFile::exists( sFile ) )
41 {
42 int ret = KMessageBox::warningContinueCancel( this,
43 i18n( "The file \"%1\" already exists. Do you wish to overwrite it?" ,
44 sFile ), i18n( "Overwrite File?" ), KStandardGuiItem::overwrite() );
45 if ( ret != KMessageBox::Continue )
46 {
47 QFileDialog::reject();
48 return;
49 }
50 }
51 if ( mow )
52 {
53 QPointer<QDialog> optdlg = new QDialog( this );
54 QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Ok );
55 QPushButton *okButton = buttonBox->button( QDialogButtonBox::Ok );
56 QVBoxLayout* mainLayout = new QVBoxLayout;
57
58 okButton->setDefault( true );
59 okButton->setShortcut( Qt::CTRL | Qt::Key_Return );
60 optdlg->setLayout( mainLayout );
61 mainLayout->addWidget( mow );
62 mainLayout->addWidget( buttonBox );
63 optdlg->setWindowTitle( moptcaption );
64
65 connect( buttonBox, &QDialogButtonBox::accepted, optdlg.data(), &QDialog::accept );
66 connect( buttonBox, &QDialogButtonBox::rejected, optdlg.data(), &QDialog::reject);
67
68 (optdlg->exec() == QDialog::Accepted) ? QFileDialog::accept() : QFileDialog::reject();
69 }
70 else
71 QFileDialog::accept();
72 }
73
setOptionCaption(const QString & caption)74 void KigFileDialog::setOptionCaption( const QString& caption )
75 {
76 if ( caption.isEmpty() )
77 return;
78
79 moptcaption = caption;
80 }
81
selectedFile()82 QString KigFileDialog::selectedFile()
83 {
84 QStringList files = selectedFiles();
85
86 assert( files.size() == 1 );
87
88 return files[0];
89 }
90
91