You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
digikam/digikam/digikam/albumpropsedit.cpp

377 lines
11 KiB

/* ============================================================
*
* This file is a part of digiKam project
* http://www.digikam.org
*
* Date : 2003-03-09
* Description : Album properties dialog.
*
* Copyright (C) 2003-2004 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
* Copyright (C) 2005 by Tom Albers <tomalbers@kde.nl>
* Copyright (C) 2006-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
* Public License as published by the Free Software Foundation;
* either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* ============================================================ */
// TQt includes.
#include <tqcheckbox.h>
#include <tqcombobox.h>
#include <tqdatetime.h>
#include <tqdir.h>
#include <tqfileinfo.h>
#include <tqframe.h>
#include <tqgroupbox.h>
#include <tqhbox.h>
#include <tqheader.h>
#include <tqlabel.h>
#include <tqlayout.h>
#include <tqlistview.h>
#include <tqpushbutton.h>
#include <tqregexp.h>
#include <tqvalidator.h>
// KDE includes.
#include <kdatepicker.h>
#include <ktextedit.h>
#include <klineedit.h>
#include <klocale.h>
#include <kurl.h>
#include <kmessagebox.h>
#include <kcursor.h>
#include <tdeversion.h>
#if KDE_IS_VERSION(3,2,0)
#include <kinputdialog.h>
#else
#include <klineeditdlg.h>
#endif
// Local includes.
#include "album.h"
#include "albumdb.h"
#include "albummanager.h"
#include "albumsettings.h"
#include "albumpropsedit.h"
#include "albumpropsedit.moc"
namespace Digikam
{
class AlbumPropsEditPriv
{
public:
AlbumPropsEditPriv()
{
titleEdit = 0;
collectionCombo = 0;
commentsEdit = 0;
datePicker = 0;
album = 0;
}
TQStringList albumCollections;
TQComboBox *collectionCombo;
KLineEdit *titleEdit;
KTextEdit *commentsEdit;
KDatePicker *datePicker;
PAlbum *album;
};
AlbumPropsEdit::AlbumPropsEdit(PAlbum* album, bool create)
: KDialogBase( Plain, create ? i18n("New Album") : i18n("Edit Album"),
Help|Ok|Cancel, Ok,
0, 0, true, true )
{
d = new AlbumPropsEditPriv;
d->album = album;
setHelp("albumpropsedit.anchor", "digikam");
TQGridLayout *topLayout = new TQGridLayout( plainPage(), 2, 6,
0, spacingHint() );
TQLabel *topLabel = new TQLabel( plainPage() );
if (create)
{
topLabel->setText( i18n( "<qt><b>Create new Album in \"<i>%1</i>\"</b></qt>")
.tqarg(album->title()));
}
else
{
topLabel->setText( i18n( "<qt><b>\"<i>%1</i>\" Album Properties</b></qt>")
.tqarg(album->title()));
}
topLabel->tqsetAlignment(TQt::AlignAuto | TQt::AlignVCenter | TQt::SingleLine);
topLayout->addMultiCellWidget( topLabel, 0, 0, 0, 1 );
// --------------------------------------------------------
TQFrame *topLine = new TQFrame( plainPage() );
topLine->setFrameShape( TQFrame::HLine );
topLine->setFrameShadow( TQFrame::Sunken );
topLayout->addMultiCellWidget( topLine, 1, 1, 0, 1 );
// --------------------------------------------------------
TQLabel *titleLabel = new TQLabel( plainPage( ) );
titleLabel->setText( i18n( "&Title:" ) );
topLayout->addWidget( titleLabel, 2, 0 );
d->titleEdit = new KLineEdit( plainPage( ) );
topLayout->addWidget( d->titleEdit, 2, 1 );
titleLabel->setBuddy( d->titleEdit );
TQRegExp titleRx("[^/]+");
TQValidator *titleValidator = new TQRegExpValidator(titleRx, TQT_TQOBJECT(this));
d->titleEdit->setValidator(titleValidator);
TQLabel *collectionLabel = new TQLabel( plainPage( ) );
collectionLabel->setText( i18n( "Co&llection:" ) );
topLayout->addWidget( collectionLabel, 3, 0 );
d->collectionCombo = new TQComboBox( plainPage( ) );
d->collectionCombo->setEditable(true);
topLayout->addWidget( d->collectionCombo, 3, 1 );
collectionLabel->setBuddy( d->collectionCombo );
TQLabel *commentsLabel = new TQLabel( plainPage( ) );
commentsLabel->setText( i18n( "Ca&ption:" ) );
topLayout->addWidget( commentsLabel, 4, 0, TQt::AlignAuto|TQt::AlignTop );
d->commentsEdit = new KTextEdit( plainPage( ) );
topLayout->addWidget( d->commentsEdit, 4, 1 );
commentsLabel->setBuddy( d->commentsEdit );
d->commentsEdit->setCheckSpellingEnabled(true);
d->commentsEdit->setWordWrap(TQTextEdit::WidgetWidth);
d->commentsEdit->setWrapPolicy(TQTextEdit::AtWhiteSpace);
TQLabel *dateLabel = new TQLabel( plainPage( ) );
dateLabel->setText( i18n( "Album &date:" ) );
topLayout->addWidget( dateLabel, 5, 0, TQt::AlignAuto|TQt::AlignTop );
d->datePicker = new KDatePicker( plainPage( ) );
topLayout->addWidget( d->datePicker, 5, 1 );
dateLabel->setBuddy( d->datePicker );
TQHBox *buttonRow = new TQHBox( plainPage( ) );
TQPushButton *dateLowButton = new TQPushButton(
i18n("Selects the date of the oldest image",
"&Oldest" ), buttonRow );
TQPushButton *dateAvgButton = new TQPushButton(
i18n("Calculates the average date",
"&Average" ), buttonRow );
TQPushButton *dateHighButton = new TQPushButton(
i18n("Selects the date of the newest image",
"Newest" ), buttonRow );
topLayout->addWidget( buttonRow, 6, 1);
setTabOrder(d->titleEdit, d->collectionCombo);
setTabOrder(d->collectionCombo, d->commentsEdit);
setTabOrder(d->commentsEdit, d->datePicker);
d->commentsEdit->setTabChangesFocus(true);
d->titleEdit->selectAll();
d->titleEdit->setFocus();
// Initialize ---------------------------------------------
AlbumSettings *settings = AlbumSettings::instance();
if (settings)
{
d->collectionCombo->insertItem( TQString() );
TQStringList collections = settings->getAlbumCollectionNames();
d->collectionCombo->insertStringList( collections );
int collectionIndex = collections.findIndex( album->collection() );
if ( collectionIndex != -1 )
{
// + 1 because of the empty item
d->collectionCombo->setCurrentItem(collectionIndex + 1);
}
}
if (create)
{
d->titleEdit->setText( i18n("New Album") );
d->datePicker->setDate( TQDate::tqcurrentDate() );
}
else
{
d->titleEdit->setText( album->title() );
d->commentsEdit->setText( album->caption() );
d->datePicker->setDate( album->date() );
}
// -- slots connections -------------------------------------------
connect(d->titleEdit, TQT_SIGNAL(textChanged(const TQString&)),
this, TQT_SLOT(slotTitleChanged(const TQString&)));
connect(dateLowButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( slotDateLowButtonClicked()));
connect(dateAvgButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( slotDateAverageButtonClicked()));
connect(dateHighButton, TQT_SIGNAL( clicked() ),
this, TQT_SLOT( slotDateHighButtonClicked()));
adjustSize();
}
AlbumPropsEdit::~AlbumPropsEdit()
{
delete d;
}
TQString AlbumPropsEdit::title() const
{
return d->titleEdit->text();
}
TQString AlbumPropsEdit::comments() const
{
return d->commentsEdit->text();
}
TQDate AlbumPropsEdit::date() const
{
return d->datePicker->date();
}
TQString AlbumPropsEdit::collection() const
{
TQString name = d->collectionCombo->currentText();
if (name.isEmpty())
{
name = i18n( "Uncategorized Album" );
}
return name;
}
TQStringList AlbumPropsEdit::albumCollections() const
{
TQStringList collections;
AlbumSettings *settings = AlbumSettings::instance();
if (settings)
{
collections = settings->getAlbumCollectionNames();
}
TQString currentCollection = d->collectionCombo->currentText();
if ( collections.findIndex( currentCollection ) == -1 )
{
collections.append(currentCollection);
}
collections.sort();
return collections;
}
bool AlbumPropsEdit::editProps(PAlbum *album, TQString& title,
TQString& comments, TQDate& date, TQString& collection,
TQStringList& albumCollections)
{
AlbumPropsEdit dlg(album);
bool ok = dlg.exec() == TQDialog::Accepted;
title = dlg.title();
comments = dlg.comments();
date = dlg.date();
collection = dlg.collection();
albumCollections = dlg.albumCollections();
return ok;
}
bool AlbumPropsEdit::createNew(PAlbum *parent,
TQString& title,
TQString& comments,
TQDate& date,
TQString& collection,
TQStringList& albumCollections)
{
AlbumPropsEdit dlg(parent, true);
bool ok = dlg.exec() == TQDialog::Accepted;
title = dlg.title();
comments = dlg.comments();
date = dlg.date();
collection = dlg.collection();
albumCollections = dlg.albumCollections();
return ok;
}
void AlbumPropsEdit::slotTitleChanged(const TQString& newtitle)
{
enableButtonOK(!newtitle.isEmpty());
}
void AlbumPropsEdit::slotDateLowButtonClicked()
{
setCursor( KCursor::waitCursor() );
AlbumDB* db = AlbumManager::instance()->albumDB();
TQDate avDate = db->getAlbumLowestDate( d->album->id() );
setCursor( KCursor::arrowCursor() );
if ( avDate.isValid() )
d->datePicker->setDate( avDate );
}
void AlbumPropsEdit::slotDateHighButtonClicked()
{
setCursor( KCursor::waitCursor() );
AlbumDB* db = AlbumManager::instance()->albumDB();
TQDate avDate = db->getAlbumHighestDate( d->album->id() );
setCursor( KCursor::arrowCursor() );
if ( avDate.isValid() )
d->datePicker->setDate( avDate );
}
void AlbumPropsEdit::slotDateAverageButtonClicked()
{
setCursor( KCursor::waitCursor() );
AlbumDB* db = AlbumManager::instance()->albumDB();
TQDate avDate = db->getAlbumAverageDate( d->album->id() );
setCursor( KCursor::arrowCursor() );
if ( avDate.isValid() )
d->datePicker->setDate( avDate );
else
KMessageBox::error( plainPage( ),
i18n( "Could not calculate an average."),
i18n( "Could Not Calculate Average" ) );
}
} // namespace Digikam