diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a39d6288..558e67613 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,141 +1,141 @@ cmake_minimum_required(VERSION 3.0) # KDE Application Version, managed by release script set (KDE_APPLICATIONS_VERSION_MAJOR "18") set (KDE_APPLICATIONS_VERSION_MINOR "03") set (KDE_APPLICATIONS_VERSION_MICRO "70") set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}") project(Dolphin VERSION ${KDE_APPLICATIONS_VERSION}) set(QT_MIN_VERSION "5.5.0") set(KF5_MIN_VERSION "5.40.0") set(ECM_MIN_VERSION "1.6.0") # ECM setup find_package(ECM ${ECM_MIN_VERSION} CONFIG REQUIRED) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) include(ECMSetupVersion) include(ECMGenerateHeaders) -include(ECMPackageConfigHelpers) +include(CMakePackageConfigHelpers) include(GenerateExportHeader) include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) ecm_setup_version(${KDE_APPLICATIONS_VERSION} VARIABLE_PREFIX DOLPHIN VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/src/dolphin_version.h" ) ecm_setup_version("5.0.0" VARIABLE_PREFIX DOLPHINVCS VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/dolphinvcs_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfigVersion.cmake" SOVERSION 5 ) ecm_setup_version("5.0.0" VARIABLE_PREFIX DOLPHINPRIVATE SOVERSION 5 ) find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Concurrent Widgets Gui DBus ) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS DocTools Init KCMUtils NewStuff CoreAddons I18n DBusAddons Bookmarks Config KIO Parts Solid IconThemes Completion TextWidgets Notifications Crash ) find_package(KF5 ${KF5_MIN_VERSION} OPTIONAL_COMPONENTS Activities ) find_package(Phonon4Qt5 CONFIG REQUIRED) find_package(KF5Baloo 4.97) set_package_properties(KF5Baloo PROPERTIES DESCRIPTION "Baloo Core libraries" URL "http://www.kde.org" TYPE OPTIONAL PURPOSE "For adding desktop-wide search and tagging support to dolphin" ) find_package(KF5BalooWidgets 4.97) set_package_properties(KF5BalooWidgets PROPERTIES DESCRIPTION "Baloos Widgets" URL "http://www.kde.org" TYPE OPTIONAL ) find_package(KF5FileMetaData 5.19.0) set_package_properties(KF5FileMetaData PROPERTIES URL "https://projects.kde.org/kfilemetadata" TYPE OPTIONAL PURPOSE "For accessing file metadata labels" ) if (KF5Baloo_FOUND AND KF5BalooWidgets_FOUND AND KF5FileMetaData_FOUND) message(STATUS "Baloo packages are found") set(HAVE_BALOO TRUE) else() find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS KDELibs4Support # for KFileMetaDataWidget ) endif() add_definitions(-DQT_NO_URL_CAST_FROM_STRING) add_subdirectory(src) add_subdirectory(doc) # CMake files set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/DolphinVcs") -ecm_configure_package_config_file( +configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/DolphinVcsConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfig.cmake" INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfigVersion.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(EXPORT DolphinVcsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE DolphinVcsTargets.cmake ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dolphinvcs_version.h" DESTINATION "${KDE_INSTALL_INCLUDEDIR}/Dolphin" COMPONENT Devel ) configure_file(org.kde.dolphin.FileManager1.service.in ${CMAKE_CURRENT_BINARY_DIR}/org.kde.dolphin.FileManager1.service) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.kde.dolphin.FileManager1.service DESTINATION ${DBUS_SERVICES_INSTALL_DIR}) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/DolphinVcsConfig.cmake.in b/DolphinVcsConfig.cmake.in index 7e7a2296f..f544f4c61 100644 --- a/DolphinVcsConfig.cmake.in +++ b/DolphinVcsConfig.cmake.in @@ -1,6 +1,8 @@ @PACKAGE_INIT@ +include(CMakeFindDependencyMacro) + find_dependency(Qt5Widgets) find_dependency(KF5KIO) include("${CMAKE_CURRENT_LIST_DIR}/DolphinVcsTargets.cmake") diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index b13c303bc..a9b832236 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -1,280 +1,283 @@ /*************************************************************************** * Copyright (C) 2012 by Peter Penz * * * * 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 KSTANDARDITEMLISTWIDGET_H #define KSTANDARDITEMLISTWIDGET_H #include "dolphin_export.h" #include #include #include #include class KItemListRoleEditor; class KItemListStyleOption; class KItemListView; class DOLPHIN_EXPORT KStandardItemListWidgetInformant : public KItemListWidgetInformant { public: KStandardItemListWidgetInformant(); ~KStandardItemListWidgetInformant() override; void calculateItemSizeHints(QVector& logicalHeightHints, qreal& logicalWidthHint, const KItemListView* view) const override; qreal preferredRoleColumnWidth(const QByteArray& role, int index, 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 * are passed as parameter. */ 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. */ class DOLPHIN_EXPORT KStandardItemListWidget : public KItemListWidget { Q_OBJECT public: enum Layout { IconsLayout, CompactLayout, DetailsLayout }; KStandardItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent); ~KStandardItemListWidget() override; void setLayout(Layout layout); Layout layout() const; void setSupportsItemExpanding(bool supportsItemExpanding); bool supportsItemExpanding() const; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; 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(); protected: /** * Invalidates the cache which results in calling KStandardItemListWidget::refreshCache() as * soon as the item need to gets repainted. */ void invalidateCache(); /** * Is called if the cache got invalidated by KStandardItemListWidget::invalidateCache(). * The default implementation is empty. */ virtual void refreshCache(); /** * @return True if the give role should be right aligned when showing it inside a column. * Per default false is returned. */ virtual bool isRoleRightAligned(const QByteArray& role) const; /** * @return True if the item should be visually marked as hidden item. Per default * false is returned. */ 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; void setOverlay(const QPixmap& overlay); QPixmap overlay() const; /** * @see KStandardItemListWidgetInformant::roleText(). */ QString roleText(const QByteArray& role, const QHash& values) const; /** * 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(); +public slots: + void finishRoleEditing(); + private slots: void slotCutItemsChanged(); void slotRoleEditingCanceled(const QByteArray& role, const QVariant& value); void slotRoleEditingFinished(const QByteArray& role, const QVariant& value); private: void triggerCacheRefreshing(); void updateExpansionArea(); void updatePixmapCache(); void updateTextsCache(); void updateIconsLayoutTextCache(); void updateCompactLayoutTextCache(); void updateDetailsLayoutTextCache(); void updateAdditionalInfoTextColor(); void drawPixmap(QPainter* painter, const QPixmap& pixmap); void drawSiblingsInformation(QPainter* painter); QRectF roleEditingRect(const QByteArray &role) 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 * style-option. The height of the font is taken as * reference. */ static QSizeF preferredRatingSize(const KItemListStyleOption& option); /** * @return Horizontal padding in pixels that is added to the required width of * a column to display the content. */ static qreal columnPadding(const KItemListStyleOption& option); private: bool m_isCut; bool m_isHidden; QFont m_customizedFont; QFontMetrics m_customizedFontMetrics; bool m_isExpandable; bool m_supportsItemExpanding; bool m_dirtyLayout; bool m_dirtyContent; QSet m_dirtyContentRoles; Layout m_layout; QPointF m_pixmapPos; QPixmap m_pixmap; 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 struct TextInfo { QPointF pos; QStaticText staticText; }; QHash m_textInfo; QRectF m_textRect; QList m_sortedVisibleRoles; QRectF m_expansionArea; QColor m_customTextColor; QColor m_additionalInfoTextColor; QPixmap m_overlay; 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