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.
316 lines
9.8 KiB
316 lines
9.8 KiB
/* ============================================================
|
|
*
|
|
* 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, TQT_SIGNAL(leftClickedURL(const TQString&)),
|
|
this, TQT_SLOT(processGphotoURL(const TQString&)));
|
|
|
|
connect(d->listView, TQT_SIGNAL(selectionChanged()),
|
|
this, TQT_SLOT(slotSelectionChanged()));
|
|
|
|
connect(d->addButton, TQT_SIGNAL(clicked()),
|
|
this, TQT_SLOT(slotAddCamera()));
|
|
|
|
connect(d->removeButton, TQT_SIGNAL(clicked()),
|
|
this, TQT_SLOT(slotRemoveCamera()));
|
|
|
|
connect(d->editButton, TQT_SIGNAL(clicked()),
|
|
this, TQT_SLOT(slotEditCamera()));
|
|
|
|
connect(d->autoDetectButton, TQT_SIGNAL(clicked()),
|
|
this, TQT_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(Qt::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, TQT_SIGNAL(signalOkClicked(const TQString&, const TQString&,
|
|
const TQString&, const TQString&)),
|
|
this, TQT_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, TQT_SIGNAL(signalOkClicked(const TQString&, const TQString&,
|
|
const TQString&, const TQString&)),
|
|
this, TQT_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(Qt::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(Qt::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), Qt::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
|
|
|