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.
kipi-plugins/kipi-plugins/kameraklient/cameraui.cpp

668 lines
22 KiB

/* ============================================================
* File : cameraui.cpp
* Author: Renchi Raju <renchi@pooh.tam.uiuc.edu>
* Date : 2003-01-21
* Description :
*
* Copyright 2003 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
* Copyright 2004 by Tudor Calin <tudor@1xtech.com>
*
* Update : 08/28/2003 - Gilles Caulier <caulier.gilles@free.fr>
* Add standard shortcuts and toolbars KDE menu entry.
* Add new toolbar icons.
* Improve i18n messages.
* 17/09/2003 - Gilles Caulier <caulier.gilles@free.fr>
* Add FullScreen mode.
* 19/09/2003 - Gilles Caulier <caulier.gilles@free.fr>
* Add new default shortcuts.
*
*
* 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 <tqcombobox.h>
#include <tqdir.h>
#include <tqfileinfo.h>
#include <tqimage.h>
#include <tqlabel.h>
#include <tqlayout.h>
#include <tqsplitter.h>
#include <tqstringlist.h>
#include <tqtooltip.h>
#include <tqvaluelist.h>
#include <tqvbox.h>
#include <tqpushbutton.h>
#include <tqframe.h>
// KDE includes
#include <tdeaccel.h>
#include <kcombobox.h>
#include <tdeconfig.h>
#include <kdebug.h>
#include <kdirlister.h>
#include <tdefiledialog.h>
#include <tdefileitem.h>
#include <tdelocale.h>
#include <kedittoolbar.h>
#include <tdeio/job.h>
#include <kkeydialog.h>
#include <klineeditdlg.h>
#include <tdemessagebox.h>
#include <tdepopupmenu.h>
#include <kprogress.h>
#include <krun.h>
#include <kservice.h>
#include <kstandarddirs.h>
#include <kstatusbar.h>
#include <tdestdaccel.h>
#include <kurl.h>
#include <tdeapplication.h>
#include <khelpmenu.h>
#include <kiconloader.h>
#include <kguiitem.h>
// Local includes.
#include "kpaboutdata.h"
#include "pluginsversion.h"
#include "camerafolderitem.h"
#include "cameraiconview.h"
#include "camerafolderview.h"
#include "cameraiconitem.h"
#include "cameralist.h"
#include "cameratype.h"
#include "dmessagebox.h"
#include "gpcontroller.h"
#include "gpeventfilter.h"
#include "gpfileitemcontainer.h"
#include "gpfileiteminfo.h"
#include "savefiledialog.h"
#include "setupcamera.h"
#include "cameraui.h"
#include "cameraui.moc"
namespace KIPIKameraKlientPlugin
{
CameraUI::CameraUI() : TQWidget()
{
setWFlags(TQt::WDestructiveClose);
resize(700, 440);
setMinimumSize(600, 400);
mCameraList = new CameraList(this, locateLocal("data", "kipi/cameras.xml"));
mCameraType = new CameraType();
//---------------------------------------------
TQVBoxLayout *dvlay = new TQVBoxLayout( this, 6 );
TQHBoxLayout* mMainBoxLayout = new TQHBoxLayout(dvlay);
mMainBoxLayout->setResizeMode(TQLayout::FreeResize);
TQVBoxLayout* mLeftBoxLayout = new TQVBoxLayout(mMainBoxLayout, 0);
TQVBoxLayout* mBtnBoxLayout = new TQVBoxLayout(mMainBoxLayout, 4);
mBtnBoxLayout->setMargin(2);
// create Button Box ----------------------------------------------------------------------
mCameraSetupBtn = new TQPushButton(i18n("Setup"), this);
mCameraSetupBtn->setMinimumSize(TQSize(100, 0));
mBtnBoxLayout->addWidget(mCameraSetupBtn);
mCameraStopBtn = new TQPushButton(i18n("Stop"), this);
mCameraStopBtn->setMinimumSize(TQSize(100, 0));
mBtnBoxLayout->addWidget(mCameraStopBtn);
mCameraDownloadBtn = new TQPushButton(i18n("Download"), this);
mCameraDownloadBtn->setMinimumSize(TQSize(100, 0));
mBtnBoxLayout->addWidget(mCameraDownloadBtn);
mCameraUploadBtn = new TQPushButton(i18n("Upload"), this);
mCameraUploadBtn->setMinimumSize(TQSize(100, 0));
mBtnBoxLayout->addWidget(mCameraUploadBtn);
mCameraDeleteBtn = new TQPushButton(i18n("Delete"), this);
mCameraDeleteBtn->setMinimumSize(TQSize(100, 0));
mBtnBoxLayout->addWidget(mCameraDeleteBtn);
TQSpacerItem* mBtnSpacer = new TQSpacerItem(0, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding);
mBtnBoxLayout->addItem(mBtnSpacer);
mDialogCloseBtn = new TQPushButton(i18n("Close"), this);
mDialogCloseBtn->setMinimumSize(TQSize(100, 0));
mBtnBoxLayout->addWidget(mDialogCloseBtn);
// About data and help button ---------------------------------------------------
mhelpButton = new TQPushButton(i18n("&Help"), this);
mhelpButton->setMinimumSize(TQSize(100, 0));
mBtnBoxLayout->addWidget(mhelpButton);
m_about = new KIPIPlugins::KPAboutData(I18N_NOOP("KameraKlient"),
0,
TDEAboutData::License_GPL,
I18N_NOOP("A Digital camera interface Kipi plugin"),
"(c) 2003-2004, Renchi Raju\n"
"(c) 2004, Tudor Calin");
m_about->addAuthor("Renchi Raju", I18N_NOOP("Original author from Digikam project"),
"renchi@pooh.tam.uiuc.edu");
m_about->addAuthor("Tudor Calin", I18N_NOOP("Porting the Digikam GPhoto2 interface to Kipi. Maintainer"),
"tudor@1xtech.com");
KHelpMenu* helpMenu = new KHelpMenu(this, m_about, false);
helpMenu->menu()->removeItemAt(0);
helpMenu->menu()->insertItem(i18n("Plugin Handbook"), this, TQ_SLOT(slotHelp()), 0, -1, 0);
mhelpButton->setPopup( helpMenu->menu() );
// create Camera Box-----------------------------------------------------------------------
TQHBoxLayout* mCameraBoxLayout = new TQHBoxLayout(mLeftBoxLayout, 4);
mCameraBoxLayout->setMargin(4);
mCameraConnectBtn = new TQPushButton(i18n("Connect"), this);
mCameraBoxLayout->addWidget(mCameraConnectBtn);
mCameraComboBox = new TQComboBox(this, "camera");
mCameraComboBox->setInsertionPolicy(TQComboBox::AtBottom);
mCameraComboBox->setSizePolicy(TQSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Fixed));
mCameraBoxLayout->addWidget(mCameraComboBox);
// create Download Directory Camera Box ---------------------------------------------------
TQHBoxLayout *mDownloadDirectoryBoxLayout = new TQHBoxLayout(mLeftBoxLayout, 4);
mDownloadDirectoryBoxLayout->setMargin(4);
TQLabel* mDownloadDirectoryLabel = new TQLabel(i18n("Download to: "), this);
mDownloadDirectoryBoxLayout->addWidget(mDownloadDirectoryLabel);
mDownloadDirectoryEdit = new TQLineEdit(this);
mDownloadDirectoryEdit->setSizePolicy(TQSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Fixed));
mDownloadDirectoryEdit->setReadOnly(true);
mDownloadDirectoryBoxLayout->addWidget(mDownloadDirectoryEdit);
mChangeDownloadDirectoryBtn = new TQPushButton(i18n("&Change"), this);
mDownloadDirectoryBoxLayout->addWidget(mChangeDownloadDirectoryBtn); // -------------------------
mSplitter = new TQSplitter(this);
mLeftBoxLayout->addWidget(mSplitter);
mSplitter->setSizePolicy(TQSizePolicy(TQSizePolicy::Expanding, TQSizePolicy::Expanding));
mFolderView = new CameraFolderView(mSplitter);
mIconView = new CameraIconView(mSplitter);
mSplitter->setOpaqueResize(true);
mSplitter->setResizeMode(mFolderView, TQSplitter::Stretch);
mSplitter->setResizeMode(mIconView, TQSplitter::Stretch);
container_ = new GPFileItemContainer(this, mFolderView, mIconView);
efilter_ = new GPEventFilter(this);
controller_ = new GPController(this, *mCameraType);
controller_->start();
cameraConnected_ = false;
// create Status Bar -----------------------------------------------------------------------------
mStatusBar = new KStatusBar(this);
mLeftBoxLayout->addWidget(mStatusBar);
mStatusLabel = new TQLabel(mStatusBar);
mStatusLabel->setText(i18n("Ready"));
mStatusBar->addWidget(mStatusLabel, 7, true);
mProgressBar = new KProgress(mStatusBar);
mProgressBar->setTotalSteps(100);
mStatusBar->addWidget(mProgressBar, 5, true);
// -------------------------------------------------
setupAccel();
setupConnections();
mCameraList->load();
readSettings();
}
CameraUI::~CameraUI() {
writeSettings();
delete controller_;
delete container_;
mFolderView->clear();
mIconView->clear();
delete m_about;
}
void CameraUI::slotHelp()
{
TDEApplication::kApplication()->invokeHelp("kameraklient",
"kipi-plugins");
}
const CameraType* CameraUI::cameraType() {
return mCameraType;
}
void CameraUI::setupAccel() {
mCameraUIAccel = new TDEAccel(this);
mCameraUIAccel->insert("Select All", i18n("Select All"),
i18n("Select all the images from the camera."),
CTRL+Key_A, this, TQ_SLOT(slotSelectAll()));
mCameraUIAccel->insert("Select None", i18n("Select None"),
i18n("Deselect all the images from the camera."),
CTRL+Key_U, this, TQ_SLOT(slotSelectNone()));
mCameraUIAccel->insert("Invert Selection", i18n("Invert Selection"),
i18n("Invert the selection."),
CTRL+Key_Asterisk, this, TQ_SLOT(slotSelectInvert()));
mCameraUIAccel->insert("Select New", i18n("Select New Items"),
i18n("Select all the that were not previously downloaded."),
CTRL+Key_Slash, this, TQ_SLOT(slotSelectNew()));
setCameraConnected(false);
}
void CameraUI::setupConnections() {
connect(this, TQ_SIGNAL(signalStatusMsg(const TQString&)), this, TQ_SLOT(slotSetStatusMsg(const TQString&)));
connect(this, TQ_SIGNAL(signalProgressVal(int)), this, TQ_SLOT(slotSetProgressVal(int)));
connect(this, TQ_SIGNAL(signalBusy(bool)), this, TQ_SLOT(slotBusy(bool)));
connect(efilter_, TQ_SIGNAL(signalStatusMsg(const TQString&)), this, TQ_SIGNAL(signalStatusMsg(const TQString&)));
connect(efilter_, TQ_SIGNAL(signalProgressVal(int)), this, TQ_SIGNAL(signalProgressVal(int)));
connect(efilter_, TQ_SIGNAL(signalBusy(bool)), this, TQ_SIGNAL(signalBusy(bool)));
connect(mFolderView, TQ_SIGNAL(signalFolderChanged(CameraFolderItem*)), this, TQ_SLOT(slotFolderSelected(CameraFolderItem*)));
connect(mIconView, TQ_SIGNAL(signalDownloadSelectedItems()), this, TQ_SLOT(slotCameraDownloadSelected()));
connect(mIconView, TQ_SIGNAL(signalDeleteSelectedItems()), this, TQ_SLOT(slotCameraDeleteSelected()));
connect(mChangeDownloadDirectoryBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(slotChangeDownloadDirectory()));
connect(mCameraList, TQ_SIGNAL(signalCameraListChanged()), this, TQ_SLOT(slotSyncCameraComboBox()));
connect(mCameraConnectBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(slotCameraConnectToggle()));
connect(mCameraSetupBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(slotSetupCamera()));
connect(mCameraStopBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(slotCameraCancel()));
connect(mCameraDownloadBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(slotCameraDownloadSelected()));
connect(mCameraUploadBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(slotCameraUpload()));
connect(mCameraDeleteBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(slotCameraDeleteSelected()));
connect(mDialogCloseBtn, TQ_SIGNAL(pressed()), this, TQ_SLOT(close()));
}
void CameraUI::setCameraConnected(bool val) {
mCameraDownloadBtn->setEnabled(val);
mCameraUploadBtn->setEnabled(val);
mCameraDeleteBtn->setEnabled(val);
if(val) {
mStatusLabel->setText(i18n("Connected"));
mCameraConnectBtn->setText(i18n("Disconnect"));
} else {
mStatusLabel->setText(i18n("Disconnected"));
mCameraConnectBtn->setText(i18n("Connect"));
}
}
void CameraUI::slotSetStatusMsg(const TQString& msg) {
mStatusLabel->setText(msg);
}
void CameraUI::slotSetProgressVal(int val) {
if(val >= 0 && val <= 100) {
mProgressBar->setProgress(val);
}
}
void CameraUI::slotResetStatusBar() {
mProgressBar->setTotalSteps(100);
mProgressBar->setProgress(0);
}
void CameraUI::slotBusy(bool val) {
if(!val) {
slotResetStatusBar();
}
mCameraStopBtn->setEnabled(val);
}
void CameraUI::slotSetupCamera() {
SetupCamera *mSetupDialog = new SetupCamera(this, "camerasetup");
mSetupDialog->exec();
}
void CameraUI::slotSyncCameraComboBox() {
mCameraComboBox->clear();
TQPtrList<CameraType>* mCameraTypeList = mCameraList->cameraList();
for(mCameraTypeList->first(); mCameraTypeList->current(); mCameraTypeList->next()) {
mCameraComboBox->insertItem(mCameraTypeList->current()->model());
}
}
void CameraUI::setCameraType(const CameraType& ctype) {
*mCameraType = ctype;
delete controller_;
controller_ = new GPController(this, *mCameraType);
controller_->start();
}
void CameraUI::cameraInitialized(bool val) {
if(val) {
cameraConnected_ = true;
setCameraConnected(true);
container_->addVirtualFolder(mCameraType->model());
container_->addRootFolder("/");
controller_->requestGetSubFolders("/");
controller_->requestGetAllItemsInfo("/");
mFolderView->virtualFolder()->setSelected(true);
}
}
void CameraUI::cameraSubFolder(const TQString& folder, const TQString& subFolder) {
container_->addFolder(folder, subFolder);
}
void CameraUI::cameraNewItems(const TQString& folder, const GPFileItemInfoList& infoList) {
TQListViewItem *item = mFolderView->currentItem();
if (!item) {
return;
}
CameraFolderItem *folderItem = static_cast<CameraFolderItem *>(item);
if (folderItem->folderPath() != folder && !folderItem->isVirtualFolder()) {
return;
}
container_->addFiles(folder, infoList);
GPFileItemInfoList::const_iterator it;
for (it = infoList.begin(); it != infoList.end(); ++it) {
if ((*it).mime.contains("image")) {
controller_->requestGetThumbnail(folder, (*it).name);
}
}
}
void CameraUI::cameraNewItems(const GPFileItemInfoList& infoList) {
TQListViewItem *item = mFolderView->currentItem();
if (!item) {
return;
}
CameraFolderItem *folderItem = static_cast<CameraFolderItem *>(item);
if (!folderItem->isVirtualFolder()){
return;
}
container_->addFiles(infoList);
GPFileItemInfoList::const_iterator it;
for (it = infoList.begin(); it != infoList.end(); ++it) {
if ((*it).mime.contains("image")) {
controller_->requestGetThumbnail((*it).folder, (*it).name);
}
}
}
void CameraUI::cameraNewThumbnail(const TQString& folder, const TQString& itemName, const TQImage& thumbnail) {
CameraIconItem *iconItem = container_->findItem(folder, itemName);
if (!iconItem) {
return;
}
mIconView->setThumbnail(iconItem, thumbnail);
}
void CameraUI::cameraDownloadedItem(const TQString& folder, const TQString& itemName) {
CameraIconItem *iconItem = container_->findItem(folder, itemName);
if(!iconItem) {
return;
}
mIconView->markDownloaded(iconItem);
}
void CameraUI::cameraDeletedItem(const TQString& folder, const TQString& itemName) {
container_->delFile(folder, itemName);
}
void CameraUI::cameraErrorMsg(const TQString& msg) {
DMessageBox::showMsg(msg);
}
void CameraUI::slotCameraConnectToggle() {
if (mCameraComboBox->count() == 0) {
KMessageBox::error(this, i18n("There is no configured camera!"));
return;
}
mCameraType = mCameraList->find(mCameraComboBox->currentText());
setCameraType(*mCameraType);
setCameraConnected(false);
if(!cameraConnected_) {
controller_->requestInitialize();
} else {
delete controller_;
controller_ = new GPController(this, *mCameraType);
controller_->start();
cameraConnected_ = false;
mIconView->clear();
mFolderView->clear();
}
}
void CameraUI::slotCameraDownloadSelected() {
if(!cameraConnected_) {
return;
}
TQString dir = mDownloadDirectoryEdit->text();
TQDir qdir(dir);
if(!qdir.exists()) {
KMessageBox::error(this, i18n("'%1' directory does not exist.").arg(dir));
return;
}
int count = 0;
for(ThumbItem *i = mIconView->firstItem(); i; i=i->nextItem() ) {
if (i->isSelected()) {
++count;
}
}
if(count == 0) {
return;
}
bool proceed = true;
bool overwriteAll = false;
for(ThumbItem *i = mIconView->firstItem(); i; i=i->nextItem()) {
if(i->isSelected()) {
CameraIconItem *item = static_cast<CameraIconItem*>(i);
if(!item) {
continue;
}
downloadOneItem(item->fileInfo()->name, item->fileInfo()->folder, dir, proceed, overwriteAll);
if(!proceed) {
return;
}
}
}
}
void CameraUI::slotCameraDeleteSelected() {
if(!cameraConnected_) {
return;
}
TQStringList deleteList;
for (ThumbItem *i = mIconView->firstItem(); i;
i=i->nextItem()) {
if(i->isSelected()) {
CameraIconItem *item = static_cast<CameraIconItem*>(i);
deleteList.append(item->fileInfo()->name);
}
}
if (deleteList.isEmpty()) {
return;
}
TQString warnMsg(i18n("About to delete these Image(s)\n" "Are you sure?"));
if(KMessageBox::warningContinueCancelList(this, warnMsg, deleteList, i18n("Warning"), KGuiItem(i18n("Delete"),"edit-delete")) == KMessageBox::Continue) {
CameraIconItem *item = static_cast<CameraIconItem*>(mIconView->firstItem());
while(item) {
CameraIconItem *nextItem = static_cast<CameraIconItem *>(item->nextItem());
if (item->isSelected()) {
controller_->requestDeleteItem(item->fileInfo()->folder, item->fileInfo()->name);
}
item = nextItem;
}
}
}
void CameraUI::slotCameraUpload() {
TQString reason;
if (! cameraReadyForUpload(reason) ) {
KMessageBox::error(0, reason);
return;
}
CameraFolderItem *folderItem = static_cast<CameraFolderItem *>(mFolderView->selectedItem());
TQStringList list = KFileDialog::getOpenFileNames(TQString());
bool ok;
for (TQStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
TQFileInfo info(*it);
if(!info.exists()) {
continue;
}
if(info.isDir()) {
continue;
}
TQString uploadName = info.fileName();
while (container_->findItem(folderItem->folderPath(), uploadName)) {
TQString msg(i18n("Camera Folder '%1' contains item '%2'\n Please, enter New Name").arg(folderItem->folderName()).arg(uploadName));
uploadName = KLineEditDlg::getText(msg,uploadName,&ok,this);
if(!ok){
return;
}
}
controller_->requestUploadItem(folderItem->folderPath(), info.absFilePath(), uploadName);
}
}
void CameraUI::slotCameraCancel() {
controller_->cancel();
}
void CameraUI::slotSelectAll() {
mIconView->selectAll();
}
void CameraUI::slotSelectNone() {
mIconView->clearSelection();
}
void CameraUI::slotSelectInvert() {
mIconView->invertSelection();
}
void CameraUI::slotSelectNew() {
mIconView->clearSelection();
for (ThumbItem *it = mIconView->firstItem(); it; it = it->nextItem()) {
CameraIconItem *item = static_cast<CameraIconItem *>(it);
if (item->fileInfo()->downloaded == 0) {
item->setSelected(true, false);
}
}
}
void CameraUI::slotFolderSelected(CameraFolderItem *folderItem) {
if (!folderItem) {
return;
}
controller_->cancel();
mIconView->clear();
if (folderItem->isVirtualFolder()) {
controller_->requestGetAllItemsInfo("/");
} else {
controller_->requestGetItemsInfo(folderItem->folderPath());
}
}
void CameraUI::downloadOneItem(const TQString& item, const TQString& folder, const TQString& downloadDir, bool& proceedFurther, bool& overwriteAll) {
proceedFurther = true;
TQString saveFile(downloadDir);
if (!downloadDir.endsWith("/")) {
saveFile += "/";
}
saveFile += item;
while (TQFile::exists(saveFile) && !(overwriteAll)) {
bool overwrite=false;
SavefileDialog *dlg = new SavefileDialog(saveFile);
if (dlg->exec()== TQDialog::Rejected) {
delete dlg;
proceedFurther = false;
return;
}
switch(dlg->saveFileOperation()) {
case (SavefileDialog::Skip): {
delete dlg;
return;
}
case (SavefileDialog::SkipAll): {
delete dlg;
proceedFurther = false;
return;
}
case (SavefileDialog::Overwrite): {
overwrite = true;
delete dlg;
break;
}
case (SavefileDialog::OverwriteAll): {
overwriteAll = true;
delete dlg;
break;
}
case (SavefileDialog::Rename): {
saveFile = downloadDir+"/"+dlg->renameFile();
delete dlg;
break;
}
default: {
delete dlg;
proceedFurther = false;
return;
}
}
if (overwrite) {
break;
}
}
controller_->requestDownloadItem(folder, item, saveFile);
}
bool CameraUI::cameraReadyForUpload(TQString& reason) {
bool result = false;
if (!cameraConnected_) {
reason = i18n("Camera Not Initialized");
return result;
} /*
if (!controller_->cameraSupportsUpload()) {
reason = i18n("Camera does not support Uploads");
return result;
} */
if (!mFolderView->selectedItem() || mFolderView->selectedItem() == mFolderView->firstChild()) {
reason = i18n("Please Select a Folder on Camera to Upload");
return result;
}
result = true;
return result;
}
void CameraUI::slotChangeDownloadDirectory() {
TQString result = KFileDialog::getExistingDirectory(mDownloadDirectoryEdit->text(), this);
if(!((new TQFileInfo(result))->isWritable())) {
KMessageBox::sorry(this, i18n("Sorry! The directory is not writable!"));
return;
}
if(!result.isEmpty()) {
mDownloadDirectoryEdit->setText(result);
}
}
void CameraUI::writeSettings() {
mConfig = new TDEConfig("kipirc");
mConfig->setGroup("KameraKlient Settings");
mConfig->writePathEntry("DownloadDirectory", mDownloadDirectoryEdit->text());
mConfig->writeEntry("DialogSize", frameSize());
mConfig->writeEntry("DialogXPos", x());
mConfig->writeEntry("DialogYPos", y());
mConfig->writeEntry("SplitterSizes", mSplitter->sizes());
mConfig->sync();
delete mConfig;
}
void CameraUI::readSettings() {
mConfig = new TDEConfig("kipirc");
mConfig->setGroup("KameraKlient Settings");
mDownloadDirectoryEdit->setText(mConfig->readPathEntry("DownloadDirectory", "$HOME"));
resize(mConfig->readSizeEntry("DialogSize"));
move(mConfig->readNumEntry("DialogXPos"), mConfig->readNumEntry("DialogYPos"));
mSplitter->setSizes(mConfig->readIntListEntry("SplitterSizes"));
delete mConfig;
}
} // NameSpace KIPIKameraKlientPlugin