summaryrefslogtreecommitdiffstats
path: root/src/sq_fileiconviewbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sq_fileiconviewbase.cpp')
-rw-r--r--src/sq_fileiconviewbase.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/sq_fileiconviewbase.cpp b/src/sq_fileiconviewbase.cpp
new file mode 100644
index 0000000..f0e2a78
--- /dev/null
+++ b/src/sq_fileiconviewbase.cpp
@@ -0,0 +1,156 @@
+/***************************************************************************
+ sq_fileiconviewbase.cpp - description
+ -------------------
+ begin : ??? Feb 22 2005
+ copyright : (C) 2005 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tqdragobject.h>
+#include <tqcursor.h>
+
+#include <tdeglobalsettings.h>
+#include <tdeaction.h>
+#include <tdefileitem.h>
+#include <tdeio/job.h>
+#include <konq_filetip.h>
+
+#include "ksquirrel.h"
+#include "sq_fileiconviewbase.h"
+#include "sq_config.h"
+
+SQ_FileIconViewBase::SQ_FileIconViewBase(TQWidget *parent, const char *name)
+ : KFileIconView(parent, name)
+{
+ toolTip = new KonqFileTip(this);
+ slotResetToolTip();
+
+ disconnect(this, TQ_SIGNAL(onViewport()), this, 0);
+ disconnect(this, TQ_SIGNAL(onItem(TQIconViewItem *)), this, 0);
+ connect(this, TQ_SIGNAL(onViewport()), this, TQ_SLOT(slotRemoveToolTip()));
+ connect(this, TQ_SIGNAL(onItem(TQIconViewItem *)), this, TQ_SLOT(slotShowToolTip(TQIconViewItem *)));
+}
+
+SQ_FileIconViewBase::~SQ_FileIconViewBase()
+{
+ slotRemoveToolTip();
+}
+
+void SQ_FileIconViewBase::slotResetToolTip()
+{
+ SQ_Config::instance()->setGroup("Fileview");
+
+ toolTip->setOptions(true,
+ SQ_Config::instance()->readBoolEntry("tooltips_preview", false),
+ SQ_Config::instance()->readNumEntry("tooltips_lines", 6));
+}
+
+// Show extended tooltip for item under mouse cursor
+void SQ_FileIconViewBase::slotShowToolTip(TQIconViewItem *item)
+{
+ SQ_Config::instance()->setGroup("Fileview");
+
+ if(!SQ_Config::instance()->readBoolEntry("tooltips", false) ||
+ (!KSquirrel::app()->isActiveWindow() && SQ_Config::instance()->readBoolEntry("tooltips_inactive", true)))
+ return;
+
+ // remove previous tootip and stop timer
+ slotRemoveToolTip();
+
+ KFileIconViewItem *fitem = dynamic_cast<KFileIconViewItem *>(item);
+
+ if(!fitem) return;
+
+ KFileItem *f = fitem->fileInfo();
+
+ if(f) toolTip->setItem(f, fitem->rect(), fitem->pixmap());
+}
+
+bool SQ_FileIconViewBase::eventFilter(TQObject *o, TQEvent *e)
+{
+ if(o == viewport() || o == this)
+ {
+ int type = e->type();
+
+ if(type == TQEvent::Leave || type == TQEvent::FocusOut || type == TQEvent::Hide)
+ slotRemoveToolTip();
+ }
+
+ return KFileIconView::eventFilter(o, e);
+}
+
+/*
+ * Remove tootip.
+ */
+void SQ_FileIconViewBase::slotRemoveToolTip()
+{
+ toolTip->setItem(0);
+}
+
+// Accept drag
+void SQ_FileIconViewBase::dragEnterEvent(TQDragEnterEvent *e)
+{
+ e->accept(true);
+}
+
+/*
+ * Handle double clicks.
+ */
+void SQ_FileIconViewBase::contentsMouseDoubleClickEvent(TQMouseEvent *e)
+{
+ TQIconView::contentsMouseDoubleClickEvent(e);
+
+ TQIconViewItem *item = findItem(e->pos());
+
+ // double click on item
+ if(item)
+ emit doubleClicked(item, e->globalPos());
+
+ // double click in viewport, lets invoke browser
+ else
+ emit invokeBrowser();
+}
+
+void SQ_FileIconViewBase::updateView(const KFileItem *i)
+{
+ KFileIconViewItem *item = viewItem(i);
+
+ if(item)
+ initItemMy(item, i, true);
+}
+
+KFileIconViewItem* SQ_FileIconViewBase::viewItem(const KFileItem *item)
+{
+ return item ? reinterpret_cast<KFileIconViewItem *>((void *)item->extraData(this)) : 0;
+}
+
+void SQ_FileIconViewBase::initItemMy(KFileIconViewItem *item, const KFileItem *i, bool upd)
+{
+ if(upd)
+ item->setText(i->text(), true, true);
+
+ // determine current sorting type
+ TQDir::SortSpec spec = KFileView::sorting();
+
+ if(spec & TQDir::Time)
+ item->setKey(sortingKey((unsigned long)i->time(TDEIO::UDS_MODIFICATION_TIME), i->isDir(), spec));
+ else if(spec & TQDir::Size)
+ item->setKey(sortingKey(i->size(), i->isDir(), spec));
+ else
+ item->setKey(sortingKey(i->text(), i->isDir(), spec));
+}
+
+#include "sq_fileiconviewbase.moc"