diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/ktreeview.cpp | 178 | ||||
| -rw-r--r-- | src/ktreeview.h | 42 | ||||
| -rw-r--r-- | src/ktreeview_p.h | 63 | ||||
| -rw-r--r-- | src/sidebartreeview.cpp | 2 | ||||
| -rw-r--r-- | src/sidebartreeview.h | 4 |
6 files changed, 287 insertions, 3 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 80353a268..6d96b7b57 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -105,6 +105,7 @@ set(dolphin_SRCS iconsizedialog.cpp iconsviewsettingspage.cpp infosidebarpage.cpp + ktreeview.cpp main.cpp metadatawidget.cpp metatextlabel.cpp diff --git a/src/ktreeview.cpp b/src/ktreeview.cpp new file mode 100644 index 000000000..7448614f9 --- /dev/null +++ b/src/ktreeview.cpp @@ -0,0 +1,178 @@ +/*************************************************************************** + * Copyright (C) 2008 by <haraldhv (at) stud.ntnu.no> * + * * + * 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 <KGlobalSettings> + +#include <QDebug> +#include <QScrollBar> + +#include "ktreeview.h" +#include "ktreeview_p.h" + +KTreeView::KTreeViewPrivate::KTreeViewPrivate(KTreeView *parent) + : parent(parent), + autoHorizontalScroll(true), + scrollTowards(0), + scrollPixels(5), + scrollDelay(50), + leftSideMargin(30), + considerDelay(500), + topLeftPoint(QPoint(10,10)) +{ + Q_ASSERT(parent->verticalScrollBar()); + + considerDelayTimer.setInterval(considerDelay); + + connect( &considerDelayTimer, + SIGNAL(timeout()), + this, + SLOT(considerAutoScroll()) + ); + + connect( parent->verticalScrollBar(), + SIGNAL(rangeChanged(int, int)), + &considerDelayTimer, + SLOT(start()) + ); + + connect( parent->verticalScrollBar(), + SIGNAL(valueChanged(int)), + &considerDelayTimer, + SLOT(start()) + ); + + connect( parent, + SIGNAL( collapsed ( const QModelIndex &)), + &considerDelayTimer, + SLOT(start()) + ); + + connect( parent, + SIGNAL( expanded ( const QModelIndex &)), + &considerDelayTimer, + SLOT(start()) + ); + +} + +void KTreeView::KTreeViewPrivate::considerAutoScroll() +{ + qDebug() << "Considering auto scroll"; + + QModelIndex i = parent->indexAt(topLeftPoint); + int smallest = parent->width(); + + while (i.isValid()) + { + QRect r = parent->visualRect(i); + if (r.top() > parent->height()) + break; + + int leftSide = r.left(); + + smallest = qMin(smallest, leftSide); + i = parent->indexBelow(i); + } + + int currentScroll = parent->horizontalScrollBar()->value(); + + setScrollTowards(smallest + currentScroll - leftSideMargin); + + considerDelayTimer.stop(); + +} + +void KTreeView::KTreeViewPrivate::autoScrollTimeout() +{ + + Q_ASSERT(parent); + + QScrollBar *scrollBar = parent->horizontalScrollBar(); + if (scrollBar == NULL) + { + qDebug() << "Warning: no scrollbar present, but told to scroll."; + scrollTimer.stop(); + return; + } + + int currentScroll = scrollBar->value(); + + int difference = currentScroll - scrollTowards; + + if (qAbs(difference) < scrollPixels) + { + scrollBar->setValue(scrollTowards); + scrollTimer.stop(); + return; + } + + if (difference < 0) + { + scrollBar->setValue(currentScroll + scrollPixels); + } + else + { + scrollBar->setValue(currentScroll - scrollPixels); + } +} + +void KTreeView::KTreeViewPrivate::setScrollTowards( int scrollTowards ) +{ + if (scrollTowards < 0) + scrollTowards = 0; + this->scrollTowards = scrollTowards; + scrollTimer.start(scrollDelay); +} + +//************************************************ + +KTreeView::KTreeView(QWidget *parent) + : QTreeView(parent) + , d(new KTreeViewPrivate(this)) +{ + /* The graphicEffectsLevel was not available in the 4.0.3 version of + * the libs I was compiling with, so this is left out for now and + * enabled by default... + */ + //if (KGlobalSettings::graphicEffectsLevel() >= + //KGlobalSettings::SimpleAnimationEffects) + //{ + setAutoHorizontalScroll(true); + //} + connect( + &d->scrollTimer, + SIGNAL(timeout()), + d, + SLOT(autoScrollTimeout()) + ); + +} + +void KTreeView::setAutoHorizontalScroll(bool value) +{ + d->autoHorizontalScroll = value; +} + +bool KTreeView::autoHorizontalScroll( void ) +{ + return d->autoHorizontalScroll; +} + +#include "ktreeview.moc" +#include "ktreeview_p.moc" diff --git a/src/ktreeview.h b/src/ktreeview.h new file mode 100644 index 000000000..93b4b892e --- /dev/null +++ b/src/ktreeview.h @@ -0,0 +1,42 @@ +/*************************************************************************** + * Copyright (C) 2008 by <haraldhv (at) stud.ntnu.no> * + * * + * 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 _KTREEVIEW_H_ +#define _KTREEVIEW_H_ + +#include <QTreeView> + +class KTreeView : public QTreeView +{ + + Q_OBJECT + + public: + KTreeView(QWidget *parent = NULL); + + void setAutoHorizontalScroll(bool value); + bool autoHorizontalScroll( void ); + + private: + class KTreeViewPrivate; + KTreeViewPrivate *d; + +}; + +#endif /* ifndef _KTREEVIEW_H_ */ diff --git a/src/ktreeview_p.h b/src/ktreeview_p.h new file mode 100644 index 000000000..eb71999f7 --- /dev/null +++ b/src/ktreeview_p.h @@ -0,0 +1,63 @@ +/*************************************************************************** + * Copyright (C) 2008 by <haraldhv (at) stud.ntnu.no> * + * * + * 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 _KTREEVIEW_P_H_ +#define _KTREEVIEW_P_H_ + +#include <QTimer> +#include <QObject> + +#include "ktreeview.h" + +class KTreeView::KTreeViewPrivate : public QObject +{ + Q_OBJECT + + + + public Q_SLOTS: + void autoScrollTimeout(); + void considerAutoScroll(); + + public: + + KTreeViewPrivate(KTreeView *parent); + //~KTreeViewPrivate(); + KTreeView *parent; + + //Function for start scrolling towards a certain position + void setScrollTowards( int scrollTowards ); + + //Privates for doing the scrolling + QTimer scrollTimer; + QTimer considerDelayTimer; + bool autoHorizontalScroll; + int scrollTowards; + + //Constants + const int scrollPixels; + const int scrollDelay; + const int leftSideMargin; + const int considerDelay; + const QPoint topLeftPoint; + + +}; + +#endif /* ifndef _KTREEVIEW_P_H_ */ diff --git a/src/sidebartreeview.cpp b/src/sidebartreeview.cpp index f14ddbacb..efe406a0e 100644 --- a/src/sidebartreeview.cpp +++ b/src/sidebartreeview.cpp @@ -30,7 +30,7 @@ #include <QScrollBar> SidebarTreeView::SidebarTreeView(QWidget* parent) : - QTreeView(parent) + KTreeView(parent) { setAcceptDrops(true); setUniformRowHeights(true); diff --git a/src/sidebartreeview.h b/src/sidebartreeview.h index a181290f2..f692be3a2 100644 --- a/src/sidebartreeview.h +++ b/src/sidebartreeview.h @@ -21,14 +21,14 @@ #define SIDEBARTREEVIEW_H #include <kurl.h> -#include <QtGui/QTreeView> +#include <ktreeview.h> /** * @brief Tree view widget which is used for the sidebar panel. * * @see TreeViewSidebarPage */ -class SidebarTreeView : public QTreeView +class SidebarTreeView : public KTreeView { Q_OBJECT |
