summaryrefslogtreecommitdiffstats
path: root/src/ksquirrelpart/ksquirrelpart.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ksquirrelpart/ksquirrelpart.cpp')
-rw-r--r--src/ksquirrelpart/ksquirrelpart.cpp271
1 files changed, 271 insertions, 0 deletions
diff --git a/src/ksquirrelpart/ksquirrelpart.cpp b/src/ksquirrelpart/ksquirrelpart.cpp
new file mode 100644
index 0000000..c65dc3b
--- /dev/null
+++ b/src/ksquirrelpart/ksquirrelpart.cpp
@@ -0,0 +1,271 @@
+/***************************************************************************
+ sq_ksquirrelpart.cpp - description
+ -------------------
+ begin : Thu Nov 29 2007
+ copyright : (C) 2007 by Baryshev Dmitry
+ email : ksquirrel.iv@gmail.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 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <tdeaction.h>
+#include <tdeparts/browserextension.h>
+#include <tdeparts/genericfactory.h>
+#include <tdefileitem.h>
+#include <tdeglobal.h>
+#include <tdelocale.h>
+#include <tdestandarddirs.h>
+#include <kdebug.h>
+
+#include "ksquirrelpart.h"
+#include "sq_glwidget.h"
+
+#include "sq_glview.h"
+#include "sq_config.h"
+#include "sq_diroperator.h"
+#include "sq_libraryhandler.h"
+#include "sq_iconloader.h"
+#include "sq_externaltool.h"
+#include "sq_errorstring.h"
+
+typedef KParts::GenericFactory<KSquirrelPart> KSquirrelFactory;
+K_EXPORT_COMPONENT_FACTORY(libksquirrelpart, KSquirrelFactory)
+
+KSquirrelPart::KSquirrelPart(TQWidget *parentWidget, const char *,
+ TQObject* parent, const char *name,
+ const TQStringList &) : KParts::ReadOnlyPart(parent, name)
+{
+ kdDebug() << "+KSquirrelPart" << endl;
+
+ setInstance(KSquirrelFactory::instance());
+
+ ext = new KSquirrelPartBrowserExtension(this);
+
+ TDEGlobal::dirs()->addResourceType("data", TDEStandardDirs::kde_default("data") + TQString::fromLatin1("ksquirrel"));
+ TDEGlobal::locale()->setActiveCatalogue(KSquirrelFactory::instance()->instanceName());
+
+ if(!SQ_ErrorString::instance())
+ new SQ_ErrorString(parentWidget);
+
+ if(!SQ_Config::instance())
+ new SQ_Config;
+
+ if(!SQ_IconLoader::instance())
+ new SQ_IconLoader;
+
+ if(!SQ_ExternalTool::instance())
+ new SQ_ExternalTool;
+
+ SQ_ExternalTool::instance()->newPopupMenu();
+
+ // This will allow global object of SQ_LibraryHandler, which
+ // will exist until Konqueror will be closed
+ if(!SQ_LibraryHandler::instance())
+ new SQ_LibraryHandler;
+
+ new SQ_DirOperator;
+
+ gl = new SQ_GLWidget(parentWidget, "ksquirrelpart-opengl-widget");
+ gl->glInitA();
+
+ connect(gl, TQ_SIGNAL(message(const TQString &)), this, TQ_SIGNAL(setStatusBarText(const TQString&)));
+ setWidget(gl);
+
+ TDEAction *a;
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_Plus).utf8());
+ new TDEAction(i18n("Zoom +"), "zoom-in", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart zoom in");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_Minus).utf8());
+ new TDEAction(i18n("Zoom -"), "zoom-out", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart zoom out");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_P).utf8());
+ new TDEAction(i18n("Properties"), "image-x-generic", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart properties");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_R).utf8());
+ new TDEAction(i18n("Normalize"), "rebuild", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart normalize");
+
+ // colorize & filters
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_D).utf8());
+ new TDEAction(i18n("Color balance..."), "colorize", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart colorbalance");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_U).utf8());
+ new TDEAction(i18n("Apply filter..."), "effect", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart filter");
+
+ // rotate
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_Left+CTRL).utf8());
+ new TDEAction(i18n("Rotate left"), "object-rotate-left", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart rotateleft");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_Right+CTRL).utf8());
+ new TDEAction(i18n("Rotate right"), "object-rotate-right", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart rotateright");
+
+ // copy/move
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_F5).utf8());
+ new TDEAction(i18n("Copy to..."), "edit-copy", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart copyto");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_F7).utf8());
+ new TDEAction(i18n("Move to..."), "edit-cut", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart moveto");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_F6).utf8());
+ new TDEAction(i18n("Copy to last folder"), "", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart copy");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_F8).utf8());
+ new TDEAction(i18n("Move to last folder"), "", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart move");
+
+ a = gl->actionCollection()->action(TQString("action_%1").arg(TQt::Key_S).utf8());
+ new TDEAction(i18n("Save As..."), "document-save-as", 0, a, TQ_SLOT(activate()), actionCollection(), "ksquirrelpart saveas");
+
+ sa = new TDESelectAction(i18n("Zoom"), 0, actionCollection(), "ksquirrelpart zoom");
+ sa->setEditable(true);
+
+ TQStringList zooms;
+ zooms << TQString::number(10) + '%';
+ zooms << TQString::number(25) + '%';
+ zooms << TQString::number(33) + '%';
+ zooms << TQString::number(50) + '%';
+ zooms << TQString::number(75) + '%';
+ zooms << TQString::number(100) + '%';
+ zooms << TQString::number(150) + '%';
+ zooms << TQString::number(200) + '%';
+ zooms << TQString::number(250) + '%';
+ zooms << TQString::number(300) + '%';
+ zooms << TQString::number(350) + '%';
+ zooms << TQString::number(400) + '%';
+ zooms << TQString::number(450) + '%';
+ zooms << TQString::number(500) + '%';
+ zooms << TQString::number(600) + '%';
+ zooms << TQString::number(700) + '%';
+ zooms << TQString::number(800) + '%';
+ zooms << TQString::number(900) + '%';
+ zooms << TQString::number(1000) + '%';
+
+ sa->setItems(zooms);
+ sa->setCurrentItem(5);
+ connect(sa, TQ_SIGNAL(activated(int)), this, TQ_SLOT(slotZoom()));
+
+ TQString group = "selection_group";
+
+ ar = new TDEToggleAction(i18n("Rectangle"), "rectangle", TDEShortcut(TQt::Key_R+CTRL), 0, 0, actionCollection(), "ksquirrelpart rectangle");
+ ar->setExclusiveGroup(group);
+ connect(ar, TQ_SIGNAL(toggled(bool)), this, TQ_SLOT(slotSelectionRect(bool)));
+
+ ae = new TDEToggleAction(i18n("Ellipse"), "circle", TDEShortcut(TQt::Key_E+CTRL), 0, 0, actionCollection(), "ksquirrelpart ellipse");
+ ae->setExclusiveGroup(group);
+ connect(ae, TQ_SIGNAL(toggled(bool)), this, TQ_SLOT(slotSelectionEllipse(bool)));
+
+ setXMLFile("ksquirrelpart/ksquirrelpart.rc");
+}
+
+KSquirrelPart::~KSquirrelPart()
+{
+ kdDebug() << "-KSquirrelPart" << endl;
+}
+
+void KSquirrelPart::slotZoom()
+{
+ bool ok;
+
+ int z = sa->currentText().replace(TQChar('%'), "").toInt(&ok);
+
+ if(ok)
+ gl->zoom((float)z / 100.0f);
+}
+
+void KSquirrelPart::slotSelectionRect(bool b)
+{
+ if(b)
+ gl->slotSelectionRect();
+ else if(!ae->isChecked())
+ gl->slotSelectionClear();
+}
+
+void KSquirrelPart::slotSelectionEllipse(bool b)
+{
+ if(b)
+ gl->slotSelectionEllipse();
+ else if(!ar->isChecked())
+ gl->slotSelectionClear();
+}
+
+void KSquirrelPart::print()
+{
+ gl->slotPrint();
+}
+
+TDEAboutData* KSquirrelPart::createAboutData()
+{
+ TDEAboutData *kAboutData = new TDEAboutData(
+ "ksquirrel",
+ I18N_NOOP("KSquirrelPart"),
+ "0.1.2",
+ I18N_NOOP("Image Viewer"),
+ TDEAboutData::License_GPL,
+ "(c) 2007, Dmitry Baryshev <ksquirrel.iv@gmail.com>");
+
+ return kAboutData;
+}
+
+bool KSquirrelPart::openFile()
+{
+ emit started(0);
+
+ KFileItem fi(KFileItem::Unknown, KFileItem::Unknown, m_url);
+ SQ_DirOperator::instance()->execute(&fi);
+
+ emit setWindowCaption(m_url.prettyURL());
+
+ emit completed(0);
+
+ return true;
+}
+
+void KSquirrelPart::setKonquerorWindowCaption(const KURL &, const TQString &filename)
+{
+ TQString caption = TQString("%1").arg(filename);
+ emit setWindowCaption(caption);
+}
+
+void KSquirrelPart::partActivateEvent(KParts::PartActivateEvent *e)
+{
+ if(e->activated())
+ {
+ if(!gl->manualBlocked())
+ gl->startAnimation();
+ }
+ else
+ {
+ // stop animation when KPart becomes inactive
+ gl->stopAnimation();
+
+ SQ_LibraryHandler::instance()->sync();
+ SQ_Config::instance()->sync();
+ }
+
+ KParts::ReadOnlyPart::partActivateEvent(e);
+}
+
+/***************************************************************/
+
+KSquirrelPartBrowserExtension::KSquirrelPartBrowserExtension(KSquirrelPart *viewPart, const char *name)
+ :KParts::BrowserExtension(viewPart, name)
+{
+ mPart = viewPart;
+ emit enableAction("print", true);
+}
+
+KSquirrelPartBrowserExtension::~KSquirrelPartBrowserExtension()
+{}
+
+void KSquirrelPartBrowserExtension::print()
+{
+ mPart->print();
+}
+
+#include "ksquirrelpart.moc"