diff options
Diffstat (limited to 'src/utilities/setup/setupcamera.cpp')
-rw-r--r-- | src/utilities/setup/setupcamera.cpp | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/src/utilities/setup/setupcamera.cpp b/src/utilities/setup/setupcamera.cpp new file mode 100644 index 00000000..1b8d0bb8 --- /dev/null +++ b/src/utilities/setup/setupcamera.cpp @@ -0,0 +1,315 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2003-02-10 + * Description : camera setup tab. + * + * Copyright (C) 2003-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu> + * 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 <tqgroupbox.h> +#include <tqpushbutton.h> +#include <tqlayout.h> +#include <tqwhatsthis.h> +#include <tqtooltip.h> +#include <tqdatetime.h> +#include <tqlistview.h> + +// KDE includes. + +#include <tdelocale.h> +#include <tdemessagebox.h> +#include <kurllabel.h> +#include <kiconloader.h> +#include <tdeglobalsettings.h> +#include <kstandarddirs.h> +#include <kcursor.h> +#include <tdeapplication.h> + +// Local includes. + +#include "cameraselection.h" +#include "cameralist.h" +#include "cameratype.h" +#include "gpcamera.h" +#include "setupcamera.h" +#include "setupcamera.moc" + +namespace Digikam +{ +class SetupCameraPriv +{ +public: + + SetupCameraPriv() + { + listView = 0; + addButton = 0; + removeButton = 0; + editButton = 0; + autoDetectButton = 0; + } + + TQPushButton *addButton; + TQPushButton *removeButton; + TQPushButton *editButton; + TQPushButton *autoDetectButton; + + TQListView *listView; +}; + +SetupCamera::SetupCamera( TQWidget* parent ) + : TQWidget( parent ) +{ + d = new SetupCameraPriv; + + TQVBoxLayout *mainLayout = new TQVBoxLayout(parent); + TQGridLayout* groupBoxLayout = new TQGridLayout( this, 2, 5, 0, KDialog::spacingHint() ); + + d->listView = new TQListView( this ); + d->listView->addColumn( i18n("Title") ); + d->listView->addColumn( i18n("Model") ); + d->listView->addColumn( i18n("Port") ); + d->listView->addColumn( i18n("Path") ); + d->listView->addColumn( "Last Access Date", 0 ); // No i18n here. Hidden column with the last access date. + d->listView->setAllColumnsShowFocus(true); + TQWhatsThis::add( d->listView, i18n("<p>Here you can see the digital camera list used by digiKam " + "via the Gphoto interface.")); + + // ------------------------------------------------------------- + + d->addButton = new TQPushButton( this ); + d->removeButton = new TQPushButton( this ); + d->editButton = new TQPushButton( this ); + d->autoDetectButton = new TQPushButton( this ); + + d->addButton->setText( i18n( "&Add..." ) ); + d->addButton->setIconSet(SmallIcon("add")); + d->removeButton->setText( i18n( "&Remove" ) ); + d->removeButton->setIconSet(SmallIcon("remove")); + d->editButton->setText( i18n( "&Edit..." ) ); + d->editButton->setIconSet(SmallIcon("configure")); + d->autoDetectButton->setText( i18n( "Auto-&Detect" ) ); + d->autoDetectButton->setIconSet(SmallIcon("edit-find")); + d->removeButton->setEnabled(false); + d->editButton->setEnabled(false); + + TQSpacerItem* spacer = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding ); + + KURLLabel *gphotoLogoLabel = new KURLLabel(this); + gphotoLogoLabel->setText(TQString()); + gphotoLogoLabel->setURL("http://www.gphoto.org"); + TDEGlobal::dirs()->addResourceType("logo-gphoto", TDEGlobal::dirs()->kde_default("data") + "digikam/data"); + TQString directory = TDEGlobal::dirs()->findResourceDir("logo-gphoto", "logo-gphoto.png"); + gphotoLogoLabel->setPixmap( TQPixmap( directory + "logo-gphoto.png" ) ); + TQToolTip::add(gphotoLogoLabel, i18n("Visit Gphoto project website")); + + groupBoxLayout->setAlignment( TQt::AlignTop ); + groupBoxLayout->addMultiCellWidget( d->listView, 0, 5, 0, 0 ); + groupBoxLayout->addWidget( d->addButton, 0, 1 ); + groupBoxLayout->addWidget( d->removeButton, 1, 1 ); + groupBoxLayout->addWidget( d->editButton, 2, 1 ); + groupBoxLayout->addWidget( d->autoDetectButton, 3, 1 ); + groupBoxLayout->addItem( spacer, 4, 1 ); + groupBoxLayout->addWidget( gphotoLogoLabel, 5, 1 ); + + adjustSize(); + mainLayout->addWidget(this); + + // ------------------------------------------------------------- + + connect(gphotoLogoLabel, TQ_SIGNAL(leftClickedURL(const TQString&)), + this, TQ_SLOT(processGphotoURL(const TQString&))); + + connect(d->listView, TQ_SIGNAL(selectionChanged()), + this, TQ_SLOT(slotSelectionChanged())); + + connect(d->addButton, TQ_SIGNAL(clicked()), + this, TQ_SLOT(slotAddCamera())); + + connect(d->removeButton, TQ_SIGNAL(clicked()), + this, TQ_SLOT(slotRemoveCamera())); + + connect(d->editButton, TQ_SIGNAL(clicked()), + this, TQ_SLOT(slotEditCamera())); + + connect(d->autoDetectButton, TQ_SIGNAL(clicked()), + this, TQ_SLOT(slotAutoDetectCamera())); + + // Add cameras -------------------------------------- + + CameraList* clist = CameraList::instance(); + + if (clist) + { + TQPtrList<CameraType>* cl = clist->cameraList(); + + for (CameraType *ctype = cl->first(); ctype; + ctype = cl->next()) + { + new TQListViewItem(d->listView, ctype->title(), ctype->model(), + ctype->port(), ctype->path(), + ctype->lastAccess().toString(TQt::ISODate)); + } + } +} + +SetupCamera::~SetupCamera() +{ + delete d; +} + +void SetupCamera::processGphotoURL(const TQString& url) +{ + TDEApplication::kApplication()->invokeBrowser(url); +} + +void SetupCamera::slotSelectionChanged() +{ + TQListViewItem *item = d->listView->selectedItem(); + + if (!item) + { + d->removeButton->setEnabled(false); + d->editButton->setEnabled(false); + return; + } + + d->removeButton->setEnabled(true); + d->editButton->setEnabled(true); +} + +void SetupCamera::slotAddCamera() +{ + CameraSelection *select = new CameraSelection; + + connect(select, TQ_SIGNAL(signalOkClicked(const TQString&, const TQString&, + const TQString&, const TQString&)), + this, TQ_SLOT(slotAddedCamera(const TQString&, const TQString&, + const TQString&, const TQString&))); + + select->show(); +} + +void SetupCamera::slotRemoveCamera() +{ + TQListViewItem *item = d->listView->currentItem(); + if (!item) return; + + delete item; +} + +void SetupCamera::slotEditCamera() +{ + TQListViewItem *item = d->listView->currentItem(); + if (!item) return; + + CameraSelection *select = new CameraSelection; + select->setCamera(item->text(0), item->text(1), item->text(2), item->text(3)); + + connect(select, TQ_SIGNAL(signalOkClicked(const TQString&, const TQString&, + const TQString&, const TQString&)), + this, TQ_SLOT(slotEditedCamera(const TQString&, const TQString&, + const TQString&, const TQString&))); + + select->show(); +} + +void SetupCamera::slotAutoDetectCamera() +{ + TQString model, port; + + kapp->setOverrideCursor( KCursor::waitCursor() ); + int ret = GPCamera::autoDetect(model, port); + kapp->restoreOverrideCursor(); + + if (ret != 0) + { + KMessageBox::error(this,i18n("Failed to auto-detect camera.\n" + "Please check if your camera is turned on " + "and retry or try setting it manually.")); + return; + } + + // NOTE: See note in digikam/digikam/cameralist.cpp + if (port.startsWith("usb:")) + port = "usb:"; + + if (d->listView->findItem(model, 1)) + { + KMessageBox::information(this, i18n("Camera '%1' (%2) is already in list.").arg(model).arg(port)); + } + else + { + KMessageBox::information(this, i18n("Found camera '%1' (%2) and added it to the list.") + .arg(model).arg(port)); + new TQListViewItem(d->listView, model, model, port, "/", + TQDateTime::currentDateTime().toString(TQt::ISODate)); + } +} + +void SetupCamera::slotAddedCamera(const TQString& title, const TQString& model, + const TQString& port, const TQString& path) +{ + new TQListViewItem(d->listView, title, model, port, path, + TQDateTime::currentDateTime().toString(TQt::ISODate)); +} + +void SetupCamera::slotEditedCamera(const TQString& title, const TQString& model, + const TQString& port, const TQString& path) +{ + TQListViewItem *item = d->listView->currentItem(); + if (!item) return; + + item->setText(0, title); + item->setText(1, model); + item->setText(2, port); + item->setText(3, path); +} + +void SetupCamera::applySettings() +{ + CameraList* clist = CameraList::instance(); + + if (clist) + { + clist->clear(); + + TQListViewItemIterator it(d->listView); + + for ( ; it.current(); ++it ) + { + TQListViewItem *item = it.current(); + TQDateTime lastAccess = TQDateTime::currentDateTime(); + + if (!item->text(4).isEmpty()) + lastAccess = TQDateTime::fromString(item->text(4), TQt::ISODate); + + CameraType *ctype = new CameraType(item->text(0), item->text(1), item->text(2), + item->text(3), lastAccess); + clist->insert(ctype); + } + + clist->save(); + } +} + +} // namespace Digikam + |