60
QString completeFileName;
62
63
// --------------------------------------------------------
64
65
AdvancedRenameListItem::AdvancedRenameListItem(QTreeWidget* view)
65
: QTreeWidgetItem(view), d(new AdvancedRenameListItemPriv)
66
: QTreeWidgetItem(view), d(new AdvancedRenameListItemPriv)
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)
75
76
AdvancedRenameListItem:: ~AdvancedRenameListItem()
79
void AdvancedRenameListItem::setImageInfo(const ImageInfo& info)
83
QFileInfo fi(d->imageInfo.filePath());
84
d->baseName = fi.baseName();
85
d->extension = fi.completeSuffix();
88
setNewName(d->baseName);
91
ImageInfo AdvancedRenameListItem::imageInfo() const
96
void AdvancedRenameListItem::setName(const QString& name)
98
setText(0, name + '.' + d->extension);
81
void AdvancedRenameListItem::setImageUrl(const KUrl& url)
85
QFileInfo fi(d->imageUrl.toLocalFile());
86
d->completeFileName = fi.fileName();
88
setName(d->completeFileName, false);
89
setNewName(d->completeFileName, false);
92
KUrl AdvancedRenameListItem::imageUrl() const
97
void AdvancedRenameListItem::setName(const QString& name, bool check)
99
setText(OldName, name);
102
markInvalid(isInvalid());
101
106
QString AdvancedRenameListItem::name() const
108
return text(OldName);
106
void AdvancedRenameListItem::setNewName(const QString& name)
111
void AdvancedRenameListItem::setNewName(const QString& name, bool check)
108
setText(1, name + '.' + d->extension);
113
setText(NewName, name);
116
markInvalid(isInvalid());
111
120
QString AdvancedRenameListItem::newName() const
122
return text(NewName);
125
void AdvancedRenameListItem::markInvalid(bool invalid)
127
QColor normalText = kapp->palette().text().color();
128
setTextColor(OldName, invalid ? Qt::red : normalText);
129
setTextColor(NewName, invalid ? Qt::red : normalText);
132
bool AdvancedRenameListItem::isInvalid()
134
return ( name() == newName() );
116
137
// --------------------------------------------------------
122
143
AdvancedRenameDialogPriv() :
144
configGroupName("AdvancedRename Dialog"),
145
configLastUsedRenamePatternEntry("Last Used Rename Pattern"),
146
configDialogSizeEntry("Dialog Size"),
148
singleFileMode(false),
124
151
advancedRenameWidget(0)
154
const QString configGroupName;
155
const QString configLastUsedRenamePatternEntry;
156
const QString configDialogSizeEntry;
158
QString singleFileModeOldFilename;
127
163
QTreeWidget* listView;
128
164
AdvancedRenameWidget* advancedRenameWidget;
129
165
NewNamesList newNamesList;
159
194
mainWidget->setLayout(mainLayout);
161
196
setMainWidget(mainWidget);
198
setMinimumWidth(d->advancedRenameWidget->minimumWidth());
162
200
setButtons(Help|Cancel|Ok);
163
201
enableButton(Ok, false);
164
202
setHelp("advancedrename.anchor", "digikam");
167
// avoid focusing the AdvancedRenameWidget, to show the click message
168
d->listView->setFocus();
170
207
// --------------------------------------------------------
197
233
AdvancedRenameListItem* item = dynamic_cast<AdvancedRenameListItem*>((*it));
200
ParseInformation parseInfo(item->imageInfo());
236
ParseInformation parseInfo(item->imageUrl());
201
237
parseInfo.index = index;
203
239
QString newName = d->advancedRenameWidget->parse(parseInfo);
204
240
item->setNewName(newName);
205
d->newNamesList << NewNameInfo(item->imageInfo(), newName);
241
d->newNamesList << NewNameInfo(item->imageUrl(), newName);
247
bool enableBtn = !parseString.isEmpty() && checkNewNames();
248
enableButton(Ok, enableBtn);
211
250
d->listView->viewport()->update();
219
258
int itemCount = 0;
220
259
for (KUrl::List::const_iterator it = urls.constBegin(); it != urls.constEnd(); ++it)
227
261
item = new AdvancedRenameListItem(d->listView);
228
item->setImageInfo(info);
262
item->setImageUrl(*it);
266
// set current filename if only one image has been added
269
QFileInfo info(urls.first().toLocalFile());
270
d->advancedRenameWidget->setText(info.baseName());
271
d->advancedRenameWidget->focusLineEdit();
272
d->singleFileModeOldFilename = info.fileName();
274
d->singleFileMode = (itemCount <= 1);
276
enableButton(Ok, checkNewNames());
231
277
initDialog(itemCount);
278
slotParseStringChanged(d->advancedRenameWidget->text());
234
281
void AdvancedRenameDialog::initDialog(int count)
236
const int minSize = 450;
238
283
QString title = i18np("Rename", "Rename (%1 images)", count);
239
284
setWindowTitle(title);
241
// resize the dialog when only a single image is selected, it doesn't need to be so big
243
resize(minSize, (count > 1) ? minSize : 0);
246
287
NewNamesList AdvancedRenameDialog::newNames()
267
308
return KDialog::event(e);
311
void AdvancedRenameDialog::readSettings()
313
KSharedConfig::Ptr config = KGlobal::config();
314
KConfigGroup group = config->group(d->configGroupName);
316
QSize s = group.readEntry(d->configDialogSizeEntry, QSize(d->minSizeDialog, d->minSizeDialog));
318
d->advancedRenameWidget->setText(group.readEntry(d->configLastUsedRenamePatternEntry, QString()));
321
void AdvancedRenameDialog::writeSettings()
323
KSharedConfig::Ptr config = KGlobal::config();
324
KConfigGroup group = config->group(d->configGroupName);
326
group.writeEntry(d->configDialogSizeEntry, size());
327
if (d->singleFileMode)
329
d->advancedRenameWidget->clear();
333
group.writeEntry(d->configLastUsedRenamePatternEntry, d->advancedRenameWidget->text());
337
bool AdvancedRenameDialog::checkNewNames()
339
QSet<QString> tmpNewNames;
342
QTreeWidgetItemIterator it(d->listView);
345
AdvancedRenameListItem* item = dynamic_cast<AdvancedRenameListItem*>((*it));
348
valid = valid && (!item->isInvalid()) && ( !tmpNewNames.contains(item->newName()) );
349
item->markInvalid(!valid);
350
tmpNewNames << item->newName();
270
358
} // namespace Digikam