File indexing completed on 2025-04-27 03:58:22
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2006-09-13 0007 * Description : a widget to provide conflict rules to save image. 0008 * 0009 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * 0011 * SPDX-License-Identifier: GPL-2.0-or-later 0012 * 0013 * ============================================================ */ 0014 0015 #include "filesaveconflictbox.h" 0016 0017 // Qt includes 0018 0019 #include <QButtonGroup> 0020 #include <QGridLayout> 0021 #include <QLabel> 0022 #include <QRadioButton> 0023 #include <QVBoxLayout> 0024 #include <QApplication> 0025 #include <QStyle> 0026 0027 // KDE includes 0028 0029 #include <klocalizedstring.h> 0030 #include <kconfiggroup.h> 0031 0032 namespace Digikam 0033 { 0034 0035 class Q_DECL_HIDDEN FileSaveConflictBox::Private 0036 { 0037 public: 0038 0039 explicit Private() 0040 : conflictLabel (nullptr), 0041 conflictButtonGroup (nullptr), 0042 storeDiffButton (nullptr), 0043 overwriteButton (nullptr), 0044 skipFileButton (nullptr) 0045 { 0046 } 0047 0048 QLabel* conflictLabel; 0049 0050 QButtonGroup* conflictButtonGroup; 0051 0052 QRadioButton* storeDiffButton; 0053 QRadioButton* overwriteButton; 0054 QRadioButton* skipFileButton; 0055 }; 0056 0057 FileSaveConflictBox::FileSaveConflictBox(QWidget* const parent, bool addSkip) 0058 : QWidget(parent), 0059 d (new Private) 0060 { 0061 setAttribute(Qt::WA_DeleteOnClose); 0062 0063 const int spacing = qMin(QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing), 0064 QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing)); 0065 QGridLayout* const grid = new QGridLayout(this); 0066 d->conflictLabel = new QLabel(i18n("If Target File Exists:"), this); 0067 QWidget* const conflictBox = new QWidget(this); 0068 QVBoxLayout* const vlay = new QVBoxLayout(conflictBox); 0069 d->conflictButtonGroup = new QButtonGroup(conflictBox); 0070 d->storeDiffButton = new QRadioButton(i18n("Store as a different name"), conflictBox); 0071 d->overwriteButton = new QRadioButton(i18n("Overwrite automatically"), conflictBox); 0072 d->skipFileButton = new QRadioButton(i18n("Skip automatically"), conflictBox); 0073 0074 d->conflictButtonGroup->addButton(d->overwriteButton, OVERWRITE); 0075 d->conflictButtonGroup->addButton(d->storeDiffButton, DIFFNAME); 0076 d->conflictButtonGroup->addButton(d->skipFileButton, SKIPFILE); 0077 0078 d->conflictButtonGroup->setExclusive(true); 0079 d->storeDiffButton->setChecked(true); 0080 0081 if (!addSkip) 0082 { 0083 d->skipFileButton->hide(); 0084 } 0085 0086 vlay->setContentsMargins(spacing, spacing, spacing, spacing); 0087 vlay->setSpacing(spacing); 0088 vlay->addWidget(d->storeDiffButton); 0089 vlay->addWidget(d->overwriteButton); 0090 vlay->addWidget(d->skipFileButton); 0091 0092 grid->addWidget(d->conflictLabel, 1, 0, 1, 2); 0093 grid->addWidget(conflictBox, 2, 0, 1, 2); 0094 grid->setRowStretch(3, 10); 0095 grid->setContentsMargins(spacing, spacing, spacing, spacing); 0096 grid->setSpacing(spacing); 0097 0098 #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)) 0099 0100 connect(d->conflictButtonGroup, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::idClicked), 0101 this, &FileSaveConflictBox::signalConflictButtonChanged); 0102 0103 #else 0104 0105 connect(d->conflictButtonGroup, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), 0106 this, &FileSaveConflictBox::signalConflictButtonChanged); 0107 0108 #endif 0109 } 0110 0111 FileSaveConflictBox::~FileSaveConflictBox() 0112 { 0113 delete d; 0114 } 0115 0116 void FileSaveConflictBox::resetToDefault() 0117 { 0118 setConflictRule(DIFFNAME); 0119 } 0120 0121 FileSaveConflictBox::ConflictRule FileSaveConflictBox::conflictRule() const 0122 { 0123 return ((ConflictRule)(d->conflictButtonGroup->checkedId())); 0124 } 0125 0126 void FileSaveConflictBox::setConflictRule(ConflictRule r) 0127 { 0128 QAbstractButton* const bt = d->conflictButtonGroup->button((int)r); 0129 0130 if (bt) 0131 { 0132 bt->setChecked(true); 0133 } 0134 } 0135 0136 void FileSaveConflictBox::readSettings(KConfigGroup& group) 0137 { 0138 setConflictRule((FileSaveConflictBox::ConflictRule)group.readEntry("Conflict", 0139 (int)(FileSaveConflictBox::DIFFNAME))); 0140 } 0141 0142 void FileSaveConflictBox::writeSettings(KConfigGroup& group) 0143 { 0144 group.writeEntry("Conflict", (int)conflictRule()); 0145 } 0146 0147 } // namespace Digikam 0148 0149 #include "moc_filesaveconflictbox.cpp"