1
/* ============================================================
3
* This file is a part of digiKam project
4
* http://www.digikam.org
7
* Description : dialog to edit and create digiKam Tags
9
* Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
10
* Copyright (C) 2006-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
12
* This program is free software; you can redistribute it
13
* and/or modify it under the terms of the GNU General
14
* Public License as published by the Free Software Foundation;
15
* either version 2, or (at your option)
18
* This program is distributed in the hope that it will be useful,
19
* but WITHOUT ANY WARRANTY; without even the implied warranty of
20
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
* GNU General Public License for more details.
23
* ============================================================ */
27
#include <qcombobox.h>
34
#include <klineedit.h>
36
#include <kicondialog.h>
37
#include <kapplication.h>
38
#include <kdeversion.h>
39
#include <kiconloader.h>
45
#include "tagcreatedlg.h"
46
#include "tagcreatedlg.moc"
51
class TagCreateDlgPriv
59
icon = QString("tag");
64
QPushButton *iconButton;
69
TagCreateDlg::TagCreateDlg(QWidget *parent, TAlbum* album)
70
: KDialogBase( Plain, i18n("New Tag"), Help|Ok|Cancel, Ok,
71
parent, 0, true, true )
73
d = new TagCreateDlgPriv;
74
setHelp("tagscreation.anchor", "digikam");
76
QGridLayout* grid = new QGridLayout(plainPage(), 1, 1, 0, spacingHint());
77
QLabel *logo = new QLabel(plainPage());
78
KIconLoader* iconLoader = KApplication::kApplication()->iconLoader();
79
logo->setPixmap(iconLoader->loadIcon("digikam", KIcon::NoGroup, 96, KIcon::DefaultState, 0, true));
81
QVBoxLayout *topLayout = new QVBoxLayout(spacingHint());
83
QLabel *topLabel = new QLabel(plainPage());
84
QString tagName = album->prettyURL();
85
if (tagName.endsWith("/")) tagName.truncate(tagName.length()-1);
86
topLabel->setText( i18n("<qt><b>Create New Tag in <i>\"%1\"</i></b></qt>").arg(tagName));
87
topLabel->setAlignment(Qt::AlignAuto | Qt::AlignVCenter | Qt::SingleLine);
88
topLayout->addWidget(topLabel);
90
// --------------------------------------------------------
92
QFrame *topLine = new QFrame( plainPage() );
93
topLine->setFrameShape( QFrame::HLine );
94
topLine->setFrameShadow( QFrame::Sunken );
95
topLayout->addWidget( topLine );
97
// --------------------------------------------------------
99
QGridLayout *gl = new QGridLayout(topLayout, spacingHint());
101
QLabel *titleLabel = new QLabel(plainPage());
102
titleLabel->setText(i18n("&Title:"));
103
gl->addWidget(titleLabel, 0, 0);
105
d->titleEdit = new KLineEdit(plainPage());
106
titleLabel->setBuddy(d->titleEdit);
107
gl->addWidget(d->titleEdit, 0, 1);
109
setFocusProxy(d->titleEdit);
111
QLabel *iconTextLabel = new QLabel(plainPage());
112
iconTextLabel->setText(i18n("&Icon:"));
113
gl->addWidget(iconTextLabel, 1, 0);
115
d->iconButton = new QPushButton(plainPage());
116
d->iconButton->setFixedSize(40, 40);
117
iconTextLabel->setBuddy(d->iconButton);
118
gl->addWidget(d->iconButton, 1, 1);
120
QSpacerItem* spacer = new QSpacerItem(0, 0, QSizePolicy::Minimum,
121
QSizePolicy::Expanding);
122
gl->addItem(spacer, 2, 1);
124
grid->addMultiCellWidget(logo, 0, 0, 0, 0);
125
grid->addMultiCellLayout(topLayout, 0, 1, 1, 1);
126
grid->setRowStretch(1, 10);
128
// --------------------------------------------------------
130
connect(d->iconButton, SIGNAL(clicked()),
131
this, SLOT(slotIconChange()));
133
connect(d->titleEdit, SIGNAL(textChanged(const QString&)),
134
this, SLOT(slotTitleChanged(const QString&)));
136
// --------------------------------------------------------
138
// by default assign the icon of the parent (if not root)
140
if (!album->isRoot())
141
d->icon = album->icon();
143
d->iconButton->setIconSet(SyncJob::getTagThumbnail(d->icon, 20));
145
enableButtonOK(!d->titleEdit->text().isEmpty());
149
TagCreateDlg::~TagCreateDlg()
154
QString TagCreateDlg::title() const
156
return d->titleEdit->text();
159
QString TagCreateDlg::icon() const
164
void TagCreateDlg::slotIconChange()
166
#if KDE_IS_VERSION(3,3,0)
167
KIconDialog dlg(this);
168
dlg.setup(KIcon::NoGroup, KIcon::Application, false, 20, false, false, false);
169
QString icon = dlg.openDialog();
171
QString icon = KIconDialog::getIcon(KIcon::NoGroup, KIcon::Application, false, 20);
172
if (icon.startsWith("/"))
176
if (icon.isEmpty() || d->icon == icon)
180
d->iconButton->setIconSet(SyncJob::getTagThumbnail(d->icon, 20));
183
void TagCreateDlg::slotTitleChanged(const QString& newtitle)
185
enableButtonOK(!newtitle.isEmpty());
188
bool TagCreateDlg::tagCreate(QWidget *parent, TAlbum* album, QString& title, QString& icon)
190
TagCreateDlg dlg(parent, album);
192
bool valRet = dlg.exec();
193
if (valRet == QDialog::Accepted)
202
// -------------------------------------------------------------------------------------
217
QPushButton *iconButton;
218
QPushButton *resetIconButton;
220
KLineEdit *titleEdit;
223
TagEditDlg::TagEditDlg(QWidget *parent, TAlbum* album)
224
: KDialogBase(Plain, i18n("Edit Tag"), Help|Ok|Cancel, Ok, parent, 0, true, true )
226
d = new TagEditDlgPriv;
227
setHelp("tagscreation.anchor", "digikam");
229
QGridLayout* grid = new QGridLayout(plainPage(), 1, 1, 0, spacingHint());
230
QLabel *logo = new QLabel(plainPage());
231
KIconLoader* iconLoader = KApplication::kApplication()->iconLoader();
232
logo->setPixmap(iconLoader->loadIcon("digikam", KIcon::NoGroup, 96, KIcon::DefaultState, 0, true));
234
QVBoxLayout *topLayout = new QVBoxLayout(spacingHint());
236
QLabel *topLabel = new QLabel(plainPage());
237
QString tagName = album->prettyURL();
238
if (tagName.endsWith("/")) tagName.truncate(tagName.length()-1);
239
topLabel->setText( i18n("<qt><b>Tag <i>\"%1\"</i> Properties </b></qt>").arg(tagName));
240
topLabel->setAlignment(Qt::AlignAuto | Qt::AlignVCenter | Qt::SingleLine);
241
topLayout->addWidget(topLabel);
243
// --------------------------------------------------------
245
QFrame *topLine = new QFrame( plainPage() );
246
topLine->setFrameShape( QFrame::HLine );
247
topLine->setFrameShadow( QFrame::Sunken );
248
topLayout->addWidget( topLine );
250
// --------------------------------------------------------
252
QGridLayout *gl = new QGridLayout(topLayout, spacingHint());
254
QLabel *titleLabel = new QLabel(plainPage());
255
titleLabel->setText(i18n("&Title:"));
257
d->titleEdit = new KLineEdit(plainPage());
258
d->titleEdit->setText(album->title());
259
titleLabel->setBuddy(d->titleEdit);
260
setFocusProxy(d->titleEdit);
262
QLabel *iconTextLabel = new QLabel(plainPage());
263
iconTextLabel->setText(i18n("&Icon:"));
265
d->iconButton = new QPushButton(plainPage());
266
d->iconButton->setFixedSize(40, 40);
267
iconTextLabel->setBuddy(d->iconButton);
269
d->resetIconButton = new QPushButton(i18n("Reset"), plainPage());
271
QSpacerItem* spacer = new QSpacerItem(0, 0, QSizePolicy::Minimum,
272
QSizePolicy::Expanding);
274
gl->addWidget(titleLabel, 0, 0);
275
gl->addMultiCellWidget(d->titleEdit, 0, 0, 1, 3);
276
gl->addWidget(iconTextLabel, 1, 0);
277
gl->addWidget(d->iconButton, 1, 1);
278
gl->addWidget(d->resetIconButton, 1, 2);
279
gl->addItem(spacer, 1, 3);
281
grid->addMultiCellWidget(logo, 0, 0, 0, 0);
282
grid->addMultiCellLayout(topLayout, 0, 1, 1, 1);
283
grid->setRowStretch(1, 10);
285
// --------------------------------------------------------
287
connect(d->iconButton, SIGNAL(clicked()),
288
this, SLOT(slotIconChange()));
290
connect(d->resetIconButton, SIGNAL(clicked()),
291
this, SLOT(slotIconResetClicked()));
293
connect(d->titleEdit, SIGNAL(textChanged(const QString&)),
294
this, SLOT(slotTitleChanged(const QString&)));
296
// --------------------------------------------------------
298
d->icon = album->icon();
299
d->iconButton->setIconSet(SyncJob::getTagThumbnail(d->icon, 20));
301
enableButtonOK(!d->titleEdit->text().isEmpty());
305
TagEditDlg::~TagEditDlg()
310
QString TagEditDlg::title() const
312
return d->titleEdit->text();
315
QString TagEditDlg::icon() const
320
void TagEditDlg::slotIconResetClicked()
322
d->icon = QString("tag");
323
d->iconButton->setIconSet(SyncJob::getTagThumbnail(d->icon, 20));
326
void TagEditDlg::slotIconChange()
328
#if KDE_IS_VERSION(3,3,0)
329
KIconDialog dlg(this);
330
dlg.setup(KIcon::NoGroup, KIcon::Application, false, 20, false, false, false);
331
QString icon = dlg.openDialog();
333
QString icon = KIconDialog::getIcon(KIcon::NoGroup, KIcon::Application, false, 20);
334
if (icon.startsWith("/"))
338
if (icon.isEmpty() || icon == d->icon)
342
d->iconButton->setIconSet(SyncJob::getTagThumbnail(d->icon, 20));
345
void TagEditDlg::slotTitleChanged(const QString& newtitle)
347
enableButtonOK(!newtitle.isEmpty());
350
bool TagEditDlg::tagEdit(QWidget *parent, TAlbum* album, QString& title, QString& icon)
352
TagEditDlg dlg(parent, album);
354
bool valRet = dlg.exec();
355
if (valRet == QDialog::Accepted)
364
} // namespace Digikam