X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ff9ce4dab36fa6afb1d7c602a1171cd81341d860..99cf24c03def1c0722ba8dbd86a27b9dbc521f43:/src/kitemviews/kstandarditemlistwidget.h diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index 72c081b31..e7f2de2e0 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -20,9 +20,8 @@ #ifndef KSTANDARDITEMLISTWIDGET_H #define KSTANDARDITEMLISTWIDGET_H -#include - -#include +#include "dolphin_export.h" +#include "kitemviews/kitemlistwidget.h" #include #include @@ -32,18 +31,34 @@ class KItemListRoleEditor; class KItemListStyleOption; class KItemListView; -class LIBDOLPHINPRIVATE_EXPORT KStandardItemListWidgetInformant : public KItemListWidgetInformant +class DOLPHIN_EXPORT KStandardItemListWidgetInformant : public KItemListWidgetInformant { public: KStandardItemListWidgetInformant(); - virtual ~KStandardItemListWidgetInformant(); + ~KStandardItemListWidgetInformant() override; - virtual QSizeF itemSizeHint(int index, const KItemListView* view) const; + void calculateItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const override; - virtual qreal preferredRoleColumnWidth(const QByteArray& role, + qreal preferredRoleColumnWidth(const QByteArray& role, int index, - const KItemListView* view) const; + const KItemListView* view) const override; protected: + /** + * @return The value of the "text" role. The default implementation returns + * view->model()->data(index)["text"]. If a derived class can + * prevent the (possibly expensive) construction of the + * QHash returned by KItemModelBase::data(int), + * it can reimplement this function. + */ + virtual QString itemText(int index, const KItemListView* view) const; + + /** + * @return The value of the "isLink" role. The default implementation returns false. + * The derived class should reimplement this function, when information about + * links is available and in usage. + */ + virtual bool itemIsLink(int index, const KItemListView* view) const; + /** * @return String representation of the role \a role. The representation of * a role might depend on other roles, so the values of all roles @@ -52,13 +67,22 @@ protected: virtual QString roleText(const QByteArray& role, const QHash& values) const; + /** + * @return A font based on baseFont which is customized for symlinks. + */ + virtual QFont customizedFontForLinks(const QFont& baseFont) const; + + void calculateIconsLayoutItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; + void calculateCompactLayoutItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; + void calculateDetailsLayoutItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const; + friend class KStandardItemListWidget; // Accesses roleText() }; /** - * @brief Itemlist widget implementation for KStandardItemView and KStandardItemModel. + * @brief Itemlist widget implementation for KStandardItemListView and KStandardItemModel. */ -class LIBDOLPHINPRIVATE_EXPORT KStandardItemListWidget : public KItemListWidget +class DOLPHIN_EXPORT KStandardItemListWidget : public KItemListWidget { Q_OBJECT @@ -71,7 +95,7 @@ public: }; KStandardItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent); - virtual ~KStandardItemListWidget(); + ~KStandardItemListWidget() override; void setLayout(Layout layout); Layout layout() const; @@ -79,14 +103,15 @@ public: void setSupportsItemExpanding(bool supportsItemExpanding); bool supportsItemExpanding() const; - virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; - virtual QRectF iconRect() const; - virtual QRectF textRect() const; - virtual QRectF textFocusRect() const; - virtual QRectF expansionToggleRect() const; - virtual QRectF selectionToggleRect() const; - virtual QPixmap createDragPixmap(const QStyleOptionGraphicsItem* option, QWidget* widget = 0); + QRectF iconRect() const override; + QRectF textRect() const override; + QRectF textFocusRect() const override; + QRectF selectionRect() const override; + QRectF expansionToggleRect() const override; + QRectF selectionToggleRect() const override; + QPixmap createDragPixmap(const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; static KItemListWidgetInformant* createInformant(); @@ -115,6 +140,13 @@ protected: */ virtual bool isHidden() const; + /** + * @return A font based on baseFont which is customized according to the data shown in the widget. + */ + virtual QFont customizedFont(const QFont& baseFont) const; + + virtual QPalette::ColorRole normalTextColorRole() const; + void setTextColor(const QColor& color); QColor textColor() const; @@ -126,22 +158,39 @@ protected: */ QString roleText(const QByteArray& role, const QHash& values) const; - virtual void dataChanged(const QHash& current, const QSet& roles = QSet()); - virtual void visibleRolesChanged(const QList& current, const QList& previous); - virtual void columnWidthChanged(const QByteArray& role, qreal current, qreal previous); - virtual void styleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous); - virtual void hoveredChanged(bool hovered); - virtual void selectedChanged(bool selected); - virtual void siblingsInformationChanged(const QBitArray& current, const QBitArray& previous); - virtual void editedRoleChanged(const QByteArray& current, const QByteArray& previous); - virtual void resizeEvent(QGraphicsSceneResizeEvent* event); - virtual void showEvent(QShowEvent* event); - virtual void hideEvent(QHideEvent* event); + /** + * Fixes: + * Select the text without MIME-type extension + * This is file-item-specific and should be moved + * into KFileItemListWidget. + * + * Inherited classes can define, if the MIME-type extension + * should be selected or not. + * + * @return Selection length (with or without MIME-type extension) + */ + virtual int selectionLength(const QString& text) const; + + void dataChanged(const QHash& current, const QSet& roles = QSet()) override; + void visibleRolesChanged(const QList& current, const QList& previous) override; + void columnWidthChanged(const QByteArray& role, qreal current, qreal previous) override; + void styleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous) override; + void hoveredChanged(bool hovered) override; + void selectedChanged(bool selected) override; + void siblingsInformationChanged(const QBitArray& current, const QBitArray& previous) override; + void editedRoleChanged(const QByteArray& current, const QByteArray& previous) override; + void resizeEvent(QGraphicsSceneResizeEvent* event) override; + void showEvent(QShowEvent* event) override; + void hideEvent(QHideEvent* event) override; + bool event(QEvent *event) override; + +public slots: + void finishRoleEditing(); private slots: void slotCutItemsChanged(); - void slotRoleEditingCanceled(int index, const QByteArray& role, const QVariant& value); - void slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value); + void slotRoleEditingCanceled(const QByteArray& role, const QVariant& value); + void slotRoleEditingFinished(const QByteArray& role, const QVariant& value); private: void triggerCacheRefreshing(); @@ -160,7 +209,15 @@ private: QRectF roleEditingRect(const QByteArray &role) const; - static QPixmap pixmapForIcon(const QString& name, int size); + QString elideRightKeepExtension(const QString &text, int elidingWidth) const; + + /** + * Closes the role editor and returns the focus back + * to the KItemListContainer. + */ + void closeRoleEditor(); + + static QPixmap pixmapForIcon(const QString& name, const QStringList& overlays, int size, QIcon::Mode mode); /** * @return Preferred size of the rating-image based on the given @@ -178,6 +235,8 @@ private: private: bool m_isCut; bool m_isHidden; + QFont m_customizedFont; + QFontMetrics m_customizedFontMetrics; bool m_isExpandable; bool m_supportsItemExpanding; @@ -188,7 +247,7 @@ private: Layout m_layout; QPointF m_pixmapPos; QPixmap m_pixmap; - QSize m_scaledPixmapSize; + QSize m_scaledPixmapSize; //Size of the pixmap in device independent pixels QRectF m_iconRect; // Cache for KItemListWidget::iconRect() QPixmap m_hoverPixmap; // Cache for modified m_pixmap when hovering the item @@ -213,11 +272,10 @@ private: QPixmap m_rating; KItemListRoleEditor* m_roleEditor; + KItemListRoleEditor* m_oldRoleEditor; friend class KStandardItemListWidgetInformant; // Accesses private static methods to be able to // share a common layout calculation }; #endif - -