From: <ck...@us...> - 2009-02-16 22:28:16
|
Revision: 6212 http://krusader.svn.sourceforge.net/krusader/?rev=6212&view=rev Author: ckarai Date: 2009-02-16 22:24:31 +0000 (Mon, 16 Feb 2009) Log Message: ----------- InterView: minor fixes Modified Paths: -------------- trunk/krusader_kde4/krusader/Panel/krinterview.cpp trunk/krusader_kde4/krusader/Panel/krinterview.h trunk/krusader_kde4/krusader/Panel/krmousehandler.cpp trunk/krusader_kde4/krusader/Panel/krmousehandler.h trunk/krusader_kde4/krusader/Panel/krview.cpp trunk/krusader_kde4/krusader/Panel/krview.h Modified: trunk/krusader_kde4/krusader/Panel/krinterview.cpp =================================================================== --- trunk/krusader_kde4/krusader/Panel/krinterview.cpp 2009-02-15 18:05:40 UTC (rev 6211) +++ trunk/krusader_kde4/krusader/Panel/krinterview.cpp 2009-02-16 22:24:31 UTC (rev 6212) @@ -91,6 +91,7 @@ setStyle( new KrStyleProxy() ); setItemDelegate( new KrInterViewItemDelegate() ); + setMouseTracking( true ); } KrInterView::~KrInterView() @@ -321,12 +322,38 @@ void KrInterView::mousePressEvent ( QMouseEvent * ev ) { - if( _mouseHandler->mousePressEvent( ev ) ) + if( !_mouseHandler->mousePressEvent( ev ) ) QTreeView::mousePressEvent( ev ); } +void KrInterView::mouseReleaseEvent ( QMouseEvent * ev ) +{ + if( !_mouseHandler->mouseReleaseEvent( ev ) ) + QTreeView::mouseReleaseEvent( ev ); +} + +void KrInterView::mouseDoubleClickEvent ( QMouseEvent *ev ) +{ + if( !_mouseHandler->mouseDoubleClickEvent( ev ) ) + QTreeView::mouseDoubleClickEvent( ev ); +} + +void KrInterView::mouseMoveEvent ( QMouseEvent * ev ) +{ + if( !_mouseHandler->mouseMoveEvent( ev ) ) + QTreeView::mouseMoveEvent( ev ); +} + +void KrInterView::wheelEvent ( QWheelEvent *ev ) +{ + if( !_mouseHandler->wheelEvent( ev ) ) + QTreeView::wheelEvent( ev ); +} + KrInterViewItem * KrInterView::getKrInterViewItem( const QModelIndex & ndx ) { + if( !ndx.isValid() ) + return 0; vfile * vf = _model->vfileAt( ndx ); if( !_itemHash.contains( vf ) ) _itemHash[ vf ] = new KrInterViewItem( this, vf ); Modified: trunk/krusader_kde4/krusader/Panel/krinterview.h =================================================================== --- trunk/krusader_kde4/krusader/Panel/krinterview.h 2009-02-15 18:05:40 UTC (rev 6211) +++ trunk/krusader_kde4/krusader/Panel/krinterview.h 2009-02-16 22:24:31 UTC (rev 6212) @@ -50,6 +50,7 @@ virtual void prepareForActive(); virtual void prepareForPassive(); + virtual bool ensureVisibilityAfterSelect() { return false; } virtual int itemsPerPage(); protected slots: @@ -61,6 +62,10 @@ virtual void keyPressEvent( QKeyEvent *e ); virtual void mousePressEvent ( QMouseEvent * ); + virtual void mouseReleaseEvent ( QMouseEvent * ); + virtual void mouseDoubleClickEvent ( QMouseEvent *ev ); + virtual void mouseMoveEvent ( QMouseEvent * ); + virtual void wheelEvent ( QWheelEvent * ); private: KrVfsModel *_model; Modified: trunk/krusader_kde4/krusader/Panel/krmousehandler.cpp =================================================================== --- trunk/krusader_kde4/krusader/Panel/krmousehandler.cpp 2009-02-15 18:05:40 UTC (rev 6211) +++ trunk/krusader_kde4/krusader/Panel/krmousehandler.cpp 2009-02-16 22:24:31 UTC (rev 6212) @@ -17,10 +17,117 @@ #include "krmousehandler.h" #include "krview.h" +#include "krviewitem.h" +#include "krselectionmode.h" +#include "../krusader.h" +#include "../defaults.h" +KrMouseHandler::KrMouseHandler( KrView * view ) : _view( view ) { + KConfigGroup grpSvr( krConfig, "Look&Feel" ); + // decide on single click/double click selection + _singleClick = grpSvr.readEntry( "Single Click Selects", _SingleClickSelects ) && KGlobalSettings::singleClick(); +} + bool KrMouseHandler::mousePressEvent( QMouseEvent *e ) { + KrViewItem * item = _view->getKrViewItemAt( e->pos() ); if( !_view->isFocused() ) _view->op()->emitNeedFocus(); - return true; -} \ No newline at end of file + if (e->button() == Qt::LeftButton) + { + KrViewItem * oldCurrent = _view->getCurrentKrViewItem(); + //dragStartPos = e->pos(); + if( e->modifiers() == Qt::NoModifier ) + { + if( item ) + { + if( KrSelectionMode::getSelectionHandler()->leftButtonSelects() ) + { + if( KrSelectionMode::getSelectionHandler()->leftButtonPreservesSelection() ) + item->setSelected(!item->isSelected()); + else { + // clear the current selection + _view->changeSelection( KRQuery( "*" ), false, true); + item->setSelected( true ); + } + } + _view->setCurrentKrViewItem( item ); + } + e->accept(); + return true; + // KrSelectionMode::getSelectionHandler()->shiftCtrlLeftButtonSelects() + } + } + return false; +} + +bool KrMouseHandler::mouseReleaseEvent( QMouseEvent *e ) +{ + KrViewItem * item = _view->getKrViewItemAt( e->pos() ); + + if( _singleClick && e->button() == Qt::LeftButton ) + { + e->accept(); + if( item == 0 ) + return true; + QString tmp = item->name(); + _view->op()->emitExecuted(tmp); + return true; + } + if ( e->button() == Qt::MidButton && item != 0 ) + { + e->accept(); + if( item == 0 ) + return true; + _view->op()->emitMiddleButtonClicked( item ); + return true; + } + return false; +} + +bool KrMouseHandler::mouseDoubleClickEvent( QMouseEvent *e ) +{ + KrViewItem * i = _view->getKrViewItemAt( e->pos() ); + if( _singleClick ) + return false; + if( e->button() == Qt::LeftButton ) + { + e->accept(); + QString tmp = i->name(); + _view->op()->emitExecuted(tmp); + return true; + } + return false; +} + +bool KrMouseHandler::mouseMoveEvent( QMouseEvent *e ) +{ + return false; +} + +bool KrMouseHandler::wheelEvent ( QWheelEvent * ) +{ + if( !_view->isFocused() ) + _view->op()->emitNeedFocus(); + return false; +} + +void KrMouseHandler::handleContextMenu( KrViewItem * it, const QPoint & pos ) { + if ( !_view->isFocused() ) + _view->op()->emitNeedFocus(); + if ( !it ) + return; + if( it->isDummy() ) + return; + int i = KrSelectionMode::getSelectionHandler()->showContextMenu(); + _contextMenuPoint = QPoint( pos.x(), pos.y() /*TODO: - header() ->height() */ ); + if (i < 0) { + _view->setCurrentKrViewItem( it ); + _view->op()->emitContextMenu( _contextMenuPoint ); + } + else if (i > 0) { + contextMenuTimer.setSingleShot( true ); + contextMenuTimer.start(i); + } +} + Modified: trunk/krusader_kde4/krusader/Panel/krmousehandler.h =================================================================== --- trunk/krusader_kde4/krusader/Panel/krmousehandler.h 2009-02-15 18:05:40 UTC (rev 6211) +++ trunk/krusader_kde4/krusader/Panel/krmousehandler.h 2009-02-16 22:24:31 UTC (rev 6212) @@ -18,18 +18,33 @@ #ifndef __KR_MOUSE_HANDLER__ #define __KR_MOUSE_HANDLER__ +#include <QPoint> +#include <QTimer> + class QMouseEvent; +class QWheelEvent; class KrView; +class KrViewItem; -class KrMouseHandler +class KrMouseHandler : QObject { + Q_OBJECT + public: - KrMouseHandler( KrView * view ) : _view( view ) {} + KrMouseHandler( KrView * view ); bool mousePressEvent( QMouseEvent *e ); + bool mouseReleaseEvent( QMouseEvent *e ); + bool mouseDoubleClickEvent( QMouseEvent *e ); + bool mouseMoveEvent ( QMouseEvent *e ); + bool wheelEvent ( QWheelEvent * ); + void handleContextMenu( KrViewItem * it, const QPoint & pos ); protected: KrView * _view; + bool _singleClick; + QPoint _contextMenuPoint; + QTimer contextMenuTimer; }; -#endif /* __KR_MOUSE_HANDLER */ \ No newline at end of file +#endif /* __KR_MOUSE_HANDLER */ Modified: trunk/krusader_kde4/krusader/Panel/krview.cpp =================================================================== --- trunk/krusader_kde4/krusader/Panel/krview.cpp 2009-02-15 18:05:40 UTC (rev 6211) +++ trunk/krusader_kde4/krusader/Panel/krview.cpp 2009-02-16 22:24:31 UTC (rev 6212) @@ -378,7 +378,8 @@ if( op() ) op()->setMassSelectionUpdate( false ); updateView(); - makeItemVisible( temp ); + if( ensureVisibilityAfterSelect() ) + makeItemVisible( temp ); } void KrView::invertSelection() @@ -402,7 +403,8 @@ } if( op() ) op()->setMassSelectionUpdate( false ); updateView(); - makeItemVisible( temp ); + if( ensureVisibilityAfterSelect() ) + makeItemVisible( temp ); } QString KrView::firstUnmarkedBelowCurrent() Modified: trunk/krusader_kde4/krusader/Panel/krview.h =================================================================== --- trunk/krusader_kde4/krusader/Panel/krview.h 2009-02-15 18:05:40 UTC (rev 6211) +++ trunk/krusader_kde4/krusader/Panel/krview.h 2009-02-16 22:24:31 UTC (rev 6212) @@ -194,6 +194,7 @@ // interview related functions virtual QModelIndex getCurrentIndex() { return QModelIndex(); } virtual bool isSelected( const QModelIndex & ) { return false; } + virtual bool ensureVisibilityAfterSelect() { return true; } virtual KrViewItem *getFirst() = 0; virtual KrViewItem *getLast() = 0; @@ -256,6 +257,7 @@ virtual const KrViewProperties* properties() const { return _properties; } virtual KrViewOperator* op() const { return _operator; } virtual bool isFocused() const { return _focused; } + void changeSelection(const KRQuery& filter, bool select, bool includeDirs = false); ///////////////////////////////////////////////////////////// // the following functions have a default and minimalistic // @@ -276,7 +278,6 @@ protected: KrView(KConfig *cfg = krConfig); - void changeSelection(const KRQuery& filter, bool select, bool includeDirs = false); bool handleKeyEventInt (QKeyEvent *e); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |