~ubuntu-branches/ubuntu/trusty/digikam/trusty

« back to all changes in this revision

Viewing changes to core/utilities/cameragui/widgets/renamecustomizer.cpp

  • Committer: Package Import Robot
  • Author(s): Rohan Garg
  • Date: 2012-11-26 18:24:20 UTC
  • mfrom: (1.9.1) (3.1.23 experimental)
  • Revision ID: package-import@ubuntu.com-20121126182420-qoy6z0nx4ai0wzcl
Tags: 4:3.0.0~beta3-0ubuntu1
* New upstream release
  - Add build-deps :  libhupnp-dev, libqtgstreamer-dev, libmagickcore-dev
* Merge from debian, remaining changes:
  - Make sure libqt4-opengl-dev, libgl1-mesa-dev and libglu1-mesa-dev only
    install on i386,amd64 and powerpc
  - Depend on libtiff-dev instead of libtiff4-dev
  - Drop digikam breaks/replaces kipi-plugins-common since we're past the
    LTS release now
  - digikam to recommend mplayerthumbs | ffmpegthumbs. We currently only
    have latter in the archives, even though former is also supposed to
    be part of kdemultimedia. (LP: #890059)
  - kipi-plugins to recommend www-browser rather than konqueror directly
    since 2.8 no direct usage of konqueror is present in the flickr
    plugin anymore (LP: #1011211)
  - Keep kubuntu_mysqld_executable_name.diff
  - Don't install libkipi translations
  - Keep deps on libcv-dev, libcvaux-dev
  - Keep split packaging of libraries
  - Replace icons from KDE 3 time in debian/xpm.d/*.xpm with the new
    versions (LP: #658047)
* Update debian/not-installed

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* ============================================================
2
 
 *
3
 
 * This file is a part of digiKam project
4
 
 * http://www.digikam.org
5
 
 *
6
 
 * Date        : 2004-09-19
7
 
 * Description : a options group to set renaming files
8
 
 *               operations during camera downloading
9
 
 *
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>
13
 
 *
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)
18
 
 * any later version.
19
 
 *
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.
24
 
 *
25
 
 * ============================================================ */
26
 
 
27
 
#include "renamecustomizer.moc"
28
 
 
29
 
// Qt includes
30
 
 
31
 
#include <QButtonGroup>
32
 
#include <QGridLayout>
33
 
#include <QHBoxLayout>
34
 
#include <QRadioButton>
35
 
#include <QTimer>
36
 
 
37
 
// KDE includes
38
 
 
39
 
#include <kcombobox.h>
40
 
#include <kconfig.h>
41
 
#include <kdialog.h>
42
 
#include <klocale.h>
43
 
 
44
 
// Local includes
45
 
 
46
 
#include "dcursortracker.h"
47
 
#include "parsesettings.h"
48
 
#include "parser.h"
49
 
#include "advancedrenamewidget.h"
50
 
#include "importrenameparser.h"
51
 
#include "advancedrenamemanager.h"
52
 
 
53
 
namespace Digikam
54
 
{
55
 
 
56
 
class RenameCustomizer::RenameCustomizerPriv
57
 
{
58
 
public:
59
 
 
60
 
    RenameCustomizerPriv() :
61
 
        startIndex(1),
62
 
        buttonGroup(0),
63
 
        renameDefaultCase(0),
64
 
        renameDefault(0),
65
 
        renameCustom(0),
66
 
        changedTimer(0),
67
 
        focusedWidget(0),
68
 
        renameDefaultBox(0),
69
 
        renameDefaultCaseType(0),
70
 
        advancedRenameWidget(0),
71
 
        advancedRenameManager(0)
72
 
    {
73
 
    }
74
 
 
75
 
    int                    startIndex;
76
 
 
77
 
    QButtonGroup*          buttonGroup;
78
 
 
79
 
    QLabel*                renameDefaultCase;
80
 
 
81
 
    QRadioButton*          renameDefault;
82
 
    QRadioButton*          renameCustom;
83
 
 
84
 
    QString                cameraTitle;
85
 
 
86
 
    QTimer*                changedTimer;
87
 
 
88
 
    QWidget*               focusedWidget;
89
 
    QWidget*               renameDefaultBox;
90
 
 
91
 
    KComboBox*             renameDefaultCaseType;
92
 
 
93
 
    AdvancedRenameWidget*  advancedRenameWidget;
94
 
    AdvancedRenameManager* advancedRenameManager;
95
 
};
96
 
 
97
 
RenameCustomizer::RenameCustomizer(QWidget* parent, const QString& cameraTitle)
98
 
    : QWidget(parent), d(new RenameCustomizerPriv)
99
 
{
100
 
    d->changedTimer = new QTimer(this);
101
 
    d->cameraTitle  = cameraTitle;
102
 
    d->buttonGroup  = new QButtonGroup(this);
103
 
    d->buttonGroup->setExclusive(true);
104
 
 
105
 
    setAttribute(Qt::WA_DeleteOnClose);
106
 
 
107
 
    QGridLayout* mainLayout = new QGridLayout(this);
108
 
 
109
 
    // ----------------------------------------------------------------
110
 
 
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."));
115
 
 
116
 
    d->renameDefaultBox     = new QWidget(this);
117
 
    QHBoxLayout* boxLayout1 = new QHBoxLayout(d->renameDefaultBox);
118
 
 
119
 
    d->renameDefaultCase = new QLabel(i18n("Change case to:"), d->renameDefaultBox);
120
 
    d->renameDefaultCase->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
121
 
 
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."));
129
 
 
130
 
    boxLayout1->setMargin(KDialog::spacingHint());
131
 
    boxLayout1->setSpacing(KDialog::spacingHint());
132
 
    boxLayout1->addSpacing(10);
133
 
    boxLayout1->addWidget(d->renameDefaultCase);
134
 
    boxLayout1->addWidget(d->renameDefaultCaseType);
135
 
 
136
 
    // ----------------------------------------------------------------------
137
 
 
138
 
    d->renameCustom          = new QRadioButton(i18nc("Custom Image Renaming", "Customize"), this);
139
 
 
140
 
    d->advancedRenameWidget  = new AdvancedRenameWidget(this);
141
 
    d->advancedRenameManager = new AdvancedRenameManager();
142
 
    d->advancedRenameManager->setParserType(AdvancedRenameManager::ImportParser);
143
 
    d->advancedRenameManager->setWidget(d->advancedRenameWidget);
144
 
 
145
 
    d->buttonGroup->addButton(d->renameCustom, 2);
146
 
 
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());
154
 
 
155
 
    // -- setup connections -------------------------------------------------
156
 
 
157
 
    connect(d->buttonGroup, SIGNAL(buttonClicked(int)),
158
 
            this, SLOT(slotRadioButtonClicked(int)));
159
 
 
160
 
    connect(d->renameDefaultCaseType, SIGNAL(activated(QString)),
161
 
            this, SLOT(slotRenameOptionsChanged()));
162
 
 
163
 
    connect(d->changedTimer, SIGNAL(timeout()),
164
 
            this, SIGNAL(signalChanged()));
165
 
 
166
 
    connect(d->advancedRenameWidget, SIGNAL(signalTextChanged(QString)),
167
 
            this, SLOT(slotRenameOptionsChanged()));
168
 
 
169
 
    // --------------------------------------------------------
170
 
 
171
 
    readSettings();
172
 
}
173
 
 
174
 
RenameCustomizer::~RenameCustomizer()
175
 
{
176
 
    saveSettings();
177
 
    delete d->advancedRenameManager;
178
 
    delete d;
179
 
}
180
 
 
181
 
bool RenameCustomizer::useDefault() const
182
 
{
183
 
    return d->renameDefault->isChecked();
184
 
}
185
 
 
186
 
int RenameCustomizer::startIndex() const
187
 
{
188
 
    return d->startIndex;
189
 
}
190
 
 
191
 
void RenameCustomizer::setStartIndex(int startIndex)
192
 
{
193
 
    d->startIndex = startIndex;
194
 
    d->advancedRenameManager->setStartIndex(startIndex);
195
 
}
196
 
 
197
 
void RenameCustomizer::reset()
198
 
{
199
 
    d->advancedRenameManager->reset();
200
 
}
201
 
 
202
 
AdvancedRenameManager* RenameCustomizer::renameManager() const
203
 
{
204
 
    return d->advancedRenameManager;
205
 
}
206
 
 
207
 
QString RenameCustomizer::newName(const QString& fileName, const QDateTime& dateTime) const
208
 
{
209
 
    Q_UNUSED(dateTime)
210
 
 
211
 
    if (d->renameDefault->isChecked())
212
 
    {
213
 
        return QString();
214
 
    }
215
 
 
216
 
    return d->advancedRenameManager->newName(fileName);
217
 
}
218
 
 
219
 
RenameCustomizer::Case RenameCustomizer::changeCase() const
220
 
{
221
 
    RenameCustomizer::Case type = NONE;
222
 
 
223
 
    if (d->renameDefaultCaseType->currentIndex() == 1)
224
 
    {
225
 
        type = UPPER;
226
 
    }
227
 
 
228
 
    if (d->renameDefaultCaseType->currentIndex() == 2)
229
 
    {
230
 
        type = LOWER;
231
 
    }
232
 
 
233
 
    return type;
234
 
}
235
 
 
236
 
void RenameCustomizer::slotRadioButtonClicked(int id)
237
 
{
238
 
    QRadioButton* btn = dynamic_cast<QRadioButton*>(d->buttonGroup->button(id));
239
 
 
240
 
    if (!btn)
241
 
    {
242
 
        return;
243
 
    }
244
 
 
245
 
    btn->setChecked(true);
246
 
    d->renameDefaultBox->setEnabled(btn == d->renameDefault);
247
 
    d->advancedRenameWidget->setEnabled(btn == d->renameCustom);
248
 
    slotRenameOptionsChanged();
249
 
}
250
 
 
251
 
void RenameCustomizer::slotRenameOptionsChanged()
252
 
{
253
 
    d->focusedWidget = focusWidget();
254
 
 
255
 
    d->changedTimer->setSingleShot(true);
256
 
    d->changedTimer->start(500);
257
 
}
258
 
 
259
 
void RenameCustomizer::readSettings()
260
 
{
261
 
    KSharedConfig::Ptr config = KGlobal::config();
262
 
 
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());
267
 
 
268
 
    slotRadioButtonClicked(def);
269
 
 
270
 
    d->renameDefaultCaseType->setCurrentIndex(chcaseT);
271
 
    d->advancedRenameWidget->setParseString(manualRename);
272
 
}
273
 
 
274
 
void RenameCustomizer::saveSettings()
275
 
{
276
 
    KSharedConfig::Ptr config = KGlobal::config();
277
 
 
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());
282
 
    config->sync();
283
 
}
284
 
 
285
 
void RenameCustomizer::restoreFocus()
286
 
{
287
 
    d->focusedWidget->setFocus();
288
 
}
289
 
 
290
 
}  // namespace Digikam