X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4caebde3cb9e31fcb18b36e45afa287e9c03abd4..307285e9635a4bf584d6e5d7478876b90ef870f0:/src/dolphindetailsview.h diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index b717a0a51..7707c0773 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -1,6 +1,6 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz * - * peter.penz@gmx.at * + * Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at) * + * Copyright (C) 2008 by Simon St. James (kdedevel@etotheipiplusone.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 * @@ -26,6 +26,8 @@ #include class DolphinController; +class SelectionManager; +class DolphinViewAutoScroller; /** * @brief Represents the details view which shows the name, size, @@ -57,8 +59,14 @@ protected: virtual void dropEvent(QDropEvent* event); virtual void paintEvent(QPaintEvent* event); virtual void keyPressEvent(QKeyEvent* event); + virtual void keyReleaseEvent(QKeyEvent* event); virtual void resizeEvent(QResizeEvent* event); virtual void wheelEvent(QWheelEvent* event); + virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous); + virtual bool eventFilter(QObject* watched, QEvent* event); + virtual QModelIndex indexAt (const QPoint& point) const; + virtual void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command); + virtual void scrollTo (const QModelIndex & index, ScrollHint hint = EnsureVisible); private slots: /** @@ -90,7 +98,7 @@ private slots: void slotEntered(const QModelIndex& index); /** - * Updates the destination \a m_elasticBandDestination from + * Updates the destination \a destination from * the elastic band to the current mouse position and triggers * an update. */ @@ -98,18 +106,14 @@ private slots: /** * Returns the rectangle for the elastic band dependent from the - * origin \a m_elasticBandOrigin, the current destination - * \a m_elasticBandDestination and the viewport position. + * origin \a origin, the current destination + * \a destination and the viewport position. */ QRect elasticBandRect() const; - void zoomIn(); - void zoomOut(); + void setZoomLevel(int level); - /** - * Called by QTreeView when an item is activated (clicked or double-clicked) - */ - void triggerItem(const QModelIndex& index); + void slotShowPreviewChanged(); /** * Opens a context menu at the position \a pos and allows to @@ -125,6 +129,12 @@ private slots: */ void slotHeaderSectionResized(int logicalIndex, int oldSize, int newSize); + /** + * Changes the alternating row colors setting depending from + * the activation state \a active. + */ + void slotActivationChanged(bool active); + /** * Disables the automatical resizing of the columns. Per default all columns * are resized to use the maximum available width of the view as good as possible. @@ -133,22 +143,23 @@ private slots: void requestActivation(); -private: - bool isZoomInPossible() const; - bool isZoomOutPossible() const; + void updateFont(); + + /** + * If the elastic band is currently shown, update the elastic band based on + * the current mouse position and ensure that the selection is the set of items + * intersecting it. + */ + void updateElasticBandSelection(); +private: /** * Updates the size of the decoration dependent on the * icon size of the DetailsModeSettings. The controller * will get informed about possible zoom in/zoom out * operations. */ - void updateDecorationSize(); - - /** Return the upper left position in pixels of the viewport content. */ - QPoint contentsPos() const; - - KFileItem itemForIndex(const QModelIndex& index) const; + void updateDecorationSize(bool showPreview); KFileItemDelegate::Information infoForColumn(int columnIndex) const; @@ -157,20 +168,54 @@ private: */ void resizeColumns(); + QRect nameColumnRect(const QModelIndex& index) const; + private: - bool m_autoResize; // if true, the columns are resized automatically to the available width + bool m_autoResize : 1; // if true, the columns are resized automatically to the available width + bool m_expandingTogglePressed : 1; + bool m_keyPressed : 1; // true if a key is pressed currently; info used by currentChanged() + bool m_useDefaultIndexAt : 1; // true, if QTreeView::indexAt() should be used + bool m_ignoreScrollTo : 1; // true if calls to scrollTo(...) should do nothing. DolphinController* m_controller; + SelectionManager* m_selectionManager; + DolphinViewAutoScroller* m_autoScroller; QFont m_font; QSize m_decorationSize; - bool m_dragging; // TODO: remove this property when the issue #160611 is solved in Qt 4.4 - QRect m_dropRect; // TODO: remove this property when the issue #160611 is solved in Qt 4.4 - - bool m_showElasticBand; - QPoint m_elasticBandOrigin; - QPoint m_elasticBandDestination; + QRect m_dropRect; + + struct ElasticBand + { + ElasticBand(); + + // Elastic band origin and destination coordinates are relative to t + // he origin of the view, not the viewport. + bool show; + QPoint origin; + QPoint destination; + + // Optimization mechanisms for use with elastic band selection. + // Basically, allow "incremental" updates to the selection based + // on the last elastic band shape. + QPoint lastSelectionOrigin; + QPoint lastSelectionDestination; + + // If true, compute the set of selected elements from scratch (slower) + bool ignoreOldInfo; + + // Edges of the filenames that are closest to the edges of oldSelectionRect. + // Used to decide whether horizontal changes in the elastic band are likely + // to require us to re-check which items are selected. + int outsideNearestLeftEdge; + int outsideNearestRightEdge; + int insideNearestLeftEdge; + int insideNearestRightEdge; + // The set of items that were selected at the time this band was shown. + // NOTE: Unless CTRL was pressed when the band was created, this is always empty. + QItemSelection originalSelection; + } m_band; }; #endif