1
/* ============================================================
3
* This file is a part of digiKam project
4
* http://www.digikam.org
7
* Description : a options group to set renaming files
8
* operations during camera downloading
10
* Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
11
* Copyright (C) 2006-2011 by Gilles Caulier <caulier dot gilles at gmail dot com>
12
* Copyright (C) 2011 by Andi Clemens <andi dot clemens at googlemail dot com>
14
* This program is free software; you can redistribute it
15
* and/or modify it under the terms of the GNU General
16
* Public License as published by the Free Software Foundation;
17
* either version 2, or (at your option)
20
* This program is distributed in the hope that it will be useful,
21
* but WITHOUT ANY WARRANTY; without even the implied warranty of
22
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
* GNU General Public License for more details.
25
* ============================================================ */
27
#include "renamecustomizer.moc"
31
#include <QButtonGroup>
32
#include <QGridLayout>
33
#include <QHBoxLayout>
34
#include <QRadioButton>
39
#include <kcombobox.h>
46
#include "dcursortracker.h"
47
#include "parsesettings.h"
49
#include "advancedrenamewidget.h"
50
#include "importrenameparser.h"
51
#include "advancedrenamemanager.h"
56
class RenameCustomizer::RenameCustomizerPriv
60
RenameCustomizerPriv() :
69
renameDefaultCaseType(0),
70
advancedRenameWidget(0),
71
advancedRenameManager(0)
77
QButtonGroup* buttonGroup;
79
QLabel* renameDefaultCase;
81
QRadioButton* renameDefault;
82
QRadioButton* renameCustom;
88
QWidget* focusedWidget;
89
QWidget* renameDefaultBox;
91
KComboBox* renameDefaultCaseType;
93
AdvancedRenameWidget* advancedRenameWidget;
94
AdvancedRenameManager* advancedRenameManager;
97
RenameCustomizer::RenameCustomizer(QWidget* parent, const QString& cameraTitle)
98
: QWidget(parent), d(new RenameCustomizerPriv)
100
d->changedTimer = new QTimer(this);
101
d->cameraTitle = cameraTitle;
102
d->buttonGroup = new QButtonGroup(this);
103
d->buttonGroup->setExclusive(true);
105
setAttribute(Qt::WA_DeleteOnClose);
107
QGridLayout* mainLayout = new QGridLayout(this);
109
// ----------------------------------------------------------------
111
d->renameDefault = new QRadioButton(i18n("Camera filenames"), this);
112
d->buttonGroup->addButton(d->renameDefault, 0);
113
d->renameDefault->setWhatsThis(i18n("Turn on this option to use the camera "
114
"provided image filenames without modifications."));
116
d->renameDefaultBox = new QWidget(this);
117
QHBoxLayout* boxLayout1 = new QHBoxLayout(d->renameDefaultBox);
119
d->renameDefaultCase = new QLabel(i18n("Change case to:"), d->renameDefaultBox);
120
d->renameDefaultCase->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
122
d->renameDefaultCaseType = new KComboBox(d->renameDefaultBox);
123
d->renameDefaultCaseType->insertItem(0, i18nc("Leave filename as it is", "Leave as-is"));
124
d->renameDefaultCaseType->insertItem(1, i18nc("Filename to uppercase", "Upper"));
125
d->renameDefaultCaseType->insertItem(2, i18nc("Filename to lowercase", "Lower"));
126
d->renameDefaultCaseType->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
127
d->renameDefaultCaseType->setWhatsThis(i18n("Set the method to use to change the case "
128
"of the image filenames."));
130
boxLayout1->setMargin(KDialog::spacingHint());
131
boxLayout1->setSpacing(KDialog::spacingHint());
132
boxLayout1->addSpacing(10);
133
boxLayout1->addWidget(d->renameDefaultCase);
134
boxLayout1->addWidget(d->renameDefaultCaseType);
136
// ----------------------------------------------------------------------
138
d->renameCustom = new QRadioButton(i18nc("Custom Image Renaming", "Customize"), this);
140
d->advancedRenameWidget = new AdvancedRenameWidget(this);
141
d->advancedRenameManager = new AdvancedRenameManager();
142
d->advancedRenameManager->setParserType(AdvancedRenameManager::ImportParser);
143
d->advancedRenameManager->setWidget(d->advancedRenameWidget);
145
d->buttonGroup->addButton(d->renameCustom, 2);
147
mainLayout->addWidget(d->renameDefault, 0, 0, 1, 2);
148
mainLayout->addWidget(d->renameDefaultBox, 1, 0, 1, 2);
149
mainLayout->addWidget(d->renameCustom, 4, 0, 1, 2);
150
mainLayout->addWidget(d->advancedRenameWidget, 5, 0, 1, 2);
151
mainLayout->setRowStretch(6, 10);
152
mainLayout->setMargin(KDialog::spacingHint());
153
mainLayout->setSpacing(KDialog::spacingHint());
155
// -- setup connections -------------------------------------------------
157
connect(d->buttonGroup, SIGNAL(buttonClicked(int)),
158
this, SLOT(slotRadioButtonClicked(int)));
160
connect(d->renameDefaultCaseType, SIGNAL(activated(QString)),
161
this, SLOT(slotRenameOptionsChanged()));
163
connect(d->changedTimer, SIGNAL(timeout()),
164
this, SIGNAL(signalChanged()));
166
connect(d->advancedRenameWidget, SIGNAL(signalTextChanged(QString)),
167
this, SLOT(slotRenameOptionsChanged()));
169
// --------------------------------------------------------
174
RenameCustomizer::~RenameCustomizer()
177
delete d->advancedRenameManager;
181
bool RenameCustomizer::useDefault() const
183
return d->renameDefault->isChecked();
186
int RenameCustomizer::startIndex() const
188
return d->startIndex;
191
void RenameCustomizer::setStartIndex(int startIndex)
193
d->startIndex = startIndex;
194
d->advancedRenameManager->setStartIndex(startIndex);
197
void RenameCustomizer::reset()
199
d->advancedRenameManager->reset();
202
AdvancedRenameManager* RenameCustomizer::renameManager() const
204
return d->advancedRenameManager;
207
QString RenameCustomizer::newName(const QString& fileName, const QDateTime& dateTime) const
211
if (d->renameDefault->isChecked())
216
return d->advancedRenameManager->newName(fileName);
219
RenameCustomizer::Case RenameCustomizer::changeCase() const
221
RenameCustomizer::Case type = NONE;
223
if (d->renameDefaultCaseType->currentIndex() == 1)
228
if (d->renameDefaultCaseType->currentIndex() == 2)
236
void RenameCustomizer::slotRadioButtonClicked(int id)
238
QRadioButton* btn = dynamic_cast<QRadioButton*>(d->buttonGroup->button(id));
245
btn->setChecked(true);
246
d->renameDefaultBox->setEnabled(btn == d->renameDefault);
247
d->advancedRenameWidget->setEnabled(btn == d->renameCustom);
248
slotRenameOptionsChanged();
251
void RenameCustomizer::slotRenameOptionsChanged()
253
d->focusedWidget = focusWidget();
255
d->changedTimer->setSingleShot(true);
256
d->changedTimer->start(500);
259
void RenameCustomizer::readSettings()
261
KSharedConfig::Ptr config = KGlobal::config();
263
KConfigGroup group = config->group("Camera Settings");
264
int def = group.readEntry("Rename Method", 0);
265
int chcaseT = group.readEntry("Case Type", (int)NONE);
266
QString manualRename = group.readEntry("Manual Rename String", QString());
268
slotRadioButtonClicked(def);
270
d->renameDefaultCaseType->setCurrentIndex(chcaseT);
271
d->advancedRenameWidget->setParseString(manualRename);
274
void RenameCustomizer::saveSettings()
276
KSharedConfig::Ptr config = KGlobal::config();
278
KConfigGroup group = config->group("Camera Settings");
279
group.writeEntry("Rename Method", d->buttonGroup->checkedId());
280
group.writeEntry("Case Type", d->renameDefaultCaseType->currentIndex());
281
group.writeEntry("Manual Rename String", d->advancedRenameWidget->parseString());
285
void RenameCustomizer::restoreFocus()
287
d->focusedWidget->setFocus();
290
} // namespace Digikam