~ubuntu-branches/ubuntu/natty/digikam/natty

« back to all changes in this revision

Viewing changes to utilities/advancedrename/advancedrenamedialog.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Luka Renko
  • Date: 2009-11-12 18:02:13 UTC
  • mfrom: (1.2.24 upstream) (3.2.7 sid)
  • Revision ID: james.westby@ubuntu.com-20091112180213-8p63z8taug49ji3t
Tags: 2:1.0.0~beta6-1ubuntu1
* Merge with Debian, remaining changes:
  - Export .pot name and copy to plugins in debian/rules
  - Remove liblqr-1-0-dev from build-deps, not in main

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
#include <QMoveEvent>
34
34
#include <QString>
35
35
#include <QTreeWidget>
 
36
#include <QSet>
36
37
 
37
38
// KDE includes
38
39
 
 
40
#include <kapplication.h>
39
41
#include <klocale.h>
40
42
 
41
43
// Local includes
54
56
    {
55
57
    }
56
58
 
57
 
    ImageInfo imageInfo;
58
 
    QString   baseName;
59
 
    QString   extension;
 
59
    KUrl    imageUrl;
 
60
    QString completeFileName;
60
61
};
61
62
 
62
63
// --------------------------------------------------------
63
64
 
64
65
AdvancedRenameListItem::AdvancedRenameListItem(QTreeWidget* view)
65
 
                    : QTreeWidgetItem(view), d(new AdvancedRenameListItemPriv)
 
66
                      : QTreeWidgetItem(view), d(new AdvancedRenameListItemPriv)
66
67
{
67
68
}
68
69
 
69
 
AdvancedRenameListItem::AdvancedRenameListItem(QTreeWidget* view, const ImageInfo& info)
70
 
                    : QTreeWidgetItem(view), d(new AdvancedRenameListItemPriv)
 
70
AdvancedRenameListItem::AdvancedRenameListItem(QTreeWidget* view, const KUrl& url)
 
71
                      : QTreeWidgetItem(view), d(new AdvancedRenameListItemPriv)
71
72
{
72
 
    setImageInfo(info);
 
73
    setImageUrl(url);
73
74
}
74
75
 
75
76
AdvancedRenameListItem:: ~AdvancedRenameListItem()
76
77
{
77
 
}
78
 
 
79
 
void AdvancedRenameListItem::setImageInfo(const ImageInfo& info)
80
 
{
81
 
    d->imageInfo = info;
82
 
 
83
 
    QFileInfo fi(d->imageInfo.filePath());
84
 
    d->baseName  = fi.baseName();
85
 
    d->extension = fi.completeSuffix();
86
 
 
87
 
    setName(d->baseName);
88
 
    setNewName(d->baseName);
89
 
}
90
 
 
91
 
ImageInfo AdvancedRenameListItem::imageInfo() const
92
 
{
93
 
    return d->imageInfo;
94
 
}
95
 
 
96
 
void AdvancedRenameListItem::setName(const QString& name)
97
 
{
98
 
    setText(0, name + '.' + d->extension);
 
78
    delete d;
 
79
}
 
80
 
 
81
void AdvancedRenameListItem::setImageUrl(const KUrl& url)
 
82
{
 
83
    d->imageUrl = url;
 
84
 
 
85
    QFileInfo fi(d->imageUrl.toLocalFile());
 
86
    d->completeFileName  = fi.fileName();
 
87
 
 
88
    setName(d->completeFileName,    false);
 
89
    setNewName(d->completeFileName, false);
 
90
}
 
91
 
 
92
KUrl AdvancedRenameListItem::imageUrl() const
 
93
{
 
94
    return d->imageUrl;
 
95
}
 
96
 
 
97
void AdvancedRenameListItem::setName(const QString& name, bool check)
 
98
{
 
99
    setText(OldName, name);
 
100
    if (check)
 
101
    {
 
102
        markInvalid(isInvalid());
 
103
    }
99
104
}
100
105
 
101
106
QString AdvancedRenameListItem::name() const
102
107
{
103
 
    return text(0);
 
108
    return text(OldName);
104
109
}
105
110
 
106
 
void AdvancedRenameListItem::setNewName(const QString& name)
 
111
void AdvancedRenameListItem::setNewName(const QString& name, bool check)
107
112
{
108
 
    setText(1, name + '.' + d->extension);
 
113
    setText(NewName, name);
 
114
    if (check)
 
115
    {
 
116
        markInvalid(isInvalid());
 
117
    }
109
118
}
110
119
 
111
120
QString AdvancedRenameListItem::newName() const
112
121
{
113
 
    return text(1);
 
122
    return text(NewName);
 
123
}
 
124
 
 
125
void AdvancedRenameListItem::markInvalid(bool invalid)
 
126
{
 
127
    QColor normalText = kapp->palette().text().color();
 
128
    setTextColor(OldName, invalid ? Qt::red : normalText);
 
129
    setTextColor(NewName, invalid ? Qt::red : normalText);
 
130
}
 
131
 
 
132
bool AdvancedRenameListItem::isInvalid()
 
133
{
 
134
    return ( name() == newName() );
114
135
}
115
136
 
116
137
// --------------------------------------------------------
120
141
public:
121
142
 
122
143
    AdvancedRenameDialogPriv() :
 
144
        configGroupName("AdvancedRename Dialog"),
 
145
        configLastUsedRenamePatternEntry("Last Used Rename Pattern"),
 
146
        configDialogSizeEntry("Dialog Size"),
 
147
 
 
148
        singleFileMode(false),
 
149
        minSizeDialog(450),
123
150
        listView(0),
124
151
        advancedRenameWidget(0)
125
152
    {}
126
153
 
 
154
    const QString         configGroupName;
 
155
    const QString         configLastUsedRenamePatternEntry;
 
156
    const QString         configDialogSizeEntry;
 
157
 
 
158
    QString               singleFileModeOldFilename;
 
159
 
 
160
    bool                  singleFileMode;
 
161
    int                   minSizeDialog;
 
162
 
127
163
    QTreeWidget*          listView;
128
164
    AdvancedRenameWidget* advancedRenameWidget;
129
165
    NewNamesList          newNamesList;
133
169
                    : KDialog(parent), d(new AdvancedRenameDialogPriv)
134
170
{
135
171
    d->advancedRenameWidget = new AdvancedRenameWidget(this);
136
 
    d->advancedRenameWidget->setInputColumns(3);
137
172
    d->advancedRenameWidget->setTooltipAlignment(Qt::AlignCenter);
138
173
 
139
174
    // --------------------------------------------------------
159
194
    mainWidget->setLayout(mainLayout);
160
195
 
161
196
    setMainWidget(mainWidget);
 
197
 
 
198
    setMinimumWidth(d->advancedRenameWidget->minimumWidth());
 
199
 
162
200
    setButtons(Help|Cancel|Ok);
163
201
    enableButton(Ok, false);
164
202
    setHelp("advancedrename.anchor", "digikam");
 
203
 
165
204
    initDialog();
166
 
 
167
 
    // avoid focusing the AdvancedRenameWidget, to show the click message
168
 
    d->listView->setFocus();
 
205
    readSettings();
169
206
 
170
207
    // --------------------------------------------------------
171
208
 
181
218
 
182
219
AdvancedRenameDialog::~AdvancedRenameDialog()
183
220
{
 
221
    writeSettings();
184
222
    delete d;
185
223
}
186
224
 
188
226
{
189
227
    d->newNamesList.clear();
190
228
 
191
 
    enableButton(Ok, !parseString.isEmpty());
192
 
 
193
229
    int index = 1;
194
230
    QTreeWidgetItemIterator it(d->listView);
195
231
    while (*it)
197
233
        AdvancedRenameListItem* item = dynamic_cast<AdvancedRenameListItem*>((*it));
198
234
        if (item)
199
235
        {
200
 
            ParseInformation parseInfo(item->imageInfo());
 
236
            ParseInformation parseInfo(item->imageUrl());
201
237
            parseInfo.index = index;
202
238
 
203
239
            QString newName = d->advancedRenameWidget->parse(parseInfo);
204
240
            item->setNewName(newName);
205
 
            d->newNamesList << NewNameInfo(item->imageInfo(), newName);
206
 
 
 
241
            d->newNamesList << NewNameInfo(item->imageUrl(), newName);
207
242
            ++index;
208
243
        }
209
244
        ++it;
210
245
    }
 
246
 
 
247
    bool enableBtn = !parseString.isEmpty() && checkNewNames();
 
248
    enableButton(Ok, enableBtn);
 
249
 
211
250
    d->listView->viewport()->update();
212
251
}
213
252
 
219
258
    int itemCount = 0;
220
259
    for (KUrl::List::const_iterator it = urls.constBegin(); it != urls.constEnd(); ++it)
221
260
    {
222
 
        ImageInfo info(*it);
223
 
        if (info.isNull())
224
 
        {
225
 
            continue;
226
 
        }
227
261
        item = new AdvancedRenameListItem(d->listView);
228
 
        item->setImageInfo(info);
 
262
        item->setImageUrl(*it);
229
263
        ++itemCount;
230
264
    }
 
265
 
 
266
    // set current filename if only one image has been added
 
267
    if (itemCount == 1)
 
268
    {
 
269
        QFileInfo info(urls.first().toLocalFile());
 
270
        d->advancedRenameWidget->setText(info.baseName());
 
271
        d->advancedRenameWidget->focusLineEdit();
 
272
        d->singleFileModeOldFilename = info.fileName();
 
273
    }
 
274
    d->singleFileMode = (itemCount <= 1);
 
275
 
 
276
    enableButton(Ok, checkNewNames());
231
277
    initDialog(itemCount);
 
278
    slotParseStringChanged(d->advancedRenameWidget->text());
232
279
}
233
280
 
234
281
void AdvancedRenameDialog::initDialog(int count)
235
282
{
236
 
    const int minSize = 450;
237
 
 
238
283
    QString title = i18np("Rename", "Rename (%1 images)", count);
239
284
    setWindowTitle(title);
240
 
 
241
 
    // resize the dialog when only a single image is selected, it doesn't need to be so big
242
 
    // in this case
243
 
    resize(minSize, (count > 1) ? minSize : 0);
244
285
}
245
286
 
246
287
NewNamesList AdvancedRenameDialog::newNames()
267
308
    return KDialog::event(e);
268
309
}
269
310
 
 
311
void AdvancedRenameDialog::readSettings()
 
312
{
 
313
    KSharedConfig::Ptr config = KGlobal::config();
 
314
    KConfigGroup group        = config->group(d->configGroupName);
 
315
 
 
316
    QSize s = group.readEntry(d->configDialogSizeEntry, QSize(d->minSizeDialog, d->minSizeDialog));
 
317
    resize(s);
 
318
    d->advancedRenameWidget->setText(group.readEntry(d->configLastUsedRenamePatternEntry, QString()));
 
319
}
 
320
 
 
321
void AdvancedRenameDialog::writeSettings()
 
322
{
 
323
    KSharedConfig::Ptr config = KGlobal::config();
 
324
    KConfigGroup group        = config->group(d->configGroupName);
 
325
 
 
326
    group.writeEntry(d->configDialogSizeEntry, size());
 
327
    if (d->singleFileMode)
 
328
    {
 
329
        d->advancedRenameWidget->clear();
 
330
    }
 
331
    else
 
332
    {
 
333
        group.writeEntry(d->configLastUsedRenamePatternEntry, d->advancedRenameWidget->text());
 
334
    }
 
335
}
 
336
 
 
337
bool AdvancedRenameDialog::checkNewNames()
 
338
{
 
339
    QSet<QString> tmpNewNames;
 
340
    bool valid = true;
 
341
 
 
342
    QTreeWidgetItemIterator it(d->listView);
 
343
    while (*it)
 
344
    {
 
345
        AdvancedRenameListItem* item = dynamic_cast<AdvancedRenameListItem*>((*it));
 
346
        if (item)
 
347
        {
 
348
            valid = valid && (!item->isInvalid()) && ( !tmpNewNames.contains(item->newName()) );
 
349
            item->markInvalid(!valid);
 
350
            tmpNewNames << item->newName();
 
351
        }
 
352
        ++it;
 
353
    }
 
354
 
 
355
    return valid;
 
356
}
 
357
 
270
358
}  // namespace Digikam