[prev in list] [next in list] [prev in thread] [next in thread]
List: kfm-devel
Subject: Re: KLook - quick preview extension for Dolphin
From: Sergey Borovkov <serge.borovkov () gmail ! com>
Date: 2012-08-29 17:24:00
Message-ID: CACYfbRhAhGSU6=QoOX01XJk2aQH=_ERm4ZoKD28wDEjRn_y7zg () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
Here. This time fixed. Should blame my own stupidity (forgot to add 2 files
before doing git diff). For convenience I united 2 patches in 1.
On Wed, Aug 29, 2012 at 8:18 PM, Frank Reininghaus <frank78ac@googlemail.com
> wrote:
> 2012/8/28 Sergey Borovkov:
> > Here are fixed versions. (btw - to make klook icon visible you need to
> > enable it in dolphin general settings).
>
> Thanks. It seems that there are new files missing in the patch:
>
> CMake Error at
> /home/kde-devel/kde/share/apps/cmake/modules/KDE4Macros.cmake:1041
> (add_library):
> Cannot find source file:
>
> kitemviews/kitemlistklooktoggle.cpp
>
> Moreover, linking KLook fails here:
>
> Linking CXX executable klook
> /usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld:
> CMakeFiles/klook.dir/src/declarativeviewer.o: undefined reference to
> symbol 'XInternAtom'
> /usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld:
> note: 'XInternAtom' is defined in DSO /usr/lib64/libX11.so.6 so try
> adding it to the linker command line
> /usr/lib64/libX11.so.6: could not read symbols: Invalid operation
> collect2: ld returned 1 exit status
> make[2]: *** [klook] Error 1
> make[1]: *** [CMakeFiles/klook.dir/all] Error 2
> make: *** [all] Error 2
>
[Attachment #5 (text/html)]
Here. This time fixed. Should blame my own stupidity (forgot to add 2 files before \
doing git diff). For convenience I united 2 patches in 1.<br><br><div \
class="gmail_quote">On Wed, Aug 29, 2012 at 8:18 PM, Frank Reininghaus <span \
dir="ltr"><<a href="mailto:frank78ac@googlemail.com" \
target="_blank">frank78ac@googlemail.com</a>></span> wrote:<br> <blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">2012/8/28 Sergey Borovkov:<br> <div class="im">> Here are \
fixed versions. (btw - to make klook icon visible you need to<br> > enable it in \
dolphin general settings).<br> <br>
</div>Thanks. It seems that there are new files missing in the patch:<br>
<br>
CMake Error at /home/kde-devel/kde/share/apps/cmake/modules/KDE4Macros.cmake:1041<br>
(add_library):<br>
Cannot find source file:<br>
<br>
kitemviews/kitemlistklooktoggle.cpp<br>
<br>
Moreover, linking KLook fails here:<br>
<br>
Linking CXX executable klook<br>
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld:<br>
CMakeFiles/klook.dir/src/declarativeviewer.o: undefined reference to<br>
symbol 'XInternAtom'<br>
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld:<br>
note: 'XInternAtom' is defined in DSO /usr/lib64/libX11.so.6 so try<br>
adding it to the linker command line<br>
/usr/lib64/libX11.so.6: could not read symbols: Invalid operation<br>
collect2: ld returned 1 exit status<br>
make[2]: *** [klook] Error 1<br>
make[1]: *** [CMakeFiles/klook.dir/all] Error 2<br>
make: *** [all] Error 2<br>
</blockquote></div><br>
--20cf307d05b013b10504c86ad35d--
["1.patch" (application/octet-stream)]
diff --git a/dolphin/src/CMakeLists.txt b/dolphin/src/CMakeLists.txt
index 1a121f8..61ba0b6 100644
--- a/dolphin/src/CMakeLists.txt
+++ b/dolphin/src/CMakeLists.txt
@@ -27,6 +27,7 @@ set(dolphinprivate_LIB_SRCS
kitemviews/kitemlistgroupheader.cpp
kitemviews/kitemlistheader.cpp
kitemviews/kitemlistselectionmanager.cpp
+ kitemviews/kitemlistklooktoggle.cpp
kitemviews/kitemliststyleoption.cpp
kitemviews/kitemlistview.cpp
kitemviews/kitemlistwidget.cpp
diff --git a/dolphin/src/dolphinmainwindow.cpp b/dolphin/src/dolphinmainwindow.cpp
index d83c9de..9921d9f 100644
--- a/dolphin/src/dolphinmainwindow.cpp
+++ b/dolphin/src/dolphinmainwindow.cpp
@@ -85,6 +85,8 @@
#include <QClipboard>
#include <QToolButton>
#include <QSplitter>
+#include <QProcess>
+#include <QApplication>
namespace {
// Used for GeneralSettings::version() to determine whether
@@ -118,7 +120,8 @@ DolphinMainWindow::DolphinMainWindow() :
m_settingsDialog(),
m_controlButton(0),
m_updateToolBarTimer(0),
- m_lastHandleUrlStatJob(0)
+ m_lastHandleUrlStatJob(0),
+ m_isFocusOnTerminal(false)
{
// Workaround for a X11-issue in combination with KModifierInfo
// (see DolphinContextMenu::initializeModifierKeyInfo() for
@@ -236,6 +239,8 @@ DolphinMainWindow::DolphinMainWindow() :
if (!showMenu) {
createControlButton();
}
+
+ connect (qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), this, \
SLOT(focusChanged(QWidget*,QWidget*))); }
DolphinMainWindow::~DolphinMainWindow()
@@ -400,6 +405,15 @@ void DolphinMainWindow::slotSelectionChanged(const \
KFileItemList& selection) compareFilesAction->setEnabled(false);
}
+
+ //KLook
+ QAction* openInKLook = actionCollection()->action("open_in_KLook");
+ if ((selectedUrlsCount > 0) && (!m_isFocusOnTerminal)){
+ openInKLook->setEnabled(true);
+ } else {
+ openInKLook->setEnabled(false);
+ }
+
emit selectionChanged(selection);
}
@@ -1651,6 +1665,14 @@ void DolphinMainWindow::setupActions()
openInNewWindow->setText(i18nc("@action:inmenu", "Open in New Window"));
openInNewWindow->setIcon(KIcon("window-new"));
connect(openInNewWindow, SIGNAL(triggered()), this, SLOT(openInNewWindow()));
+
+ // KLook
+ KAction* openInKLook = actionCollection()->addAction("open_in_KLook");
+ openInKLook->setText(i18nc("@action:inmenu", "Preview"));
+ openInKLook->setShortcut(Qt::Key_Space);
+ openInKLook->setIcon(KIcon("klook"));
+ openInKLook->setEnabled(false);
+ connect(openInKLook, SIGNAL(triggered()), this, SLOT(previewItem()));
}
void DolphinMainWindow::setupDockWidgets()
@@ -1986,6 +2008,9 @@ void \
DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) this, \
SLOT(goBack())); connect(view, SIGNAL(goForwardRequested()),
this, SLOT(goForward()));
+ connect(view, SIGNAL(klookTrigger()),
+ this, SLOT(previewItem()));
+
const KUrlNavigator* navigator = container->urlNavigator();
connect(navigator, SIGNAL(urlChanged(KUrl)),
@@ -2130,4 +2155,51 @@ void DolphinMainWindow::UndoUiInterface::jobError(KIO::Job* \
job) }
}
+void DolphinMainWindow::previewItem()
+{
+ KFileItemList list;
+ int index = 0;
+ if ( m_activeViewContainer->view()->selectedItemsCount() > 1) {
+ list = m_activeViewContainer->view()->selectedItems();
+ } else {
+ list = m_activeViewContainer->view()->sortedItems();
+ index = list.indexOf( m_activeViewContainer->view()->selectedItems().at(0));
+ }
+ QStringList urlList;
+ foreach(KFileItem item, list)
+ {
+ urlList.append(item.url().path());
+ }
+ urlList.append("-i " + QString::number(index , 10));
+ if (!list.isEmpty())
+ {
+ QProcess* process = new QProcess();
+ connect(process,SIGNAL(finished(int)),process,SLOT(deleteLater()));
+ process->start(QString("klook"), urlList);
+ }
+}
+
+void DolphinMainWindow::focusChanged(QWidget *old, QWidget *now)
+{
+#ifndef Q_OS_WIN
+ if (now)
+ {
+ if (QString(now->metaObject()->className()).contains("Konsole::TerminalDisplay"))
+ {
+ QAction* openInKLook = actionCollection()->action("open_in_KLook");
+ m_isFocusOnTerminal = true;
+ openInKLook->setEnabled(false);
+ }
+ }
+ if (old)
+ {
+ if (QString(old->metaObject()->className()).contains("Konsole::TerminalDisplay"))
+ {
+ QAction* openInKLook = actionCollection()->action("open_in_KLook");
+ m_isFocusOnTerminal = false;
+ openInKLook->setEnabled(true);
+ }
+ }
+#endif
+}
#include "dolphinmainwindow.moc"
diff --git a/dolphin/src/dolphinmainwindow.h b/dolphin/src/dolphinmainwindow.h
index ab79fb0..f61f173 100644
--- a/dolphin/src/dolphinmainwindow.h
+++ b/dolphin/src/dolphinmainwindow.h
@@ -36,6 +36,7 @@
typedef KIO::FileUndoManager::CommandType CommandType;
+class DolphinDockWidget;
class DolphinViewActionHandler;
class DolphinApplication;
class DolphinSettingsDialog;
@@ -51,6 +52,7 @@ class KUrl;
class QSplitter;
class QToolButton;
class QVBoxLayout;
+class Panel;
/**
* @short Main window for Dolphin.
@@ -102,6 +104,8 @@ public:
*/
KNewFileMenu* newFileMenu() const;
+ void focusChanged(QWidget *old, QWidget *now);
+
public slots:
/**
* Pastes the clipboard data into the currently selected folder
@@ -367,6 +371,12 @@ private slots:
void openInNewTab();
/**
+ * Opens the selected files in KLook.
+ */
+
+ void previewItem();
+
+ /**
* Opens the selected folder in a new window.
*/
void openInNewWindow();
@@ -588,6 +598,7 @@ private:
QTimer* m_updateToolBarTimer;
KIO::Job* m_lastHandleUrlStatJob;
+ bool m_isFocusOnTerminal;
};
inline DolphinViewContainer* DolphinMainWindow::activeViewContainer() const
diff --git a/dolphin/src/kitemviews/kfileitemlistwidget.cpp \
b/dolphin/src/kitemviews/kfileitemlistwidget.cpp index 3a77241..b816fb8 100644
--- a/dolphin/src/kitemviews/kfileitemlistwidget.cpp
+++ b/dolphin/src/kitemviews/kfileitemlistwidget.cpp
@@ -70,6 +70,44 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& \
role, return text;
}
+QRectF KFileItemListWidget::klookToggleRect() const
+{
+ const_cast<KFileItemListWidget *>(this)->triggerCacheRefreshing();
+
+ const int iconHeight = styleOption().iconSize;
+
+ int toggleSize = KIconLoader::SizeSmall;
+ if (iconHeight >= KIconLoader::SizeEnormous) {
+ toggleSize = KIconLoader::SizeMedium;
+ } else if (iconHeight >= KIconLoader::SizeLarge) {
+ toggleSize = KIconLoader::SizeSmallMedium;
+ }
+
+ QPointF pos = QPointF(iconRect().topRight().rx() - toggleSize, \
iconRect().topRight().ry()); +
+ // If the selection toggle has a very small distance to the
+ // widget borders, the size of the selection toggle will get
+ // increased to prevent an accidental clicking of the item
+ // when trying to hit the toggle.
+
+ const int widgetHeight = size().height();
+ const int widgetWidth = size().width();
+ const int minMargin = 2;
+
+ if (toggleSize + minMargin * 2 >= widgetHeight) {
+ pos.rx() -= (widgetHeight - toggleSize) / 2;
+ toggleSize = widgetHeight;
+ pos.setY(0);
+ }
+ if (toggleSize + minMargin * 2 >= widgetWidth) {
+ pos.ry() -= (widgetWidth - toggleSize) / 2;
+ toggleSize = widgetWidth;
+ pos.setX(0);
+ }
+
+ return QRectF(pos, QSizeF(toggleSize, toggleSize));
+}
+
KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant* informant, \
QGraphicsItem* parent) : KStandardItemListWidget(informant, parent)
{
diff --git a/dolphin/src/kitemviews/kfileitemlistwidget.h \
b/dolphin/src/kitemviews/kfileitemlistwidget.h index 24c6778..aea5636 100644
--- a/dolphin/src/kitemviews/kfileitemlistwidget.h
+++ b/dolphin/src/kitemviews/kfileitemlistwidget.h
@@ -43,6 +43,7 @@ public:
virtual ~KFileItemListWidget();
static KItemListWidgetInformant* createInformant();
+ virtual QRectF klookToggleRect() const;
protected:
virtual bool isRoleRightAligned(const QByteArray& role) const;
diff --git a/dolphin/src/kitemviews/kitemlistcontroller.cpp \
b/dolphin/src/kitemviews/kitemlistcontroller.cpp index 88f5d9f..c3c1d3d 100644
--- a/dolphin/src/kitemviews/kitemlistcontroller.cpp
+++ b/dolphin/src/kitemviews/kitemlistcontroller.cpp
@@ -510,6 +510,13 @@ bool \
KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const \
m_selectionManager->beginAnchoredSelection(m_pressedIndex); return true;
}
+ if (m_view->isAboveKlookToggle(m_pressedIndex, m_pressedMousePos)){
+ m_selectionManager->setSelected(m_pressedIndex, 1, \
KItemListSelectionManager::Select); + \
m_selectionManager->setCurrentItem(m_pressedIndex); + \
m_selectionManager->beginAnchoredSelection(m_pressedIndex); + emit \
klookTrigger(); + return true;
+ }
const bool shiftPressed = event->modifiers() & Qt::ShiftModifier;
const bool controlPressed = event->modifiers() & Qt::ControlModifier;
diff --git a/dolphin/src/kitemviews/kitemlistcontroller.h \
b/dolphin/src/kitemviews/kitemlistcontroller.h index a881526..0d4be2f 100644
--- a/dolphin/src/kitemviews/kitemlistcontroller.h
+++ b/dolphin/src/kitemviews/kitemlistcontroller.h
@@ -216,6 +216,8 @@ signals:
void modelChanged(KItemModelBase* current, KItemModelBase* previous);
void viewChanged(KItemListView* current, KItemListView* previous);
+ void klookTrigger();
+
private slots:
void slotViewScrollOffsetChanged(qreal current, qreal previous);
diff --git a/dolphin/src/kitemviews/kitemlistklooktoggle.cpp \
b/dolphin/src/kitemviews/kitemlistklooktoggle.cpp new file mode 100644
index 0000000..ea5200e
--- /dev/null
+++ b/dolphin/src/kitemviews/kitemlistklooktoggle.cpp
@@ -0,0 +1,106 @@
+/***************************************************************************
+ * Copyright (C) 2011 by Peter Penz <peter.penz19@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. *
+ * *
+ * 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. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "kitemlistklooktoggle_p.h"
+
+#include <KIconEffect>
+#include <KIconLoader>
+#include <QPainter>
+
+#include <KDebug>
+
+KItemListKlookToggle::KItemListKlookToggle(QGraphicsItem* parent) :
+ QGraphicsWidget(parent, 0),
+ m_hovered(false)
+{
+ setAcceptHoverEvents(true);
+}
+
+KItemListKlookToggle::~KItemListKlookToggle()
+{
+}
+/*
+void KItemListKlookToggle::setChecked(bool checked)
+{
+ if (m_checked != checked) {
+ m_checked = checked;
+ m_pixmap = QPixmap();
+ update();
+ }
+}
+*/
+/*
+bool KItemListKlookToggle::isChecked() const
+{
+ return m_checked;
+}
+*/
+void KItemListKlookToggle::paint(QPainter* painter, const QStyleOptionGraphicsItem* \
option, QWidget* widget) +{
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+
+ if (m_pixmap.isNull()) {
+ updatePixmap();
+ }
+
+ const qreal x = (size().width() - qreal(m_pixmap.width())) / 2;
+ const qreal y = (size().height() - qreal(m_pixmap.height())) / 2;
+ painter->drawPixmap(x, y, m_pixmap);
+}
+
+void KItemListKlookToggle::hoverEnterEvent(QGraphicsSceneHoverEvent* event)
+{
+ QGraphicsWidget::hoverEnterEvent(event);
+ m_hovered = true;
+ m_pixmap = QPixmap();
+}
+
+void KItemListKlookToggle::hoverLeaveEvent(QGraphicsSceneHoverEvent* event)
+{
+ QGraphicsWidget::hoverLeaveEvent(event);
+ m_hovered = false;
+ m_pixmap = QPixmap();
+}
+
+void KItemListKlookToggle::updatePixmap()
+{
+ const char* icon = "klook";
+
+ int iconSize = qMin(size().width(), size().height());
+ if (iconSize < KIconLoader::SizeSmallMedium) {
+ iconSize = KIconLoader::SizeSmall;
+ } else if (iconSize < KIconLoader::SizeMedium) {
+ iconSize = KIconLoader::SizeSmallMedium;
+ } else if (iconSize < KIconLoader::SizeLarge) {
+ iconSize = KIconLoader::SizeMedium;
+ } else if (iconSize < KIconLoader::SizeHuge) {
+ iconSize = KIconLoader::SizeLarge;
+ } else if (iconSize < KIconLoader::SizeEnormous) {
+ iconSize = KIconLoader::SizeHuge;
+ }
+
+ m_pixmap = KIconLoader::global()->loadIcon(QLatin1String(icon), \
KIconLoader::NoGroup, iconSize); +
+ if (m_hovered) {
+ KIconLoader::global()->iconEffect()->apply(m_pixmap, KIconLoader::Desktop, \
KIconLoader::ActiveState); + }
+}
+
+#include "kitemlistklooktoggle_p.moc"
diff --git a/dolphin/src/kitemviews/kitemlistklooktoggle_p.h \
b/dolphin/src/kitemviews/kitemlistklooktoggle_p.h new file mode 100644
index 0000000..bf5923e
--- /dev/null
+++ b/dolphin/src/kitemviews/kitemlistklooktoggle_p.h
@@ -0,0 +1,61 @@
+/***************************************************************************
+ * Copyright (C) 2011 by Peter Penz <peter.penz19@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. *
+ * *
+ * 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. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#ifndef KITEMLISTKLOOKTOGGLE_H
+#define KITEMLISTKLOOKTOGGLE_H
+
+#include <libdolphin_export.h>
+
+#include <QGraphicsWidget>
+#include <QPixmap>
+
+class QPropertyAnimation;
+
+/**
+ * @brief Allows to launch klook by clicking on icon overlay
+ */
+class LIBDOLPHINPRIVATE_EXPORT KItemListKlookToggle : public QGraphicsWidget
+{
+ Q_OBJECT
+
+public:
+ KItemListKlookToggle(QGraphicsItem* parent);
+ virtual ~KItemListKlookToggle();
+
+ //void setChecked(bool checked);
+ //bool isChecked() const;
+
+ virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, \
QWidget* widget = 0); +
+protected:
+ virtual void hoverEnterEvent(QGraphicsSceneHoverEvent* event);
+ virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent* event);
+
+private:
+ void updatePixmap();
+
+private:
+ //bool m_checked;
+ bool m_hovered;
+ QPixmap m_pixmap;
+};
+
+#endif
+
+
diff --git a/dolphin/src/kitemviews/kitemlistview.cpp \
b/dolphin/src/kitemviews/kitemlistview.cpp index 72b3fd8..1519923 100644
--- a/dolphin/src/kitemviews/kitemlistview.cpp
+++ b/dolphin/src/kitemviews/kitemlistview.cpp
@@ -55,6 +55,7 @@ namespace {
KItemListView::KItemListView(QGraphicsWidget* parent) :
QGraphicsWidget(parent),
m_enabledSelectionToggles(false),
+ m_enabledKlookToggles(false),
m_grouped(false),
m_supportsItemExpanding(false),
m_editingRole(false),
@@ -269,6 +270,25 @@ bool KItemListView::enabledSelectionToggles() const
return m_enabledSelectionToggles;
}
+void KItemListView::setEnabledKlookToggles(bool enabled)
+{
+ if (m_enabledKlookToggles != enabled) {
+ m_enabledKlookToggles = enabled;
+
+ QHashIterator<int, KItemListWidget*> it(m_visibleItems);
+ while (it.hasNext()) {
+ it.next();
+ it.value()->setEnabledKlookToggle(enabled);
+ }
+ }
+}
+
+bool KItemListView::enabledKlookToggles() const
+{
+ return m_enabledKlookToggles;
+}
+
+
KItemListController* KItemListView::controller() const
{
return m_controller;
@@ -411,6 +431,25 @@ bool KItemListView::isAboveExpansionToggle(int index, const \
QPointF& pos) const return false;
}
+bool KItemListView::isAboveKlookToggle(int index, const QPointF& pos) const
+{
+
+ if (!m_enabledKlookToggles) {
+ return false;
+ }
+
+ const KItemListWidget* widget = m_visibleItems.value(index);
+ if (widget) {
+ const QRectF selectionToggleRect = widget->klookToggleRect();
+ if (!selectionToggleRect.isEmpty()) {
+ const QPointF mappedPos = widget->mapFromItem(this, pos);
+ return selectionToggleRect.contains(mappedPos);
+ }
+ }
+ return false;
+}
+
+
int KItemListView::firstVisibleIndex() const
{
return m_layouter->firstVisibleIndex();
@@ -1880,6 +1919,7 @@ void KItemListView::updateWidgetProperties(KItemListWidget* \
widget, int index) widget->setSelected(selectionManager->isSelected(index));
widget->setHovered(false);
widget->setEnabledSelectionToggle(enabledSelectionToggles());
+ widget->setEnabledKlookToggle(enabledKlookToggles());
widget->setIndex(index);
widget->setData(m_model->data(index));
widget->setSiblingsInformation(QBitArray());
diff --git a/dolphin/src/kitemviews/kitemlistview.h \
b/dolphin/src/kitemviews/kitemlistview.h index 5723b9a..b8c956e 100644
--- a/dolphin/src/kitemviews/kitemlistview.h
+++ b/dolphin/src/kitemviews/kitemlistview.h
@@ -110,6 +110,9 @@ public:
void setEnabledSelectionToggles(bool enabled);
bool enabledSelectionToggles() const;
+ void setEnabledKlookToggles(bool enabled);
+ bool enabledKlookToggles() const;
+
/**
* @return Controller of the item-list. The controller gets
* initialized by KItemListController::setView() and will
@@ -173,6 +176,7 @@ public:
bool isAboveSelectionToggle(int index, const QPointF& pos) const;
bool isAboveExpansionToggle(int index, const QPointF& pos) const;
+ bool isAboveKlookToggle(int index, const QPointF& pos) const;
/**
* @return Index of the first item that is at least partly visible.
* -1 is returned if the model contains no items.
@@ -683,6 +687,7 @@ private:
private:
bool m_enabledSelectionToggles;
+ bool m_enabledKlookToggles;
bool m_grouped;
bool m_supportsItemExpanding;
bool m_editingRole;
diff --git a/dolphin/src/kitemviews/kitemlistwidget.cpp \
b/dolphin/src/kitemviews/kitemlistwidget.cpp index 6a7111a..d4f70e1 100644
--- a/dolphin/src/kitemviews/kitemlistwidget.cpp
+++ b/dolphin/src/kitemviews/kitemlistwidget.cpp
@@ -22,6 +22,7 @@
#include "kitemlistwidget.h"
+#include "kitemlistklooktoggle_p.h"
#include "kitemlistview.h"
#include "kitemmodelbase.h"
@@ -52,6 +53,7 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant* \
informant, QGraphicsI m_hovered(false),
m_alternateBackground(false),
m_enabledSelectionToggle(false),
+ m_enabledKlookToggle(false),
m_data(),
m_visibleRoles(),
m_columnWidths(),
@@ -61,7 +63,8 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant* \
informant, QGraphicsI m_hoverCache(0),
m_hoverAnimation(0),
m_selectionToggle(0),
- m_editedRole()
+ m_editedRole(),
+ m_klookToggle(0)
{
}
@@ -76,6 +79,9 @@ void KItemListWidget::setIndex(int index)
delete m_selectionToggle;
m_selectionToggle = 0;
+ delete m_klookToggle;
+ m_klookToggle = 0;
+
if (m_hoverAnimation) {
m_hoverAnimation->stop();
m_hoverOpacity = 0;
@@ -263,6 +269,9 @@ void KItemListWidget::setHovered(bool hovered)
if (m_enabledSelectionToggle && !(QApplication::mouseButtons() & \
Qt::LeftButton)) { initializeSelectionToggle();
}
+ if (m_enabledKlookToggle && !(QApplication::mouseButtons() & \
Qt::LeftButton)) { + initializeKlookToggle();
+ }
} else {
m_hoverAnimation->setStartValue(hoverOpacity());
m_hoverAnimation->setEndValue(0.0);
@@ -306,6 +315,19 @@ bool KItemListWidget::enabledSelectionToggle() const
return m_enabledSelectionToggle;
}
+void KItemListWidget::setEnabledKlookToggle(bool enable)
+{
+ if (m_enabledKlookToggle != enable) {
+ m_enabledKlookToggle = enable;
+ update();
+ }
+}
+
+bool KItemListWidget::enabledKlookToggle() const
+{
+ return m_enabledKlookToggle;
+}
+
void KItemListWidget::setSiblingsInformation(const QBitArray& siblings)
{
const QBitArray previous = m_siblingsInfo;
@@ -355,6 +377,12 @@ QRectF KItemListWidget::selectionToggleRect() const
return QRectF();
}
+QRectF KItemListWidget::klookToggleRect() const
+{
+ return QRectF();
+}
+
+
QRectF KItemListWidget::expansionToggleRect() const
{
return QRectF();
@@ -463,6 +491,8 @@ void KItemListWidget::slotHoverAnimationFinished()
if (!m_hovered) {
delete m_selectionToggle;
m_selectionToggle = 0;
+ delete m_klookToggle;
+ m_klookToggle = 0;
}
}
@@ -481,12 +511,29 @@ void KItemListWidget::initializeSelectionToggle()
m_selectionToggle->setChecked(isSelected());
}
+void KItemListWidget::initializeKlookToggle()
+{
+ Q_ASSERT(m_enabledKlookToggle);
+
+ if (!m_klookToggle) {
+ m_klookToggle = new KItemListKlookToggle(this);
+ }
+
+ const QRectF toggleRect = klookToggleRect();;
+ m_klookToggle->setPos(toggleRect.topLeft());
+ m_klookToggle->resize(toggleRect.size());
+
+}
+
void KItemListWidget::setHoverOpacity(qreal opacity)
{
m_hoverOpacity = opacity;
if (m_selectionToggle) {
m_selectionToggle->setOpacity(opacity);
}
+ if (m_klookToggle) {
+ m_klookToggle->setOpacity(opacity);
+ }
if (m_hoverOpacity <= 0.0) {
delete m_hoverCache;
diff --git a/dolphin/src/kitemviews/kitemlistwidget.h \
b/dolphin/src/kitemviews/kitemlistwidget.h index 55181fa..7fd593c 100644
--- a/dolphin/src/kitemviews/kitemlistwidget.h
+++ b/dolphin/src/kitemviews/kitemlistwidget.h
@@ -33,6 +33,7 @@
class KItemListSelectionToggle;
class KItemListView;
+class KItemListKlookToggle;
class QPropertyAnimation;
/**
@@ -114,6 +115,9 @@ public:
void setEnabledSelectionToggle(bool enabled);
bool enabledSelectionToggle() const;
+ void setEnabledKlookToggle(bool enable);
+ bool enabledKlookToggle() const;
+
/**
* Sets the sibling information for the item and all of its parents.
* The sibling information of the upper most parent is represented by
@@ -181,6 +185,12 @@ public:
*/
virtual QPixmap createDragPixmap(const QStyleOptionGraphicsItem* option, \
QWidget* widget = 0);
+ /**
+ * @return Rectangle for the klook-toggle that is used for item preview.
+ */
+ virtual QRectF klookToggleRect() const;
+
+
signals:
void roleEditingCanceled(int index, const QByteArray& role, const QVariant& \
value);
void roleEditingFinished(int index, const QByteArray& role, const QVariant& \
value); @@ -211,6 +221,7 @@ private slots:
private:
void initializeSelectionToggle();
+ void initializeKlookToggle();
void setHoverOpacity(qreal opacity);
void clearHoverCache();
void drawItemStyleOption(QPainter* painter, QWidget* widget, QStyle::State \
styleState); @@ -225,6 +236,7 @@ private:
bool m_hovered;
bool m_alternateBackground;
bool m_enabledSelectionToggle;
+ bool m_enabledKlookToggle;
QHash<QByteArray, QVariant> m_data;
QList<QByteArray> m_visibleRoles;
QHash<QByteArray, qreal> m_columnWidths;
@@ -238,6 +250,8 @@ private:
KItemListSelectionToggle* m_selectionToggle;
QByteArray m_editedRole;
+
+ KItemListKlookToggle* m_klookToggle;
};
inline const KItemListWidgetInformant* KItemListWidget::informant() const
diff --git a/dolphin/src/kitemviews/kstandarditemlistwidget.h \
b/dolphin/src/kitemviews/kstandarditemlistwidget.h index 787722d..3bc9228 100644
--- a/dolphin/src/kitemviews/kstandarditemlistwidget.h
+++ b/dolphin/src/kitemviews/kstandarditemlistwidget.h
@@ -157,6 +157,7 @@ protected:
virtual void resizeEvent(QGraphicsSceneResizeEvent* event);
virtual void showEvent(QShowEvent* event);
virtual void hideEvent(QHideEvent* event);
+ void triggerCacheRefreshing();
private slots:
void slotCutItemsChanged();
@@ -164,7 +165,6 @@ private slots:
void slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& \
value);
private:
- void triggerCacheRefreshing();
void updateExpansionArea();
void updatePixmapCache();
diff --git a/dolphin/src/settings/dolphin_generalsettings.kcfg \
b/dolphin/src/settings/dolphin_generalsettings.kcfg index 9f261dc..67d9c30 100644
--- a/dolphin/src/settings/dolphin_generalsettings.kcfg
+++ b/dolphin/src/settings/dolphin_generalsettings.kcfg
@@ -56,6 +56,10 @@
<label>Show selection toggle</label>
<default>true</default>
</entry>
+ <entry name="ShowKlookToggle" type="Bool">
+ <label>Show preview toggle</label>
+ <default>false</default>
+ </entry>
<entry name="ShowToolTips" type="Bool">
<label>Show tooltips</label>
<default>false</default>
diff --git a/dolphin/src/settings/general/behaviorsettingspage.cpp \
b/dolphin/src/settings/general/behaviorsettingspage.cpp index 1ade93c..0f3ed6f 100644
--- a/dolphin/src/settings/general/behaviorsettingspage.cpp
+++ b/dolphin/src/settings/general/behaviorsettingspage.cpp
@@ -42,7 +42,8 @@ BehaviorSettingsPage::BehaviorSettingsPage(const KUrl& url, \
QWidget* parent) : m_globalViewProps(0),
m_showToolTips(0),
m_showSelectionToggle(0),
- m_naturalSorting(0)
+ m_naturalSorting(0),
+ m_showKlookToggle(0)
{
QVBoxLayout* topLayout = new QVBoxLayout(this);
@@ -67,8 +68,13 @@ BehaviorSettingsPage::BehaviorSettingsPage(const KUrl& url, \
QWidget* parent) :
m_naturalSorting = new QCheckBox(i18nc("option:check", "Natural sorting of \
items"), this);
topLayout->addWidget(viewPropsBox);
+
+ // 'Show klook toggle'
+ m_showKlookToggle = new QCheckBox(i18nc("@option:check", "Show preview \
marker"), this); +
topLayout->addWidget(m_showToolTips);
topLayout->addWidget(m_showSelectionToggle);
+ topLayout->addWidget(m_showKlookToggle);
topLayout->addWidget(m_naturalSorting);
topLayout->addStretch();
@@ -78,6 +84,7 @@ BehaviorSettingsPage::BehaviorSettingsPage(const KUrl& url, \
QWidget* parent) :
connect(m_globalViewProps, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
connect(m_showToolTips, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
connect(m_showSelectionToggle, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
+ connect(m_showKlookToggle, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
connect(m_naturalSorting, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
}
@@ -106,6 +113,7 @@ void BehaviorSettingsPage::applySettings()
globalProps.setDirProperties(props);
}
+ settings->setShowKlookToggle(m_showKlookToggle->isChecked());
const bool naturalSorting = m_naturalSorting->isChecked();
if (KGlobalSettings::naturalSorting() != naturalSorting) {
KConfigGroup group(KGlobal::config(), "KDE");
@@ -130,6 +138,7 @@ void BehaviorSettingsPage::loadSettings()
m_showToolTips->setChecked(GeneralSettings::showToolTips());
m_showSelectionToggle->setChecked(GeneralSettings::showSelectionToggle());
+ m_showKlookToggle->setChecked(GeneralSettings::showKlookToggle());
m_naturalSorting->setChecked(KGlobalSettings::naturalSorting());
}
diff --git a/dolphin/src/settings/general/behaviorsettingspage.h \
b/dolphin/src/settings/general/behaviorsettingspage.h index 3989862..8e810fe 100644
--- a/dolphin/src/settings/general/behaviorsettingspage.h
+++ b/dolphin/src/settings/general/behaviorsettingspage.h
@@ -58,6 +58,7 @@ private:
QLabel* m_configureToolTips;
QCheckBox* m_showSelectionToggle;
QCheckBox* m_naturalSorting;
+ QCheckBox* m_showKlookToggle;
};
#endif
diff --git a/dolphin/src/views/dolphinitemlistview.cpp \
b/dolphin/src/views/dolphinitemlistview.cpp index 039b5f2..81694dc 100644
--- a/dolphin/src/views/dolphinitemlistview.cpp
+++ b/dolphin/src/views/dolphinitemlistview.cpp
@@ -41,6 +41,7 @@ DolphinItemListView::DolphinItemListView(QGraphicsWidget* parent) :
KFileItemListView(parent),
m_zoomLevel(0)
{
+ setEnabledKlookToggles(GeneralSettings::showKlookToggle());
updateFont();
updateGridSize();
}
@@ -89,6 +90,7 @@ void DolphinItemListView::readSettings()
beginTransaction();
setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+ setEnabledKlookToggles(GeneralSettings::showKlookToggle());
const bool expandableFolders = (itemLayout() == \
KFileItemListView::DetailsLayout) &&
DetailsModeSettings::expandableFolders();
diff --git a/dolphin/src/views/dolphinview.cpp b/dolphin/src/views/dolphinview.cpp
index 8050415..86dff91 100644
--- a/dolphin/src/views/dolphinview.cpp
+++ b/dolphin/src/views/dolphinview.cpp
@@ -148,6 +148,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) :
connect(controller, SIGNAL(itemUnhovered(int)), this, \
SLOT(slotItemUnhovered(int)));
connect(controller, SIGNAL(itemDropEvent(int,QGraphicsSceneDragDropEvent*)), \
this, SLOT(slotItemDropEvent(int,QGraphicsSceneDragDropEvent*)));
connect(controller, SIGNAL(modelChanged(KItemModelBase*,KItemModelBase*)), this, \
SLOT(slotModelChanged(KItemModelBase*,KItemModelBase*))); + connect(controller, \
SIGNAL(klookTrigger()), this, SIGNAL(klookTrigger()));
connect(m_model, SIGNAL(directoryLoadingStarted()), this, \
SLOT(slotDirectoryLoadingStarted()));
connect(m_model, SIGNAL(directoryLoadingCompleted()), this, \
SLOT(slotDirectoryLoadingCompleted())); @@ -1528,4 +1529,14 @@ KUrl \
DolphinView::viewPropertiesUrl() const return url;
}
+KFileItemList DolphinView::sortedItems() const
+{
+ KFileItemList list;
+ for (int i = 0; i < m_model->count(); i++) {
+ list.append(m_model->fileItem(i));
+ }
+ return list;
+}
+
+
#include "dolphinview.moc"
diff --git a/dolphin/src/views/dolphinview.h b/dolphin/src/views/dolphinview.h
index 10f63c5..a53ee8a 100644
--- a/dolphin/src/views/dolphinview.h
+++ b/dolphin/src/views/dolphinview.h
@@ -295,6 +295,8 @@ public:
*/
void setViewPropertiesContext(const QString& context);
QString viewPropertiesContext() const;
+
+ KFileItemList sortedItems() const;
public slots:
/**
@@ -506,6 +508,8 @@ signals:
*/
void writeStateChanged(bool isFolderWritable);
+ void klookTrigger();
+
/**
* Is emitted if the URL should be changed to the previous URL of the
* history (e.g. because the "back"-mousebutton has been pressed).
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic