summaryrefslogtreecommitdiffstats
path: root/src/libs/dialogs/imagedlgbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/dialogs/imagedlgbase.cpp')
-rw-r--r--src/libs/dialogs/imagedlgbase.cpp261
1 files changed, 261 insertions, 0 deletions
diff --git a/src/libs/dialogs/imagedlgbase.cpp b/src/libs/dialogs/imagedlgbase.cpp
new file mode 100644
index 00000000..61666406
--- /dev/null
+++ b/src/libs/dialogs/imagedlgbase.cpp
@@ -0,0 +1,261 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2005-07-23
+ * Description : simple plugins dialog without threadable
+ * filter interface. The dialog layout is
+ * designed to accept custom widgets in
+ * preview and settings area.
+ *
+ * Copyright (C) 2005-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 <tqlabel.h>
+#include <tqwhatsthis.h>
+#include <tqpushbutton.h>
+#include <tqtimer.h>
+#include <tqlayout.h>
+#include <tqframe.h>
+#include <tqtimer.h>
+#include <tqsplitter.h>
+#include <tqhbox.h>
+
+// KDE includes.
+
+#include <kcursor.h>
+#include <tdelocale.h>
+#include <tdeglobalsettings.h>
+#include <tdeaboutdata.h>
+#include <khelpmenu.h>
+#include <kiconloader.h>
+#include <tdeapplication.h>
+#include <tdepopupmenu.h>
+#include <kstandarddirs.h>
+#include <tdeconfig.h>
+
+// Local includes.
+
+#include "ddebug.h"
+#include "sidebar.h"
+#include "dimginterface.h"
+#include "imagedlgbase.h"
+#include "imagedlgbase.moc"
+
+namespace Digikam
+{
+
+class ImageDlgBasePriv
+{
+public:
+
+ ImageDlgBasePriv()
+ {
+ aboutData = 0;
+ timer = 0;
+ parent = 0;
+ mainLayout = 0;
+ hbox = 0;
+ settingsSideBar = 0;
+ splitter = 0;
+ }
+
+ bool tryAction;
+
+ TQGridLayout *mainLayout;
+
+ TQWidget *parent;
+
+ TQString name;
+
+ TQTimer *timer;
+
+ TQHBox *hbox;
+
+ TQSplitter *splitter;
+
+ TDEAboutData *aboutData;
+
+ Sidebar *settingsSideBar;
+};
+
+ImageDlgBase::ImageDlgBase(TQWidget* parent, TQString title, TQString name,
+ bool loadFileSettings, bool tryAction, TQFrame* bannerFrame)
+ : KDialogBase(Plain, 0, Help|Default|User1|User2|User3|Try|Ok|Cancel, Ok,
+ parent, 0, true, true,
+ TQString(),
+ i18n("&Save As..."),
+ i18n("&Load..."))
+{
+ kapp->setOverrideCursor( KCursor::waitCursor() );
+ setCaption(DImgInterface::defaultInterface()->getImageFileName() + TQString(" - ") + title);
+ showButton(User1, false);
+
+ d = new ImageDlgBasePriv;
+ d->parent = parent;
+ d->name = name;
+ d->tryAction = tryAction;
+
+ setButtonWhatsThis ( Default, i18n("<p>Reset all filter parameters to their default values.") );
+ setButtonWhatsThis ( User3, i18n("<p>Load all filter parameters from settings text file.") );
+ setButtonWhatsThis ( User2, i18n("<p>Save all filter parameters to settings text file.") );
+ showButton(User2, loadFileSettings);
+ showButton(User3, loadFileSettings);
+ showButton(Try, tryAction);
+
+ resize(configDialogSize(name + TQString(" Tool Dialog")));
+
+ // -------------------------------------------------------------
+
+ d->mainLayout = new TQGridLayout( plainPage(), 2, 1);
+ if (bannerFrame)
+ {
+ bannerFrame->reparent( plainPage(), TQPoint(0, 0) );
+ d->mainLayout->addMultiCellWidget(bannerFrame, 0, 0, 0, 1);
+ }
+
+ // -------------------------------------------------------------
+
+ d->hbox = new TQHBox(plainPage());
+ d->splitter = new TQSplitter(d->hbox);
+ d->splitter->setFrameStyle( TQFrame::NoFrame );
+ d->splitter->setFrameShadow( TQFrame::Plain );
+ d->splitter->setFrameShape( TQFrame::NoFrame );
+ d->splitter->setOpaqueResize(false);
+
+ d->mainLayout->addMultiCellWidget(d->hbox, 1, 2, 0, 1);
+ d->mainLayout->setColStretch(0, 10);
+ d->mainLayout->setRowStretch(2, 10);
+
+ kapp->restoreOverrideCursor();
+}
+
+ImageDlgBase::~ImageDlgBase()
+{
+ if (d->timer)
+ delete d->timer;
+
+ if (d->aboutData)
+ delete d->aboutData;
+
+ delete d->settingsSideBar;
+ delete d;
+}
+
+void ImageDlgBase::readSettings(void)
+{
+ TDEConfig *config = kapp->config();
+ config->setGroup(d->name + TQString(" Tool Dialog"));
+ if(config->hasKey("SplitterSizes"))
+ d->splitter->setSizes(config->readIntListEntry("SplitterSizes"));
+
+ readUserSettings();
+}
+
+void ImageDlgBase::writeSettings()
+{
+ TDEConfig *config = kapp->config();
+ config->setGroup(d->name + TQString(" Tool Dialog"));
+ config->writeEntry("SplitterSizes", d->splitter->sizes());
+ config->sync();
+ saveDialogSize(d->name + TQString(" Tool Dialog"));
+}
+
+void ImageDlgBase::closeEvent(TQCloseEvent *e)
+{
+ writeSettings();
+ e->accept();
+}
+
+void ImageDlgBase::slotCancel()
+{
+ writeSettings();
+ done(Cancel);
+}
+
+void ImageDlgBase::slotOk()
+{
+ writeSettings();
+ writeUserSettings();
+ finalRendering();
+}
+
+void ImageDlgBase::slotDefault()
+{
+ resetValues();
+ slotEffect();
+}
+
+void ImageDlgBase::slotHelp()
+{
+ // If setAboutData() is called by plugin, well DigikamImagePlugins help is launched,
+ // else digiKam help. In this case, setHelp() method must be used to set anchor and handbook name.
+
+ if (d->aboutData)
+ TDEApplication::kApplication()->invokeHelp(d->name, "digikam");
+ else
+ KDialogBase::slotHelp();
+}
+
+void ImageDlgBase::setAboutData(TDEAboutData *about)
+{
+ d->aboutData = about;
+ TQPushButton *helpButton = actionButton( Help );
+ KHelpMenu* helpMenu = new KHelpMenu(this, d->aboutData, false);
+ helpMenu->menu()->removeItemAt(0);
+ helpMenu->menu()->insertItem(i18n("digiKam Handbook"), this, TQ_SLOT(slotHelp()), 0, -1, 0);
+ helpButton->setPopup( helpMenu->menu() );
+}
+
+void ImageDlgBase::setPreviewAreaWidget(TQWidget *w)
+{
+ w->reparent( d->splitter, TQPoint(0, 0) );
+ TQSizePolicy rightSzPolicy(TQSizePolicy::Preferred,
+ TQSizePolicy::Expanding,
+ 2, 1);
+ w->setSizePolicy(rightSzPolicy);
+}
+
+void ImageDlgBase::setUserAreaWidget(TQWidget *w)
+{
+ TQString sbName(d->name + TQString(" Image Plugin Sidebar"));
+ d->settingsSideBar = new Sidebar(d->hbox, sbName.ascii(), Sidebar::Right);
+ d->settingsSideBar->setSplitter(d->splitter);
+ d->settingsSideBar->appendTab(w, SmallIcon("configure"), i18n("Settings"));
+ d->settingsSideBar->loadViewState();
+
+ readSettings();
+}
+
+void ImageDlgBase::slotTimer()
+{
+ if (d->timer)
+ {
+ d->timer->stop();
+ delete d->timer;
+ }
+
+ d->timer = new TQTimer( this );
+ connect( d->timer, TQ_SIGNAL(timeout()),
+ this, TQ_SLOT(slotEffect()) );
+ d->timer->start(500, true);
+}
+
+} // NameSpace Digikam
+