From 6cd2f53dc3c4e95096c57c2cf22516545a19d337 Mon Sep 17 00:00:00 2001 From: Lighto-Ku Date: Wed, 18 Sep 2024 13:29:53 +0800 Subject: [PATCH] chore: remove deprecated preview code preview module has moved to apps, remove old preview plugin code. Log: remove deprecated preview code --- .../common/dfmplugin-preview/CMakeLists.txt | 8 - .../filepreview/CMakeLists.txt | 21 - .../filepreview/dfmplugin-preview-qt5.cmake | 6 - .../filepreview/dfmplugin-preview-qt6.cmake | 6 - .../filepreview/dfmplugin-preview.cmake | 26 - .../dfmplugin_filepreview_global.h | 26 - .../events/fileprevieweventreceiver.cpp | 33 - .../events/fileprevieweventreceiver.h | 28 - .../filepreview/filepreview.cpp | 55 -- .../filepreview/filepreview.h | 36 - .../filepreview/filepreview.json | 14 - .../pluginInterface/filepreviewfactory.cpp | 62 -- .../pluginInterface/filepreviewfactory.h | 24 - .../pluginInterface/previewpluginloader.cpp | 277 -------- .../pluginInterface/previewpluginloader.h | 76 -- .../private/pluginloader_p.cpp | 29 - .../pluginInterface/private/pluginloader_p.h | 54 -- .../utils/previewdialogmanager.cpp | 87 --- .../filepreview/utils/previewdialogmanager.h | 30 - .../utils/previewfileoperation.cpp | 32 - .../filepreview/utils/previewfileoperation.h | 22 - .../filepreview/utils/previewhelper.cpp | 69 -- .../filepreview/utils/previewhelper.h | 32 - .../filepreview/views/filepreviewdialog.cpp | 405 ----------- .../filepreview/views/filepreviewdialog.h | 71 -- .../views/filepreviewdialogstatusbar.cpp | 72 -- .../views/filepreviewdialogstatusbar.h | 34 - .../filepreview/views/unknowfilepreview.cpp | 127 ---- .../filepreview/views/unknowfilepreview.h | 48 -- .../pluginpreviews/CMakeLists.txt | 26 - .../dciicon-preview/CMakeLists.txt | 59 -- .../dciicon-preview/ddciiconpreview.cpp | 668 ------------------ .../dciicon-preview/ddciiconpreview.h | 26 - .../dciicon-preview/dtk-dci.xml | 12 - .../dtk-dciicon-preview-plugin.json | 3 - .../image-preview/CMakeLists.txt | 72 -- .../dde-image-preview-plugin.json | 3 - .../image-preview/imagepreview.cpp | 133 ---- .../image-preview/imagepreview.h | 44 -- .../image-preview/imagepreviewplugin.cpp | 16 - .../image-preview/imagepreviewplugin.h | 22 - .../image-preview/imageview.cpp | 81 --- .../pluginpreviews/image-preview/imageview.h | 25 - .../pluginpreviews/image-preview/theme.qrc | 1 - .../music-preview/CMakeLists.txt | 87 --- .../pluginpreviews/music-preview/cover.cpp | 47 -- .../pluginpreviews/music-preview/cover.h | 27 - .../music-preview/cusmediaplayer.cpp | 72 -- .../music-preview/cusmediaplayer.h | 60 -- .../dde-music-preview-plugin.json | 3 - .../dde-music-preview-plugin.qrc | 11 - .../icons/default_music_cover.png | Bin 5345 -> 0 bytes .../music-preview/icons/pause_hover.png | Bin 125 -> 0 bytes .../music-preview/icons/pause_normal.png | Bin 128 -> 0 bytes .../music-preview/icons/pause_pressed.png | Bin 128 -> 0 bytes .../music-preview/icons/start_hover.png | Bin 185 -> 0 bytes .../music-preview/icons/start_normal.png | Bin 249 -> 0 bytes .../music-preview/icons/start_pressed.png | Bin 262 -> 0 bytes .../music-preview/mediawork.cpp | 90 --- .../pluginpreviews/music-preview/mediawork.h | 48 -- .../music-preview/musicmessageview.cpp | 343 --------- .../music-preview/musicmessageview.h | 84 --- .../music-preview/musicpreview.cpp | 129 ---- .../music-preview/musicpreview.h | 49 -- .../music-preview/musicpreviewplugin.cpp | 16 - .../music-preview/musicpreviewplugin.h | 22 - .../music-preview/toolbarframe.cpp | 165 ----- .../music-preview/toolbarframe.h | 70 -- .../pluginpreviews/pdf-preview/CMakeLists.txt | 53 -- .../pdf-preview/browserpage.cpp | 281 -------- .../pluginpreviews/pdf-preview/browserpage.h | 128 ---- .../pdf-preview/dde-pdf-preview-plugin.json | 3 - .../pdf-preview/dde-pdf-preview.theme | 8 - .../pluginpreviews/pdf-preview/docsheet.cpp | 389 ---------- .../pluginpreviews/pdf-preview/docsheet.h | 333 --------- .../pdf-preview/encryptionpage.cpp | 119 ---- .../pdf-preview/encryptionpage.h | 81 --- .../pluginpreviews/pdf-preview/global.cpp | 37 - .../pluginpreviews/pdf-preview/global.h | 71 -- .../pluginpreviews/pdf-preview/model.cpp | 25 - .../pluginpreviews/pdf-preview/model.h | 70 -- .../pdf-preview/pagerenderthread.cpp | 434 ------------ .../pdf-preview/pagerenderthread.h | 167 ----- .../pluginpreviews/pdf-preview/pdfmodel.cpp | 105 --- .../pluginpreviews/pdf-preview/pdfmodel.h | 66 -- .../pluginpreviews/pdf-preview/pdfpreview.cpp | 71 -- .../pluginpreviews/pdf-preview/pdfpreview.h | 41 -- .../pdf-preview/pdfpreviewplugin.cpp | 16 - .../pdf-preview/pdfpreviewplugin.h | 22 - .../pluginpreviews/pdf-preview/pdfwidget.cpp | 164 ----- .../pluginpreviews/pdf-preview/pdfwidget.h | 96 --- .../pdf-preview/sheetbrowser.cpp | 463 ------------ .../pluginpreviews/pdf-preview/sheetbrowser.h | 257 ------- .../pdf-preview/sheetrenderer.cpp | 91 --- .../pdf-preview/sheetrenderer.h | 98 --- .../pdf-preview/sheetsidebar.cpp | 98 --- .../pluginpreviews/pdf-preview/sheetsidebar.h | 93 --- .../pdf-preview/sidebarimagelistview.cpp | 99 --- .../pdf-preview/sidebarimagelistview.h | 93 --- .../pdf-preview/sidebarimageviewmodel.cpp | 156 ---- .../pdf-preview/sidebarimageviewmodel.h | 145 ---- .../pluginpreviews/pdf-preview/theme.qrc | 5 - .../pdf-preview/thumbnaildelegate.cpp | 78 -- .../pdf-preview/thumbnaildelegate.h | 41 -- .../pdf-preview/thumbnailwidget.cpp | 70 -- .../pdf-preview/thumbnailwidget.h | 65 -- .../pluginpreviews/preview_plugin_global.h | 20 - .../text-preview/CMakeLists.txt | 70 -- .../text-preview/dde-text-preview-plugin.json | 3 - .../text-preview/textbrowseredit.cpp | 131 ---- .../text-preview/textbrowseredit.h | 42 -- .../text-preview/textcontextwidget.cpp | 35 - .../text-preview/textcontextwidget.h | 23 - .../text-preview/textpreview.cpp | 91 --- .../pluginpreviews/text-preview/textpreview.h | 51 -- .../text-preview/textpreviewplugin.cpp | 19 - .../text-preview/textpreviewplugin.h | 23 - .../video-preview/CMakeLists.txt | 53 -- .../dde-video-preview-plugin.json | 3 - .../dde-video-preview-plugin.qrc | 6 - .../deepin/builtin/actions/dfm_pause_16px.svg | 13 - .../deepin/builtin/actions/dfm_start_16px.svg | 12 - .../video-preview/videopreview.cpp | 106 --- .../video-preview/videopreview.h | 55 -- .../video-preview/videopreviewplugin.cpp | 17 - .../video-preview/videopreviewplugin.h | 24 - .../video-preview/videostatusbar.cpp | 76 -- .../video-preview/videostatusbar.h | 28 - .../video-preview/videowidget.cpp | 45 -- .../video-preview/videowidget.h | 32 - 130 files changed, 9934 deletions(-) delete mode 100644 src/plugins/common/dfmplugin-preview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt5.cmake delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt6.cmake delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview.cmake delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/dfmplugin_filepreview_global.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/filepreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/filepreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/filepreview.json delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.h delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dci.xml delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dciicon-preview-plugin.json delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/dde-image-preview-plugin.json delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/theme.qrc delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.json delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.qrc delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/default_music_cover.png delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_hover.png delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_normal.png delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_pressed.png delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_hover.png delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_normal.png delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_pressed.png delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/mediawork.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/mediawork.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview-plugin.json delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview.theme delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/theme.qrc delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/preview_plugin_global.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/dde-text-preview-plugin.json delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/CMakeLists.txt delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.json delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.qrc delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_pause_16px.svg delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_start_16px.svg delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.h delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.cpp delete mode 100644 src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.h diff --git a/src/plugins/common/dfmplugin-preview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/CMakeLists.txt deleted file mode 100644 index 287e9fbd06..0000000000 --- a/src/plugins/common/dfmplugin-preview/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -if(NOT DEFINED DFM_PLUGIN_PREVIEW_DIR) - set(DFM_PLUGIN_PREVIEW_DIR ${DFM_PLUGIN_DIR}/previews) -endif() - -add_subdirectory(filepreview) -add_subdirectory(pluginpreviews) diff --git a/src/plugins/common/dfmplugin-preview/filepreview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/filepreview/CMakeLists.txt deleted file mode 100644 index a4227e148b..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -project(dfmplugin-filepreview) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -FILE(GLOB_RECURSE FILEPREVIEW_FILES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*.json" - ) - -include(dfmplugin-preview-qt5.cmake) - -# Qt6 -if (DFM_BUILD_WITH_QT6) -include(dfmplugin-preview-qt6.cmake) -endif() - - -INSTALL_DCONFIG("org.deepin.dde.file-manager.preview.json") diff --git a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt5.cmake b/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt5.cmake deleted file mode 100644 index 200969cffa..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt5.cmake +++ /dev/null @@ -1,6 +0,0 @@ -set(BIN_NAME dfmplugin-preview) - -set(QT_VERSION_MAJOR 5) -set(DTK_VERSION_MAJOR "") - -include(dfmplugin-preview.cmake) diff --git a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt6.cmake b/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt6.cmake deleted file mode 100644 index ff8d53d44e..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview-qt6.cmake +++ /dev/null @@ -1,6 +0,0 @@ -set(BIN_NAME dfm-preview-plugin) - -set(QT_VERSION_MAJOR 6) -set(DTK_VERSION_MAJOR 6) - -include(dfmplugin-preview.cmake) diff --git a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview.cmake b/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview.cmake deleted file mode 100644 index ba4fe3a421..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin-preview.cmake +++ /dev/null @@ -1,26 +0,0 @@ -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) - -add_library(${BIN_NAME} - SHARED - ${FILEPREVIEW_FILES} -) - -add_definitions(-DPLUGINDIR=\"${DFM_PLUGIN_PREVIEW_DIR}\") -set(VERSION 1.8.2) -add_definitions(-DVERSION=\"${VERSION}\") - -set_target_properties(${BIN_NAME} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${DFM_BUILD_PLUGIN_COMMON_DIR}) - -target_link_libraries(${BIN_NAME} - DFM${DTK_VERSION_MAJOR}::base - DFM${DTK_VERSION_MAJOR}::framework -) - -#install library file -install(TARGETS - ${BIN_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_COMMON_EDGE_DIR} -) diff --git a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin_filepreview_global.h b/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin_filepreview_global.h deleted file mode 100644 index 039d4697c7..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/dfmplugin_filepreview_global.h +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef DFMPLUGIN_FILEPREVIEW_GLOBAL_H -#define DFMPLUGIN_FILEPREVIEW_GLOBAL_H - -#include - -#define DPFILEPREVIEW_NAMESPACE dfmplugin_filepreview - -#define DPFILEPREVIEW_BEGIN_NAMESPACE namespace DPFILEPREVIEW_NAMESPACE { -#define DPFILEPREVIEW_END_NAMESPACE } -#define DPFILEPREVIEW_USE_NAMESPACE using namespace DPFILEPREVIEW_NAMESPACE; - -DPFILEPREVIEW_BEGIN_NAMESPACE -DFM_LOG_USE_CATEGORY(DPFILEPREVIEW_NAMESPACE) - -namespace ConfigInfos { -inline constexpr char kConfName[] { "org.deepin.dde.file-manager.preview" }; -inline constexpr char kRemoteThumbnailKey[] { "remoteThumbnailEnable" }; -inline constexpr char kMtpThumbnailKey[] { "mtpThumbnailEnable" }; -} -DPFILEPREVIEW_END_NAMESPACE - -#endif // DFMPLUGIN_FILEPREVIEW_GLOBAL_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.cpp b/src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.cpp deleted file mode 100644 index 09ad2788ff..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "fileprevieweventreceiver.h" -#include "utils/previewdialogmanager.h" -#include "utils/previewhelper.h" - -#include - -DPF_USE_NAMESPACE -using namespace dfmplugin_filepreview; -FilePreviewEventReceiver::FilePreviewEventReceiver(QObject *parent) - : QObject(parent) -{ -} - -FilePreviewEventReceiver *FilePreviewEventReceiver::instance() -{ - static FilePreviewEventReceiver receiver; - return &receiver; -} - -void FilePreviewEventReceiver::connectService() -{ - dpfSlotChannel->connect(DPF_MACRO_TO_STR(DPFILEPREVIEW_NAMESPACE), "slot_PreviewDialog_Show", this, &FilePreviewEventReceiver::showFilePreview); -} - -void FilePreviewEventReceiver::showFilePreview(quint64 windowId, const QList &selecturls, const QList dirUrl) -{ - if(PreviewHelper::instance()->isPreviewEnabled()) - PreviewDialogManager::instance()->showPreviewDialog(windowId, selecturls, dirUrl); -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.h b/src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.h deleted file mode 100644 index 62231ceec5..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/events/fileprevieweventreceiver.h +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef FILEPREVIEWEVENTRECEIVER_H -#define FILEPREVIEWEVENTRECEIVER_H -#include "dfmplugin_filepreview_global.h" - -#include -#include - -namespace dfmplugin_filepreview { -class FilePreviewEventReceiver : public QObject -{ - Q_OBJECT - Q_DISABLE_COPY(FilePreviewEventReceiver) -private: - explicit FilePreviewEventReceiver(QObject *parent = nullptr); - -public: - static FilePreviewEventReceiver *instance(); - void connectService(); - -public slots: - void showFilePreview(quint64 windowId, const QList &selecturls, const QList dirUrl); -}; -} -#endif diff --git a/src/plugins/common/dfmplugin-preview/filepreview/filepreview.cpp b/src/plugins/common/dfmplugin-preview/filepreview/filepreview.cpp deleted file mode 100644 index 82c7569495..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/filepreview.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "filepreview.h" -#include "events/fileprevieweventreceiver.h" -#include "utils/previewhelper.h" - -#include -#include - -#include - -DFMBASE_USE_NAMESPACE -namespace dfmplugin_filepreview { -DFM_LOG_REISGER_CATEGORY(DPFILEPREVIEW_NAMESPACE) - -void FilePreview::initialize() -{ - FilePreviewEventReceiver::instance()->connectService(); - - // Under the wayland protocol, set the rendering mode to OpenGLES - if (WindowUtils::isWayLand()) { -#ifndef __x86_64__ - QSurfaceFormat format; - format.setRenderableType(QSurfaceFormat::OpenGLES); - format.setDefaultFormat(format); -#endif - } - - connect(DConfigManager::instance(), &DConfigManager::valueChanged, this, &FilePreview::onConfigChanged, Qt::DirectConnection); -} - -bool FilePreview::start() -{ - QString err; - auto ret = DConfigManager::instance()->addConfig(ConfigInfos::kConfName, &err); - if (!ret) - fmWarning() << "File Preview: create dconfig failed: " << err; - - PreviewHelper::instance()->bindConfig(); - - return true; -} - -void FilePreview::onConfigChanged(const QString &cfg, const QString &key) -{ - if (cfg != QString(ConfigInfos::kConfName)) - return; - - if (key == QString(ConfigInfos::kMtpThumbnailKey)) { - dpfSignalDispatcher->publish("dfmplugin_filepreview", "signal_ThumbnailDisplay_Changed"); - } -} -} // namespace dfmplugin_filepreview diff --git a/src/plugins/common/dfmplugin-preview/filepreview/filepreview.h b/src/plugins/common/dfmplugin-preview/filepreview/filepreview.h deleted file mode 100644 index 2aa9ad0907..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/filepreview.h +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef FILEPREVIEW_H -#define FILEPREVIEW_H - -#include "dfmplugin_filepreview_global.h" - -#include - -namespace dfmplugin_filepreview { -class FilePreview : public dpf::Plugin -{ - Q_OBJECT - -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - Q_PLUGIN_METADATA(IID "org.deepin.plugin.common" FILE "filepreview.json") -#else - Q_PLUGIN_METADATA(IID "org.deepin.plugin.common.qt6" FILE "filepreview.json") -#endif - - DPF_EVENT_NAMESPACE(DPFILEPREVIEW_NAMESPACE) - DPF_EVENT_REG_SLOT(slot_PreviewDialog_Show) - - DPF_EVENT_REG_SIGNAL(signal_ThumbnailDisplay_Changed) - -public: - virtual void initialize() override; - virtual bool start() override; - -private Q_SLOTS: - void onConfigChanged(const QString &cfg, const QString &key); -}; -} // namespace dfmplugin_filepreview -#endif // FILEPREVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/filepreview.json b/src/plugins/common/dfmplugin-preview/filepreview/filepreview.json deleted file mode 100644 index cf1a087903..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/filepreview.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "Name" : "dfmplugin-filepreview", - "Version" : "1.0.0", - "CompatVersion" : "1.0.0", - "Vendor" : "The Uniontech Software Technology Co., Ltd.", - "Copyright" : "Copyright (C) 2022 Uniontech Software Technology Co., Ltd.", - "License" : [ - ], - "Category" : "", - "Description" : "The common plugin for the filemanager and desktop.", - "UrlLink" : "https://www.uniontech.com", - "Depends" : [ - ] -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.cpp b/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.cpp deleted file mode 100644 index 8298ca5879..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "filepreviewfactory.h" -#include "previewpluginloader.h" -#include "private/pluginloader_p.h" -#include - -#include - -DFMBASE_USE_NAMESPACE -using namespace dfmplugin_filepreview; - -#ifndef QT_NO_LIBRARY -Q_GLOBAL_STATIC_WITH_ARGS(PreviewPluginLoader, loader, - (FilePreviewFactoryInterface_iid, QLatin1String("/previews"), Qt::CaseInsensitive)) -#endif - -QMap FilePreviewFactory::previewToLoaderIndex; - -QStringList FilePreviewFactory::keys() -{ - QStringList list; -#ifndef QT_NO_LIBRARY - typedef QMultiMap PluginKeyMap; - - const PluginKeyMap keyMap = loader()->keyMap(); - const PluginKeyMap::const_iterator cend = keyMap.constEnd(); - for (PluginKeyMap::const_iterator it = keyMap.constBegin(); it != cend; ++it) - list.append(it.value()); -#endif - return list; -} - -AbstractBasePreview *FilePreviewFactory::create(const QString &key) -{ - if (AbstractBasePreview *view = dLoadPlugin(loader(), key)) { - if (!view) - return nullptr; - - FilePreviewFactory::previewToLoaderIndex[view] = loader()->indexOf(key); - - QObject::connect(view, &AbstractBasePreview::destroyed, view, [view] { - FilePreviewFactory::previewToLoaderIndex.remove(view); - }); - - return view; - } - - return Q_NULLPTR; -} - -bool FilePreviewFactory::isSuitedWithKey(const AbstractBasePreview *view, const QString &key) -{ - int index = FilePreviewFactory::previewToLoaderIndex.value(view, -1); - - if (index == -1) - return false; - - return index == loader()->indexOf(key); -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.h b/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.h deleted file mode 100644 index 91c5378840..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/filepreviewfactory.h +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef FILEPREVIEWFACTORY_H -#define FILEPREVIEWFACTORY_H - -#include "dfmplugin_filepreview_global.h" -#include - -#include - -namespace dfmplugin_filepreview { -class FilePreviewFactory -{ -public: - static QStringList keys(); - static DFMBASE_NAMESPACE::AbstractBasePreview *create(const QString &key); - static bool isSuitedWithKey(const DFMBASE_NAMESPACE::AbstractBasePreview *view, const QString &key); - - static QMap previewToLoaderIndex; -}; -} -#endif // FILEPREVIEWFACTORY_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.cpp b/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.cpp deleted file mode 100644 index b96a39e01a..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.cpp +++ /dev/null @@ -1,277 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "previewpluginloader.h" -#include "private/pluginloader_p.h" - -#include -#include -#include -#include -#include - -using namespace dfmplugin_filepreview; -Q_GLOBAL_STATIC(QList, qt_factory_loaders) - -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) -Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qt_factoryloader_mutex, (QMutex::Recursive)) -#else -Q_GLOBAL_STATIC(QRecursiveMutex, qt_factoryloader_mutex) -#endif - -/* Internal, for debugging */ -static bool dfm_debug_component() -{ -#ifdef QT_DEBUG - return true; -#endif - - static int debug_env = QT_PREPEND_NAMESPACE(qEnvironmentVariableIntValue)("DFM_DEBUG_PLUGINS"); - return debug_env != 0; -} - -PreviewPluginLoader::PreviewPluginLoader(const char *iid, const QString &suffix, Qt::CaseSensitivity cs, bool repetitiveKeyInsensitive) - : QObject(nullptr), dptr(new PreviewPluginLoaderPrivate) -{ - dptr->iid = iid; - dptr->suffix = suffix; - dptr->cs = cs; - dptr->rki = repetitiveKeyInsensitive; - QMutexLocker locker(qt_factoryloader_mutex()); - update(); - qt_factory_loaders->append(this); -} - -PreviewPluginLoader::~PreviewPluginLoader() -{ - QMutexLocker locker(qt_factoryloader_mutex()); - qt_factory_loaders()->removeAll(this); - - for (int i = 0; i < dptr->pluginLoaderList.count(); ++i) { - QPluginLoader *loader = dptr->pluginLoaderList.at(i); - loader->unload(); - } -} - -QList PreviewPluginLoader::metaData() const -{ - QMutexLocker locker(&dptr->mutex); - QList metaData; - for (int i = 0; i < dptr->pluginLoaderList.size(); ++i) - metaData.append(dptr->pluginLoaderList.at(i)->metaData()); - - return metaData; -} - -QObject *PreviewPluginLoader::instance(int index) const -{ - if (index < 0) - return nullptr; - - if (index < dptr->pluginLoaderList.size()) { - QPluginLoader *loader = dptr->pluginLoaderList.at(index); - if (loader->instance()) { - QObject *obj = loader->instance(); - if (obj) { - if (!obj->parent()) - obj->moveToThread(qApp->thread()); - return obj; - } - } - return nullptr; - } - - return nullptr; -} - -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) -QPluginLoader *PreviewPluginLoader::pluginLoader(const QString &key) const -{ - return dptr->keyMap.value(dptr->cs ? key : key.toLower()); -} - -QList PreviewPluginLoader::pluginLoaderList(const QString &key) const -{ - return dptr->keyMap.values(dptr->cs ? key : key.toLower()); -} -#endif - -QMultiMap PreviewPluginLoader::keyMap() const -{ - QMultiMap result; - const QString metaDataKey = metaDataKeyLiteral(); - const QString keysKey = keysKeyLiteral(); - const QList metaDataList = metaData(); - for (int i = 0; i < metaDataList.size(); ++i) { - const QJsonObject metaData = metaDataList.at(i).value(metaDataKey).toObject(); - const QJsonArray keys = metaData.value(keysKey).toArray(); - const int keyCount = keys.size(); - for (int k = 0; k < keyCount; ++k) - result.insert(i, keys.at(k).toString()); - } - return result; -} - -int PreviewPluginLoader::indexOf(const QString &needle) const -{ - const QString metaDataKey = metaDataKeyLiteral(); - const QString keysKey = keysKeyLiteral(); - const QList metaDataList = metaData(); - for (int i = 0; i < metaDataList.size(); ++i) { - const QJsonObject metaData = metaDataList.at(i).value(metaDataKey).toObject(); - const QJsonArray keys = metaData.value(keysKey).toArray(); - const int keyCount = keys.size(); - for (int k = 0; k < keyCount; ++k) { - if (!keys.at(k).toString().compare(needle, Qt::CaseInsensitive)) - return i; - } - } - return -1; -} - -QList PreviewPluginLoader::getAllIndexByKey(const QString &needle) const -{ - QList list; - - const QString metaDataKey = metaDataKeyLiteral(); - const QString keysKey = keysKeyLiteral(); - const QList metaDataList = metaData(); - for (int i = 0; i < metaDataList.size(); ++i) { - const QJsonObject metaData = metaDataList.at(i).value(metaDataKey).toObject(); - const QJsonArray keys = metaData.value(keysKey).toArray(); - const int keyCount = keys.size(); - for (int k = 0; k < keyCount; ++k) { - if (!keys.at(k).toString().compare(needle, Qt::CaseInsensitive)) - list << i; - } - } - return list; -} - -void PreviewPluginLoader::update() -{ - -#ifdef QT_SHARED - fmInfo() << "File Preview: checking directory path"; - const QStringList &paths = dptr->pluginPaths; - for (int i = 0; i < paths.count(); ++i) { - const QString &pluginDir = paths.at(i); - //! Already loaded, skip it... - if (!dptr->loadedPaths.contains(pluginDir)) - dptr->loadedPaths << pluginDir; - - QString path = pluginDir; - - fmInfo() << "File Preview: checking directory path" << path << "..."; - - if (!QDir(path).exists(QLatin1String("."))) - continue; - - QStringList plugins = QDir(path).entryList(QDir::Files); - QPluginLoader *loader = nullptr; - -# ifdef Q_OS_MAC - // Loading both the debug and release version of the cocoa plugins causes the objective-c runtime - // to print "duplicate class definitions" warnings. Detect if DFMFactoryLoader is about to load both, - // skip one of them (below). - // - // ### FIXME find a proper solution - // - const bool isLoadingDebugAndReleaseCocoa = plugins.contains(QStringLiteral("libqcocoa_debug.dylib")) - && plugins.contains(QStringLiteral("libqcocoa.dylib")); -# endif - for (int j = 0; j < plugins.count(); ++j) { - QString fileName = QDir::cleanPath(path + QLatin1Char('/') + plugins.at(j)); - -# ifdef Q_OS_MAC - if (isLoadingDebugAndReleaseCocoa) { -# ifdef QT_DEBUG - if (fileName.contains(QStringLiteral("libqcocoa.dylib"))) - continue; // Skip release plugin in debug mode -# else - if (fileName.contains(QStringLiteral("libqcocoa_debug.dylib"))) - continue; // Skip debug plugin in release mode -# endif - } -# endif - if (dfm_debug_component()) { - fmInfo() << "File Preview: looking at" << fileName; - } - loader = new QPluginLoader(fileName, this); - if (!loader->load()) { - if (dfm_debug_component()) { - fmWarning() << "load failed:" << loader->errorString(); - } - loader->deleteLater(); - continue; - } - - QStringList keys; - bool metaDataOk = false; - - QString iid = loader->metaData().value(iidKeyLiteral()).toString(); - if (iid == QLatin1String(dptr->iid.constData(), dptr->iid.size())) { - QJsonObject object = loader->metaData().value(metaDataKeyLiteral()).toObject(); - metaDataOk = true; - - QJsonArray k = object.value(keysKeyLiteral()).toArray(); - for (int m = 0; m < k.size(); ++m) - keys += dptr->cs ? k.at(m).toString() : k.at(m).toString().toLower(); - } - if (dfm_debug_component()) - fmInfo() << "File Preview: Got keys from plugin meta data" << keys; - - if (!metaDataOk) { - loader->deleteLater(); - continue; - } - - int keyUsageCount = 0; - for (int k = 0; k < keys.count(); ++k) { - /*! first come first serve, unless the first - *library was built with a future Qt version, - * whereas the new one has a Qt version that fits - * better - */ - const QString &key = keys.at(k); - - if (dptr->rki) { - dptr->keyMap.insertMulti(key, loader); - ++keyUsageCount; - } else { - QPluginLoader *previous = dptr->keyMap.value(key); - int prev_dfm_version = 0; - if (previous) { - prev_dfm_version = static_cast(previous->metaData().value(versionKeyLiteral()).toDouble()); - } - int dfm_version = static_cast(loader->metaData().value(versionKeyLiteral()).toDouble()); - if (!previous || (prev_dfm_version > QString(VERSION).toDouble() && dfm_version <= QString(VERSION).toDouble())) { - dptr->keyMap.insertMulti(key, loader); - ++keyUsageCount; - } - } - } - if (keyUsageCount || keys.isEmpty()) - dptr->pluginLoaderList += loader; - else - loader->deleteLater(); - } - } -#else - if (dfm_debug_component()) { - fmDebug() << "PreviewPluginLoader::PreviewPluginLoader() ignoring" << dptr->iid - << "since plugins are disabled in static builds"; - } -#endif -} - -void PreviewPluginLoader::refreshAll() -{ - QMutexLocker locker(qt_factoryloader_mutex()); - QList *loaders = qt_factory_loaders(); - for (QList::const_iterator it = loaders->constBegin(); - it != loaders->constEnd(); ++it) { - (*it)->update(); - } -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.h b/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.h deleted file mode 100644 index b80f6e84e7..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/previewpluginloader.h +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PLUGINLOADER_H -#define PLUGINLOADER_H - -#include "dfmplugin_filepreview_global.h" - -#include -#include -#include -#include - -namespace dfmplugin_filepreview { -class PreviewPluginLoaderPrivate; -class PreviewPluginLoader : public QObject -{ - Q_OBJECT -public: - explicit PreviewPluginLoader(const char *iid, - const QString &suffix = QString(), - Qt::CaseSensitivity = Qt::CaseSensitive, - bool repetitiveKeyInsensitive = false); - virtual ~PreviewPluginLoader(); - - QList metaData() const; - QObject *instance(int index) const; - -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) - QPluginLoader *pluginLoader(const QString &key) const; - QList pluginLoaderList(const QString &key) const; -#endif - - QMultiMap keyMap() const; - int indexOf(const QString &needle) const; - QList getAllIndexByKey(const QString &needle) const; - - void update(); - - static void refreshAll(); - - PreviewPluginLoaderPrivate *dptr { nullptr }; -}; - -template -PluginInterface *dLoadPlugin(const PreviewPluginLoader *loader, const QString &key) -{ - const int index = loader->indexOf(key); - if (index != -1) { - QObject *factoryObject = loader->instance(index); - if (FactoryInterface *factory = qobject_cast(factoryObject)) - if (PluginInterface *result = factory->create(key)) - return result; - } - return 0; -} - -template -QList dLoadPluginList(const PreviewPluginLoader *loader, const QString &key) -{ - QList list; - - for (int index : loader->getAllIndexByKey(key)) { - if (index != -1) { - QObject *factoryObject = loader->instance(index); - if (FactoryInterface *factory = qobject_cast(factoryObject)) - if (PluginInterface *result = factory->create(key)) - list << result; - } - } - - return list; -} -} -#endif diff --git a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.cpp b/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.cpp deleted file mode 100644 index 07a22f8560..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "pluginloader_p.h" - -#include -#include -#include - -using namespace dfmplugin_filepreview; -QStringList PreviewPluginLoaderPrivate::pluginPaths; -static constexpr char kPluginPath[] { "/common/dfmplugin-preview/previews" }; -PreviewPluginLoaderPrivate::PreviewPluginLoaderPrivate(QObject *parent) - : QObject(parent) -{ - if (pluginPaths.isEmpty()) { -#ifdef QT_DEBUG - QString pluginsDir(qApp->property("DFM_BUILD_PLUGIN_DIR").toString() + kPluginPath); - pluginPaths.append(pluginsDir); -#else - pluginPaths.append(QString::fromLocal8Bit(PLUGINDIR)); -#endif - } -} - -PreviewPluginLoaderPrivate::~PreviewPluginLoaderPrivate() -{ -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.h b/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.h deleted file mode 100644 index 4eb4a0f47c..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/pluginInterface/private/pluginloader_p.h +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PLUGINLOADER_P_H -#define PLUGINLOADER_P_H - -#include "dfmplugin_filepreview_global.h" - -#include -#include -#include -#include - -namespace dfmplugin_filepreview { - -inline QString iidKeyLiteral() -{ - return QStringLiteral("IID"); -} -#ifdef QT_SHARED -inline QString versionKeyLiteral() -{ - return QStringLiteral("version"); -} -#endif -inline QString metaDataKeyLiteral() -{ - return QStringLiteral("MetaData"); -} -inline QString keysKeyLiteral() -{ - return QStringLiteral("Keys"); -} - -class PreviewPluginLoaderPrivate : public QObject -{ - Q_OBJECT -public: - explicit PreviewPluginLoaderPrivate(QObject *parent = nullptr); - virtual ~PreviewPluginLoaderPrivate(); - mutable QMutex mutex; - QByteArray iid; - QList pluginLoaderList; - QMultiMap keyMap; - QString suffix; - Qt::CaseSensitivity cs; - bool rki = false; - QStringList loadedPaths; - - static QStringList pluginPaths; -}; -} -#endif //! PLUGINLOADER_P_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.cpp b/src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.cpp deleted file mode 100644 index b4c012b2dd..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.cpp +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "previewdialogmanager.h" -#include -#include - -#include - -#include - -DFMBASE_USE_NAMESPACE -using namespace dfmplugin_filepreview; - -PreviewDialogManager *PreviewDialogManager::instance() -{ - static PreviewDialogManager previewManager; - return &previewManager; -} - -PreviewDialogManager::PreviewDialogManager(QObject *parent) - : QObject(parent) -{ -} - -void PreviewDialogManager::showPreviewDialog(const quint64 winId, const QList &selecturls, const QList &dirUrl) -{ - Q_UNUSED(winId) - - if (selecturls.isEmpty()) - return; - - bool hasInvalidSymlink = false; - for (const QUrl &url : selecturls) { - const FileInfoPointer &info = InfoFactory::create(url); - - if (info && (dfmbase::FileUtils::isLocalFile(info->urlOf(UrlInfoType::kUrl)) || info->exists())) { - //判断链接文件的源文件是否存在 - if (info->isAttributes(OptInfoType::kIsSymLink)) { - QUrl targetUrl = QUrl::fromLocalFile(info->pathOf(PathInfoType::kSymLinkTarget)); - if (!targetUrl.isValid()) { - hasInvalidSymlink = true; - continue; - } - - dfmio::DFile file(targetUrl); - if (!file.exists()) { - hasInvalidSymlink = true; - continue; - } - - const FileInfoPointer linkInfo = InfoFactory::create(targetUrl); - if (linkInfo && !linkInfo->exists() && linkInfo->timeOf(TimeInfoType::kCreateTimeSecond) == 0) { - info->refresh(); - linkInfo->refresh(); - } - } - } - } - - //链接文件源文件不存在或找不到的情况,弹错误提示窗 - if (hasInvalidSymlink) { - DialogManager::instance()->showErrorDialog(tr("Unable to find the original file"), QString()); - return; - } - - if (filePreviewDialog) { - filePreviewDialog->close(); - filePreviewDialog = nullptr; - } - - if (!filePreviewDialog) { - filePreviewDialog = new FilePreviewDialog(selecturls, nullptr); - DPlatformWindowHandle::enableDXcbForWindow(filePreviewDialog, true); - filePreviewDialog->setCurrentWinID(winId); - } - - if (selecturls.count() == 1) - filePreviewDialog->setEntryUrlList(dirUrl); - - filePreviewDialog->show(); - filePreviewDialog->raise(); - filePreviewDialog->activateWindow(); - - filePreviewDialog->moveToCenter(); -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.h b/src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.h deleted file mode 100644 index cdca32ab7b..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewdialogmanager.h +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PREVIEWDIALOGMANAGER_H -#define PREVIEWDIALOGMANAGER_H - -#include "dfmplugin_filepreview_global.h" -#include "views/filepreviewdialog.h" - -#include - -namespace dfmplugin_filepreview { -class PreviewDialogManager : public QObject -{ - Q_OBJECT -public: - static PreviewDialogManager *instance(); - -private: - explicit PreviewDialogManager(QObject *parent = nullptr); - -public slots: - void showPreviewDialog(const quint64 winId, const QList &selecturls, const QList &dirUrl); - -private: - FilePreviewDialog *filePreviewDialog { nullptr }; -}; -} -#endif // PREVIEWDIALOGMANAGER_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.cpp b/src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.cpp deleted file mode 100644 index f2ffdb49da..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "previewfileoperation.h" - -#include - -#include - -#include - -#include - -Q_DECLARE_METATYPE(bool *) - -DFMBASE_USE_NAMESPACE -using namespace dfmplugin_filepreview; -PreviewFileOperation::PreviewFileOperation(QObject *parent) - : QObject(parent) -{ -} - -bool PreviewFileOperation::openFileHandle(quint64 winID, const QUrl &url) -{ - QList urls; - urls << url; - bool ok = true; - dpfSignalDispatcher->publish(GlobalEventType::kOpenFiles, winID, urls, &ok); - - return ok; -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.h b/src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.h deleted file mode 100644 index a2c6e869a0..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewfileoperation.h +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PREVIEWFILEOPERATION_H -#define PREVIEWFILEOPERATION_H -#include "dfmplugin_filepreview_global.h" - -#include - -namespace dfmplugin_filepreview { -class PreviewFileOperation : public QObject -{ - Q_OBJECT -public: - explicit PreviewFileOperation(QObject *parent = nullptr); - -public: - static bool openFileHandle(quint64 winID, const QUrl &url); -}; -} -#endif // PREVIEWFILEOPERATION_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.cpp b/src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.cpp deleted file mode 100644 index 5a6b9ad0c3..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.cpp +++ /dev/null @@ -1,69 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "dfmplugin_filepreview_global.h" -#include "previewhelper.h" - -#include -#include -#include - -DFMBASE_USE_NAMESPACE -using namespace dfmplugin_filepreview; - -PreviewHelper *PreviewHelper::instance() -{ - static PreviewHelper instance; - return &instance; -} - -bool PreviewHelper::isPreviewEnabled() -{ - const auto &&ret = DConfigManager::instance()->value(ConfigInfos::kConfName, "previewEnable"); - return ret.isValid() ? ret.toBool() : true; -} - -bool PreviewHelper::showThumbnailInRemote() -{ - const auto &&ret = DConfigManager::instance()->value(ConfigInfos::kConfName, ConfigInfos::kRemoteThumbnailKey, false); - return ret.toBool(); -} - -bool PreviewHelper::showThumbnailInMtp() -{ - const auto &&ret = DConfigManager::instance()->value(ConfigInfos::kConfName, ConfigInfos::kMtpThumbnailKey, true); - return ret.toBool(); -} - -void PreviewHelper::bindConfig() -{ - SyncPair pair { - { SettingType::kGenAttr, Application::kShowThunmbnailInRemote }, - { ConfigInfos::kConfName, ConfigInfos::kRemoteThumbnailKey }, - saveRemoteToConf, - syncRemoteToAppSet, - isRemoteConfEqual - }; - ConfigSynchronizer::instance()->watchChange(pair); -} - -PreviewHelper::PreviewHelper(QObject *parent) - : QObject(parent) -{ -} - -void PreviewHelper::saveRemoteToConf(const QVariant &var) -{ - DConfigManager::instance()->setValue(ConfigInfos::kConfName, ConfigInfos::kRemoteThumbnailKey, var); -} - -void PreviewHelper::syncRemoteToAppSet(const QString &, const QString &, const QVariant &var) -{ - Application::instance()->setGenericAttribute(Application::kShowThunmbnailInRemote, var.toBool()); -} - -bool PreviewHelper::isRemoteConfEqual(const QVariant &dcon, const QVariant &dset) -{ - return dcon.toBool() && dset.toBool(); -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.h b/src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.h deleted file mode 100644 index 863bc37791..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/utils/previewhelper.h +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PREVIEWHELPER_H -#define PREVIEWHELPER_H - -#include - -namespace dfmplugin_filepreview { -class PreviewHelper : public QObject -{ - Q_DISABLE_COPY(PreviewHelper) -public: - static PreviewHelper *instance(); - - bool isPreviewEnabled(); - bool showThumbnailInRemote(); - bool showThumbnailInMtp(); - - void bindConfig(); - -private: - explicit PreviewHelper(QObject *parent = nullptr); - - static void saveRemoteToConf(const QVariant &var); - static void syncRemoteToAppSet(const QString &, const QString &, const QVariant &var); - static bool isRemoteConfEqual(const QVariant &dcon, const QVariant &dset); -}; -} - -#endif // PREVIEWHELPER_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.cpp b/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.cpp deleted file mode 100644 index 02e0885368..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.cpp +++ /dev/null @@ -1,405 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "filepreviewdialog.h" -#include "pluginInterface/filepreviewfactory.h" -#include "unknowfilepreview.h" -#include "utils/previewfileoperation.h" - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include - -DFMBASE_USE_NAMESPACE -DWIDGET_USE_NAMESPACE -using namespace dfmplugin_filepreview; - -FilePreviewDialog::FilePreviewDialog(const QList &previewUrllist, QWidget *parent) - : DAbstractDialog(parent), - fileList(previewUrllist), - dialogManager(DialogManagerInstance) -{ - initUI(); - if (previewUrllist.count() < 2) { - statusBar->preButton()->hide(); - statusBar->nextButton()->hide(); - } - firstEnterSwitchToPage = true; - switchToPage(0); - windowHandle()->installEventFilter(this); -} - -FilePreviewDialog::~FilePreviewDialog() -{ - if (preview) { - preview->deleteLater(); - preview = nullptr; - QGuiApplication::changeOverrideCursor(QCursor(Qt::ArrowCursor)); - } -} - -void FilePreviewDialog::updatePreviewList(const QList &previewUrllist) -{ - // 视频预览的前一秒禁止再次播放 - if (playingVideo) { - return; - } - - fileList = previewUrllist; - currentPageIndex = -1; - - if (previewUrllist.count() < 2) { - statusBar->preButton()->hide(); - statusBar->nextButton()->hide(); - } else { - statusBar->preButton()->show(); - statusBar->nextButton()->show(); - } - firstEnterSwitchToPage = true; - switchToPage(0); -} - -void FilePreviewDialog::setEntryUrlList(const QList &urlList) -{ - if (urlList.isEmpty()) - return; - QUrl currentUrl = fileList.at(currentPageIndex); - if (urlList.contains(currentUrl)) { - previewDir = true; - fileList = urlList; - currentPageIndex = fileList.indexOf(currentUrl); - } -} - -void FilePreviewDialog::done(int r) -{ - DAbstractDialog::done(r); - - if (preview) { - preview->stop(); - preview->deleteLater(); - preview = nullptr; - } -} - -void FilePreviewDialog::setCurrentWinID(quint64 winID) -{ - currentWinID = winID; -} - -void FilePreviewDialog::playCurrentPreviewFile() -{ - if (preview) { - if (preview->metaObject()->className() == QStringLiteral("VideoPreview")) { - playingVideo = true; - // 1s 后才能重新预览视频,原因是快速切换预览视频会因为视频插件内部的崩溃引起文管崩溃 - QTimer::singleShot(1000, [this]() { - playingVideo = false; - }); - } - preview->play(); - } -} - -void FilePreviewDialog::openFile() -{ - - bool succ = PreviewFileOperation::openFileHandle(currentWinID, fileList.at(currentPageIndex)); - if (succ) - close(); -} - -void FilePreviewDialog::childEvent(QChildEvent *event) -{ - if (closeBtn && event->added()) { - closeBtn->raise(); - } - - return DAbstractDialog::childEvent(event); -} - -void FilePreviewDialog::showEvent(QShowEvent *event) -{ - return DAbstractDialog::showEvent(event); -} - -void FilePreviewDialog::closeEvent(QCloseEvent *event) -{ - emit signalCloseEvent(); - if (preview) { - preview->stop(); - preview->deleteLater(); - preview = nullptr; - } - - return DAbstractDialog::closeEvent(event); -} - -void FilePreviewDialog::resizeEvent(QResizeEvent *event) -{ - DAbstractDialog::resizeEvent(event); - QTimer::singleShot(50, this, [=]() { //! 50ms这个时间视机器性能而定 - repaint(); //通过重绘来解决调整大小前的窗口残留的问题 - }); -} - -bool FilePreviewDialog::eventFilter(QObject *obj, QEvent *event) -{ - if (event->type() == QEvent::KeyPress) { - const QKeyEvent *e = static_cast(event); - switch (e->key()) { - case Qt::Key_Left: - case Qt::Key_Up: - if (!e->isAutoRepeat()) - previousPage(); - break; - case Qt::Key_Right: - case Qt::Key_Down: - if (!e->isAutoRepeat()) - nextPage(); - break; - case Qt::Key_Escape: - case Qt::Key_Space: { - if (!e->isAutoRepeat()) { - // 视频预览的前一秒禁止再次播放 - if (playingVideo) { - break; - } - if (preview) { - preview->stop(); - } - close(); - } - return true; - } - default: - break; - } - } - - return DAbstractDialog::eventFilter(obj, event); -} - -void FilePreviewDialog::initUI() -{ - closeBtn = new DFloatingButton(DStyle::SP_CloseButton, this); - closeBtn->setStyleSheet("background-color: transparent;"); - closeBtn->setFixedSize(46, 46); - closeBtn->setIconSize(QSize(40, 40)); - closeBtn->setFlat(true); - DAnchorsBase::setAnchor(closeBtn, Qt::AnchorRight, this, Qt::AnchorRight); - connect(closeBtn, &QPushButton::clicked, this, &FilePreviewDialog::close); - - separator = new DHorizontalLine(this); - separator->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - - statusBar = new FilePreviewDialogStatusBar(this); - statusBar->setObjectName("StatusBar"); - statusBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - // statusBar->openButton()->setFocus(); - - QVBoxLayout *layout = new QVBoxLayout(this); - - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(0); - - QHBoxLayout *separatorLayout = new QHBoxLayout(this); - - separatorLayout->addSpacing(10); - separatorLayout->addWidget(separator); - separatorLayout->addSpacing(10); - - layout->addLayout(separatorLayout, 1); - layout->addWidget(statusBar, 0, Qt::AlignBottom); - - QAction *shortcutAction = new QAction(this); - - shortcutAction->setShortcut(QKeySequence::Copy); - addAction(shortcutAction); - - connect(statusBar->preButton(), &QPushButton::clicked, this, &FilePreviewDialog::previousPage); - connect(statusBar->nextButton(), &QPushButton::clicked, this, &FilePreviewDialog::nextPage); - connect(statusBar->openButton(), &QPushButton::clicked, this, &FilePreviewDialog::openFile); -} - -void FilePreviewDialog::switchToPage(int index) -{ - currentPageIndex = index; - statusBar->preButton()->setEnabled(index > 0); - statusBar->nextButton()->setEnabled(index < fileList.count() - 1); - - FileInfoPointer info = InfoFactory::create(fileList.at(index)); - if (info.isNull()) - return; - - if (!info) { - fileList.removeAt(index); - - if (fileList.isEmpty()) - return; - - return switchToPage(index); - } - - AbstractBasePreview *view = nullptr; - const QMimeType &mimeType = DMimeDatabase().mimeTypeForUrl(fileList.at(index)); - - QStringList keyList(mimeType.name()); - - keyList.append(mimeType.aliases()); - keyList.append(mimeType.allAncestors()); - - if (previewDir) { - QList selectUrl { fileList.at(index) }; - auto eventID { DPF_NAMESPACE::Event::instance()->eventType("dfmplugin_workspace", "slot_View_SelectFiles") }; - if (eventID != DPF_NAMESPACE::EventTypeScope::kInValid) - dpfSlotChannel->push("dfmplugin_workspace", "slot_View_SelectFiles", currentWinID, selectUrl); - else - dpfSlotChannel->push("ddplugin_canvas", "slot_CanvasView_Select", selectUrl); - } - - for (const QString &key : keyList) { - const QString &gKey = generalKey(key); - - if (preview && (FilePreviewFactory::isSuitedWithKey(preview, key) || FilePreviewFactory::isSuitedWithKey(preview, gKey)) && !FileUtils::isDesktopFile(fileList.at(index))) { - if (preview->setFileUrl(fileList.at(index))) { - preview->contentWidget()->updateGeometry(); - updateTitle(); - // statusBar->openButton()->setFocus(); - preview->contentWidget()->adjustSize(); - int newPerviewWidth = preview->contentWidget()->size().width(); - int newPerviewHeight = preview->contentWidget()->size().height(); - setFixedSize(newPerviewWidth, newPerviewHeight + statusBar->height()); - playCurrentPreviewFile(); - moveToCenter(); - return; - } - } - view = FilePreviewFactory::create(key); - if (!view && gKey != key) { - if (!FileUtils::isDesktopFile(fileList.at(index))) { - view = FilePreviewFactory::create(gKey); - } - } - - if (view) { - view->initialize(this, statusBar); - - if (info->canAttributes(CanableInfoType::kCanRedirectionFileUrl) && view->setFileUrl(info->urlOf(UrlInfoType::kRedirectedFileUrl))) - break; - else if (view->setFileUrl(fileList.at(index))) - break; - else - view->deleteLater(); - } - } - - if (!view) { - if (preview && qobject_cast(preview)) { - preview->setFileUrl(fileList.at(index)); - // statusBar->openButton()->setFocus(); - return; - } else { - view = new UnknowFilePreview(this); - view->initialize(this, statusBar); - view->setFileUrl(fileList.at(index)); - } - } - - if (preview) - disconnect(preview, &AbstractBasePreview::titleChanged, this, &FilePreviewDialog::updateTitle); - - connect(view, &AbstractBasePreview::titleChanged, this, &FilePreviewDialog::updateTitle); - - if (preview) { - preview->contentWidget()->setVisible(false); - static_cast(statusBar->layout())->removeWidget(preview->statusBarWidget()); - static_cast(layout())->removeWidget(preview->contentWidget()); - preview->handleBeforDestroy(); - preview->deleteLater(); - } - - static_cast(layout())->insertWidget(0, view->contentWidget()); - - if (QWidget *w = view->statusBarWidget()) - static_cast(statusBar->layout())->insertWidget(3, w, 0, view->statusBarWidgetAlignment()); - - separator->setVisible(view->showStatusBarSeparator()); - preview = view; - - playCurrentPreviewFile(); - // statusBar->openButton()->setFocus(); - this->adjustSize(); - preview->contentWidget()->adjustSize(); - int newPerviewWidth = preview->contentWidget()->size().width(); - int newPerviewHeight = preview->contentWidget()->size().height(); - setFixedSize(newPerviewWidth, newPerviewHeight + statusBar->height()); - updateTitle(); - moveToCenter(); -} - -void FilePreviewDialog::previousPage() -{ - if (currentPageIndex < 1) - return; - if (playingVideo) - return; - firstEnterSwitchToPage = false; - switchToPage(currentPageIndex - 1); -} - -void FilePreviewDialog::nextPage() -{ - if (currentPageIndex > fileList.count() - 2) - return; - if (playingVideo) - return; - firstEnterSwitchToPage = false; - switchToPage(currentPageIndex + 1); -} - -void FilePreviewDialog::updateTitle() -{ - // 在频繁启动关闭的场景下,preview可能会意外释放,引起空指针造成的崩溃 - if (!preview) - return; - - QFont font = statusBar->title()->font(); - QFontMetrics fm(font); - QString elidedText; - - if (!statusBar->preButton()->isVisible()) { - /*smb 中一直按着空格预览,preview 已经析构了,但是定时器的timeout事件已经执行,这里使用智能指针进行判断*/ - if (!preview) { - return; - } - elidedText = fm.elidedText(preview->title(), Qt::ElideMiddle, width() / 2 - statusBar->contentsMargins().left() - statusBar->layout()->spacing() - 30); - } else { - elidedText = fm.elidedText(preview->title(), Qt::ElideMiddle, width() / 2 - statusBar->preButton()->width() - statusBar->nextButton()->width() - statusBar->contentsMargins().left() - statusBar->layout()->spacing() * 3 - 30); - } - statusBar->title()->setText(elidedText); - statusBar->title()->setHidden(statusBar->title()->text().isEmpty()); -} - -QString FilePreviewDialog::generalKey(const QString &key) -{ - const QStringList &tmp = key.split('/'); - - if (tmp.size() > 1) - return tmp.first() + "/*"; - - return key; -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.h b/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.h deleted file mode 100644 index 8001401648..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialog.h +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PREVIEWWIDGET_H -#define PREVIEWWIDGET_H -#include "dfmplugin_filepreview_global.h" -#include -#include "filepreviewdialogstatusbar.h" -#include - -#include -#include -#include - -#include - -namespace dfmplugin_filepreview { -class FilePreviewDialog : public DTK_WIDGET_NAMESPACE::DAbstractDialog -{ - Q_OBJECT -public: - explicit FilePreviewDialog(const QList &previewUrllist, QWidget *parent = nullptr); - ~FilePreviewDialog() override; - - void updatePreviewList(const QList &previewUrllist); - - void setEntryUrlList(const QList &entryUrlList); - - void done(int r) override; - - void setCurrentWinID(quint64 winID); - -signals: - void signalCloseEvent(); - -public slots: - void playCurrentPreviewFile(); - - void openFile(); - -private: - void childEvent(QChildEvent *event) override; - void showEvent(QShowEvent *event) override; - void closeEvent(QCloseEvent *event) override; - void resizeEvent(QResizeEvent *event) override; - bool eventFilter(QObject *obj, QEvent *event) override; - - void initUI(); - void switchToPage(int index); - void previousPage(); - void nextPage(); - void updateTitle(); - QString generalKey(const QString &key); - - QList fileList; - - DTK_WIDGET_NAMESPACE::DFloatingButton *closeBtn { Q_NULLPTR }; - DTK_WIDGET_NAMESPACE::DHorizontalLine *separator { nullptr }; - FilePreviewDialogStatusBar *statusBar { nullptr }; - - bool playingVideo { false }; - bool firstEnterSwitchToPage { false }; - bool previewDir { false }; - int currentPageIndex { -1 }; - quint64 currentWinID { 0 }; - DFMBASE_NAMESPACE::AbstractBasePreview *preview { nullptr }; - DFMBASE_NAMESPACE::DialogManager *dialogManager { nullptr }; -}; -} -#endif diff --git a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.cpp b/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.cpp deleted file mode 100644 index 59c6c4b6b8..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "filepreviewdialogstatusbar.h" -#include - -using namespace dfmplugin_filepreview; - -FilePreviewDialogStatusBar::FilePreviewDialogStatusBar(QWidget *parent) - : QFrame(parent) -{ - QSize iconSize(16, 16); - preBtn = new QPushButton(this); - preBtn->setObjectName("PreButton"); - preBtn->setIcon(QIcon::fromTheme("go-previous").pixmap(iconSize)); - preBtn->setIconSize(iconSize); - preBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - preBtn->setShortcut(QKeySequence::Back); - preBtn->setFocusPolicy(Qt::NoFocus); - - nextBtn = new QPushButton(this); - nextBtn->setObjectName("NextButton"); - nextBtn->setIcon(QIcon::fromTheme("go-next").pixmap(iconSize)); - nextBtn->setIconSize(iconSize); - nextBtn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - nextBtn->setShortcut(QKeySequence::Forward); - nextBtn->setFocusPolicy(Qt::NoFocus); - - previewTitle = new QLabel(this); - previewTitle->setObjectName("TitleLabel"); - previewTitle->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - previewTitle->hide(); - - openBtn = new QPushButton(QObject::tr("Open", "button"), this); - openBtn->setObjectName("OpenButton"); - QFont font = openBtn->font(); - font.setPixelSize(12); - openBtn->setFont(font); - openBtn->setMinimumWidth(60); - openBtn->setShortcut(QKeySequence::Open); - - QHBoxLayout *layout = new QHBoxLayout(this); - - layout->setContentsMargins(10, 10, 10, 10); - layout->addWidget(preBtn); - layout->addWidget(nextBtn); - layout->addWidget(previewTitle); - layout->addWidget(openBtn, 0, Qt::AlignRight); - - setLayout(layout); -} - -QLabel *FilePreviewDialogStatusBar::title() const -{ - return previewTitle; -} - -QPushButton *FilePreviewDialogStatusBar::preButton() const -{ - return preBtn; -} - -QPushButton *FilePreviewDialogStatusBar::nextButton() const -{ - return nextBtn; -} - -QPushButton *FilePreviewDialogStatusBar::openButton() const -{ - return openBtn; -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.h b/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.h deleted file mode 100644 index b7a11ff1de..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/views/filepreviewdialogstatusbar.h +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef FILEPREVIEWDIALOGSTATUSBAR_H -#define FILEPREVIEWDIALOGSTATUSBAR_H - -#include "dfmplugin_filepreview_global.h" - -#include -#include -#include - -namespace dfmplugin_filepreview { -class FilePreviewDialogStatusBar : public QFrame -{ - Q_OBJECT -public: - explicit FilePreviewDialogStatusBar(QWidget *parent = nullptr); - - QLabel *title() const; - QPushButton *preButton() const; - QPushButton *nextButton() const; - QPushButton *openButton() const; - -private: - QLabel *previewTitle { nullptr }; - - QPushButton *preBtn { nullptr }; - QPushButton *nextBtn { nullptr }; - QPushButton *openBtn { nullptr }; -}; -} -#endif // FILEPREVIEWDIALOGSTATUSBAR_H diff --git a/src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.cpp b/src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.cpp deleted file mode 100644 index ed2dacd58b..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.cpp +++ /dev/null @@ -1,127 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "unknowfilepreview.h" - -#include -#include -#include - -#include -#include -#include - -DFMBASE_USE_NAMESPACE -using namespace dfmplugin_filepreview; - -UnknowFilePreview::UnknowFilePreview(QObject *parent) - : AbstractBasePreview(parent) -{ - contentView = new QWidget(); - contentView->setFixedSize(590, 260); - iconLabel = new QLabel(contentView); - iconLabel->setObjectName("IconLabel"); - iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - nameLabel = new QLabel(contentView); - nameLabel->setObjectName("NameLabel"); - nameLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - QFont font; - font.setWeight(QFont::DemiBold); - font.setPointSize(12); - nameLabel->setFont(font); - sizeLabel = new QLabel(contentView); - sizeLabel->setObjectName("SizeLabel"); - sizeLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - typeLabel = new QLabel(contentView); - typeLabel->setObjectName("TypeLabel"); - typeLabel->setWordWrap(true); - typeLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); - typeLabel->adjustSize(); - QVBoxLayout *vlayout = new QVBoxLayout(); - - vlayout->setContentsMargins(0, 16, 0, 0); - vlayout->addWidget(nameLabel); - vlayout->addSpacing(10); - vlayout->addWidget(sizeLabel); - vlayout->addWidget(typeLabel); - vlayout->addStretch(); - - QHBoxLayout *hlayout = new QHBoxLayout(contentView); - - hlayout->setContentsMargins(60, 60, 20, 20); - hlayout->addWidget(iconLabel); - hlayout->addSpacing(30); - hlayout->addLayout(vlayout); - hlayout->addStretch(); - - fileCalculationUtils = new FileStatisticsJob; - connect(fileCalculationUtils, &FileStatisticsJob::dataNotify, this, &UnknowFilePreview::updateFolderSizeCount); -} - -UnknowFilePreview::~UnknowFilePreview() -{ - if (contentView) { - contentView->deleteLater(); - } - - if (fileCalculationUtils) { - fileCalculationUtils->deleteLater(); - } -} - -bool UnknowFilePreview::setFileUrl(const QUrl &url) -{ - this->url = url; - const FileInfoPointer info = InfoFactory::create(url); - - if (!info.isNull()) { - setFileInfo(info); - return true; - } - - return false; -} - -QUrl UnknowFilePreview::fileUrl() const -{ - return url; -} - -QWidget *UnknowFilePreview::contentWidget() const -{ - return contentView; -} - -void UnknowFilePreview::setFileInfo(const FileInfoPointer &info) -{ - if (fileCalculationUtils) - fileCalculationUtils->stop(); - - const QIcon &icon = info->fileIcon(); - - iconLabel->setPixmap(icon.pixmap(180)); - - QFont font = nameLabel->font(); - QRect rect(QPoint(0, 0), QSize(240, 80)); - QStringList labelTexts; - ElideTextLayout layout(info->nameOf(NameInfoType::kFileName)); - layout.documentHandle()->firstBlock().layout()->setFont(font); - layout.layout(rect, Qt::ElideMiddle, nullptr, Qt::NoBrush, &labelTexts); - const QString &elidedText = labelTexts.join('\n'); - nameLabel->setText(elidedText); - - if (info->isAttributes(OptInfoType::kIsFile) || info->isAttributes(OptInfoType::kIsSymLink)) { - sizeLabel->setText(QObject::tr("Size: %1").arg(info->displayOf(DisPlayInfoType::kSizeDisplayName))); - typeLabel->setText(QObject::tr("Type: %1").arg(info->displayOf(DisPlayInfoType::kMimeTypeDisplayName))); - } else if (fileCalculationUtils && info->isAttributes(OptInfoType::kIsDir)) { - fileCalculationUtils->start(QList() << info->urlOf(UrlInfoType::kUrl)); - sizeLabel->setText(QObject::tr("Size: 0")); - } -} - -void UnknowFilePreview::updateFolderSizeCount(qint64 size, int filesCount, int directoryCount) -{ - sizeLabel->setText(QObject::tr("Size: %1").arg(FileUtils::formatSize(size))); - typeLabel->setText(QObject::tr("Items: %1").arg(filesCount + directoryCount)); -} diff --git a/src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.h b/src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.h deleted file mode 100644 index 15b429db7a..0000000000 --- a/src/plugins/common/dfmplugin-preview/filepreview/views/unknowfilepreview.h +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef UNKNOWFILEPREVIEW_H -#define UNKNOWFILEPREVIEW_H -#include "dfmplugin_filepreview_global.h" -#include -#include -#include - -#include -#include -#include - -namespace dfmplugin_filepreview { -class UnknowFilePreview : public DFMBASE_NAMESPACE::AbstractBasePreview -{ - Q_OBJECT -public: - explicit UnknowFilePreview(QObject *parent = nullptr); - ~UnknowFilePreview() override; - - bool setFileUrl(const QUrl &url) override; - QUrl fileUrl() const override; - - QWidget *contentWidget() const override; - -private: - void setFileInfo(const FileInfoPointer &info); - -signals: - void requestStartFolderSize(); - -public slots: - void updateFolderSizeCount(qint64 size, int filesCount, int directoryCount); - -private: - QUrl url; - QWidget *contentView { nullptr }; - QLabel *iconLabel { nullptr }; - QLabel *nameLabel { nullptr }; - QLabel *sizeLabel { nullptr }; - QLabel *typeLabel { nullptr }; - DFMBASE_NAMESPACE::FileStatisticsJob *fileCalculationUtils { nullptr }; -}; -} -#endif // UNKNOWFILEPREVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/pluginpreviews/CMakeLists.txt deleted file mode 100644 index 5a1957461f..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -set(GlobalFiles ${CMAKE_CURRENT_SOURCE_DIR}/preview_plugin_global.h) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) - -add_subdirectory(image-preview) -add_subdirectory(music-preview) -add_subdirectory(text-preview) -add_subdirectory(dciicon-preview) - -# TODO: #Qt6 deepin-pdfium, libdmr -add_subdirectory(pdf-preview) -if ((NOT ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "sw_64") - AND (NOT ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips64") - AND (NOT ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "mips32") - AND (NOT ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "loongarch64") - AND (NOT ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "riscv64")) - - find_package(PkgConfig REQUIRED) - pkg_search_module(libdmr QUIET libdmr) - if (libdmr_FOUND) - add_subdirectory(video-preview) - else() - message(WARNING "libdmr not found, video-preview plugin will not build!") - endif() -endif() diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/CMakeLists.txt deleted file mode 100644 index a044de3e26..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/CMakeLists.txt +++ /dev/null @@ -1,59 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(dtkdciicon-preview) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -FILE(GLOB_RECURSE DCIICONPREVIEW_FILES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*.json" - "${CMAKE_CURRENT_SOURCE_DIR}/*.xml" - "${GlobalFiles}" - ) - -# Qt5 -set(BIN_NAME dtkdciicon-preview) -set(QT_VERSION_MAJOR 5) -set(DTK_VERSION_MAJOR "") -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) - -add_library(${BIN_NAME} - SHARED - ${DCIICONPREVIEW_FILES} -) - -set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - -target_link_libraries(${BIN_NAME} - DFM::base - DFM::framework -) - -install(TARGETS ${BIN_NAME} LIBRARY DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) - -# Qt6 -if (DFM_BUILD_WITH_QT6) - set(BIN_NAME dtk6dciicon-previeww) - set(QT_VERSION_MAJOR 6) - set(DTK_VERSION_MAJOR 6) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) - - add_library(${BIN_NAME} - SHARED - ${DCIICONPREVIEW_FILES} - ) - - set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - - target_link_libraries(${BIN_NAME} - DFM${DTK_VERSION_MAJOR}::base - DFM${DTK_VERSION_MAJOR}::framework - ) - - install(TARGETS ${BIN_NAME} LIBRARY DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) -endif() - -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/dtk-dciicon-preview-plugin.json DESTINATION ../../previews) - -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dtk-dciicon-preview-plugin.json DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dtk-dci.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/mime/packages) diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.cpp deleted file mode 100644 index c710a8b99c..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.cpp +++ /dev/null @@ -1,668 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "ddciiconpreview.h" - -#include -#include -#include -#include -#include - -#include - -#ifdef DTKGUI_CLASS_DDciIcon -# include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace plugin_filepreview { -DFM_LOG_REISGER_CATEGORY(PREVIEW_NAMESPACE) - -DFMBASE_USE_NAMESPACE -#ifdef DTKGUI_CLASS_DDciIcon -DGUI_USE_NAMESPACE; -#endif - -#ifdef DTKGUI_CLASS_DDciIcon -static QPixmap generateTransparentTexture() -{ - QPixmap tilePixmap(64, 64); - tilePixmap.fill(Qt::white); - QPainter tilePainter(&tilePixmap); - QColor color(220, 220, 220); - tilePainter.fillRect(0, 0, 0x20, 0x20, color); - tilePainter.fillRect(0x20, 0x20, 0x20, 0x20, color); - tilePainter.end(); - return tilePixmap; -} - -class IconOptionWidget : public QWidget -{ -public: - explicit IconOptionWidget(QWidget *parent = nullptr) - : QWidget(parent), titleLabel(nullptr), mainLayout(nullptr), titleLayout(nullptr) - { - this->setFocusPolicy(Qt::ClickFocus); - this->mainLayout = new QVBoxLayout(this); - this->mainLayout->setContentsMargins(10, 10, 10, 10); - this->mainLayout->setSpacing(5); - this->titleLayout = new QHBoxLayout; - this->titleLayout->setContentsMargins(0, 0, 0, 0); - this->titleLabel = new QLabel(this); - auto font = this->titleLabel->font(); - font.setBold(true); - font.setPointSize(12); - this->titleLabel->setFont(font); - this->titleLayout->addWidget(this->titleLabel, 0, Qt::AlignLeft | Qt::AlignVCenter); - this->titleLayout->addStretch(); - this->mainLayout->addLayout(this->titleLayout); - } - - void setTitleText(const QString &title) - { - this->titleLabel->setText(title); - } - void addHeaderWidget(QWidget *w) - { - this->titleLayout->addWidget(w); - } - void addContentWidget(QWidget *w) - { - this->mainLayout->addWidget(w); - } - -protected: - void paintEvent(QPaintEvent *) override - { - QPainter painter(this); - painter.setPen(Qt::NoPen); - painter.setBrush(this->palette().base()); - painter.drawRoundedRect(this->rect(), 8, 8); - } - -private: - QLabel *titleLabel; - QVBoxLayout *mainLayout; - QHBoxLayout *titleLayout; -}; - -class IconPreviewView : public QGraphicsView -{ -public: - explicit IconPreviewView(QWidget *parent = nullptr); - -protected: - void wheelEvent(QWheelEvent *event) override; - void drawBackground(QPainter *painter, const QRectF &rect) override; - -private: - QLabel *scaleFactorLabel; - QTimer scaleHideTimer; -}; - -IconPreviewView::IconPreviewView(QWidget *parent) - : QGraphicsView(parent) -{ - this->setFrameShape(QFrame::NoFrame); - auto palette = this->palette(); - palette.setBrush(QPalette::Base, Qt::transparent); - this->setPalette(palette); - this->setInteractive(true); - this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - this->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - this->setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - this->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - this->setRenderHint(QPainter::SmoothPixmapTransform, true); - this->setLineWidth(0); - this->setForegroundBrush(Qt::transparent); - this->setDragMode(ScrollHandDrag); - this->setBackgroundBrush(Qt::white); - - this->scaleFactorLabel = new QLabel(this); - this->scaleFactorLabel->setVisible(false); - this->scaleHideTimer.setSingleShot(true); - this->scaleHideTimer.setInterval(800); - QObject::connect(&this->scaleHideTimer, &QTimer::timeout, this, [this]() { - this->scaleFactorLabel->hide(); - this->update(); - }); -} - -void IconPreviewView::wheelEvent(QWheelEvent *event) -{ - qreal factor = qPow(1.2, event->angleDelta().y() / 240.0); - // cap to 0.001 - 1000 - qreal actualFactor = qBound(0.001, factor, 1000.0); - this->scale(actualFactor, actualFactor); - this->scaleFactorLabel->setText(QString("%1%").arg(qRound(this->transform().m11() * 100))); - this->scaleFactorLabel->adjustSize(); - QRect rect = scaleFactorLabel->rect(); - rect.moveCenter(this->rect().center()); - rect.moveTop(this->rect().top()); - rect = rect.adjusted(0, 5, 0, 5); - this->scaleFactorLabel->move(rect.topLeft()); - this->scaleFactorLabel->setVisible(true); - this->scaleHideTimer.start(); - event->accept(); -} - -void IconPreviewView::drawBackground(QPainter *painter, const QRectF &) -{ - painter->save(); - painter->resetTransform(); - painter->setPen(Qt::NoPen); - painter->setRenderHint(QPainter::Antialiasing); - - if (this->backgroundBrush().texture().isNull()) { - painter->setBrush(this->backgroundBrush()); - painter->drawRoundedRect(this->viewport()->rect(), 8, 8); - } else { - QPainterPath path; - path.addRoundedRect(this->viewport()->rect(), 8, 8); - painter->setClipPath(path); - painter->drawTiledPixmap(this->viewport()->rect(), - this->backgroundBrush().texture()); - } - - painter->restore(); -} - -class DDciIconPreview : public AbstractBasePreview -{ -public: - explicit DDciIconPreview(QObject *parent = nullptr); - virtual ~DDciIconPreview() override; - - void initialize(QWidget *window, QWidget *statusBar) override; - QString title() const override; - QWidget *statusBarWidget() const override; - bool setFileUrl(const QUrl &url) override; - QUrl fileUrl() const override; - QWidget *contentWidget() const override; - -protected: - void initControlWidgets(); - void initPreviewWidgets(); - void initializeSettings(const QString &localUrl); - DDciIconPalette generateDciIconPalette(); - void updateIconMatchedResult(); - void updatePixmap(); - void updatePixmapImpl(); - bool eventFilter(QObject *watched, QEvent *event) override; - void timerEvent(QTimerEvent *e) override; - int getIconSize(); - -private: - IconPreviewView *view; - QGraphicsScene *scene; - QGraphicsPixmapItem *iconItem; - QWidget *mainWidget; - QWidget *controlWidget; - QComboBox *availableSizeCombo; - QLabel *devicePixelRatioLabel; - QLabel *paletteNosupportedText; - QLineEdit *foregroundPaletteEdit; - QLineEdit *backgroundPaletteEdit; - QLineEdit *hightlightPaletteEdit; - QLineEdit *hFPaletteEdit; - IconOptionWidget *paletteWidget; - QComboBox *themeCom; - QComboBox *modeCom; - QLineEdit *customSizeEdit; - QUrl url; - DDciIcon *dciIcon; - DDciIconMatchResult dciIconMatched; - QBasicTimer updateTimer; - QString titleText; -}; - -DDciIconPreview::DDciIconPreview(QObject *parent) - : AbstractBasePreview(parent), view(nullptr), scene(nullptr), mainWidget(nullptr), controlWidget(nullptr), availableSizeCombo(nullptr), devicePixelRatioLabel(nullptr), paletteNosupportedText(nullptr), foregroundPaletteEdit(nullptr), backgroundPaletteEdit(nullptr), hightlightPaletteEdit(nullptr), hFPaletteEdit(nullptr), paletteWidget(nullptr), themeCom(nullptr), modeCom(nullptr), customSizeEdit(nullptr), dciIcon(nullptr), dciIconMatched(nullptr) -{ -} - -DDciIconPreview::~DDciIconPreview() -{ - delete dciIcon; -} - -void DDciIconPreview::initialize(QWidget *window, QWidget *statusBar) -{ - Q_UNUSED(window); - Q_UNUSED(statusBar); - - this->mainWidget = new QWidget; - this->mainWidget->setFixedSize(1200, 800); - QHBoxLayout *mainLayout = new QHBoxLayout(this->mainWidget); - mainLayout->setContentsMargins(10, 20, 10, 20); - - this->initControlWidgets(); - this->initPreviewWidgets(); - - QSplitter *splitter = new QSplitter(this->mainWidget); - splitter->addWidget(this->controlWidget); - splitter->addWidget(this->view); - splitter->setSizes({ 80, 920 }); - mainLayout->addWidget(splitter); -} - -void DDciIconPreview::initControlWidgets() -{ - this->controlWidget = new QWidget(this->mainWidget); - this->controlWidget->setFocusPolicy(Qt::ClickFocus); - QVBoxLayout *controlLayout = new QVBoxLayout(this->controlWidget); - controlLayout->setContentsMargins(0, 0, 20, 0); - controlLayout->setSpacing(10); - - IconOptionWidget *availableSizeWidget = new IconOptionWidget; - availableSizeWidget->setTitleText(tr("Available sizes: ")); - this->availableSizeCombo = new QComboBox(); - this->availableSizeCombo->insertItem(this->availableSizeCombo->count(), tr("Custom Size")); - availableSizeWidget->addHeaderWidget(this->availableSizeCombo); - - QWidget *customSizeWidget = new QWidget(); - QHBoxLayout *customSizeLayout = new QHBoxLayout(customSizeWidget); - customSizeLayout->setContentsMargins(0, 0, 0, 0); - - this->customSizeEdit = new QLineEdit(); - QObject::connect(this->customSizeEdit, &QLineEdit::editingFinished, this, std::bind(&DDciIconPreview::updatePixmap, this)); - this->customSizeEdit->setClearButtonEnabled(true); - this->customSizeEdit->setFixedWidth(120); - this->customSizeEdit->setValidator(new QIntValidator(this->customSizeEdit)); - customSizeLayout->addStretch(); - customSizeLayout->addWidget(this->customSizeEdit); - availableSizeWidget->addContentWidget(customSizeWidget); - QObject::connect(this->availableSizeCombo, QOverload::of(&QComboBox::currentIndexChanged), this, - [=](int index) { - if (index == this->availableSizeCombo->count() - 1) { - this->customSizeEdit->setVisible(true); - this->customSizeEdit->setFocus(); - } else { - this->updatePixmap(); - this->customSizeEdit->setVisible(false); - } - }); - - IconOptionWidget *devicePixelRatioWidget = new IconOptionWidget; - devicePixelRatioWidget->setTitleText(tr("Device Pixel Ratio: ")); - this->devicePixelRatioLabel = new QLabel(this->controlWidget); - devicePixelRatioWidget->addHeaderWidget(this->devicePixelRatioLabel); - - QWidget *devicePixelSliderWidget = new QWidget; - devicePixelRatioWidget->addContentWidget(devicePixelSliderWidget); - QHBoxLayout *devicePixelSliderLayout = new QHBoxLayout(devicePixelSliderWidget); - devicePixelSliderLayout->setContentsMargins(0, 0, 0, 0); - devicePixelSliderLayout->setSpacing(0); - QSlider *devicePixelSlider = new QSlider(this->controlWidget); - devicePixelSliderLayout->addWidget(devicePixelSlider); - devicePixelSlider->setOrientation(Qt::Horizontal); - devicePixelSlider->setRange(0, 30); - devicePixelSlider->setSingleStep(5); - QObject::connect(devicePixelSlider, &QSlider::valueChanged, this, - [this, devicePixelSlider]() { - this->devicePixelRatioLabel->setText(QString::number(devicePixelSlider->value() * 1.0 / 10, 'g', 2)); - this->updatePixmap(); - }); - devicePixelSlider->setValue(static_cast(qApp->devicePixelRatio() * 10)); - - IconOptionWidget *themeWidget = new IconOptionWidget; - themeWidget->setTitleText(tr("Theme: ")); - this->themeCom = new QComboBox(this->controlWidget); - this->themeCom->addItems({ tr("Light"), tr("Dark") }); - themeWidget->addHeaderWidget(this->themeCom); - - IconOptionWidget *modeWidget = new IconOptionWidget; - modeWidget->setTitleText(tr("Mode: ")); - this->modeCom = new QComboBox(this->controlWidget); - this->modeCom->addItems({ tr("Normal"), tr("Disabled"), tr("Hovered"), tr("Pressed") }); - modeWidget->addHeaderWidget(this->modeCom); - - this->paletteWidget = new IconOptionWidget; - this->paletteWidget->setTitleText(tr("Palette")); - - this->paletteNosupportedText = new QLabel(tr("Current mode icon does not support the palette"), this->paletteWidget); - this->paletteNosupportedText->setVisible(false); - auto textFont = this->paletteNosupportedText->font(); - textFont.setPointSize(8); - textFont.setItalic(true); - this->paletteNosupportedText->setFont(textFont); - auto palette = this->paletteNosupportedText->palette(); - palette.setBrush(QPalette::WindowText, QColor(220, 20, 60)); - this->paletteNosupportedText->setPalette(palette); - this->paletteWidget->addHeaderWidget(this->paletteNosupportedText); - - QWidget *paletteContentWidget = new QWidget; - this->paletteWidget->addContentWidget(paletteContentWidget); - QVBoxLayout *paletteContentLayout = new QVBoxLayout(paletteContentWidget); - paletteContentLayout->setContentsMargins(0, 0, 0, 0); - paletteContentLayout->setSpacing(4); - QHBoxLayout *foregroundPaletteLayout = new QHBoxLayout; - foregroundPaletteLayout->setContentsMargins(10, 0, 0, 0); - foregroundPaletteLayout->setSpacing(2); - QLabel *foregroundPaletteTitle = new QLabel(tr("Foreground:"), this->controlWidget); - foregroundPaletteTitle->setFixedWidth(140); - auto font = foregroundPaletteTitle->font(); - font.setPointSize(10); - foregroundPaletteTitle->setFont(font); - this->foregroundPaletteEdit = new QLineEdit(this->controlWidget); - this->foregroundPaletteEdit->setText(this->mainWidget->palette().windowText().color().name()); - this->foregroundPaletteEdit->setFixedWidth(100); - this->foregroundPaletteEdit->setFont(font); - QObject::connect(this->foregroundPaletteEdit, &QLineEdit::editingFinished, this, std::bind(&DDciIconPreview::updatePixmap, this)); - foregroundPaletteLayout->addWidget(foregroundPaletteTitle); - foregroundPaletteLayout->addWidget(this->foregroundPaletteEdit, 1); - QHBoxLayout *backgroundPaletteLayout = new QHBoxLayout; - backgroundPaletteLayout->setContentsMargins(10, 0, 0, 0); - backgroundPaletteLayout->setSpacing(2); - QLabel *backgroundPaletteTitle = new QLabel(tr("Background:"), this->controlWidget); - backgroundPaletteTitle->setFixedWidth(140); - this->backgroundPaletteEdit = new QLineEdit(this->controlWidget); - this->backgroundPaletteEdit->setText(this->mainWidget->palette().window().color().name()); - this->backgroundPaletteEdit->setFixedWidth(100); - this->backgroundPaletteEdit->setFont(font); - QObject::connect(this->backgroundPaletteEdit, &QLineEdit::editingFinished, this, std::bind(&DDciIconPreview::updatePixmap, this)); - backgroundPaletteLayout->addWidget(backgroundPaletteTitle); - backgroundPaletteLayout->addWidget(this->backgroundPaletteEdit, 1); - - QHBoxLayout *hightlightPaletteLayout = new QHBoxLayout; - hightlightPaletteLayout->setContentsMargins(10, 0, 0, 0); - hightlightPaletteLayout->setSpacing(2); - QLabel *hightlightPaletteTitle = new QLabel(tr("Highlight:"), this->controlWidget); - hightlightPaletteTitle->setFixedWidth(140); - this->hightlightPaletteEdit = new QLineEdit(this->controlWidget); - this->hightlightPaletteEdit->setText(this->mainWidget->palette().highlight().color().name()); - this->hightlightPaletteEdit->setFixedWidth(100); - this->hightlightPaletteEdit->setFont(font); - QObject::connect(this->hightlightPaletteEdit, &QLineEdit::editingFinished, this, std::bind(&DDciIconPreview::updatePixmap, this)); - hightlightPaletteLayout->addWidget(hightlightPaletteTitle); - hightlightPaletteLayout->addWidget(this->hightlightPaletteEdit, 1); - QHBoxLayout *hFPaletteLayout = new QHBoxLayout; - hFPaletteLayout->setContentsMargins(10, 0, 0, 0); - hFPaletteLayout->setSpacing(2); - QLabel *hFPaletteTitle = new QLabel(tr("HighlightForeground:"), this->controlWidget); - hFPaletteTitle->setFixedWidth(140); - hFPaletteTitle->setFont(font); - this->hFPaletteEdit = new QLineEdit(this->controlWidget); - this->hFPaletteEdit->setText(this->mainWidget->palette().highlightedText().color().name()); - this->hFPaletteEdit->setFixedWidth(100); - this->hFPaletteEdit->setFont(font); - QObject::connect(this->hFPaletteEdit, &QLineEdit::editingFinished, this, std::bind(&DDciIconPreview::updatePixmap, this)); - hFPaletteLayout->addWidget(hFPaletteTitle); - hFPaletteLayout->addWidget(this->hFPaletteEdit, 1); - paletteContentLayout->addLayout(foregroundPaletteLayout); - paletteContentLayout->addLayout(backgroundPaletteLayout); - paletteContentLayout->addLayout(hightlightPaletteLayout); - paletteContentLayout->addLayout(hFPaletteLayout); - - IconOptionWidget *backgroundColorWidget = new IconOptionWidget; - backgroundColorWidget->setTitleText(tr("Background Color: ")); - QComboBox *backgroundColorCom = new QComboBox(this->controlWidget); - backgroundColorCom->addItems({ tr("White"), tr("Black"), tr("Transparent"), tr("Custom") }); - backgroundColorWidget->addHeaderWidget(backgroundColorCom); - - QWidget *customBackgroundWidget = new QWidget; - backgroundColorWidget->addContentWidget(customBackgroundWidget); - QHBoxLayout *customBackgroundLayout = new QHBoxLayout(customBackgroundWidget); - customBackgroundLayout->setContentsMargins(0, 0, 0, 0); - customBackgroundLayout->setSpacing(10); - QLineEdit *cusBackEdit = new QLineEdit(); - cusBackEdit->setVisible(false); - cusBackEdit->setFixedWidth(120); - customBackgroundLayout->addStretch(); - customBackgroundLayout->addWidget(cusBackEdit); - QObject::connect(cusBackEdit, &QLineEdit::editingFinished, this, [=]() { - QColor color(cusBackEdit->text()); - if (!color.isValid()) - return; - this->view->setBackgroundBrush(color); - }); - QObject::connect(backgroundColorCom, QOverload::of(&QComboBox::currentIndexChanged), this, - [=](int index) { - switch (index) { - case 0: - this->view->setBackgroundBrush(Qt::white); - cusBackEdit->setVisible(false); - break; - case 1: - this->view->setBackgroundBrush(Qt::black); - cusBackEdit->setVisible(false); - break; - case 2: - static const QPixmap &transparentTexture = generateTransparentTexture(); - this->view->setBackgroundBrush(transparentTexture); - cusBackEdit->setVisible(false); - break; - default: - cusBackEdit->setVisible(true); - cusBackEdit->setFocus(); - } - }); - - controlLayout->addWidget(availableSizeWidget); - controlLayout->addWidget(devicePixelRatioWidget); - controlLayout->addWidget(themeWidget); - controlLayout->addWidget(modeWidget); - controlLayout->addWidget(this->paletteWidget); - controlLayout->addWidget(backgroundColorWidget); - controlLayout->addStretch(); -} - -void DDciIconPreview::initPreviewWidgets() -{ - this->view = new IconPreviewView(); - this->view->installEventFilter(this); - this->scene = new QGraphicsScene(this->view); - this->view->setScene(this->scene); - - this->iconItem = new QGraphicsPixmapItem; - this->iconItem->setTransformationMode(Qt::SmoothTransformation); - this->iconItem->setPos(this->scene->sceneRect().center()); - this->iconItem->setFlag(QGraphicsItem::ItemIsSelectable, false); - this->iconItem->setFlag(QGraphicsItem::ItemIsMovable, false); - this->iconItem->setShapeMode(QGraphicsPixmapItem::BoundingRectShape); - this->scene->addItem(this->iconItem); -} - -void DDciIconPreview::initializeSettings(const QString &localUrl) -{ - if (localUrl.isEmpty()) - return; - - if (this->dciIcon) - delete this->dciIcon; - this->dciIcon = new DDciIcon(localUrl); - if (this->dciIcon->isNull()) { - delete this->dciIcon; - return; - } - - auto availableSizes = this->dciIcon->availableSizes(DDciIcon::Light); - for (int i = 0; i < availableSizes.size(); ++i) - this->availableSizeCombo->insertItem(i, QString::number(availableSizes[i])); - this->availableSizeCombo->setCurrentIndex(0); - this->updatePixmap(); -} - -DDciIconPalette DDciIconPreview::generateDciIconPalette() -{ - DDciIconPalette palette; - palette.setForeground(QColor(this->foregroundPaletteEdit->text())); - palette.setBackground(QColor(this->backgroundPaletteEdit->text())); - palette.setHighlight(QColor(this->hightlightPaletteEdit->text())); - palette.setHighlightForeground(QColor(this->hFPaletteEdit->text())); - return palette; -} - -void DDciIconPreview::updateIconMatchedResult() -{ - if (!this->dciIcon) - return; - - int iconSize = this->getIconSize(); - if (!iconSize) { - this->dciIconMatched = nullptr; - return; - } - - DDciIcon::Theme theme = this->themeCom->currentIndex() == 0 ? DDciIcon::Light : DDciIcon::Dark; - DDciIcon::Mode mode = DDciIcon::Mode(this->modeCom->currentIndex()); - this->dciIconMatched = this->dciIcon->matchIcon(iconSize, theme, mode, DDciIcon::DontFallbackMode); -} - -static QPixmap invaildPixmap() -{ - static QString text = "Invalid icon"; - static QPixmap pixmap(150, 80); - pixmap.fill(Qt::transparent); - QPainter p(&pixmap); - p.setRenderHint(QPainter::TextAntialiasing, true); - p.setPen(QColor(219, 112, 147)); - p.setBrush(Qt::NoBrush); - p.drawText(pixmap.rect(), Qt::AlignCenter | Qt::TextSingleLine, text); - return pixmap; -} - -void DDciIconPreview::updatePixmapImpl() -{ - auto pixmap = invaildPixmap(); - this->updateIconMatchedResult(); - - do { - if (!this->dciIconMatched) - break; - - bool supportPalette = this->dciIcon->isSupportedAttribute(this->dciIconMatched, DDciIcon::HasPalette); - this->paletteWidget->setEnabled(supportPalette); - this->paletteNosupportedText->setVisible(!supportPalette); - - int iconSize = this->getIconSize(); - if (iconSize == 0) - break; - - double devicePixelRatio = this->devicePixelRatioLabel->text().toDouble(); - if (qFuzzyCompare(devicePixelRatio, 0)) - break; - - auto palette = this->generateDciIconPalette(); - pixmap = this->dciIcon->pixmap(devicePixelRatio, iconSize, this->dciIconMatched, palette); - pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); - } while (false); - - this->iconItem->setPixmap(pixmap); - QRectF rect = this->iconItem->boundingRect(); - rect.moveCenter(this->scene->sceneRect().center()); - this->iconItem->setPos(rect.topLeft()); -} - -void DDciIconPreview::updatePixmap() -{ - if (this->updateTimer.isActive()) - return; - this->updateTimer.start(50, this); -} - -bool DDciIconPreview::eventFilter(QObject *watched, QEvent *event) -{ - if (watched == this->view) { - if (event->type() == QEvent::Resize) { - QResizeEvent *re = static_cast(event); - this->scene->setSceneRect(QRectF({ 0, 0 }, re->size())); - QRectF rect = this->iconItem->boundingRect(); - rect.moveCenter(this->scene->sceneRect().center()); - this->iconItem->setPos(rect.topLeft()); - } - } - return false; -} - -void DDciIconPreview::timerEvent(QTimerEvent *e) -{ - if (e->timerId() == this->updateTimer.timerId()) { - this->updateTimer.stop(); - this->updatePixmapImpl(); - } - return AbstractBasePreview::timerEvent(e); -} - -int DDciIconPreview::getIconSize() -{ - bool converted = false; - int iconSize = this->availableSizeCombo->currentText().toInt(&converted); - if (!converted) { - if (this->availableSizeCombo->currentIndex() == this->availableSizeCombo->count() - 1) - iconSize = this->customSizeEdit->text().toInt(); - } - - return iconSize; -} - -QString DDciIconPreview::title() const -{ - return this->titleText; -} - -QWidget *DDciIconPreview::statusBarWidget() const -{ - return nullptr; -} - -bool DDciIconPreview::setFileUrl(const QUrl &url) -{ - if (this->url == url) - return true; - - if (!url.fileName().endsWith(QLatin1String(".dci"))) - return false; - - QUrl tmpUrl = UrlRoute::fromLocalFile(url.path()); - if (!dfmbase::FileUtils::isLocalFile(tmpUrl)) - return false; - - QByteArray format; - QMimeDatabase mimeDatabase; - const QMimeType &mt = mimeDatabase.mimeTypeForFile(url.toLocalFile(), QMimeDatabase::MatchContent); - if (!mt.isValid()) - return false; - if (!mt.preferredSuffix().toLatin1().endsWith("dci")) - return false; - - this->url = tmpUrl; - this->initializeSettings(this->url.toLocalFile()); - this->titleText = QFileInfo(tmpUrl.toLocalFile()).fileName(); - return true; -} - -QUrl DDciIconPreview::fileUrl() const -{ - return this->url; -} - -QWidget *DDciIconPreview::contentWidget() const -{ - return this->mainWidget; -} -#endif - -AbstractBasePreview *DDciIconPreviewPlugin::create(const QString &) -{ -#ifdef DTKGUI_CLASS_DDciIcon - return new DDciIconPreview(); -#endif - return nullptr; -} -} // namespace plugin_filepreview diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.h deleted file mode 100644 index e16f98f320..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/ddciiconpreview.h +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef DDCIICONPREVIEW_H -#define DDCIICONPREVIEW_H - -#include "preview_plugin_global.h" -#include - -DFMBASE_BEGIN_NAMESPACE -class AbstractBasePreview; -DFMBASE_END_NAMESPACE - -namespace plugin_filepreview { -class DDciIconPreviewPlugin : public DFMBASE_NAMESPACE::AbstractFilePreviewPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID FilePreviewFactoryInterface_iid FILE "dtk-dciicon-preview-plugin.json") - -public: - DFMBASE_NAMESPACE::AbstractBasePreview *create(const QString &) override; -}; -} // namespace plugin_filepreview - -#endif // DDCIICONPREVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dci.xml b/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dci.xml deleted file mode 100644 index 6c4dec22d3..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dci.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - DSG Icon file format - 深度图标文件格式 - - - - - - - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dciicon-preview-plugin.json b/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dciicon-preview-plugin.json deleted file mode 100644 index 1f4047d271..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/dciicon-preview/dtk-dciicon-preview-plugin.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys" : ["image/dci"] -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/CMakeLists.txt deleted file mode 100644 index 95aa5b9753..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/CMakeLists.txt +++ /dev/null @@ -1,72 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(dfmimage-preview) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -FILE(GLOB_RECURSE IMAGEPREVIEW_FILES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*.json" - "${GlobalFiles}" - ) - - -# Qt5 -set(BIN_NAME dfmimage-preview) -set(QT_VERSION_MAJOR 5) -set(DTK_VERSION_MAJOR "") -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) - -add_library(${BIN_NAME} - SHARED - ${IMAGEPREVIEW_FILES} -) - -set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - -target_link_libraries(${BIN_NAME} - DFM::base - DFM::framework -) - -#install library file -install(TARGETS - ${BIN_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} -) - -# Qt6 -if (DFM_BUILD_WITH_QT6) - set(BIN_NAME dfm6image-preview) - set(QT_VERSION_MAJOR 6) - set(DTK_VERSION_MAJOR 6) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) - - add_library(${BIN_NAME} - SHARED - ${IMAGEPREVIEW_FILES} - ) - - set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - - target_link_libraries(${BIN_NAME} - DFM${DTK_VERSION_MAJOR}::base - DFM${DTK_VERSION_MAJOR}::framework - ) - - #install library file - install(TARGETS - ${BIN_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} - ) -endif() - -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/dde-image-preview-plugin.json DESTINATION ../../previews) - -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dde-image-preview-plugin.json DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) - - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/dde-image-preview-plugin.json b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/dde-image-preview-plugin.json deleted file mode 100644 index 63dabfdcae..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/dde-image-preview-plugin.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys" : ["image/*"] -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.cpp deleted file mode 100644 index 460b6d7279..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.cpp +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "imagepreview.h" -#include -#include -#include -#include -#include "imageview.h" - -#include - -#include -#include -#include -#include -#include -#include -#include - -DWIDGET_USE_NAMESPACE -DFMBASE_USE_NAMESPACE -using namespace plugin_filepreview; - -ImagePreview::ImagePreview(QObject *parent) - : AbstractBasePreview(parent) -{ -} - -ImagePreview::~ImagePreview() -{ - if (imageView) - imageView->deleteLater(); - - if (messageStatusBar) - messageStatusBar->deleteLater(); -} - -bool ImagePreview::canPreview(const QUrl &url, QByteArray *format) const -{ - QByteArray f = QImageReader::imageFormat(url.toLocalFile()); - - if (f.isEmpty()) { - DFMBASE_NAMESPACE::DMimeDatabase mimeDatabase; - - const QMimeType &mt = mimeDatabase.mimeTypeForFile(url, QMimeDatabase::MatchContent); - - f = mt.preferredSuffix().toLatin1(); - - if (f.isEmpty()) { - if (format) { - *format = f; - } - - return false; - } - } - - if (format) { - *format = f; - } - - return QImageReader::supportedImageFormats().contains(f); -} - -void ImagePreview::initialize(QWidget *window, QWidget *statusBar) -{ - Q_UNUSED(window) - - messageStatusBar = new QLabel(statusBar); - messageStatusBar->setStyleSheet("QLabel{font-family: Helvetica;\ - font-size: 12px;\ - font-weight: 300;}"); - - DAnchorsBase(messageStatusBar).setCenterIn(statusBar); -} - -bool ImagePreview::setFileUrl(const QUrl &url) -{ - if (currentFileUrl == url) - return true; - - QUrl tmpUrl = UrlRoute::fromLocalFile(url.path()); - FileInfoPointer info = InfoFactory::create(url); - if (info.isNull()) - return false; - - if (info->canAttributes(CanableInfoType::kCanRedirectionFileUrl)) { - tmpUrl = info->urlOf(UrlInfoType::kRedirectedFileUrl); - } - - if (!dfmbase::FileUtils::isLocalFile(tmpUrl)) - return false; - - QByteArray format; - - if (!canPreview(tmpUrl, &format)) - return false; - - currentFileUrl = tmpUrl; - - if (!imageView) - imageView = new ImageView(tmpUrl.toLocalFile(), format); - else - imageView->setFile(tmpUrl.toLocalFile(), format); - - const QSize &image_size = imageView->sourceSize(); - - messageStatusBar->setText(QString("%1x%2").arg(image_size.width()).arg(image_size.height())); - messageStatusBar->adjustSize(); - - imageTitle = QFileInfo(tmpUrl.toLocalFile()).fileName(); - - Q_EMIT titleChanged(); - - return true; -} - -QUrl ImagePreview::fileUrl() const -{ - return currentFileUrl; -} - -QWidget *ImagePreview::contentWidget() const -{ - return imageView; -} - -QString ImagePreview::title() const -{ - return imageTitle; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.h deleted file mode 100644 index 95998de7e4..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreview.h +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef IMAGEPREVIEW_H -#define IMAGEPREVIEW_H - -#include "preview_plugin_global.h" -#include - -#include -#include -#include - -class QLabel; - -namespace plugin_filepreview { -class ImageView; -class ImagePreview : public DFMBASE_NAMESPACE::AbstractBasePreview -{ - Q_OBJECT -public: - explicit ImagePreview(QObject *parent = nullptr); - ~ImagePreview() override; - - bool canPreview(const QUrl &url, QByteArray *format = nullptr) const; - - void initialize(QWidget *window, QWidget *statusBar) override; - - bool setFileUrl(const QUrl &url) override; - QUrl fileUrl() const override; - - QWidget *contentWidget() const override; - - QString title() const override; - -private: - QUrl currentFileUrl; - QPointer messageStatusBar; - QPointer imageView; - QString imageTitle; -}; -} -#endif // IMAGEPREVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.cpp deleted file mode 100644 index 9a36c1fe61..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "imagepreviewplugin.h" - -DFMBASE_USE_NAMESPACE -namespace plugin_filepreview { -DFM_LOG_REISGER_CATEGORY(PREVIEW_NAMESPACE) - -AbstractBasePreview *ImagePreviewPlugin::create(const QString &key) -{ - Q_UNUSED(key) - return new ImagePreview(); -} -} // namespace plugin_filepreview diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.h deleted file mode 100644 index b412c578e1..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imagepreviewplugin.h +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef IMAGEPREVIEWPLUGIN_H -#define IMAGEPREVIEWPLUGIN_H - -#include "preview_plugin_global.h" -#include -#include "imagepreview.h" - -namespace plugin_filepreview { -class ImagePreviewPlugin : public DFMBASE_NAMESPACE::AbstractFilePreviewPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID FilePreviewFactoryInterface_iid FILE "dde-image-preview-plugin.json") - -public slots: - DFMBASE_NAMESPACE::AbstractBasePreview *create(const QString &key) Q_DECL_OVERRIDE; -}; -} -#endif // IMAGEPREVIEWPLUGIN_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.cpp deleted file mode 100644 index 8b4fb4e4f6..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.cpp +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "imageview.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace plugin_filepreview; -#define MIN_SIZE QSize(400, 300) - -ImageView::ImageView(const QString &fileName, const QByteArray &format, QWidget *parent) - : QLabel(parent) -{ - setFile(fileName, format); - setMinimumSize(MIN_SIZE); - setAlignment(Qt::AlignCenter); -} - -void ImageView::setFile(const QString &fileName, const QByteArray &format) -{ - const QSize &dsize = DFMBASE_NAMESPACE::WindowUtils::cursorScreen()->geometry().size(); - qreal device_pixel_ratio = this->devicePixelRatioF(); - - if (format == QByteArrayLiteral("gif")) { - if (movie) { - movie->stop(); // blumia: we need to stop it first before we load a new file - movie->setFileName(fileName); - } else { - movie = new QMovie(fileName, format, this); - } - setMovie(movie); - movie->start(); - sourceImageSize = QSize(qMin(static_cast(dsize.width() * 0.7 * device_pixel_ratio), movie->frameRect().size().width()), - qMin(static_cast(dsize.height() * 0.7 * device_pixel_ratio), movie->frameRect().size().height())); - setFixedSize(sourceImageSize); - movie->setScaledSize(sourceImageSize); - return; - } else { - setMovie(nullptr); - } - - if (movie) { - QMovie *tmpMovie = movie; - movie = nullptr; - tmpMovie->stop(); - tmpMovie->disconnect(); - tmpMovie->deleteLater(); - } - - QImageReader reader(fileName, format); - sourceImageSize = reader.size(); - - if (!sourceImageSize.isValid()) { - setPixmap(QPixmap()); - return; - } - - QPixmap pixmap = QPixmap::fromImageReader(&reader).scaled(QSize(qMin(static_cast(dsize.width() * 0.7 * device_pixel_ratio), sourceImageSize.width()), - qMin(static_cast(dsize.height() * 0.7 * device_pixel_ratio), sourceImageSize.height())), - Qt::KeepAspectRatio, Qt::SmoothTransformation); - pixmap.setDevicePixelRatio(device_pixel_ratio); - setPixmap(pixmap); -} - -QSize ImageView::sourceSize() const -{ - return sourceImageSize; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.h deleted file mode 100644 index c0a3b88a16..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/imageview.h +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef IMAGEVIEW_H -#define IMAGEVIEW_H - -#include "preview_plugin_global.h" -#include -namespace plugin_filepreview { -class ImageView : public QLabel -{ - Q_OBJECT -public: - explicit ImageView(const QString &fileName, const QByteArray &format, QWidget *parent = nullptr); - - void setFile(const QString &fileName, const QByteArray &format); - QSize sourceSize() const; - -private: - QSize sourceImageSize; - QMovie *movie { nullptr }; -}; -} -#endif // IMAGEVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/theme.qrc b/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/theme.qrc deleted file mode 100644 index 7646d2b36c..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/image-preview/theme.qrc +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/CMakeLists.txt deleted file mode 100644 index 7338b2bb72..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/CMakeLists.txt +++ /dev/null @@ -1,87 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(dfmmusic-preview) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -FILE(GLOB_RECURSE MUSICPREVIEW_FILES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*.json" - "${CMAKE_CURRENT_SOURCE_DIR}/*.qrc" - "${GlobalFiles}" - ) - -# Qt6 -if (DFM_BUILD_WITH_QT6) - set(BIN_NAME dfm6music-preview) - set(QT_VERSION_MAJOR 6) - set(DTK_VERSION_MAJOR 6) - - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Multimedia REQUIRED) - find_package(ICU COMPONENTS i18n io uc REQUIRED) - find_package(PkgConfig REQUIRED) - - pkg_search_module(taglib REQUIRED taglib) - - add_library(${BIN_NAME} - SHARED - ${MUSICPREVIEW_FILES} - ) - - set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - - target_link_libraries(${BIN_NAME} - DFM${DTK_VERSION_MAJOR}::base - DFM${DTK_VERSION_MAJOR}::framework - Qt${QT_VERSION_MAJOR}::Multimedia - ${taglib_LIBRARIES} - ICU::i18n - ) - - #install library file - install(TARGETS - ${BIN_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} - ) -endif() - -# Qt5 -set(BIN_NAME dfmmusic-preview) -set(QT_VERSION_MAJOR 5) -set(DTK_VERSION_MAJOR "") -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Multimedia REQUIRED) -find_package(ICU COMPONENTS i18n io uc REQUIRED) -find_package(PkgConfig REQUIRED) - -pkg_search_module(taglib REQUIRED taglib) - -add_library(${BIN_NAME} - SHARED - ${MUSICPREVIEW_FILES} -) - -set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - -target_link_libraries(${BIN_NAME} - DFM::base - DFM::framework - Qt${QT_VERSION_MAJOR}::Widgets - Qt${QT_VERSION_MAJOR}::Multimedia - ${taglib_LIBRARIES} - ICU::i18n -) - -#install library file -install(TARGETS - ${BIN_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} -) - -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/dde-music-preview-plugin.json DESTINATION ../../previews) - -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dde-music-preview-plugin.json DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.cpp deleted file mode 100644 index 38cc2eac33..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "cover.h" - -#include - -static constexpr int kRadius { 8 }; - -using namespace plugin_filepreview; - -Cover::Cover(QWidget *parent) - : DLabel("", parent) -{ - QWidget::setAttribute(Qt::WA_TranslucentBackground, true); -} - -void Cover::setCoverPixmap(const QPixmap &pixmap) -{ - background = pixmap; - update(); -} - -void Cover::paintEvent(QPaintEvent *e) -{ - Q_UNUSED(e); - - QPainter painter(this); - painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); - - QRect backgroundRect = rect(); - QPainterPath backgroundPath; - backgroundPath.addRoundedRect(backgroundRect, kRadius, kRadius); - painter.setClipPath(backgroundPath); - painter.setPen(Qt::NoPen); - if (background.isNull()) - painter.fillPath(backgroundPath, QColor(255, 255, 255, 255)); - else - painter.drawPixmap(backgroundRect, background); - - painter.setBrush(Qt::NoBrush); - QPen borderPen(QColor(0, 0, 0, 20)); - borderPen.setWidthF(2.0); - painter.setPen(borderPen); - painter.drawRoundedRect(backgroundRect, kRadius, kRadius); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.h deleted file mode 100644 index 4ea7ad3383..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cover.h +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef COVER_H -#define COVER_H - -#include - -namespace plugin_filepreview { -class Cover : public DTK_WIDGET_NAMESPACE::DLabel -{ - Q_OBJECT -public: - explicit Cover(QWidget *parent = Q_NULLPTR); - - void setCoverPixmap(const QPixmap &pixmap); - -protected: - void paintEvent(QPaintEvent *e) override; - -private: - QPixmap background; -}; -} - -#endif // COVER_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.cpp deleted file mode 100644 index 2870035184..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2024 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "cusmediaplayer.h" -#include "mediawork.h" - -using namespace plugin_filepreview; - -CusMediaPlayer *CusMediaPlayer::instance() -{ - static CusMediaPlayer ins; - return &ins; -} - -CusMediaPlayer::~CusMediaPlayer() -{ - workerThread.quit(); - workerThread.wait(); -} - -void CusMediaPlayer::createMediaPlayer() -{ - if (isFirst) { - emit sigCreateMediaPlayer(); - isFirst = false; - } -} - -void CusMediaPlayer::setMedia(const QUrl &url) -{ - emit sigStop(); - emit sigSetMedia(url); -} - -qint64 CusMediaPlayer::duration() const -{ - return worker->duration(); -} - -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) -QMediaPlayer::State CusMediaPlayer::state() const -#else -QMediaPlayer::PlaybackState CusMediaPlayer::state() const -#endif -{ - return worker->state(); -} - -qint64 CusMediaPlayer::position() const -{ - return worker->position(); -} - -CusMediaPlayer::CusMediaPlayer(QObject *parent) - : QObject(parent) -{ - worker = new MediaWork; - worker->moveToThread(&workerThread); - connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater); - connect(this, &CusMediaPlayer::sigCreateMediaPlayer, worker, &MediaWork::createMediaPlayer); - connect(this, &CusMediaPlayer::sigSetMedia, worker, &MediaWork::setMedia); - connect(this, &CusMediaPlayer::sigPlay, worker, &MediaWork::play); - connect(this, &CusMediaPlayer::sigPause, worker, &MediaWork::pause); - connect(this, &CusMediaPlayer::sigStop, worker, &MediaWork::stop); - connect(this, &CusMediaPlayer::sigSetPosition, worker, &MediaWork::setPosition); - connect(worker, &MediaWork::playerStateChanged, this, &CusMediaPlayer::sigStateChanged); - connect(worker, &MediaWork::playerStatusChanged, this, &CusMediaPlayer::sigStatusChanged); - connect(worker, &MediaWork::playerDurationChanged, this, &CusMediaPlayer::sigDurationChanged); - connect(worker, &MediaWork::playerPositionChanged, this, &CusMediaPlayer::sigPositionChanged); - workerThread.start(); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.h deleted file mode 100644 index fae15e567a..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/cusmediaplayer.h +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2024 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef CUSMEDIAPLAYER_H -#define CUSMEDIAPLAYER_H - -#include -#include -#include - -namespace plugin_filepreview { -class MediaWork; - -class CusMediaPlayer : public QObject -{ - Q_OBJECT -public: - static CusMediaPlayer *instance(); - ~CusMediaPlayer(); - - void createMediaPlayer(); - void setMedia(const QUrl &url); - - qint64 duration() const; -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - QMediaPlayer::State state() const; -#else - QMediaPlayer::PlaybackState state() const; -#endif - qint64 position() const; - -Q_SIGNALS: -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - void sigStateChanged(QMediaPlayer::State newState); -#else - void sigStateChanged(QMediaPlayer::PlaybackState newState); -#endif - void sigStatusChanged(QMediaPlayer::MediaStatus status); - void sigDurationChanged(qint64 duration); - void sigPositionChanged(qint64 pos); - - void sigCreateMediaPlayer(); - void sigSetMedia(const QUrl &url); - void sigSetPosition(qint64 pos); - - void sigPlay(); - void sigPause(); - void sigStop(); - -private: - explicit CusMediaPlayer(QObject *parent = nullptr); - - QThread workerThread; - MediaWork *worker { Q_NULLPTR }; - bool isFirst { true }; -}; -} - -#endif // CUSMEDIAPLAYER_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.json b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.json deleted file mode 100644 index 26a09014d6..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys" : ["audio/*"] -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.qrc b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.qrc deleted file mode 100644 index 708996f150..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/dde-music-preview-plugin.qrc +++ /dev/null @@ -1,11 +0,0 @@ - - - icons/start_pressed.png - icons/start_normal.png - icons/start_hover.png - icons/pause_pressed.png - icons/pause_normal.png - icons/pause_hover.png - icons/default_music_cover.png - - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/default_music_cover.png b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/default_music_cover.png deleted file mode 100644 index 1ed3bccc228b4251bbe08a1d5e61e42c30e6891c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5345 zcmeHL`8(9@_kYirF~fry%VaG}b|Eb&VJwmCWGzD^*|iuNjKNbx$&(l%CM7W;OR~+_ z3YA@&D2#pI$G&~u&u^bU;rqR=&rj$5zOU=PuXDf7eO~8v&Lb-eV{T3nP5=P7O)eSQ z000F1gaAl(&|JIo?&iOLcWsRIfuatv82}K-Ffr7-5(-&(xf>{8C(si3s`jr51)DQl zQfl-G1i$&-nz`8(cWIFZjS_uW6x9C}ykuCd*Y9^#Sd;hD2G%g4OHaR(|vUt}V7?WgX0#Ifx)QuhpMUny! zJ!p49yT(b{rgKOD^!=yn9iZ({0w#B5Nx;^I?oTZ_5};WOq%CED8-E`|4tq_&A_I4+Q$+i?WNZL8_fX1bULW#(& zbmZ^_Vok?1RSA7b?WTC-}(cX9W&$o6zcj0aZ)Ix zUv;|7tFxkJg%jNB(~lYV8T^jbCGKr~9we*-&zsvbG@3*MYp;tp)?bbTxZ1AU$5Y)R z_qJB>8aT+|_}65qF3j@8+~-I9{D`nN^+)xCH6gqtAjW^9@EEInKoM>@s#HEG~ zG$kWG9=O+Z_G$qq-n=VCxh8d}y!)+KnG&<_0YeJ`!}DVSJippbopXJ+n*)XFDb9_D z@0WPAIIGq;8Ddcs(P9Z;Fv$E_0d#L;;rGQk9D7*R3!?@iYueg*L;B6WY&0OmqBSoJ zM;=CWkNWa+H3W2-oVJmM)u$cr8+EP07p75qQ=Jm6xV+E&7`bE#KrVHb-;PgjwO#fV zE4I%bi-bNttf6w4afh_v3!dA3joccE&6$wf%F}O&y^6*H&h@7E=V)P@@p(gMCZ~Rx zl5q7nS%nS>KtW#i(pYxn!K>fmBdzvKWEw1wmjpxGN?Yp$B})}Lna2FA(|Rfe43@l9 z^t8L53r~UZH!jI! z#R|nOG%BUWug^Hf#nqWG+4f@8>oaTprrq#8)_`v@MpvA;KHE1MdwG_Qieg&2YN1Ii zGtpel=igk|YoPS-nLmw<`n>ZyQC76K+s*DAP5&k?*_G%NE~oEj`+QZHGtVf65}Sc0 z9iupSdY8D92k~%1e<^j|r@b>vyJoOd>DTX6SE-dux5MaTJ)90 zf}vI+?fU((j_hEl7y}gnoQb8LjGAZ{y<+=t@WfI^d->)g1FnHP(`9=GZK7b*K6)!1 z+)7gFTJI4FJBM@lUgYM$$YO)4L4PC)y=a?~!vJtPQ6}{6-LkZ^jPo_oG@mEhWgLZN z{A|_Rg=!Wl0Q4lLh^YJCp6Ktde69MP!Y#HZeMRA-m(?T<#RjaN3?~4e`)}0QFn01M zTwPqamuQ=~%AgVbjnawMB#BPF`(DQ`a91W92OfTLrk7$tE*x2%_Y!pLo=iber&wro%ul0)qF8=VW z93(CB-nFC_Sm|aosuDof1DR8~qm2G@7Gms7qvVT*09Tca{a24EZj82x^(;Xzcr;1+ zZr&paz~boBel!|P6D#d^z7w-W!lzyZThGq_2)LA34nvd5FNo$%=4R;fSUonF->YO* z;y~VbH~(U`FLE(grb+5IRn>xjzGw*>C+ z9tRzmgm!PU0wHi@_8~CTf2Qb)M}Q&F41Bv^RrFx(1ACD~v4>TNa$fdL1yz_^YVEn8 ztIcpt8i~bY1oWKtf9~$G>A*pFw->BFJD?eL3pTWEjwHR}L{php4h~-mjCr&^h*9E% zp423_EOc^ldg6&L=bv1 z(W-f_1c-at=~#Zksr#E(L+x>Xm>YuUU?!O)_-ZbBWwDl*G-$Xrd;&s1&bY(?Z@dOf z;&F+?F3^-sXVR7-XJR5W7<1_ZVJ{*iCjw=ioC0WJ%A* zju&hVDcwJ@WqL4HM9vd4C(DA#!alpFnufZ`Mnc6JE& zkR&YLwi8VXs8qk)w|mmf(^F=E4Q;g)E@D@prXdM<029^MG!EMB9@5wDgTf&#JNxO8 zCR0m!PD;#QNG!rCL)yuqO1nH<2ch$PTV-P4KIQGjs z{;y_VGOPU1z;Tsz=c==;?U}snMzDG~fiEbeQo$&^eu6!U+du|5R=tz6zqh@%Jl*|z z8Pqnh6B83Tp1SyXNB_Cv-P-s!eoM1hpjt}Hv${+k5MlUw2ZH&0fw)(R-0AD<8_jIq zNnh5wH*NK+F7ohs`BtbR=#SzvQp zh_2(OA#aK$kyygpCpKa}6ZT!h)xk=8>kQY6-;3;Ne*I6y&h^AyoR?KKc$2p8l4%T7 zQwAj3UoEg%k#Wf(A&Y-F5Ikb?vdb2kn%(uQUjwX{QFhXDWgoIFC4v2*;biJVz~I)% zm5w<^v0&MT&j^NPAisHxnJJG1ZLZsv+7;fh;=))1WTr9zNT_QgAOSbupKPo zIQ_k)DHhcv=o)Sv_oMr@aajUp@G!s!0qx>u_)+qevsupo~;nRnblI~q~7g>>-eBlkBYZ~};i}mIwqBMjfM#9|eU}vs)WO<~? zj$D@gS}^I@IcQSW%x8rHeP3mln#moJs|?J>WP8S!x5xg{<|hEbSw6%kp7oRSB7^zC z_xy9Z%a#b}$*;+B*RNlHg}0{_r*`)66WqH5V~rAzwVETb#)*n-F5kU4@o?JB-o8Tn zgo1_A0lmCDX7kaAa-t%&`GDXU>wyRRm`CAMliF2Y2mhyb^<-3?{IB&-_ztIO3rqJ> zzmf{Y?pU-%qfcwL9^g!{91D4pvM!JbmK*UMi*wo)z9#Q~?0?d<>?z%05w)OQ_3+u| zxtUL(o}z`0+hJ^7wpFgaQ|T?zck}nkd3Yt6i(KG0at&;b&|YOz@ronjk$b%5>P0`T z$2^)_!%oWRN-pv_5rD7V>@YX|x9M%W8@~e+5ZB8Ehio=O_4(iKq~*HVKAoHIFSAX_ zMp+sGkTg;-O%Hh<-rr_N{d>9{npB`@?i2e*JdHLSo_f z;h8_TlrO;Zu+vn;YLBTZrs?UQCeo>`zIDc3KCwYwETH(yNA!JlcEr7!5J6-2A1&Wv zzDe$4{uYUyI)9@$%b=@t_-Y_6Md|9NZ3zHV#HbjeI}Z+ivG#pu(n?P>C98lZifOT( z9j186cVz2|>ufP&=w|p7RjAd-VoD0e7Miq!P**fd%(78sjy=^?AwXQrkp+E>@Py_) zvZ^c35`9-??BJbo4-WJtv_NV@ZN}dEx%&~EZf+l_{4#z>`N}7i%2DbWvf|uTXNFfn zwqjq`)LiAAj*L*sF65tj^YdM&eMmV)1bRY6B{6GuBG4R3T>UCHk`YK(aQ21!C0~CQ zjayS9n3$E1Ouq~n;_&LoocW@%^g;^2oW<&q!^X@ns>KV3!XKyPG0z-7+@8utEF|uM zCgE7rLnI-;<;q6-m77Nig5L*K*X31kwL&V_D&5?3bK_~`yGZPVJiFWLvsYn1^nFfS z3{MDMd?Uf2hr^5Mr?JEMH%o?HMJDY-%fs#dsRMb42PFF zswW6M=|x`xb0m)PV?4w8I{Zc=ChF7{*y^=wFb%^SXIP+fB5wx{3bIIsSja%%E8N4Z z=-$Q3r#d_DsD76Op<&1myth!#UdplVr9-dij^`ispTIL-X8UZoo*QBeF4Y|pSA_h^ zo>%?_Z3m&@4+;Z$FD9#Xccn!M2Qf`EC;T@3d0viL6{EBl+RLC{?-KzT#*nrRJnJ zS5)EoFkXldTmEcmw4?5k9K?0jiJH^}X&ycZoY=3`WuQ7>|DNQ4(pS|UFzs@%p12kO z7O;TPaRkHwCJnrY3f)0ojKcocA{sF0pva?J%>hWOdFGykTO0s&YZVrNL#sgEsCtwv z4&wrIj_X`Z4pu?~RPY+NS7S($;5Ezb$N1GcVr_~mqwLQ*6^=nnh;oce!(R8&=A k=?P&))Ws+Oc8YHc^{rU`ehz>19yqfEOfFg&f`u;nKi(_0ng9R* diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_hover.png b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_hover.png deleted file mode 100644 index 3ddfea287dbbeb19cb1dbc0a487ee806b531a1f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|%spKkLp*qs z6C_xb?O6UXJ2SKtGCFOLIoZK@JW^hKvs^ V;#*&xUJ5jV!PC{xWt~$(69DHWAV&ZI diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_normal.png b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_normal.png deleted file mode 100644 index 33113b896cb428c8da000fb16a784517e0748c3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|tUO&DLp*qs z6C_xbtyy?@c>XmTtP4<3;lFge#oKu65qDh$iAjqcO{82{oEsK2T?}zC=x`J5X%Jvw YFj&AAewFWK4bT(@Pgg&ebxsLQ0DAW#K>z>% diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_pressed.png b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/pause_pressed.png deleted file mode 100644 index e98e3edb64fe15b1fddbd09cb136d1c66050ac5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|tUO&DLp*qs z6C_xbtyxN@{r|y#Xopkd1RD=|VZF0ggygq2BzW|(UCa;=$atjtbs2~+;z~sch Yu*rzqxtKYp251U{r>mdKI;Vst0IqByQUCw| diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_hover.png b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_hover.png deleted file mode 100644 index 8ec935cd9d7703733984d59701bd7fe579667aed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|ialK%Lp*qs z6C_v{D?0QG+~C>b(m74+FT2z~*^bwZGn&Q38g&{T?snM5zg4$Uvd<^j^u`2Ux3pkg zAa(TEG3gwiD}4S%XAVEhnjoRkA=NPB(UjJ+OtV~#?tNhU)u!Wc^}&H>Osm+~&A8o; fx;Zn{b1*PeOBgMSpRghkXg!0ctDnm{r-UW|r3OE| diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_normal.png b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_normal.png deleted file mode 100644 index 9e0fad048559ce7777af96fb55fafeff12248760..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Hha1_hIsHM zCrGd^R&@9*U|?WyBPT0smCHI;AD4_TKR-V|AG*NxD<2=9jLQo5K&Kv7p8x;#lO(i<*05xI6gFHt9B0whH)eW9{kb zv7a$xh7>Cc%a-$Vt+%sIch%XU!qJhRn3#CdzV_D_Tc%eM9$O#CUAX%5M@&ziVxXf- vPQe0czDL53nHM!P&t_em1ax5~2Lr>kiPq}x#T1?ZozLLu>gTe~DWM4foM~Kg diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_pressed.png b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/icons/start_pressed.png deleted file mode 100644 index 8bb3243f8c28d6a437bc61c59747cd0c3dba2d97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|4tTmahIsHM zCrGd^R&@9*a3S(z@#c58{(C)%I^q)W`2T;q|Mh=&t=jx4eedCa|7BRNF4k1YVT@qD z@Sy&`^u2vQDnsj!^2?hTe<Vo{eqk{{NC@lZA3rA{olHI1jqbV@;Ud!EMH+ z)9{;JznOKtPMqg4d57zzT%H?BWeQUMGsetMedia(url); -#else - if (mediaPlayer) - mediaPlayer->setSource(url); -#endif -} - -void MediaWork::setPosition(qint64 pos) -{ - if (mediaPlayer) - mediaPlayer->setPosition(pos); -} - -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) -QMediaPlayer::State MediaWork::state() const -{ - if (mediaPlayer) - return mediaPlayer->state(); - return QMediaPlayer::State::StoppedState; -} -#else -QMediaPlayer::PlaybackState MediaWork::state() const -{ - if (mediaPlayer) - return mediaPlayer->playbackState(); - return QMediaPlayer::PlaybackState::StoppedState; -} -#endif - -qint64 MediaWork::position() const -{ - if (mediaPlayer) - return mediaPlayer->position(); - return -1; -} - -void MediaWork::play() -{ - if (mediaPlayer) - mediaPlayer->play(); -} - -void MediaWork::pause() -{ - if (mediaPlayer) - mediaPlayer->pause(); -} - -void MediaWork::stop() -{ - if (mediaPlayer) - mediaPlayer->stop(); -} - -qint64 MediaWork::duration() const -{ - if (mediaPlayer) - return mediaPlayer->duration(); - return -1; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/mediawork.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/mediawork.h deleted file mode 100644 index 6898d4ad78..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/mediawork.h +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2024 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef MEDIAWORK_H -#define MEDIAWORK_H - -#include -#include - -namespace plugin_filepreview { -class MediaWork : public QObject -{ - Q_OBJECT -public: - explicit MediaWork(QObject *parent = nullptr); - qint64 duration() const; -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - QMediaPlayer::State state() const; -#else - QMediaPlayer::PlaybackState state() const; -#endif - qint64 position() const; - -public Q_SLOTS: - void createMediaPlayer(); - void setMedia(const QUrl &url); - void setPosition(qint64 pos); - void play(); - void pause(); - void stop(); - -Q_SIGNALS: -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - void playerStateChanged(QMediaPlayer::State newState); -#else - void playerStateChanged(QMediaPlayer::PlaybackState newState); -#endif - void playerStatusChanged(QMediaPlayer::MediaStatus status); - void playerDurationChanged(qint64 duration); - void playerPositionChanged(qint64 duration); - -private: - QMediaPlayer *mediaPlayer; -}; -} - -#endif // MEDIAWORK_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.cpp deleted file mode 100644 index 153b975e2d..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.cpp +++ /dev/null @@ -1,343 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "musicmessageview.h" -#include "cover.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) -# include -#endif - -using namespace plugin_filepreview; -MusicMessageView::MusicMessageView(const QString &uri, QWidget *parent) - : QFrame(parent), - currentUrl(uri) -{ - initUI(); - setMediaInfo(); - localeCodes.insert("zh_CN", "GB18030"); -} - -void MusicMessageView::initUI() -{ - setFixedSize(600, 300); - - titleLabel = new QLabel(this); - titleLabel->setObjectName("Title"); - QFont titleFont = titleLabel->font(); - titleFont.setPixelSize(18); - titleLabel->setFont(titleFont); - QPalette titlePe; - titlePe.setColor(QPalette::WindowText, QColor("#101010")); - titleLabel->setPalette(titlePe); - - artistLabel = new QLabel(this); - artistLabel->setObjectName("Artist"); - artistLabel->setText(tr("Artist:")); - QFont artistLabelFont = artistLabel->font(); - artistLabelFont.setPixelSize(12); - artistLabel->setFont(artistLabelFont); - artistValue = new QLabel(this); - artistValue->setObjectName("artistValue"); - QFont artistValueFont = artistValue->font(); - artistValueFont.setPixelSize(12); - artistValue->setFont(artistValueFont); - - albumLabel = new QLabel(this); - albumLabel->setObjectName("Album"); - albumLabel->setText(tr("Album:")); - QFont albumLabelFont = albumLabel->font(); - albumLabelFont.setPixelSize(12); - albumLabel->setFont(albumLabelFont); - albumValue = new QLabel(this); - albumValue->setObjectName("albumValue"); - QFont albumValueFont = albumValue->font(); - albumValueFont.setPixelSize(12); - albumValue->setFont(albumValueFont); - - imgLabel = new Cover(this); - imgLabel->setFixedSize(QSize(240, 240)); - - QHBoxLayout *artistLayout = new QHBoxLayout; - artistLayout->addWidget(artistLabel); - artistLayout->addSpacing(5); - artistLayout->addWidget(artistValue, 1); - - QHBoxLayout *albumLayout = new QHBoxLayout; - albumLayout->addWidget(albumLabel); - albumLayout->addSpacing(5); - albumLayout->addWidget(albumValue, 1); - - QVBoxLayout *messageLayout = new QVBoxLayout; - messageLayout->setSpacing(0); - messageLayout->addWidget(titleLabel); - messageLayout->addSpacing(10); - messageLayout->addLayout(artistLayout); - messageLayout->addSpacing(3); - messageLayout->addLayout(albumLayout); - messageLayout->addStretch(); - - QHBoxLayout *mainLayout = new QHBoxLayout; - mainLayout->setContentsMargins(0, 0, 0, 0); - mainLayout->addWidget(imgLabel, 0, Qt::AlignTop); - mainLayout->addSpacing(15); - mainLayout->addLayout(messageLayout); - mainLayout->addStretch(); - - setLayout(mainLayout); -} - -void MusicMessageView::updateElidedText() -{ - QFontMetrics fmTitleLabel(titleLabel->font()); - titleLabel->setText(fmTitleLabel.elidedText(fileTitle, Qt::ElideRight, width() - imgLabel->width() - 40 - viewMargins)); - - QFontMetrics fmArtistValue = QFontMetrics(artistValue->font()); - artistValue->setText(fmArtistValue.elidedText(fileArtist, Qt::ElideRight, width() - imgLabel->width() - 40 - viewMargins)); - - QFontMetrics fmAlbumValue = QFontMetrics(albumValue->font()); - albumValue->setText(fmAlbumValue.elidedText(fileAlbum, Qt::ElideRight, width() - imgLabel->width() - 40 - viewMargins)); -} - -void MusicMessageView::setMediaInfo() -{ - MediaMeta meta = tagOpenMusicFile(currentUrl); - fileTitle = meta.title; - if (fileTitle.isEmpty()) { - QFileInfo file(currentUrl); - QString fileName = file.baseName(); - fileTitle = fileName; - } - fileArtist = meta.artist; - if (fileArtist.isEmpty()) - fileArtist = QString(tr("unknown artist")); - - fileAlbum = meta.album; - if (fileAlbum.isEmpty()) - fileAlbum = QString(tr("unknown album")); - - QImage img; - QUrl url(currentUrl); - TagLib::MPEG::File f(url.toLocalFile().toLocal8Bit()); - if (f.isValid()) { - if (f.ID3v2Tag()) { - TagLib::ID3v2::FrameList frameList = f.ID3v2Tag()->frameListMap()["APIC"]; - if (!frameList.isEmpty()) { - TagLib::ID3v2::AttachedPictureFrame *picFrame = static_cast(frameList.front()); - QBuffer buffer; - buffer.setData(picFrame->picture().data(), static_cast(picFrame->picture().size())); - QImageReader imageReader(&buffer); - img = imageReader.read(); - } - } - - f.clear(); - } - - if (img.isNull()) { - img = QImage(":/icons/icons/default_music_cover.png"); - } - imgLabel->setCoverPixmap(QPixmap::fromImage(img).scaled(imgLabel->size(), Qt::KeepAspectRatio)); - - updateElidedText(); -} - -void MusicMessageView::resizeEvent(QResizeEvent *event) -{ - QFrame::resizeEvent(event); - viewMargins = (event->size().height() - imgLabel->height()) / 2; - if ((event->size().width() - viewMargins - 250) < imgLabel->width()) { - viewMargins = event->size().width() - 250 - imgLabel->width(); - } - setContentsMargins(viewMargins, viewMargins, 0, viewMargins); - updateElidedText(); -} - -QList MusicMessageView::detectEncodings(const QByteArray &rawData) -{ - QList charsets; -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - QByteArray charset = QTextCodec::codecForLocale()->name(); - charsets << charset; -#else - charsets << locale().name().toUtf8(); -#endif - - const char *data = rawData.data(); - int32_t len = rawData.size(); - - UCharsetDetector *csd; - const UCharsetMatch **csm; - int32_t matchCount = 0; - - UErrorCode status = U_ZERO_ERROR; - - csd = ucsdet_open(&status); - if (status != U_ZERO_ERROR) { - ucsdet_close(csd); - return charsets; - } - - ucsdet_setText(csd, data, len, &status); - if (status != U_ZERO_ERROR) { - ucsdet_close(csd); - return charsets; - } - - csm = ucsdet_detectAll(csd, &matchCount, &status); - if (status != U_ZERO_ERROR) { - ucsdet_close(csd); - return charsets; - } - - if (matchCount > 0) { - charsets.clear(); - } - - for (int32_t match = 0; match < matchCount; match += 1) { - const char *name = ucsdet_getName(csm[match], &status); - const char *lang = ucsdet_getLanguage(csm[match], &status); - if (lang == nullptr || strlen(lang) == 0) { - lang = "**"; - } - charsets << name; - } - - ucsdet_close(csd); - return charsets; -} - -bool MusicMessageView::isChinese(const QChar &c) -{ - return c.unicode() <= 0x9FBF && c.unicode() >= 0x4E00; -} - -MediaMeta MusicMessageView::tagOpenMusicFile(const QString &path) -{ - QUrl url(path); - TagLib::FileRef f(url.toLocalFile().toLocal8Bit()); - - TagLib::Tag *tag = f.tag(); - - if (!f.file()) { - fmCritical() << "Music Preview: open file failed:" << path << f.file(); - } - - if (!tag) { - fmWarning() << "Music Preview: no tag for media file" << path; - return MediaMeta(); - } - - MediaMeta meta; - characterEncodingTransform(meta, static_cast(tag)); - return meta; -} - -void MusicMessageView::characterEncodingTransform(MediaMeta &meta, void *obj) -{ - TagLib::Tag *tag = static_cast(obj); - bool encode = true; - encode &= tag->title().isEmpty() ? true : tag->title().isLatin1(); - encode &= tag->artist().isEmpty() ? true : tag->artist().isLatin1(); - encode &= tag->album().isEmpty() ? true : tag->album().isLatin1(); - - QByteArray detectByte; - QByteArray detectCodec; - if (encode) { - if (detectCodec.isEmpty()) { - detectByte += tag->title().toCString(); - detectByte += tag->artist().toCString(); - detectByte += tag->album().toCString(); - auto allDetectCodecs = detectEncodings(detectByte); - auto localeCode = localeCodes.value(QLocale::system().name()); - - auto iter = std::find_if(allDetectCodecs.begin(), allDetectCodecs.end(), - [localeCode](const QByteArray &curDetext) { - return (curDetext == "Big5" || curDetext == localeCode); - }); - - if (iter != allDetectCodecs.end()) { - detectCodec = *iter; - } - - if (detectCodec.isEmpty()) - detectCodec = allDetectCodecs.value(0); - - QString curStr = QString::fromLocal8Bit(tag->title().toCString()); - if (curStr.isEmpty()) - curStr = QString::fromLocal8Bit(tag->artist().toCString()); - if (curStr.isEmpty()) - curStr = QString::fromLocal8Bit(tag->album().toCString()); - - auto ret = std::any_of(curStr.begin(), curStr.end(), [this](const QChar &ch) { - return isChinese(ch); - }); - - if (ret) { - detectCodec = "GB18030"; - } - } - - QString detectCodecStr(detectCodec); - if (detectCodecStr.compare("utf-8", Qt::CaseInsensitive) == 0) { - meta.album = TStringToQString(tag->album()); - meta.artist = TStringToQString(tag->artist()); - meta.title = TStringToQString(tag->title()); - meta.codec = "UTF-8"; //info codec - } else { -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - QTextCodec *codec = QTextCodec::codecForName(detectCodec); - - if (codec == nullptr) { - meta.album = TStringToQString(tag->album()); - meta.artist = TStringToQString(tag->artist()); - meta.title = TStringToQString(tag->title()); - } else { - meta.album = codec->toUnicode(tag->album().toCString()); - meta.artist = codec->toUnicode(tag->artist().toCString()); - meta.title = codec->toUnicode(tag->title().toCString()); - } -#else - meta.album = TStringToQString(tag->album()); - meta.artist = TStringToQString(tag->artist()); - meta.title = TStringToQString(tag->title()); -#endif - meta.codec = detectCodec; - } - } else { - meta.album = TStringToQString(tag->album()); - meta.artist = TStringToQString(tag->artist()); - meta.title = TStringToQString(tag->title()); - meta.codec = "UTF-8"; - } - - //empty str - meta.album = meta.album.simplified(); - meta.artist = meta.artist.simplified(); - meta.title = meta.title.simplified(); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.h deleted file mode 100644 index 84a8556b45..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicmessageview.h +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef MUSICMESSAGEVIEW_H -#define MUSICMESSAGEVIEW_H - -#include "preview_plugin_global.h" - -#include -#include -class QLabel; - -namespace plugin_filepreview { -class Cover; -/** - * @brief MediaMeta 音频文件信息结构体 - */ -struct MediaMeta -{ - QString title; - QString artist; - QString album; - QString codec; -}; - -class MusicMessageView : public QFrame -{ - Q_OBJECT -public: - explicit MusicMessageView(const QString &uri = "", QWidget *parent = nullptr); - void initUI(); - void setMediaInfo(); - void updateElidedText(); - -protected: - void resizeEvent(QResizeEvent *event) override; - -private: - /** - * @brief detectEncodings 检测字符串字符编码 - * @param rawData 需要检测的字符串 - * @return 返回检测到的字符编码列表 - */ - QList detectEncodings(const QByteArray &rawData); - - /** - * @brief isChinese 检测字符是否是中文 - * @param c 需要检测的字符 - * @return true 为中文字符,反之亦然 - */ - bool isChinese(const QChar &c); - - /** - * @brief tagOpenMusicFile 使用taglib打开音频文件获取信息 - * @param path 音频文件路径 - * @return 音频文件信息 - */ - MediaMeta tagOpenMusicFile(const QString &path); - - /** - * @brief characterEncodingTransform 对音频文件信息字符数据进行转码 - * @param meta 音频文件信息对象,输出参数 - * @param obj taglib打开的文件对象 - */ - void characterEncodingTransform(MediaMeta &meta, void *obj); - -private: - QString currentUrl; - QLabel *titleLabel { nullptr }; - QLabel *artistLabel { nullptr }; - QLabel *albumLabel { nullptr }; - Cover *imgLabel { nullptr }; - QLabel *artistValue { nullptr }; - QLabel *albumValue { nullptr }; - - QString fileTitle; - QString fileArtist; - QString fileAlbum; - int viewMargins; - QMap localeCodes; //! 区域与编码 -}; -} -#endif // MUSICMESSAGEVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.cpp deleted file mode 100644 index 2ab1735a02..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.cpp +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "musicpreview.h" -#include "musicmessageview.h" -#include "toolbarframe.h" -#include "cusmediaplayer.h" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -DFMBASE_USE_NAMESPACE -using namespace plugin_filepreview; -MusicPreview::MusicPreview(QObject *parent) - : AbstractBasePreview(parent) -{ -} - -MusicPreview::~MusicPreview() -{ - if (musicView) - musicView->deleteLater(); - - if (statusBarFrame) - statusBarFrame->deleteLater(); -} - -bool MusicPreview::setFileUrl(const QUrl &url) -{ - if (currentUrl == url) - return true; - - if (!dfmbase::FileUtils::isLocalFile(url)) - return false; - - if (musicView || statusBarFrame) - return false; - - if (!canPreview(url)) - return false; - - currentUrl = url; - - musicView = new MusicMessageView(url.toString()); - statusBarFrame = new ToolBarFrame(url.toString()); - musicView->setFixedSize(600, 336); - statusBarFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - - return true; -} - -QUrl MusicPreview::fileUrl() const -{ - return currentUrl; -} - -QWidget *MusicPreview::contentWidget() const -{ - return musicView; -} - -QWidget *MusicPreview::statusBarWidget() const -{ - return statusBarFrame; -} - -Qt::Alignment MusicPreview::statusBarWidgetAlignment() const -{ - return Qt::Alignment(); -} - -void MusicPreview::play() -{ - statusBarFrame->play(); -} - -void MusicPreview::pause() -{ - statusBarFrame->pause(); -} - -void MusicPreview::stop() -{ - statusBarFrame->stop(); -} - -void MusicPreview::handleBeforDestroy() -{ - emit CusMediaPlayer::instance()->sigStop(); -} - -bool MusicPreview::canPreview(const QUrl &url) const -{ - FileInfoPointer info = InfoFactory::create(url); - - if (!info) - return false; - QMimeType mimeType = DMimeDatabase().mimeTypeForUrl(url); - - return mimeType.name().startsWith("audio/"); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.h deleted file mode 100644 index 86ecffd0e0..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreview.h +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef MUSICPREVIEW_H -#define MUSICPREVIEW_H - -#include "preview_plugin_global.h" -#include - -#include -#include - -namespace plugin_filepreview { -class MusicMessageView; -class ToolBarFrame; -} - -namespace plugin_filepreview { -class MusicPreview : public DFMBASE_NAMESPACE::AbstractBasePreview -{ - Q_OBJECT - -public: - explicit MusicPreview(QObject *parent = nullptr); - ~MusicPreview() override; - - bool setFileUrl(const QUrl &url) override; - QUrl fileUrl() const override; - - QWidget *contentWidget() const override; - QWidget *statusBarWidget() const override; - Qt::Alignment statusBarWidgetAlignment() const override; - - void play() override; - void pause() override; - void stop() override; - void handleBeforDestroy() override; - - bool canPreview(const QUrl &url) const; - -private: - QUrl currentUrl; - - QPointer musicView; - QPointer statusBarFrame; -}; -} -#endif // MUSICPREVIEWPLUGIN_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.cpp deleted file mode 100644 index 2826336524..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "musicpreviewplugin.h" - -DFMBASE_USE_NAMESPACE -namespace plugin_filepreview { -DFM_LOG_REISGER_CATEGORY(PREVIEW_NAMESPACE) -AbstractBasePreview *MusicPreviewPlugin::create(const QString &key) -{ - Q_UNUSED(key) - - return new MusicPreview(); -} -} // namespace plugin_filepreview diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.h deleted file mode 100644 index 23e9d10de3..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/musicpreviewplugin.h +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef MUSICPREVIEWPLUGIN_H -#define MUSICPREVIEWPLUGIN_H - -#include "preview_plugin_global.h" -#include -#include "musicpreview.h" - -namespace plugin_filepreview { -class MusicPreviewPlugin : public DFMBASE_NAMESPACE::AbstractFilePreviewPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID FilePreviewFactoryInterface_iid FILE "dde-music-preview-plugin.json") - -public: - DFMBASE_NAMESPACE::AbstractBasePreview *create(const QString &key) Q_DECL_OVERRIDE; -}; -} -#endif // MUSICPREVIEWPLUGIN_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.cpp deleted file mode 100644 index e898f845ba..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.cpp +++ /dev/null @@ -1,165 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "toolbarframe.h" -#include "cusmediaplayer.h" - -#include - -#include -#include -#include -#include -#include -#include - -using namespace plugin_filepreview; -DWIDGET_USE_NAMESPACE -ToolBarFrame::ToolBarFrame(const QString &uri, QWidget *parent) - : QFrame(parent) -{ - initUI(); - initConnections(); - - CusMediaPlayer::instance()->createMediaPlayer(); - CusMediaPlayer::instance()->setMedia(QUrl::fromUserInput(uri)); -} - -void ToolBarFrame::initUI() -{ - playControlButton = new QPushButton(this); - playControlButton->setFixedSize(36, 36); - playControlButton->setIcon(QIcon::fromTheme(":/icons/icons/start_normal.png")); - - progressSlider = new DSlider(Qt::Horizontal, this); - progressSlider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - - durationLabel = new QLabel(this); - - QHBoxLayout *layout = new QHBoxLayout; - layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(playControlButton, 0, Qt::AlignVCenter); - layout->addWidget(progressSlider, 0, Qt::AlignVCenter); - layout->addWidget(durationLabel, 0, Qt::AlignVCenter); - layout->addSpacing(5); - - setLayout(layout); -} - -void ToolBarFrame::initConnections() -{ - connect(CusMediaPlayer::instance(), &CusMediaPlayer::sigStateChanged, this, &ToolBarFrame::onPlayStateChanged); - connect(CusMediaPlayer::instance(), &CusMediaPlayer::sigStatusChanged, this, &ToolBarFrame::onPlayStatusChanged); - connect(CusMediaPlayer::instance(), &CusMediaPlayer::sigDurationChanged, this, &ToolBarFrame::onPlayDurationChanged); - connect(CusMediaPlayer::instance(), &CusMediaPlayer::sigPositionChanged, this, &ToolBarFrame::onPlayPositionChanged); - connect(playControlButton, &QPushButton::clicked, this, &ToolBarFrame::onPlayControlButtonClicked); - connect(progressSlider, &DSlider::valueChanged, this, &ToolBarFrame::seekPosition); -} - -void ToolBarFrame::onPlayDurationChanged(qint64 duration) -{ - durationToLabel(duration); -} - -void ToolBarFrame::onPlayPositionChanged(qint64 pos) -{ - if (pos == lastPos || curState == QMediaPlayer::StoppedState) - return; - lastPos = pos; - progressSlider->setValue(static_cast(pos)); -} - -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) -void ToolBarFrame::onPlayStateChanged(const QMediaPlayer::State &state) -#else -void ToolBarFrame::onPlayStateChanged(const QMediaPlayer::PlaybackState &state) -#endif -{ - curState = state; - if (state == QMediaPlayer::StoppedState) - progressSlider->setValue(0); - - if (state == QMediaPlayer::StoppedState || state == QMediaPlayer::PausedState) { - playControlButton->setIcon(QIcon::fromTheme(":/icons/icons/start_normal.png")); - } else { - playControlButton->setIcon(QIcon::fromTheme(":/icons/icons/pause_normal.png")); - } -} - -void ToolBarFrame::onPlayStatusChanged(const QMediaPlayer::MediaStatus &status) -{ - if (status == QMediaPlayer::LoadedMedia || status == QMediaPlayer::BufferedMedia) - durationToLabel(CusMediaPlayer::instance()->duration()); -} - -void ToolBarFrame::onPlayControlButtonClicked() -{ - auto sta = CusMediaPlayer::instance()->state(); - if (sta == QMediaPlayer::PlayingState) { - pause(); - } else if (sta == QMediaPlayer::StoppedState) { - progressSlider->setValue(0); - play(); - } else { - play(); - } -} - -void ToolBarFrame::seekPosition(const int &pos) -{ - if (qAbs(pos - CusMediaPlayer::instance()->position()) > 3) { - emit CusMediaPlayer::instance()->sigSetPosition(pos); - } -} - -void ToolBarFrame::play() -{ - curState = QMediaPlayer::PlayingState; - emit CusMediaPlayer::instance()->sigPlay(); -} - -void ToolBarFrame::pause() -{ - curState = QMediaPlayer::PausedState; - emit CusMediaPlayer::instance()->sigPause(); -} - -void ToolBarFrame::stop() -{ - curState = QMediaPlayer::StoppedState; - progressSlider->setValue(0); - emit CusMediaPlayer::instance()->sigStop(); -} - -void ToolBarFrame::durationToLabel(qint64 duration) -{ - if (duration < 1) { - durationLabel->setText("--"); - progressSlider->setMinimum(0); - progressSlider->setMaximum(0); - return; - } - - qlonglong msDuration = duration; - qlonglong sDurations = msDuration / 1000; - int minutes = static_cast(sDurations) / 60; - int seconds = sDurations % 60; - QString minutesStr; - QString secondsStr; - if (minutes < 10) { - minutesStr = "0" + QString::number(minutes); - } else { - minutesStr = QString::number(minutes); - } - if (seconds < 10) { - secondsStr = "0" + QString::number(seconds); - } else { - secondsStr = QString::number(seconds); - } - - durationLabel->setText(QString("%1: %2").arg(minutesStr, secondsStr)); - - progressSlider->setMinimum(0); - progressSlider->setMaximum(static_cast(duration)); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.h deleted file mode 100644 index 4a1bb681db..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/music-preview/toolbarframe.h +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef TOOLBARFRAME_H -#define TOOLBARFRAME_H - -#include "preview_plugin_global.h" - -#include - -#include -#include - -QT_BEGIN_NAMESPACE -class QPushButton; -class QSlider; -class QLabel; -class QMediaPlayer; -class QTimer; -QT_END_NAMESPACE - -DWIDGET_BEGIN_NAMESPACE -class DSlider; -DWIDGET_END_NAMESPACE - -namespace plugin_filepreview { -class ToolBarFrame : public QFrame -{ - Q_OBJECT -public: - explicit ToolBarFrame(const QString &uri, QWidget *parent = nullptr); - -private: - void initUI(); - void initConnections(); - -public slots: -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - void onPlayStateChanged(const QMediaPlayer::State &state); -#else - void onPlayStateChanged(const QMediaPlayer::PlaybackState &state); - -#endif - void onPlayStatusChanged(const QMediaPlayer::MediaStatus &status); - void onPlayDurationChanged(qint64 duration); - void onPlayPositionChanged(qint64 pos); - void onPlayControlButtonClicked(); - void seekPosition(const int &pos); - void play(); - void pause(); - void stop(); - -private: - void durationToLabel(qint64 duration); - -private: - QPushButton *playControlButton { nullptr }; - DTK_WIDGET_NAMESPACE::DSlider *progressSlider { nullptr }; - QLabel *durationLabel { nullptr }; - QTimer *updateProgressTimer { nullptr }; - qint64 lastPos { -1 }; -#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) - QMediaPlayer::State curState { QMediaPlayer::State::StoppedState }; -#else - QMediaPlayer::PlaybackState curState { QMediaPlayer::StoppedState }; -#endif -}; -} -#endif // TOOLBARFRAME_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/CMakeLists.txt deleted file mode 100644 index 41b3f95139..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(dfmpdf-preview) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -FILE(GLOB PDFPREVIEW_FILES - "${CMAKE_CURRENT_SOURCE_DIR}/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*.json" - "${GlobalFiles}" - ) -find_package(Qt5 COMPONENTS Core REQUIRED) -find_package(Dtk COMPONENTS Widget REQUIRED) - -find_package(PkgConfig REQUIRED) - -pkg_search_module(pdfium REQUIRED deepin-pdfium) - -add_library(${PROJECT_NAME} - SHARED - ${PDFPREVIEW_FILES} -) - -set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - -target_include_directories(${PROJECT_NAME} - PUBLIC - ${DtkWidget_INCLUDE_DIRS} - ${pdfium_INCLUDE_DIRS} -) - -target_link_libraries(${PROJECT_NAME} - DFM::base - DFM::framework - ${DtkWidget_LIBRARIES} - ${pdfium_LIBRARIES} -) - -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/dde-pdf-preview-plugin.json DESTINATION ../../previews) - -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dde-pdf-preview-plugin.json DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) - -#install library file -install(TARGETS - ${PROJECT_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} -) diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.cpp deleted file mode 100644 index 64e1a6d0ac..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.cpp +++ /dev/null @@ -1,281 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "browserpage.h" -#include "model.h" -#include "pagerenderthread.h" -#include "sheetbrowser.h" -#include "global.h" -#include "sheetrenderer.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -BrowserPage::BrowserPage(SheetBrowser *parent, int index, DocSheet *sheet) - : QGraphicsItem(), docSheet(sheet), sheetBrowserParent(parent), currentIndex(index) -{ - setAcceptHoverEvents(true); - - setFlag(QGraphicsItem::ItemIsPanel); - - originSizeF = sheet->renderer()->getPageSize(index); -} - -BrowserPage::~BrowserPage() -{ - PageRenderThread::clearImageTasks(docSheet, this); -} - -QRectF BrowserPage::boundingRect() const -{ - return QRectF(0, 0, kImageBrowserWidth * currentScaleFactor, originSizeF.height() * (kImageBrowserWidth / originSizeF.width()) * currentScaleFactor); -} - -QRectF BrowserPage::rect() -{ - switch (currentRotation) { - case kRotateBy90: - case kRotateBy270: - return QRectF(0, 0, static_cast(originSizeF.height() * (kImageBrowserWidth / originSizeF.width()) * currentScaleFactor), static_cast(kImageBrowserWidth * currentScaleFactor)); - default: - break; - } - - return QRectF(0, 0, static_cast(kImageBrowserWidth * currentScaleFactor), static_cast(originSizeF.height() * (kImageBrowserWidth / originSizeF.width()) * currentScaleFactor)); -} - -void BrowserPage::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *) -{ - Q_UNUSED(option) - - if (!qFuzzyCompare(renderPixmapScaleFactor, currentScaleFactor)) { - render(currentScaleFactor, currentRotation); - } - - if (!viewportRendered && !pixmapHasRendered) - renderViewPort(); - - painter->drawPixmap(0, 0, currentRenderPixmap); //! m_renderPixmap的大小存在系统缩放,可能不等于option->rect(),需要按坐标绘制 - - painter->setPen(Qt::NoPen); - - painter->setBrush(QColor(238, 220, 0, 100)); - - painter->setBrush(QColor(59, 148, 1, 100)); -} - -void BrowserPage::render(const double &scaleFactor, const Rotation &rotation, const bool &renderLater, const bool &force) -{ - if (!force && renderLater && qFuzzyCompare(scaleFactor, scaleFactor) && rotation == currentRotation) - return; - - currentScaleFactor = scaleFactor; - - if (currentRotation != rotation) { - currentRotation = rotation; - if (kRotateBy0 == currentRotation) - this->setRotation(0); - else if (kRotateBy90 == currentRotation) - this->setRotation(90); - else if (kRotateBy180 == currentRotation) - this->setRotation(180); - else if (kRotateBy270 == currentRotation) - this->setRotation(270); - } - - if (!renderLater && !qFuzzyCompare(renderPixmapScaleFactor, currentScaleFactor)) { - renderPixmapScaleFactor = currentScaleFactor; - - if (currentPixmap.isNull()) { - currentPixmap = QPixmap(static_cast(boundingRect().width() * qApp->devicePixelRatio()), - static_cast(boundingRect().height() * qApp->devicePixelRatio())); - currentPixmap.fill(Qt::white); - currentRenderPixmap = currentPixmap; - currentRenderPixmap.setDevicePixelRatio(qApp->devicePixelRatio()); - } else { - currentRenderPixmap = currentPixmap.scaled(static_cast(boundingRect().width() * qApp->devicePixelRatio()), - static_cast(boundingRect().height() * qApp->devicePixelRatio())); - currentRenderPixmap.setDevicePixelRatio(qApp->devicePixelRatio()); - } - - ++currentPixmapId; - - PageRenderThread::clearImageTasks(docSheet, this, currentPixmapId); - DocPageNormalImageTask task; - - task.sheet = docSheet; - - task.page = this; - - task.pixmapId = currentPixmapId; - - task.rect = QRect(0, 0, - static_cast(boundingRect().width() * qApp->devicePixelRatio()), - static_cast(boundingRect().height() * qApp->devicePixelRatio())); - - PageRenderThread::appendTask(task); - } - - update(); -} - -void BrowserPage::renderRect(const QRectF &rect) -{ - if (nullptr == sheetBrowserParent) - return; - - QRect validRect = boundingRect().intersected(rect).toRect(); - - DocPageSliceImageTask task; - - task.sheet = docSheet; - - task.page = this; - - task.pixmapId = currentPixmapId; - - task.whole = QRect(0, 0, - static_cast(boundingRect().width() * qApp->devicePixelRatio()), - static_cast(boundingRect().height() * qApp->devicePixelRatio())); - - task.slice = QRect(static_cast(validRect.x() * qApp->devicePixelRatio()), - static_cast(validRect.y() * qApp->devicePixelRatio()), - static_cast(validRect.width() * qApp->devicePixelRatio()), - static_cast(validRect.height() * qApp->devicePixelRatio())); - - PageRenderThread::appendTask(task); -} - -void BrowserPage::renderViewPort() -{ - if (nullptr == sheetBrowserParent) - return; - - QRect viewPortRect = QRect(0, 0, sheetBrowserParent->size().width(), sheetBrowserParent->size().height()); - - QRectF visibleSceneRectF = sheetBrowserParent->mapToScene(viewPortRect).boundingRect(); - - QRectF intersectedRectF = this->mapToScene(this->boundingRect()).boundingRect().intersected(visibleSceneRectF); - - //! 如果不在当前可视范围则不加载 强制也没用 - if (intersectedRectF.height() <= 0 && intersectedRectF.width() <= 0) - return; - - QRectF viewRenderRectF = mapFromScene(intersectedRectF).boundingRect(); - - QRect viewRenderRect = QRect(static_cast(viewRenderRectF.x()), static_cast(viewRenderRectF.y()), - static_cast(viewRenderRectF.width()), static_cast(viewRenderRectF.height())); - - //! 扩大加载的视图窗口范围 防止小范围的拖动 - int expand = 200; - - viewRenderRect.setX(viewRenderRect.x() - expand < 0 ? 0 : viewRenderRect.x() - expand); - - viewRenderRect.setY(viewRenderRect.y() - expand < 0 ? 0 : viewRenderRect.y() - expand); - - viewRenderRect.setWidth(viewRenderRect.x() + viewRenderRect.width() + expand * 2 > boundingRect().width() ? viewRenderRect.width() : viewRenderRect.width() + expand * 2); - - viewRenderRect.setHeight(viewRenderRect.y() + viewRenderRect.height() + expand * 2 > boundingRect().height() ? viewRenderRect.height() : viewRenderRect.height() + expand * 2); - - renderRect(viewRenderRect); - - viewportRendered = true; -} - -QImage BrowserPage::getCurrentImage(int width, int height) -{ - if (currentPixmap.isNull()) - return QImage(); - - //获取图片比原图还大,就不需要原图了 - if (qMin(width, height) > qMax(currentPixmap.width(), currentPixmap.height())) - return QImage(); - - QImage image = currentPixmap.toImage().scaled(static_cast(width), static_cast(height), Qt::KeepAspectRatio); - - return image; -} - -int BrowserPage::itemIndex() -{ - return currentIndex; -} - -void BrowserPage::clearPixmap() -{ - if (renderPixmapScaleFactor < -0.0001) - return; - - currentPixmap = QPixmap(); - - currentRenderPixmap = currentPixmap; - - ++currentPixmapId; - - pixmapHasRendered = false; - - viewportRendered = false; - - renderPixmapScaleFactor = -1; - - PageRenderThread::clearImageTasks(docSheet, this); -} - -QPointF BrowserPage::getTopLeftPos() -{ - QPointF p; - switch (currentRotation) { - default: - case kRotateBy0: - p = pos(); - break; - case kRotateBy270: - p.setX(pos().x()); - p.setY(pos().y() - rect().height()); - break; - case kRotateBy180: - p.setX(pos().x() - rect().width()); - p.setY(pos().y() - rect().height()); - break; - case kRotateBy90: - p.setX(pos().x() - rect().width()); - p.setY(pos().y()); - break; - } - return p; -} - -void BrowserPage::handleRenderFinished(const int &pixmapId, const QPixmap &pixmap, const QRect &slice) -{ - if (currentPixmapId != pixmapId) - return; - - if (!slice.isValid()) { //! 不是切片,整体更新 - pixmapHasRendered = true; - currentPixmap = pixmap; - } else { //! 局部 - QPainter painter(¤tPixmap); - painter.drawPixmap(slice, pixmap); - } - - currentRenderPixmap = currentPixmap; - - currentRenderPixmap.setDevicePixelRatio(qApp->devicePixelRatio()); - - update(); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.h deleted file mode 100644 index a79db2040b..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/browserpage.h +++ /dev/null @@ -1,128 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef BROWSERPAGE_H -#define BROWSERPAGE_H - -#include "preview_plugin_global.h" - -#include "global.h" -#include "pdfmodel.h" -#include "docsheet.h" - -#include - -namespace plugin_filepreview { -class Page; -class SheetBrowser; - -class BrowserPage : public QGraphicsItem -{ - friend class PageRenderThread; - friend class PageViewportThread; - -public: - explicit BrowserPage(SheetBrowser *parent, int index, DocSheet *sheet); - - ~BrowserPage() override; - - /** - * @brief 文档页缩放后的原区域 不受旋转影响 - * @return - */ - QRectF boundingRect() const override; - - /** - * @brief 文档页实际区域 - * @return - */ - QRectF rect(); - - /** - * @brief 文档进行加载像显示内容 - * @param scaleFactor 缩放系数 - * @param rotation 旋转角度 - * @param renderLater 是否延迟加载 - * @param force 是否强制更新 - */ - void render(const double &scaleFactor, const Rotation &rotation, const bool &renderLater = false, const bool &force = false); - - /** - * @brief 加载局部区域 - * @param scaleFactor 缩放系数 - * @param rect 需要被局部加载的文档区域 - */ - void renderRect(const QRectF &rect); - - /** - * @brief 加载当前视图区域 - * @param scaleFactor 缩放因子 - */ - void renderViewPort(); - - /** - * @brief currentImage - * 获取整个图片并转成对应宽高 - * @param width 宽 - * @param height 高 - * @param mode 缩放模式 - * @param bSrc 是否可以使用已存在图片缩放 - * @return - */ - QImage getCurrentImage(int width, int height); - - /** - * @brief itemIndex - * 当前页的编号(从0开始) - * @return - */ - int itemIndex(); - - /** - * @brief clearPixmap - * 删除缓存图片,当距离当前页较远的时候需要被清除以节省内存空间占用 - */ - void clearPixmap(); - - /** - * @brief getTopLeftPos - * 根据旋转角度和item坐标计算出item的左上角坐标 - * @return - */ - QPointF getTopLeftPos(); - -private: - /** - * @brief handleRenderFinished - * 渲染缩略图 - * @param scaleFactor 缩放系数 - * @param image 缩略图 - * @param rect 范围 - */ - void handleRenderFinished(const int &pixmapId, const QPixmap &pixmap, const QRect &slice = QRect()); - -protected: - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; - -private: - DocSheet *docSheet { nullptr }; - - SheetBrowser *sheetBrowserParent { nullptr }; - - double currentScaleFactor { -1 }; //当前被设置的缩放 - int currentIndex { 0 }; //当前索引 - Rotation currentRotation { Rotation::kNumberOfRotations }; //当前被设置的旋转 - - QPixmap currentPixmap; //当前图片 - QPixmap currentRenderPixmap; //当前被绘制图片 - int currentPixmapId { 0 }; //当前图片的标识 - bool pixmapIsLastest { false }; //当前图示是否最新 - bool pixmapHasRendered { false }; //当前图片是否已经加载 - double renderPixmapScaleFactor { -1 }; //当前图片的缩放 - bool viewportRendered { false }; //图片初始化加载视图窗口 - - QSizeF originSizeF; -}; -} -#endif // BROWSERPAGE_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview-plugin.json b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview-plugin.json deleted file mode 100644 index 3291fa6521..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview-plugin.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys" : ["application/pdf", "application/x-bzpdf", "application/x-gzpdf", "application/x-lzpdf", "application/x-xzpdf"] -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview.theme b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview.theme deleted file mode 100644 index 6abaff757a..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/dde-pdf-preview.theme +++ /dev/null @@ -1,8 +0,0 @@ -QListWidget#Thumbnail{ - border: none; - background: white; - border-right: 1px solid rgba(0, 0, 0, 0.1); -}" -QListWidget#Thumbnail::item{ - border: none; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.cpp deleted file mode 100644 index 9a30e098f0..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.cpp +++ /dev/null @@ -1,389 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "docsheet.h" - -#include "sheetsidebar.h" -#include "sheetbrowser.h" -#include "encryptionpage.h" -#include "pdfmodel.h" -#include "sheetrenderer.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -QReadWriteLock DocSheet::lockReadWrite; -QStringList DocSheet::uuidList; -QList DocSheet::sheetList; -DocSheet::DocSheet(const FileType &fileType, const QString &filePath, QWidget *parent) - : DSplitter(parent), currentFilePath(filePath), currentFileType(fileType) -{ - setAlive(true); - setHandleWidth(5); - setChildrenCollapsible(false); //! 子部件不可拉伸到 0 - - sheetRenderer = new SheetRenderer(this); - connect(sheetRenderer, &SheetRenderer::sigOpened, this, &DocSheet::onOpened); - - sheetBrowser = new SheetBrowser(this); - sheetBrowser->setMinimumWidth(700); - - if (kPDF == fileType) - sheetSidebar = new SheetSidebar(this, PREVIEW_THUMBNAIL); - else - sheetSidebar = new SheetSidebar(this, nullptr); - - sheetSidebar->setFixedWidth(96); - - connect(sheetBrowser, SIGNAL(sigPageChanged(int)), this, SLOT(onBrowserPageChanged(int))); - - resetChildParent(); - this->insertWidget(0, sheetBrowser); - this->insertWidget(0, sheetSidebar); - - setSidebarVisible(true); -} - -DocSheet::~DocSheet() -{ - setAlive(false); - - delete sheetBrowser; - - delete sheetSidebar; - - delete sheetRenderer; - - if (nullptr != temporaryDir) - delete temporaryDir; -} - -bool DocSheet::existSheet(DocSheet *sheet) -{ - lockReadWrite.lockForRead(); - - bool result = sheetList.contains(sheet); - - lockReadWrite.unlock(); - - return result; -} - -DocSheet *DocSheet::getSheetByFilePath(QString filePath) -{ - lockReadWrite.lockForRead(); - - DocSheet *result = nullptr; - - foreach (DocSheet *sheet, sheetList) { - if (sheet->filePath() == filePath) { - result = sheet; - break; - } - } - - lockReadWrite.unlock(); - - return result; -} - -QList DocSheet::getSheets() -{ - return DocSheet::sheetList; -} - -bool DocSheet::openFileExec(const QString &password) -{ - docPassword = password; - - return sheetRenderer->openFileExec(password); -} - -void DocSheet::openFileAsync(const QString &password) -{ - docPassword = password; - - sheetRenderer->openFileAsync(docPassword); -} - -void DocSheet::jumpToPage(int page) -{ - sheetBrowser->setCurrentPage(page); -} - -void DocSheet::jumpToIndex(int index) -{ - sheetBrowser->setCurrentPage(index + 1); -} - -int DocSheet::pageCount() -{ - return sheetRenderer->getPageCount(); -} - -int DocSheet::currentPage() -{ - if (sheetOperation.currentPage < 1 || sheetOperation.currentPage > pageCount()) - return 1; - - return sheetOperation.currentPage; -} - -int DocSheet::currentIndex() -{ - if (sheetOperation.currentPage < 1 || sheetOperation.currentPage > pageCount()) - return 0; - - return sheetOperation.currentPage - 1; -} - -void DocSheet::setLayoutMode(LayoutMode mode) -{ - if (mode == sheetOperation.layoutMode) - return; - - if (mode >= SinglePageMode && mode < NumberOfLayoutModes) { - sheetOperation.layoutMode = mode; - sheetBrowser->deform(sheetOperation); - } -} - -QPixmap DocSheet::thumbnail(int index) -{ - return thumbnailMap.value(index); -} - -void DocSheet::setThumbnail(int index, QPixmap pixmap) -{ - thumbnailMap[index] = pixmap; -} - -QImage DocSheet::getImage(int index, int width, int height, const QRect &slice) -{ - return sheetRenderer->getImage(index, width, height, slice); -} - -QList DocSheet::scaleFactorList() -{ - QList dataList = { 0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 3, 4, 5 }; - QList factorList; - - qreal maxFactor = maxScaleFactor(); - - foreach (qreal factor, dataList) { - if (maxFactor - factor > -0.0001) - factorList.append(factor); - } - - return factorList; -} - -qreal DocSheet::maxScaleFactor() -{ - qreal maxScaleFactor = 20000 / (sheetBrowser->maxHeight() * qApp->devicePixelRatio()); - - maxScaleFactor = qBound(0.1, maxScaleFactor, 5.0); - - return maxScaleFactor; -} - -QString DocSheet::format() -{ - return QString("PDF"); -} - -SheetOperation DocSheet::operation() const -{ - return sheetOperation; -} - -FileType DocSheet::fileType() -{ - return currentFileType; -} - -SheetOperation &DocSheet::operationRef() -{ - return sheetOperation; -} - -QString DocSheet::filePath() -{ - return currentFilePath; -} - -QString DocSheet::openedFilePath() -{ - return filePath(); -} - -void DocSheet::setSidebarVisible(bool isVisible, bool notify) -{ - if (notify) { - //! 左侧栏是否需要隐藏 - sheetSidebar->setVisible(isVisible); - sheetOperation.sidebarVisible = isVisible; - - if (isVisible) { - this->insertWidget(0, sheetSidebar); - } else if (isFullScreen()) { - resetChildParent(); - this->insertWidget(0, sheetBrowser); - - sheetSidebar->resize(sheetSidebar->width(), qApp->primaryScreen()->size().height()); - sheetSidebar->move(-sheetSidebar->width(), 0); - sheetSidebar->setVisible(false); - } - } -} - -void DocSheet::onBrowserPageChanged(int page) -{ - if (sheetOperation.currentPage != page) { - sheetOperation.currentPage = page; - if (sheetSidebar) - sheetSidebar->setCurrentPage(page); - } -} - -void DocSheet::resizeEvent(QResizeEvent *event) -{ - DSplitter::resizeEvent(event); - if (encrytionPage) { - encrytionPage->setGeometry(0, 0, this->width(), this->height()); - } - - if (isFullScreen()) { - sheetSidebar->resize(sheetSidebar->width(), this->height()); - } -} - -void DocSheet::childEvent(QChildEvent *event) -{ - if (event->removed()) { - return DSplitter::childEvent(event); - } -} - -void DocSheet::setAlive(bool alive) -{ - if (alive) { - if (!uuidFile.isEmpty()) - setAlive(false); - - uuidFile = QUuid::createUuid().toString(); - - lockReadWrite.lockForWrite(); - - uuidList.append(uuidFile); - - sheetList.append(this); - - lockReadWrite.unlock(); - - } else { - if (uuidFile.isEmpty()) - return; - - lockReadWrite.lockForWrite(); - - int index = uuidList.indexOf(uuidFile); - - sheetList.removeAt(index); - - uuidList.removeAt(index); - - uuidFile.clear(); - - lockReadWrite.unlock(); - } -} - -bool DocSheet::opened() -{ - return sheetRenderer->opened(); -} - -void DocSheet::onExtractPassword(const QString &password) -{ - docPassword = password; - - sheetRenderer->openFileAsync(docPassword); -} - -SheetRenderer *DocSheet::renderer() -{ - return sheetRenderer; -} - -void DocSheet::showEncryPage() -{ - if (encrytionPage == nullptr) { - encrytionPage = new EncryptionPage(this); - connect(encrytionPage, &EncryptionPage::sigExtractPassword, this, &DocSheet::onExtractPassword); - this->stackUnder(encrytionPage); - } - - //! 密码输入框在的时候,先暂时屏蔽掉browser的焦点 - sheetBrowser->setFocusPolicy(Qt::NoFocus); - encrytionPage->setGeometry(0, 0, this->width(), this->height()); - encrytionPage->raise(); - encrytionPage->show(); -} - -QSizeF DocSheet::pageSizeByIndex(int index) -{ - return sheetRenderer->getPageSize(index); -} - -void DocSheet::resetChildParent() -{ - sheetSidebar->setParent(nullptr); - sheetSidebar->setParent(this); - - sheetBrowser->setParent(nullptr); - sheetBrowser->setParent(this); -} - -void DocSheet::onOpened(Document::Error error) -{ - if (Document::kNeedPassword == error) { - showEncryPage(); - } else if (Document::kWrongPassword == error) { - showEncryPage(); - - encrytionPage->wrongPassWordSlot(); - } else if (Document::kNoError == error) { - if (!docPassword.isEmpty()) { - sheetBrowser->setFocusPolicy(Qt::StrongFocus); - - if (encrytionPage) { - encrytionPage->hide(); - encrytionPage->deleteLater(); - } - encrytionPage = nullptr; - } - - sheetBrowser->init(sheetOperation); - - sheetSidebar->handleOpenSuccess(); - } - - //! 交给父窗口控制自己是否删除 - emit sigFileOpened(this, error); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.h deleted file mode 100644 index a3895c07fa..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/docsheet.h +++ /dev/null @@ -1,333 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef DOCSHEET_H -#define DOCSHEET_H - -#include "preview_plugin_global.h" - -#include "model.h" - -#include - -#include - -class QTemporaryDir; - -namespace plugin_filepreview { -class SheetBrowser; -class SheetRenderer; -class SheetSidebar; -class EncryptionPage; - -struct SheetOperation -{ - LayoutMode layoutMode = SinglePageMode; - Rotation rotation = kRotateBy0; - qreal scaleFactor = 0.9; - bool sidebarVisible = false; - int sidebarIndex = 0; - int currentPage = 1; -}; - -class DocSheet : public Dtk::Widget::DSplitter -{ - Q_OBJECT - Q_DISABLE_COPY(DocSheet) - - friend class SheetSidebar; - friend class SheetBrowser; - friend class Database; - -public: - explicit DocSheet(const FileType &fileType, const QString &filePath, QWidget *parent = nullptr); - - ~DocSheet() override; - -public: - /** - * @brief existSheet - * 进程是否存在该文档 - * @param sheet - * @return - */ - static bool existSheet(DocSheet *sheet); - - /** - * @brief getSheet - * 根据uuid返回sheet - * @param filePath - * @return - */ - static DocSheet *getSheetByFilePath(QString filePath); - - /** - * @brief getSheets - * 返回所有sheet - * @return - */ - static QList getSheets(); - - /** - * @brief 全局对象判断读写锁 - */ - static QReadWriteLock lockReadWrite; - - static QStringList uuidList; - - static QList sheetList; - -public: - /** - * @brief 阻塞式打开文档 - * @param password - */ - bool openFileExec(const QString &password); - - /** - * @brief 异步式打开文档,完成后会发出sigFileOpened - * @param password 文档密码 - * @return - */ - void openFileAsync(const QString &password); - - /** - * @brief 获取文档总页数 - * @return - */ - int pageCount(); - - /** - * @brief currentPage - * 获取当前文档页数 base 1 - * @return - */ - int currentPage(); - - /** - * @brief currentPage - * 获取当前文档索引值 base 0 - * @return - */ - int currentIndex(); - - /** - * @brief jumpToIndex - * 跳转到索引 - * @param index 索引值 - */ - void jumpToIndex(int index); - - /** - * @brief jumpToPage - * 跳转到页 - * @param page 页码 - */ - void jumpToPage(int page); - - /** - * @brief setLayoutMode - * 批量布局类型 - * @param mode - */ - void setLayoutMode(LayoutMode mode); - - /** - * @brief thumbnail - * 获取缩略图(需要先设置) - * @param index - * @return - */ - QPixmap thumbnail(int index); - - /** - * @brief setThumbnail - * @param index - * @param pixmap - */ - void setThumbnail(int index, QPixmap pixmap); - - /** - * @brief getImage - * @param index 索引 - * @param width - * @param height - * @param slice - * @return - */ - QImage getImage(int index, int width, int height, const QRect &slice = QRect()); - - /** - * @brief scaleFactorList - * 获取缩放因子列表 - * @return - */ - QList scaleFactorList(); - - /** - * @brief maxScaleFactor - * 获取最大的缩放因子 (产品文档中根据文档大小对缩放因子有限制) - * @return - */ - qreal maxScaleFactor(); - - /** - * @brief format - * 获取类型名称 - * @return - */ - QString format(); - - /** - * @brief operation - * 获取用户操作 - * @return - */ - SheetOperation operation() const; - - /** - * @brief fileType - * 获取文件类型 - * @return - */ - FileType fileType(); - - /** - * @brief filePath - * 用户想要打开的文档路径 - * @return - */ - QString filePath(); - - /** - * @brief openedFilePath - * 实际打开的文档路径 - * @return - */ - QString openedFilePath(); - - /** - * @brief setSidebarVisible - * 设置左侧栏显示 - * @param isVisible 显示 - * @param notify 是否通知操作变化 - */ - void setSidebarVisible(bool isVisible, bool notify = true); - - /** - * @brief opened - * 获取是否被打开 - * @return - */ - bool opened(); - - /** - * @brief 获取PAGE真实大小 - * @param index - * @return - */ - QSizeF pageSizeByIndex(int index); - - /** - * @brief renderer - * 获取渲染器 - * @return - */ - SheetRenderer *renderer(); - - /** - * @brief showEncryPage - * 显示解锁页面 - */ - void showEncryPage(); - -private: - /** - * @brief operationRef - * 获取操作的引用(可以直接修改) - * @return - */ - SheetOperation &operationRef(); - - /** - * @brief 重置sidebar,browser的parent - */ - void resetChildParent(); - -private slots: - - /** - * @brief onOpened - * 打开结果 - * @param error - */ - void onOpened(Document::Error error); - -signals: - - /** - * @brief sigPageModified - * 页码被修改 - */ - void sigPageModified(int index); - - /** - * @brief 文档被打开 - * @param result 结果 - * @param error 错误 - */ - void sigFileOpened(DocSheet *sheet, Document::Error error); - -private slots: - /** - * @brief onBrowserPageChanged - * 当前页变化处理 - * @param page 最新页码 - */ - void onBrowserPageChanged(int page); - - /** - * @brief onExtractPassword - * 密码执行处理 - * @param password - */ - void onExtractPassword(const QString &password); - -private: - /** - * @brief setAlive - * 设置当前sheet是否存活 - * @param alive - */ - void setAlive(bool alive); - -protected: - void resizeEvent(QResizeEvent *event) override; - - void childEvent(QChildEvent *c) override; - -private: - SheetOperation sheetOperation; - - //document - Document *document { nullptr }; - - SheetSidebar *sheetSidebar { nullptr }; //操作左侧ui - SheetBrowser *sheetBrowser { nullptr }; //操作右侧ui - SheetRenderer *sheetRenderer { nullptr }; //数据渲染器 - - QString currentFilePath; - QString docPassword; - FileType currentFileType; - QString uuidFile; - QTemporaryDir *temporaryDir { nullptr }; //存放临时数据 - QMap thumbnailMap; - - bool documentChanged { false }; - bool bookmarkChanged { false }; - bool fullSiderBarVisible { false }; - EncryptionPage *encrytionPage { nullptr }; -}; -} -#endif // DOCSHEET_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.cpp deleted file mode 100644 index fba24b3261..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.cpp +++ /dev/null @@ -1,119 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "encryptionpage.h" - -#include -#include -#include -#include - -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -EncryptionPage::EncryptionPage(QWidget *parent) - : QWidget(parent) -{ - InitUI(); - InitConnection(); -} - -EncryptionPage::~EncryptionPage() -{ -} - -void EncryptionPage::InitUI() -{ - QPixmap m_encrypticon = QIcon::fromTheme("dr_compress_lock").pixmap(128, 128); - DLabel *pixmaplabel = new DLabel(this); - pixmaplabel->setPixmap(m_encrypticon); - DLabel *stringinfolabel = new DLabel(this); - - DFontSizeManager::instance()->bind(stringinfolabel, DFontSizeManager::T5, QFont::DemiBold); - stringinfolabel->setForegroundRole(DPalette::ToolTipText); - stringinfolabel->setText(tr("Encrypted file, please enter the password")); - - passwordEdit = new DPasswordEdit(this); - passwordEdit->setFixedSize(360, 36); - QLineEdit *edit = passwordEdit->lineEdit(); - edit->setObjectName("passwdEdit"); - edit->setPlaceholderText(tr("Password")); - - nextbutton = new DPushButton(this); - nextbutton->setObjectName("ensureBtn"); - nextbutton->setFixedSize(360, 36); - nextbutton->setText(tr("OK", "button")); - nextbutton->setDisabled(true); - - QVBoxLayout *mainlayout = new QVBoxLayout(this); - mainlayout->setSpacing(0); - mainlayout->addStretch(); - mainlayout->addWidget(pixmaplabel, 0, Qt::AlignCenter); - - mainlayout->addSpacing(4); - mainlayout->addWidget(stringinfolabel, 0, Qt::AlignCenter); - - mainlayout->addSpacing(30); - mainlayout->addWidget(passwordEdit, 0, Qt::AlignCenter); - - mainlayout->addSpacing(20); - mainlayout->addWidget(nextbutton, 0, Qt::AlignCenter); - - mainlayout->addStretch(); - - setAutoFillBackground(true); - - onUpdateTheme(); - passwordEdit->lineEdit()->setAttribute(Qt::WA_InputMethodEnabled, false); - connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &EncryptionPage::onUpdateTheme); -} - -void EncryptionPage::InitConnection() -{ - connect(passwordEdit, &DPasswordEdit::textChanged, this, &EncryptionPage::onPasswordChanged); - connect(nextbutton, &DPushButton::clicked, this, &EncryptionPage::nextbuttonClicked); - - connect(qApp, SIGNAL(sigSetPasswdFocus()), this, SLOT(onSetPasswdFocus())); -} - -void EncryptionPage::nextbuttonClicked() -{ - emit sigExtractPassword(passwordEdit->text()); -} - -void EncryptionPage::wrongPassWordSlot() -{ - passwordEdit->clear(); - passwordEdit->setAlert(true); - passwordEdit->showAlertMessage(tr("Wrong password")); - passwordEdit->lineEdit()->setFocus(Qt::TabFocusReason); -} - -void EncryptionPage::onPasswordChanged() -{ - if (passwordEdit->isAlert()) { - passwordEdit->setAlert(false); - passwordEdit->hideAlertMessage(); - } - - if (passwordEdit->text().isEmpty()) { - nextbutton->setDisabled(true); - } else { - nextbutton->setEnabled(true); - } -} - -void EncryptionPage::onSetPasswdFocus() -{ - if (this->isVisible() && passwordEdit) - passwordEdit->lineEdit()->setFocus(Qt::TabFocusReason); -} - -void EncryptionPage::onUpdateTheme() -{ - DPalette plt = Dtk::Gui::DGuiApplicationHelper::instance()->applicationPalette(); - plt.setColor(Dtk::Gui::DPalette::Background, plt.color(Dtk::Gui::DPalette::Base)); - setPalette(plt); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.h deleted file mode 100644 index 3fe62414a9..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/encryptionpage.h +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef ENCRYPTIONPAGE_H -#define ENCRYPTIONPAGE_H - -#include "preview_plugin_global.h" - -#include -#include -#include -#include - -namespace plugin_filepreview { -class EncryptionPage : public QWidget -{ - Q_OBJECT -public: - explicit EncryptionPage(QWidget *parent = nullptr); - ~EncryptionPage(); - - /** - * @brief InitUI - * 初始化控件 - */ - void InitUI(); - - /** - * @brief InitConnection - * 初始化connect - */ - void InitConnection(); - -signals: - /** - * @brief sigExtractPassword - * 密码输入确认信号 - * @param password - */ - void sigExtractPassword(const QString &password); - -public slots: - /** - * @brief nextbuttonClicked - * 密码输入确认 - */ - void nextbuttonClicked(); - - /** - * @brief wrongPassWordSlot - * 密码错误响应 - */ - void wrongPassWordSlot(); - - /** - * @brief onPasswordChanged - * 密码输入框字符改变 - */ - void onPasswordChanged(); - - /** - * @brief onSetPasswdFocus - * 设置密码输入框的焦点,在切换到当前窗口时 - */ - void onSetPasswdFocus(); - -private slots: - /** - * @brief onUpdateTheme - * 主题更新 - */ - void onUpdateTheme(); - -private: - DTK_WIDGET_NAMESPACE::DPushButton *nextbutton = nullptr; - DTK_WIDGET_NAMESPACE::DPushButton *echoBtn = nullptr; - DTK_WIDGET_NAMESPACE::DPasswordEdit *passwordEdit = nullptr; -}; -} -#endif // ENCRYPTIONPAGE_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.cpp deleted file mode 100644 index 52f2eaf77e..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.cpp +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "global.h" -#include - -#include -#include -#include - -using namespace plugin_filepreview; -static QWidget *mainWidget = nullptr; - -extern "C" FileType fileType(const QString &filePath) -{ - FileType fileType = FileType::kUnknown; - - DFMBASE_NAMESPACE::DMimeDatabase db; - const QMimeType mimeType = db.mimeTypeForFile(QUrl::fromLocalFile(filePath), QMimeDatabase::MatchContent); - - if (mimeType.name() == QLatin1String("application/pdf")) { - fileType = kPDF; - } - - return fileType; -} - -extern "C" void setMainWidget(QWidget *pMainWidget) -{ - mainWidget = pMainWidget; -} - -extern "C" QWidget *getMainDialog() -{ - return mainWidget; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.h deleted file mode 100644 index 9d59fe6ffd..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/global.h +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef GLOBAL_H -#define GLOBAL_H -#include "preview_plugin_global.h" - -#include -#include - -namespace plugin_filepreview { -/** - * @brief The FileType enum - * 支持文档类型 - */ -enum FileType { - kUnknown = 0, - kPDF = 1, - kDJVU = 2, - kDOCX = 3, - kPS = 4, - kDOC = 5, - kPPTX = 6 -}; - -extern "C" FileType fileType(const QString &filePath); - -/** - * @brief The Rotation enum - * 文档旋转角度 - */ -enum Rotation { - kRotateBy0 = 0, - kRotateBy90 = 1, - kRotateBy180 = 2, - kRotateBy270 = 3, - kNumberOfRotations = 4 -}; - -/** - * @brief The LayoutMode enum - * 布局模式 - */ -enum LayoutMode { - SinglePageMode = 0, - TwoPagesMode = 1, - NumberOfLayoutModes = 2 -}; - -/** - * @brief The ScaleMode enum - * 缩放模式 - */ -enum ScaleMode { - kScaleFactorMode = 0, - kFitToPageWidthMode = 1, - kFitToPageHeightMode = 2, - kNumberOfScaleModes = 3, - kFitToPageDefaultMode = 4, - kFitToPageWorHMode = 5 -}; - -inline constexpr double kImageBrowserWidth = 780.0; -inline constexpr int kPdfWidgetWidth = 830; -inline constexpr int kPdfWidgetHeight = 500; - -extern "C" void setMainWidget(QWidget *pMainWidget); -extern "C" QWidget *getMainDialog(); -} -#endif // GLOBAL_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.cpp deleted file mode 100644 index e72b2507f5..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "model.h" -#include "pdfmodel.h" -#include "dpdfannot.h" -#include "dpdfpage.h" -#include "dpdfdoc.h" - -#include -#include - -using namespace plugin_filepreview; -Document *DocumentFactory::getDocument(const int &fileType, const QString &filePath, - const QString &password, Document::Error &error) -{ - Document *document = nullptr; - - if (kPDF == fileType) { - document = PDFDocument::loadDocument(filePath, password, error); - } - - return document; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.h deleted file mode 100644 index 14cd41f774..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/model.h +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef MODEL_H -#define MODEL_H -#include "preview_plugin_global.h" - -#include "global.h" - -#include -#include - -namespace plugin_filepreview { -class DPdfAnnot; -class FormField : public QObject -{ - Q_OBJECT -public: - FormField() - : QObject() {} - virtual ~FormField() {} - virtual QRectF boundary() const = 0; - virtual QString name() const = 0; - virtual QWidget *createWidget() = 0; -signals: - void wasModified(); -}; - -class Page : public QObject -{ - Q_OBJECT -public: - Page() - : QObject() - { - } - virtual ~Page() {} - - virtual QSizeF sizeF() const = 0; - virtual QImage render(int width, int height, const QRect &slice = QRect()) const = 0; -}; - -class Document : public QObject -{ - Q_OBJECT -public: - enum Error { - kNoError = 0, - kNeedPassword, //需要密码 - kWrongPassword, //密码错误 - kFileError, //打开失败 - kFileDamaged, //打开成功 文件损坏 - kConvertFailed //转换失败 - }; - - Document() - : QObject() {} - virtual ~Document() {} - virtual int pageCount() const = 0; - virtual Page *page(int index) const = 0; -}; - -class DocumentFactory -{ -public: - static Document *getDocument(const int &fileType, const QString &filePath, const QString &password, Document::Error &error); -}; -} -#endif // MODEL_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.cpp deleted file mode 100644 index 763975ce4b..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.cpp +++ /dev/null @@ -1,434 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "pagerenderthread.h" -#include "browserpage.h" -#include "sheetbrowser.h" -#include "docsheet.h" -#include "sheetrenderer.h" -#include "sidebarimageviewmodel.h" - -#include -#include -#include -#include - -using namespace plugin_filepreview; -PageRenderThread *PageRenderThread::pageRenderThread = nullptr; //由于pdfium不支持多线程,暂时单线程进行 - -bool PageRenderThread::quitForever = false; - -PageRenderThread::PageRenderThread(QObject *parent) - : QThread(parent) -{ - qRegisterMetaType("Document *"); - qRegisterMetaType>("QList"); - qRegisterMetaType("Document::Error"); - - qRegisterMetaType("DocPageNormalImageTask"); - qRegisterMetaType("DocPageSliceImageTask"); - qRegisterMetaType("DocPageThumbnailTask"); - qRegisterMetaType("DocOpenTask"); - - connect(this, &PageRenderThread::sigDocPageNormalImageTaskFinished, this, &PageRenderThread::onDocPageNormalImageTaskFinished, Qt::QueuedConnection); - connect(this, &PageRenderThread::sigDocPageThumbnailTaskFinished, this, &PageRenderThread::onDocPageThumbnailTask, Qt::QueuedConnection); - connect(this, &PageRenderThread::sigDocOpenTask, this, &PageRenderThread::onDocOpenTask, Qt::QueuedConnection); -} - -PageRenderThread::~PageRenderThread() -{ - quitDoc = true; - wait(); - if (isFinished()) - quitForever = false; -} - -bool PageRenderThread::clearImageTasks(DocSheet *sheet, BrowserPage *page, int pixmapId) -{ - if (nullptr == page) - return true; - - PageRenderThread *instance = PageRenderThread::instance(); - - if (nullptr == instance) { - return false; - } - - instance->pageNormalImageMutex.lock(); - - bool exist = true; - - while (exist) { - exist = false; - for (int i = 0; i < instance->pageNormalImageTasks.count(); ++i) { - if (instance->pageNormalImageTasks[i].page == page && instance->pageNormalImageTasks[i].sheet == sheet && (instance->pageNormalImageTasks[i].pixmapId != pixmapId || -1 == pixmapId)) { - instance->pageNormalImageTasks.removeAt(i); - exist = true; - break; - } - } - } - - instance->pageNormalImageMutex.unlock(); - - instance->pageSliceImageMutex.lock(); - - exist = true; - - while (exist) { - exist = false; - for (int i = 0; i < instance->pageSliceImageTasks.count(); ++i) { - if (instance->pageSliceImageTasks[i].page == page && instance->pageSliceImageTasks[i].sheet == sheet && (instance->pageSliceImageTasks[i].pixmapId != pixmapId || -1 == pixmapId)) { - instance->pageSliceImageTasks.removeAt(i); - exist = true; - break; - } - } - } - - instance->pageSliceImageMutex.unlock(); - - return true; -} - -void PageRenderThread::appendTask(DocPageNormalImageTask task) -{ - PageRenderThread *instance = PageRenderThread::instance(); - - if (nullptr == instance) { - return; - } - - instance->pageNormalImageMutex.lock(); - - instance->pageNormalImageTasks.append(task); - - instance->pageNormalImageMutex.unlock(); - - if (!instance->isRunning()) - instance->start(); -} - -void PageRenderThread::appendTask(DocPageSliceImageTask task) -{ - PageRenderThread *instance = PageRenderThread::instance(); - - if (nullptr == instance) { - return; - } - - instance->pageSliceImageMutex.lock(); - - instance->pageSliceImageTasks.append(task); - - instance->pageSliceImageMutex.unlock(); - - if (!instance->isRunning()) - instance->start(); -} - -void PageRenderThread::appendTask(DocPageThumbnailTask task) -{ - PageRenderThread *instance = PageRenderThread::instance(); - - if (nullptr == instance) { - return; - } - - instance->pageThumbnailMutex.lock(); - - instance->pageThumbnailTasks.append(task); - - instance->pageThumbnailMutex.unlock(); - - if (!instance->isRunning()) - instance->start(); -} - -void PageRenderThread::appendTask(DocOpenTask task) -{ - PageRenderThread *instance = PageRenderThread::instance(); - - if (nullptr == instance) { - return; - } - - instance->openMutex.lock(); - - instance->openTasks.append(task); - - instance->openMutex.unlock(); - - if (!instance->isRunning()) - instance->start(); -} - -void PageRenderThread::appendTask(DocCloseTask task) -{ - PageRenderThread *instance = PageRenderThread::instance(); - - if (nullptr == instance) { - return; - } - - instance->closeMutex.lock(); - - instance->closeTasks.append(task); - - instance->closeMutex.unlock(); - - if (!instance->isRunning()) - instance->start(); -} - -void PageRenderThread::run() -{ - quitDoc = false; - - while (!quitDoc) { - if (!hasNextTask()) { - msleep(100); - continue; - } - - //! 先完成所有的关闭任务再进行打开 - while (execNextDocCloseTask()) { - } - - while (execNextDocOpenTask()) { - } - - while (execNextDocPageNormalImageTask()) { - } - - while (execNextDocPageThumbnailTask()) { - } - - if (quitDoc) - break; - } - - //! 处理关闭所有文档 - while (execNextDocCloseTask()) { - } -} - -bool PageRenderThread::hasNextTask() -{ - QMutexLocker pageNormalImageLocker(&pageNormalImageMutex); - QMutexLocker pageThumbnailLocker(&pageThumbnailMutex); - QMutexLocker pageOpenLocker(&openMutex); - - return !pageNormalImageTasks.isEmpty() || !pageThumbnailTasks.isEmpty() - || !openTasks.isEmpty(); -} - -bool PageRenderThread::popNextDocPageNormalImageTask(DocPageNormalImageTask &task) -{ - QMutexLocker locker(&pageNormalImageMutex); - - if (pageNormalImageTasks.count() <= 0) - return false; - - task = pageNormalImageTasks.value(0); - - pageNormalImageTasks.removeAt(0); - - return true; -} - -bool PageRenderThread::popNextDocPageThumbnailTask(DocPageThumbnailTask &task) -{ - QMutexLocker locker(&pageThumbnailMutex); - - if (pageThumbnailTasks.count() <= 0) - return false; - - task = pageThumbnailTasks.value(0); - - pageThumbnailTasks.removeAt(0); - - return true; -} - -bool PageRenderThread::popNextDocOpenTask(DocOpenTask &task) -{ - QMutexLocker locker(&openMutex); - - if (openTasks.count() <= 0) - return false; - - task = openTasks.value(0); - - openTasks.removeAt(0); - - return true; -} - -bool PageRenderThread::popNextDocCloseTask(DocCloseTask &task) -{ - QMutexLocker locker(&closeMutex); - - if (closeTasks.count() <= 0) - return false; - - task = closeTasks.value(0); - - closeTasks.removeAt(0); - - return true; -} - -bool PageRenderThread::execNextDocPageNormalImageTask() -{ - if (quitDoc) - return false; - - DocPageNormalImageTask task; - - if (!popNextDocPageNormalImageTask(task)) - return false; - - if (!DocSheet::existSheet(task.sheet)) - return true; - - QImage image = task.sheet->getImage(task.page->itemIndex(), task.rect.width(), task.rect.height()); - - if (!image.isNull()) - emit sigDocPageNormalImageTaskFinished(task, QPixmap::fromImage(image)); - - return true; -} - -bool PageRenderThread::execNextDocPageThumbnailTask() -{ - if (quitDoc) - return false; - - DocPageThumbnailTask task; - - if (!popNextDocPageThumbnailTask(task)) - return false; - - if (!DocSheet::existSheet(task.sheet)) - return true; - - QImage image = task.sheet->getImage(task.index, 174, 174); - - if (!image.isNull()) - emit sigDocPageThumbnailTaskFinished(task, QPixmap::fromImage(image)); - - return true; -} - -bool PageRenderThread::execNextDocOpenTask() -{ - if (quitDoc) - return false; //! false 为不用再继续循环调用 - - DocOpenTask task; - - if (!popNextDocOpenTask(task)) - return false; //! false 为不用再继续循环调用 - - if (!DocSheet::existSheet(task.sheet)) - return true; - - QString filePath = task.sheet->filePath(); - - Document::Error error = Document::kNoError; - - Document *document = DocumentFactory::getDocument(task.sheet->fileType(), filePath, task.password, error); - - if (nullptr == document) { - emit sigDocOpenTask(task, error, nullptr, QList()); - - } else { - int pagesNumber = document->pageCount(); - - QList pages; - - for (int i = 0; i < pagesNumber; ++i) { - Page *page = document->page(i); - - if (nullptr == page) - break; - - pages.append(page); - } - - if (pages.count() == pagesNumber) { - emit sigDocOpenTask(task, Document::kNoError, document, pages); - - } else { - qDeleteAll(pages); - - pages.clear(); - - delete document; - - emit sigDocOpenTask(task, Document::kFileDamaged, nullptr, QList()); - } - } - - return true; -} - -bool PageRenderThread::execNextDocCloseTask() -{ - DocCloseTask task; - - if (!popNextDocCloseTask(task)) - return false; //! false 为不用再继续循环调用 - - foreach (Page *p, task.pages) - p->deleteLater(); - - delete task.document; - - return true; -} - -void PageRenderThread::onDocPageNormalImageTaskFinished(DocPageNormalImageTask task, QPixmap pixmap) -{ - if (DocSheet::existSheet(task.sheet)) { - task.page->handleRenderFinished(task.pixmapId, pixmap); - } -} - -void PageRenderThread::onDocPageThumbnailTask(DocPageThumbnailTask task, QPixmap pixmap) -{ - if (DocSheet::existSheet(task.sheet)) { - task.model->handleRenderThumbnail(task.index, pixmap); - } -} - -void PageRenderThread::onDocOpenTask(DocOpenTask task, Document::Error error, Document *document, QList pages) -{ - if (DocSheet::existSheet(task.sheet)) { - task.renderer->handleOpened(error, document, pages); - } -} - -void PageRenderThread::destroyForever() -{ - quitForever = true; - - if (nullptr != pageRenderThread) { - delete pageRenderThread; - pageRenderThread = nullptr; - } -} - -PageRenderThread *PageRenderThread::instance() -{ - if (quitForever) - return nullptr; - - if (nullptr == pageRenderThread) { - pageRenderThread = new PageRenderThread; - } - - return pageRenderThread; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.h deleted file mode 100644 index b71828effa..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pagerenderthread.h +++ /dev/null @@ -1,167 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PAGERENDERTHREAD_H -#define PAGERENDERTHREAD_H - -#include "preview_plugin_global.h" - -#include "model.h" - -#include -#include -#include -#include -#include - -namespace plugin_filepreview { -class DocSheet; -class BrowserPage; -class SheetRenderer; -class SideBarImageViewModel; - -struct DocPageNormalImageTask -{ //正常取图 - DocSheet *sheet = nullptr; - BrowserPage *page = nullptr; - int pixmapId = 0; //任务艾迪 - QRect rect = QRect(); //整个大小 -}; - -struct DocPageSliceImageTask -{ //取切片 - DocSheet *sheet = nullptr; - BrowserPage *page = nullptr; - int pixmapId = 0; //任务艾迪 - QRect whole = QRect(); //整个大小 - QRect slice = QRect(); //切片大小 -}; - -struct DocPageThumbnailTask -{ //缩略图 - DocSheet *sheet = nullptr; - SideBarImageViewModel *model = nullptr; - int index = -1; -}; - -struct DocOpenTask -{ //打开文档 - DocSheet *sheet = nullptr; - QString password; - SheetRenderer *renderer = nullptr; -}; - -struct DocCloseTask -{ - Document *document = nullptr; - QList pages; -}; - -/** - * @brief The PageRenderThread class - * 执行加载图片和文字等耗时操作的线程,由于pdfium非常线程不安全,所有操作都在本线程中进行 - */ -class PageRenderThread : public QThread -{ - Q_OBJECT -public: - /** - * @brief clearImageTasks - * 清除需要读取图片的任务 - * @param sheet - * @param item 项指针 - * @param pixmapId 删除不同的pixmapId,-1为删除所有 - * @return 是否成功 - */ - static bool clearImageTasks(DocSheet *sheet, BrowserPage *page, int pixmapId = -1); - - /** - * @brief appendTask - * 添加任务到队列 - * @param task - */ - static void appendTask(DocPageNormalImageTask task); - - static void appendTask(DocPageSliceImageTask task); - - static void appendTask(DocPageThumbnailTask task); - - static void appendTask(DocOpenTask task); - - static void appendTask(DocCloseTask task); - - /** - * @brief destroyForever - * 销毁线程且不会再被创建 - */ - static void destroyForever(); - -private: - explicit PageRenderThread(QObject *parent = nullptr); - - ~PageRenderThread(); - - void run(); - -private: - bool hasNextTask(); - - bool popNextDocPageNormalImageTask(DocPageNormalImageTask &task); - - bool popNextDocPageThumbnailTask(DocPageThumbnailTask &task); - - bool popNextDocOpenTask(DocOpenTask &task); - - bool popNextDocCloseTask(DocCloseTask &task); - -private: - bool execNextDocPageNormalImageTask(); - - bool execNextDocPageThumbnailTask(); - - bool execNextDocOpenTask(); - - bool execNextDocCloseTask(); - -signals: - void sigDocPageNormalImageTaskFinished(DocPageNormalImageTask, QPixmap); - - void sigDocPageThumbnailTaskFinished(DocPageThumbnailTask, QPixmap); - - void sigDocOpenTask(DocOpenTask, Document::Error, Document *, QList); - -private slots: - void onDocPageNormalImageTaskFinished(DocPageNormalImageTask task, QPixmap pixmap); - - void onDocPageThumbnailTask(DocPageThumbnailTask task, QPixmap pixmap); - - void onDocOpenTask(DocOpenTask task, Document::Error error, Document *document, QList pages); - -private: - static PageRenderThread *instance(); - -private: - QMutex pageNormalImageMutex; - QList pageNormalImageTasks; - - QMutex pageSliceImageMutex; - QList pageSliceImageTasks; - - QMutex pageThumbnailMutex; - QList pageThumbnailTasks; - - QMutex openMutex; - QList openTasks; - - QMutex closeMutex; - QList closeTasks; - - bool quitDoc { false }; - - static bool quitForever; - - static PageRenderThread *pageRenderThread; -}; -} -#endif // PAGERENDERTHREAD_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.cpp deleted file mode 100644 index 68417e7299..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "pdfmodel.h" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -using namespace plugin_filepreview; -#define LOCK_DOCUMENT QMutexLocker docMutexLocker(docMutex); - -PDFPage::PDFPage(QMutex *mutex, DPdfPage *page) - : docMutex(mutex), pdfPage(page) -{ -} - -PDFPage::~PDFPage() -{ -} - -QSizeF PDFPage::sizeF() const -{ - return pdfPage->sizeF(); -} - -QImage PDFPage::render(int width, int height, const QRect &slice) const -{ - LOCK_DOCUMENT - - QRect ratioRect = slice.isValid() ? QRect(slice.x(), slice.y(), slice.width(), slice.height()) : QRect(); - - return pdfPage->image(width, height, ratioRect); -} - -PDFDocument::PDFDocument(DPdfDoc *document) - : pdfDocument(document) -{ - docMutex = new QMutex; - - QScreen *srn = QApplication::screens().value(0); - if (nullptr != srn) { - docXRes = srn->physicalDotsPerInchX(); - docYRes = srn->physicalDotsPerInchY(); - } -} - -PDFDocument::~PDFDocument() -{ - //! 需要确保pages先被析构完成 - - docMutex->lock(); - - delete pdfDocument; - - pdfDocument = nullptr; - - docMutex->unlock(); - - delete docMutex; -} - -int PDFDocument::pageCount() const -{ - return pdfDocument->pageCount(); -} - -Page *PDFDocument::page(int index) const -{ - if (DPdfPage *page = pdfDocument->page(index, docXRes, docYRes)) { - - if (page->isValid()) - return new PDFPage(docMutex, page); - } - - return nullptr; -} - -PDFDocument *PDFDocument::loadDocument(const QString &filePath, const QString &password, Document::Error &error) -{ - DPdfDoc *document = new DPdfDoc(filePath, password); - - if (document->status() == DPdfDoc::SUCCESS) { - error = Document::kNoError; - return new PDFDocument(document); - } else if (document->status() == DPdfDoc::PASSWORD_ERROR) { - if (password.isEmpty()) - error = Document::kNeedPassword; - else - error = Document::kWrongPassword; - } else - error = Document::kFileError; - - delete document; - - return nullptr; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.h deleted file mode 100644 index b9a5121f13..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfmodel.h +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PDFMODEL_H -#define PDFMODEL_H - -#include "preview_plugin_global.h" - -#include "model.h" - -#include - -class DPdfDoc; -class DPdfPage; -class DPdfAnnot; - -namespace plugin_filepreview { - -class PDFPage : public Page -{ - friend class PDFDocument; - -public: - ~PDFPage() override; - - /** - * @brief 获取大小 会根据当前设备的像素密度保持每一页在不同设备上大小相同. - * @return - */ - QSizeF sizeF() const override; - - QImage render(int width, int height, const QRect &slice = QRect()) const override; - -private: - explicit PDFPage(QMutex *mutex, DPdfPage *page); - - QMutex *docMutex { nullptr }; - - DPdfPage *pdfPage { nullptr }; -}; - -class PDFDocument : public Document -{ -public: - explicit PDFDocument(DPdfDoc *document); - - virtual ~PDFDocument() override; - - int pageCount() const override; - - Page *page(int index) const override; - - static PDFDocument *loadDocument(const QString &filePath, const QString &password, Document::Error &error); - -private: - DPdfDoc *pdfDocument { nullptr }; - - QMutex *docMutex { nullptr }; - - qreal docXRes = 72; - - qreal docYRes = 72; -}; -} -#endif // PDFMODEL_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.cpp deleted file mode 100644 index 1bcb02099a..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include - -#include "pdfpreview.h" -#include "pdfwidget.h" -#include "global.h" - -#include -#include -#include - -using namespace plugin_filepreview; -PDFPreview::PDFPreview(QObject *parent) - : AbstractBasePreview(parent) -{ -} - -PDFPreview::~PDFPreview() -{ - if (pdfWidget) { - pdfWidget->deleteLater(); - } -} - -bool PDFPreview::setFileUrl(const QUrl &url) -{ - if (selectFileUrl == url) - return true; - - if (!dfmbase::FileUtils::isLocalFile(url)) - return false; - - if (pdfWidget == nullptr) - pdfWidget = new PdfWidget(); - pdfWidget->setFixedSize(kPdfWidgetWidth, kPdfWidgetHeight); - pdfWidget->addFileAsync(url.toLocalFile()); - pageTitle = QFileInfo(url.toLocalFile()).fileName(); - - Q_EMIT titleChanged(); - - return true; -} - -QUrl PDFPreview::fileUrl() const -{ - return selectFileUrl; -} - -QWidget *PDFPreview::contentWidget() const -{ - return pdfWidget; -} - -QString PDFPreview::title() const -{ - return pageTitle; -} - -bool PDFPreview::showStatusBarSeparator() const -{ - return false; -} - -void PDFPreview::initialize(QWidget *window, QWidget *statusBar) -{ - Q_UNUSED(statusBar); - setMainWidget(window); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.h deleted file mode 100644 index 9deba1b75a..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreview.h +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PDFPREVIEW_H -#define PDFPREVIEW_H - -#include "preview_plugin_global.h" -#include - -#include -#include - -namespace plugin_filepreview { -class PdfWidget; - -class PDFPreview : public DFMBASE_NAMESPACE::AbstractBasePreview -{ - Q_OBJECT -public: - explicit PDFPreview(QObject *parent = nullptr); - ~PDFPreview() override; - - bool setFileUrl(const QUrl &url) override; - QUrl fileUrl() const override; - - QWidget *contentWidget() const override; - - QString title() const override; - bool showStatusBarSeparator() const override; - - void initialize(QWidget *window, QWidget *statusBar) override; - -private: - QUrl selectFileUrl; - QString pageTitle; - - QPointer pdfWidget; -}; -} -#endif // PDFPREVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.cpp deleted file mode 100644 index b7de85651b..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "pdfpreviewplugin.h" - -DFMBASE_USE_NAMESPACE -namespace plugin_filepreview { -DFM_LOG_REISGER_CATEGORY(PREVIEW_NAMESPACE) -AbstractBasePreview *PDFPreviewPlugin::create(const QString &key) -{ - Q_UNUSED(key) - - return new PDFPreview(); -} -} // namespace plugin_filepreview diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.h deleted file mode 100644 index 075d16b996..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfpreviewplugin.h +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PDFPREVIEWPLUGIN_H -#define PDFPREVIEWPLUGIN_H -#include "preview_plugin_global.h" -#include - -#include "pdfpreview.h" - -namespace plugin_filepreview { -class PDFPreviewPlugin : public DFMBASE_NAMESPACE::AbstractFilePreviewPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID FilePreviewFactoryInterface_iid FILE "dde-pdf-preview-plugin.json") - -public: - DFMBASE_NAMESPACE::AbstractBasePreview *create(const QString &key) Q_DECL_OVERRIDE; -}; -} -#endif // PDFPREVIEWPLUGIN_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.cpp deleted file mode 100644 index 41efd45ac3..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.cpp +++ /dev/null @@ -1,164 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "pdfwidget.h" -#include "docsheet.h" -#include "pagerenderthread.h" - -#include -#include -#include -#include - -using namespace plugin_filepreview; -PdfWidget::PdfWidget(QWidget *parent) - : QWidget(parent) -{ - stackedLayout = new QStackedLayout; - - QHBoxLayout *mainLayout = new QHBoxLayout(this); - - mainLayout->addItem(stackedLayout); - mainLayout->setMargin(0); - mainLayout->addSpacing(30); - - this->setLayout(mainLayout); -} - -PdfWidget::~PdfWidget() -{ - PageRenderThread::destroyForever(); - for (DocSheet *sheet : sheetMap.getSheets()) - closeSheet(sheet); -} - -void PdfWidget::addFileAsync(const QString &filePath) -{ - //! 判断在打开的文档中是否有filePath,如果有则切到相应的sheet,反之执行打开操作 - int index = sheetMap.indexOfFilePath(filePath); - if (index >= 0) { - leaveSheet(static_cast(stackedLayout->currentWidget())); - DocSheet *sheet = DocSheet::getSheetByFilePath(filePath); - stackedLayout->addWidget(sheet); - stackedLayout->setCurrentWidget(sheet); - this->activateWindow(); - return; - } - - FileType fType = fileType(filePath); - - if (kPDF != fType) { - return; - } - - DocSheet *sheet = new DocSheet(fType, filePath, this); - - leaveSheet(static_cast(stackedLayout->currentWidget())); - - connect(sheet, &DocSheet::sigFileOpened, this, &PdfWidget::onOpened); - - addSheet(sheet); - - this->activateWindow(); - - sheet->openFileAsync(""); -} - -void PdfWidget::addSheet(DocSheet *sheet) -{ - sheetMap.insertSheet(sheet); - enterSheet(sheet); -} - -void PdfWidget::enterSheet(DocSheet *sheet) -{ - if (nullptr == sheet) - return; - - sheet->setParent(this); - - stackedLayout->addWidget(sheet); - - stackedLayout->setCurrentWidget(sheet); -} - -void PdfWidget::leaveSheet(DocSheet *sheet) -{ - if (nullptr == sheet) - return; - - stackedLayout->removeWidget(sheet); -} - -bool PdfWidget::closeSheet(DocSheet *sheet) -{ - if (nullptr == sheet) - return false; - - if (!DocSheet::existSheet(sheet)) - return false; - - stackedLayout->removeWidget(sheet); - - sheetMap.removeSheet(sheet); - - delete sheet; - - return true; -} - -bool PdfWidget::closeAllSheets() -{ - const auto &sheets = sheetMap.getSheets(); - return std::accumulate(sheets.begin(), sheets.end(), - true, [this](bool result, DocSheet *sheet) { - return result = closeSheet(sheet); - }); -} - -void PdfWidget::onOpened(DocSheet *sheet, Document::Error error) -{ - if (nullptr == sheet) - return; - - if (Document::kFileError == error || Document::kFileDamaged == error || Document::kConvertFailed == error) { - stackedLayout->removeWidget(sheet); - - sheet->deleteLater(); - - if (Document::kFileError == error) - fmWarning() << "PDF Preview: Open failed!"; - else if (Document::kFileDamaged == error) - fmWarning() << "PDF Preview: Please check if the file is damaged!"; - else if (Document::kConvertFailed == error) - fmWarning() << "PDF Preview: Conversion failed, please check if the file is damaged!"; - } -} - -void recordSheetPath::insertSheet(DocSheet *sheet) -{ - docSheetMap.insert(sheet, sheet->filePath()); -} - -int recordSheetPath::indexOfFilePath(const QString &filePath) -{ - int index = 0; - for (QString &path : docSheetMap.values()) { - if (filePath == path) - return index; - index++; - } - - return -1; -} - -void recordSheetPath::removeSheet(DocSheet *sheet) -{ - docSheetMap.remove(sheet); -} - -QList recordSheetPath::getSheets() -{ - return docSheetMap.keys(); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.h deleted file mode 100644 index a3c17df4de..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/pdfwidget.h +++ /dev/null @@ -1,96 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef WIDGET_H -#define WIDGET_H - -#include "preview_plugin_global.h" - -#include "model.h" - -#include -#include -#include - -namespace plugin_filepreview { -class DocSheet; - -struct recordSheetPath -{ - recordSheetPath() {} - - void insertSheet(DocSheet *sheet); - - int indexOfFilePath(const QString &filePath); - - void removeSheet(DocSheet *sheet); - - QList getSheets(); - - QMap docSheetMap; -}; - -class PdfWidget : public QWidget -{ - Q_OBJECT - -public: - explicit PdfWidget(QWidget *parent = nullptr); - ~PdfWidget(); - - /** - * @brief 根据路径增加一个sheet页后异步进行读取,成功保留,不成功删除,如果路径已经存在则切换到对应的页面 - * @param filePath 需要添加的文档路径 - */ - void addFileAsync(const QString &filePath); - - /** - * @brief addSheet直接添加一个文档页 - * @param sheet 添加sheet - */ - void addSheet(DocSheet *sheet); - - /** - * @brief enterSheet 进入一个文档页,会进行信号父窗口等重新绑定 - * @param sheet 添加sheet - */ - void enterSheet(DocSheet *sheet); - - /** - * @brief leaveSheet 离开一个文档页,会进行信号父窗口等解绑 - * @param sheet 删除sheet - */ - void leaveSheet(DocSheet *sheet); - - /** - * @brief closeSheet 关闭sheet,成功返回true,失败或者取消返回false。 - * @param sheet (关闭成功后会被删除) - * @param needToBeSaved - * @return 关闭是否成功 - */ - bool closeSheet(DocSheet *sheet); - - /** - * @brief closeAllSheets 进行关闭,会逐个关闭每个sheet,全部关闭完成返回成功 - * @param needToBeSaved 是否需要提示保存 - * @return 关闭是否成功 - */ - bool closeAllSheets(); - -public slots: - - /** - * @brief 文档被打开后进行处理 - * @param sheet 被打开的文档 - * @param result 打开结果 - */ - void onOpened(DocSheet *sheet, Document::Error error); - -private: - QStackedLayout *stackedLayout { nullptr }; - - recordSheetPath sheetMap; -}; -} -#endif // WIDGET_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.cpp deleted file mode 100644 index 5d8643d2a1..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.cpp +++ /dev/null @@ -1,463 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "sheetbrowser.h" -#include "pdfmodel.h" -#include "browserpage.h" -#include "sheetrenderer.h" -#include "docsheet.h" - -#include - -#include -#include -#include -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -SheetBrowser::SheetBrowser(DocSheet *parent) - : DGraphicsView(parent), docSheet(parent) -{ - setMouseTracking(true); - - setScene(new QGraphicsScene(this)); - - setFrameShape(QFrame::NoFrame); - - setAttribute(Qt::WA_TranslucentBackground); - - setBackgroundBrush(QBrush(Dtk::Gui::DGuiApplicationHelper::instance()->applicationPalette().itemBackground().color())); - - setAttribute(Qt::WA_AcceptTouchEvents); - - //! 捏合缩放 - grabGesture(Qt::PinchGesture); - - scrollerPage = QScroller::scroller(this); - - QScrollBar *vScrollBar = verticalScrollBar(); - QScrollBar *hScrollBar = horizontalScrollBar(); - - connect(vScrollBar, &QScrollBar::valueChanged, this, &SheetBrowser::onVerticalScrollBarValueChanged); - - connect(vScrollBar, &QScrollBar::sliderPressed, this, &SheetBrowser::onRemoveDocSlideGesture); - - connect(hScrollBar, &QScrollBar::sliderPressed, this, &SheetBrowser::onRemoveDocSlideGesture); - - vScrollBar->setProperty("_d_slider_spaceUp", 8); - vScrollBar->setProperty("_d_slider_spaceDown", 8); - vScrollBar->setAccessibleName("verticalScrollBar"); - hScrollBar->setProperty("_d_slider_spaceLeft", 8); - hScrollBar->setProperty("_d_slider_spaceRight", 8); - hScrollBar->setAccessibleName("horizontalScrollBar"); -} - -SheetBrowser::~SheetBrowser() -{ - qDeleteAll(browserPageList); -} - -void SheetBrowser::onVerticalScrollBarValueChanged(int) -{ - beginViewportChange(); -} - -void SheetBrowser::beginViewportChange() -{ - if (nullptr == viewportChangeTimer) { - viewportChangeTimer = new QTimer(this); - connect(viewportChangeTimer, &QTimer::timeout, this, &SheetBrowser::onViewportChanged); - viewportChangeTimer->setSingleShot(true); - } - - if (viewportChangeTimer->isActive()) - viewportChangeTimer->stop(); - - viewportChangeTimer->start(100); -} - -void SheetBrowser::onViewportChanged() -{ - int fromIndex = 0; - int toIndex = 0; - currentIndexRange(fromIndex, toIndex); - - foreach (BrowserPage *item, browserPageList) { - //! 上下多2个浮动 - if (item->itemIndex() < fromIndex - 2 || item->itemIndex() > toIndex + 2) { - item->clearPixmap(); - } - } -} - -void SheetBrowser::currentIndexRange(int &fromIndex, int &toIndex) -{ - fromIndex = -1; - toIndex = -1; - - int value = verticalScrollBar()->value(); - - for (int i = 0; i < browserPageList.count(); ++i) { - int y = 0; - - switch (docSheet->operation().rotation) { - case kRotateBy0: - case kRotateBy90: - y = static_cast(browserPageList[i]->y()); - break; - case kRotateBy180: - y = static_cast(browserPageList[i]->y() - browserPageList[i]->boundingRect().height()); - break; - case kRotateBy270: - y = static_cast(browserPageList[i]->y() - browserPageList[i]->boundingRect().width()); - break; - default: - break; - } - - if (-1 == fromIndex && y + browserPageList[i]->rect().height() >= value) { - fromIndex = i; - } - - if (-1 == toIndex && y >= (value + this->height())) { - toIndex = i - 1; - break; - } - - if (i == (browserPageList.count() - 1)) { - toIndex = i; - } - } -} - -void SheetBrowser::onRemoveDocSlideGesture() -{ - scrollerPage->stop(); -} - -void SheetBrowser::onInit() -{ - if (1 != jumpPageNumber) { - setCurrentPage(jumpPageNumber); - jumpPageNumber = 1; - } - - onViewportChanged(); -} - -void SheetBrowser::deform(SheetOperation &operation) -{ - lastScaleFactor = operation.scaleFactor; - - int page = operation.currentPage; - //! 进行render 并算出最宽的一行 - double maxWidth = 0; //! 最宽的一行 - double maxHeight = 0; //! 总高度 - int space = 5; //! 页之间间隙 - - for (int i = 0; i < browserPageList.count(); ++i) { - if (i % 2 == 1) - continue; - - int j = i + 1; - - browserPageList.at(i)->render(operation.scaleFactor, operation.rotation, true); - - if (j < browserPageList.count()) - browserPageList.at(j)->render(operation.scaleFactor, operation.rotation, true); - - if (SinglePageMode == operation.layoutMode) { - if (browserPageList.at(i)->rect().width() > maxWidth) - maxWidth = static_cast(browserPageList.at(i)->rect().width()); - - if (j < browserPageList.count()) { - if (browserPageList.at(j)->rect().width() > maxWidth) - maxWidth = static_cast(browserPageList.at(j)->rect().width()); - } - - } else if (TwoPagesMode == operation.layoutMode) { - if (j < browserPageList.count()) { - if (static_cast(browserPageList.at(i)->rect().width() + browserPageList.at(i + 1)->rect().width()) > maxWidth) - maxWidth = static_cast(browserPageList.at(i)->rect().width() + browserPageList.at(i + 1)->rect().width()); - } else { - if (static_cast(browserPageList.at(i)->rect().width()) * 2 > maxWidth) { - maxWidth = static_cast(browserPageList.at(i)->rect().width()) * 2; - } - } - } - } - - if (SinglePageMode == operation.layoutMode) { - for (int i = 0; i < browserPageList.count(); ++i) { - int x = static_cast(maxWidth - browserPageList.at(i)->rect().width()) / 2; - if (x < 0) - x = 0; - - if (kRotateBy0 == operation.rotation) - browserPageList.at(i)->setPos(x, maxHeight); - else if (kRotateBy90 == operation.rotation) - browserPageList.at(i)->setPos(x + browserPageList.at(i)->boundingRect().height(), maxHeight); - else if (kRotateBy180 == operation.rotation) - browserPageList.at(i)->setPos(x + browserPageList.at(i)->boundingRect().width(), maxHeight + browserPageList.at(i)->boundingRect().height()); - else if (kRotateBy270 == operation.rotation) - browserPageList.at(i)->setPos(x, maxHeight + browserPageList.at(i)->boundingRect().width()); - - maxHeight += browserPageList.at(i)->rect().height() + space; - } - } else if (TwoPagesMode == operation.layoutMode) { - for (int i = 0; i < browserPageList.count(); ++i) { - if (i % 2 == 1) - continue; - - int x = static_cast(maxWidth / 2 - browserPageList.at(i)->rect().width()); - - if (kRotateBy0 == operation.rotation) { - browserPageList.at(i)->setPos(x, maxHeight); - if (browserPageList.count() > i + 1) { - browserPageList.at(i + 1)->setPos(x + space + browserPageList.at(i)->rect().width(), maxHeight); - } - } else if (kRotateBy90 == operation.rotation) { - browserPageList.at(i)->setPos(x + browserPageList.at(i)->boundingRect().height(), maxHeight); - if (browserPageList.count() > i + 1) { - browserPageList.at(i + 1)->setPos(x + space + browserPageList.at(i)->rect().width() + browserPageList.at(i + 1)->boundingRect().height(), maxHeight); - } - } else if (kRotateBy180 == operation.rotation) { - browserPageList.at(i)->setPos(x + browserPageList.at(i)->boundingRect().width(), maxHeight + browserPageList.at(i)->boundingRect().height()); - if (browserPageList.count() > i + 1) { - browserPageList.at(i + 1)->setPos(x + space + browserPageList.at(i)->rect().width() + browserPageList.at(i + 1)->boundingRect().width(), maxHeight + browserPageList.at(i + 1)->boundingRect().height()); - } - } else if (kRotateBy270 == operation.rotation) { - browserPageList.at(i)->setPos(x, maxHeight + browserPageList.at(i)->boundingRect().width()); - if (browserPageList.count() > i + 1) { - browserPageList.at(i + 1)->setPos(x + space + browserPageList.at(i)->rect().width(), maxHeight + browserPageList.at(i + 1)->boundingRect().width()); - } - } - - if (browserPageList.count() > i + 1) - maxHeight += qMax(browserPageList.at(i)->rect().height(), browserPageList.at(i + 1)->rect().height()) + space; - else - maxHeight += browserPageList.at(i)->rect().height() + space; - } - maxWidth += space; - } - - setSceneRect(0, 0, maxWidth, maxHeight); - - if (page > 0 && page <= browserPageList.count()) { - verticalScrollBar()->setValue(static_cast(browserPageList[page - 1]->getTopLeftPos().y())); - horizontalScrollBar()->setValue(static_cast(browserPageList[page - 1]->getTopLeftPos().x())); - } - - lastrotation = operation.rotation; - - beginViewportChange(); -} - -bool SheetBrowser::hasLoaded() -{ - return hasLoadedPage; -} - -void SheetBrowser::resizeEvent(QResizeEvent *event) -{ - QGraphicsView::resizeEvent(event); -} - -void SheetBrowser::focusOutEvent(QFocusEvent *event) -{ - DGraphicsView::focusOutEvent(event); -} - -void SheetBrowser::timerEvent(QTimerEvent *event) -{ - QGraphicsView::timerEvent(event); - if (event->timerId() == repeatTimer.timerId()) { - repeatTimer.stop(); - canTouchScreen = false; - } -} - -void SheetBrowser::wheelEvent(QWheelEvent *e) -{ - QPointF centerPoint = rect().center(); - BrowserPage *page = getBrowserPageForPoint(centerPoint); - if (page) - emit sigPageChanged(page->itemIndex() + 1); - - QGraphicsView::wheelEvent(e); -} - -int SheetBrowser::allPages() -{ - return browserPageList.count(); -} - -int SheetBrowser::currentPage() -{ - if (currentPageIndex >= 1) - return currentPageIndex; - - return currentScrollValueForPage(); -} - -int SheetBrowser::currentScrollValueForPage() -{ - int value = verticalScrollBar()->value(); - - int index = 0; - - for (int i = 0; i < browserPageList.count(); ++i) { - int y = 0; - - if (kRotateBy0 == docSheet->operation().rotation) { - y = static_cast(browserPageList[i]->y()); - } else if (kRotateBy90 == docSheet->operation().rotation) { - y = static_cast(browserPageList[i]->y()); - } else if (kRotateBy180 == docSheet->operation().rotation) { - y = static_cast(browserPageList[i]->y() - browserPageList[i]->boundingRect().height()); - } else if (kRotateBy270 == docSheet->operation().rotation) { - y = static_cast(browserPageList[i]->y() - browserPageList[i]->boundingRect().width()); - } - - if (y + browserPageList[i]->rect().height() >= value) { - index = i; - break; - } - } - - return index + 1; -} - -void SheetBrowser::setCurrentPage(int page) -{ - if (page < 1 || page > allPages()) - return; - - needNotifyCurPageChanged = false; - - if (kRotateBy0 == docSheet->operation().rotation) { - horizontalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().x())); - verticalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().y())); - } else if (kRotateBy90 == docSheet->operation().rotation) { - horizontalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().x() - browserPageList.at(page - 1)->boundingRect().height())); - verticalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().y())); - } else if (kRotateBy180 == docSheet->operation().rotation) { - horizontalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().x() - browserPageList.at(page - 1)->boundingRect().width())); - verticalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().y() - browserPageList.at(page - 1)->boundingRect().height())); - } else if (kRotateBy270 == docSheet->operation().rotation) { - horizontalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().x())); - verticalScrollBar()->setValue(static_cast(browserPageList.at(page - 1)->pos().y() - browserPageList.at(page - 1)->boundingRect().width())); - } - - needNotifyCurPageChanged = true; -} - -bool SheetBrowser::getExistImage(int index, QImage &image, int width, int height) -{ - if (browserPageList.count() <= index) - return false; - - image = browserPageList.at(index)->getCurrentImage(width, height); - - return !image.isNull(); -} - -BrowserPage *SheetBrowser::getBrowserPageForPoint(QPointF &viewPoint) -{ - BrowserPage *item = nullptr; - - QPoint ponit = viewPoint.toPoint(); - - const QList &itemlst = this->items(ponit); - - for (QGraphicsItem *itemIter : itemlst) { - item = dynamic_cast(itemIter); - - if (item != nullptr) { - const QPointF &itemPoint = item->mapFromScene(mapToScene(ponit)); - - if (item->contains(itemPoint)) { - viewPoint = itemPoint; - return item; - } - } - } - - return nullptr; -} - -qreal SheetBrowser::maxWidth() -{ - return maxPageWidth; -} - -qreal SheetBrowser::maxHeight() -{ - return maxPageHeight; -} - -void SheetBrowser::showEvent(QShowEvent *event) -{ - QTimer::singleShot(100, this, SLOT(onInit())); - - QGraphicsView::showEvent(event); -} - -QList SheetBrowser::pages() -{ - return browserPageList; -} - -void SheetBrowser::init(SheetOperation &operation) -{ - int pageCount = docSheet->pageCount(); - - for (int i = 0; i < pageCount; ++i) { - BrowserPage *item = new BrowserPage(this, i, docSheet); - - browserPageList.append(item); - - if (docSheet->renderer()->getPageSize(i).width() > maxPageWidth) - maxPageWidth = docSheet->renderer()->getPageSize(i).width(); - - if (docSheet->renderer()->getPageSize(i).height() > maxPageHeight) - maxPageHeight = docSheet->renderer()->getPageSize(i).height(); - - scene()->addItem(item); - } - - deform(operation); - - jumpPageNumber = operation.currentPage; - - hasLoadedPage = true; -} - -void SheetBrowser::mousePressEvent(QMouseEvent *e) -{ - if (e->button() == Qt::LeftButton) { - isPressed = true; - mouseStartPos = e->globalPos(); - QWidget *pWidget = getMainDialog(); - if (pWidget) - windowStartPos = pWidget->frameGeometry().topLeft(); - } -} - -void SheetBrowser::mouseMoveEvent(QMouseEvent *e) -{ - if (isPressed) { - QPoint mouseMoveDistance = e->globalPos() - mouseStartPos; - QWidget *pWidget = getMainDialog(); - if (pWidget) - pWidget->move(windowStartPos + mouseMoveDistance); - } -} - -void SheetBrowser::mouseReleaseEvent(QMouseEvent *e) -{ - if (e->button() == Qt::LeftButton) - isPressed = false; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.h deleted file mode 100644 index 8ec1a156ac..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetbrowser.h +++ /dev/null @@ -1,257 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef SHEETBROWSER_H -#define SHEETBROWSER_H - -#include "preview_plugin_global.h" - -#include - -#include -#include - -class QScroller; - -namespace plugin_filepreview { -class SheetOperation; -class BrowserPage; -class DocSheet; -class RenderViewportThread; -class BrowserMagniFier; -class FindWidget; - -class SheetBrowser : public DTK_WIDGET_NAMESPACE::DGraphicsView -{ - Q_OBJECT -public: - explicit SheetBrowser(DocSheet *parent = nullptr); - - ~SheetBrowser() override; - - /** - * @brief deform - * 渲染当前视图中的页 - * @param operation 渲染参数包括,大小,单双页,旋转,缩放比例 - */ - void deform(SheetOperation &operation); - - /** - * @brief hasLoaded - * 文档是否已加载过 - * @return - */ - bool hasLoaded(); - - /** - * @brief allPages - * 当前文档页码总数 - * @return - */ - int allPages(); - - /** - * @brief currentPage - * 当前页页码(从1开始) - * @return - */ - int currentPage(); - - /** - * @brief setCurrentPage - * 页码跳转 - * @param page 跳转的页码(base 1) - */ - void setCurrentPage(int page); - - /** - * @brief getExistImage - * 获取文档页图片 - * @param index 页码编号 - * @param image 页码图片 - * @param width 图片宽度 - * @param height 图片高度 - * @param mode 图片状态 - * @param bSrc - * @return - */ - bool getExistImage(int index, QImage &image, int width, int height); - - /** - * @brief magnifierOpened - * 是否开启了放大镜 - * @return true:开启,false:未开启 - */ - bool magnifierOpened(); - - /** - * @brief maxWidth - * 最大一页的宽度 - * @return 宽度值 - */ - qreal maxWidth(); - - /** - * @brief maxHeight - *最大一页的高度 - * @return 高度值 - */ - qreal maxHeight(); - - /** - * @brief beginViewportChange - * 延时进行视图更新 过滤高频率调用 - */ - void beginViewportChange(); - - /** - * @brief pages - * @return - */ - QList pages(); - - /** - * @brief init - * 按历史记录初始化,只可调用一次 - * @param operation 操作记录 - */ - void init(SheetOperation &operation); - -signals: - void sigPageChanged(int page); - - void sigNeedPageFirst(); - - void sigNeedPagePrev(); - - void sigNeedPageNext(); - - void sigNeedPageLast(); - -protected: - /** - * @brief showEvent - * 第一次显示之后跳转到初始页码 - * @param event - */ - void showEvent(QShowEvent *event) override; - - /** - * @brief resizeEvent - * 当前文档视图大小变化事件 - * @param event - */ - void resizeEvent(QResizeEvent *event) override; - - /** - * @brief focusOutEvent - * 失去焦点处理 - * @param event - */ - void focusOutEvent(QFocusEvent *event) override; - - /** - * @brief 计时器事件 - * @param event - */ - void timerEvent(QTimerEvent *event) override; - - /** - * @brief wheelEvent 鼠标滚轮事件 - * @param e - */ - void wheelEvent(QWheelEvent *e) override; - - /** - * @brief 根据鼠标点击位置判断在哪一页 - * @param viewPoint 鼠标点击位置 - * @return 鼠标点击的页对象 - */ - BrowserPage *getBrowserPageForPoint(QPointF &viewPoint); - -protected: - // 实现拖拽移动 - void mousePressEvent(QMouseEvent *e) override; - void mouseMoveEvent(QMouseEvent *e) override; - void mouseReleaseEvent(QMouseEvent *e) override; - -private: - // 实现拖拽移动 - bool isPressed { false }; - QPoint mouseStartPos; - QPoint windowStartPos; - -private slots: - /** - * @brief onInit - * 初始化响应,跳转到初始化页 - */ - void onInit(); - - /** - * @brief onVerticalScrollBarValueChanged - * 纵向滚动条数值改变槽函数,并通知左侧栏页变化 - */ - void onVerticalScrollBarValueChanged(int value); - - /** - * @brief onViewportChanged - * 当前视图区域改变,渲染文档 - */ - void onViewportChanged(); - - /** - * @brief onRemoveDocSlideGesture - * 移除文档触摸屏滑动事件 - */ - void onRemoveDocSlideGesture(); - -private: - /** - * @brief currentIndexRange - * 当前显示的页数范围 - * @param fromIndex 当前显示的起始页码索引 - * @param toIndex 当前显示的结束页码索引 - * @return - */ - void currentIndexRange(int &fromIndex, int &toIndex); - - /** - * @brief currentScrollValueForPage - * 纵向滚动条值变化,得到滚动条当前位置所在文档页的编号 - * @return 文档页的编号(页码从1开始) - */ - int currentScrollValueForPage(); - -private: - DocSheet *docSheet { nullptr }; - - BrowserPage *lastFindBrowserPage { nullptr }; - QTimer *viewportChangeTimer { nullptr }; //用于延时进行视图区域更新 防止高频率调用 - - QString filePassword; - QList browserPageList {}; - - QPointF selectPressedPos; // 鼠标按压的起始位置 - QPointF selectStartPos; // 选取文字的开始位置 - QPointF selectEndPos; // 选取文字的结束位置(鼠标释放的最后位置) - - double lastScaleFactor { 0 }; - qreal maxPageWidth { 0 }; //最大一页的宽度 - qreal maxPageHeight { 0 }; //最大一页的高度 - bool changSearchFlag { false }; - bool hasLoadedPage { false }; //是否已经加载过每页的信息 - int jumpPageNumber { 1 }; //用于刚显示跳转的页数 - - int currentPageIndex { 0 }; - int lastrotation { 0 }; - bool needNotifyCurPageChanged { true }; - - QBasicTimer repeatTimer; - bool startPinch { false }; //开始收缩 - bool canTouchScreen { false }; - QScroller *scrollerPage { nullptr }; -}; -} -#endif // SHEETBROWSER_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.cpp deleted file mode 100644 index 9365a44816..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "sheetrenderer.h" -#include "pagerenderthread.h" - -#include -#include - -using namespace plugin_filepreview; -SheetRenderer::SheetRenderer(DocSheet *parent) - : QObject(parent), docSheet(parent) -{ -} - -SheetRenderer::~SheetRenderer() -{ - DocCloseTask task; - - task.document = documentObj; - - task.pages = pageList; - - PageRenderThread::appendTask(task); -} - -bool SheetRenderer::openFileExec(const QString &password) -{ - QEventLoop loop; - - connect(this, &SheetRenderer::sigOpened, &loop, &QEventLoop::quit); - - openFileAsync(password); - - loop.exec(); - - return Document::kNoError == docError; -} - -void SheetRenderer::openFileAsync(const QString &password) -{ - DocOpenTask task; - - task.sheet = docSheet; - - task.password = password; - - task.renderer = this; - - PageRenderThread::appendTask(task); -} - -bool SheetRenderer::opened() -{ - return documentObj != nullptr; -} - -int SheetRenderer::getPageCount() -{ - return pageList.count(); -} - -QImage SheetRenderer::getImage(int index, int width, int height, const QRect &slice) -{ - if (pageList.count() <= index) - return QImage(); - - QImage image = pageList.value(index)->render(width, height, slice); - - return image; -} - -QSizeF SheetRenderer::getPageSize(int index) const -{ - if (pageList.count() <= index) - return QSizeF(); - - return pageList.value(index)->sizeF(); -} - -void SheetRenderer::handleOpened(Document::Error error, Document *document, QList pages) -{ - docError = error; - - documentObj = document; - - pageList = pages; - - emit sigOpened(error); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.h deleted file mode 100644 index b5399c0a90..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetrenderer.h +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef SHEETRENDERER_H -#define SHEETRENDERER_H - -#include "preview_plugin_global.h" - -#include "docsheet.h" -#include "model.h" - -namespace plugin_filepreview { -/** - * @brief The SheetRenderer class - * 用于加载文档 - */ -class SheetRenderer : public QObject -{ - Q_OBJECT -public: - explicit SheetRenderer(DocSheet *parent); - - ~SheetRenderer(); - - /** - * @brief openFileExec - * 阻塞式打开文档 - * @param password - */ - bool openFileExec(const QString &password); - - /** - * @brief openFileAsync - * 异步式打开文档,完成后会发出sigFileOpened - * @param password 文档密码 - * @return - */ - void openFileAsync(const QString &password); - - /** - * @brief opened - * 是否已打开 - * @return - */ - bool opened(); - - /** - * @brief handleOpened - * 处理打开 - * @param result - * @param error - */ - void handleOpened(Document::Error error, Document *document, QList pages); - - /** - * @brief getPageCount - * 获取页数量 - * @return - */ - int getPageCount(); - - /** - * @brief getImage - * 获取图片 - * @param index 索引 - * @param width - * @param height - * @param slice - * @return - */ - QImage getImage(int index, int width, int height, const QRect &slice = QRect()); - - /** - * @brief 文档原始大小 - * param index 对应索引 - * @return - */ - QSizeF getPageSize(int index) const; - -signals: - /** - * @brief sigOpened - * 打开完成 - * @param error - */ - void sigOpened(Document::Error error); - -private: - DocSheet *docSheet { nullptr }; - Document::Error docError { Document::kNoError }; - bool pageLabelLoaded { false }; //是否已经加载page label - QMap docPageIndex {}; // 文档下标页码 - Document *documentObj { nullptr }; - QList pageList {}; -}; -} -#endif // SHEETRENDERER_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.cpp deleted file mode 100644 index 6bd46bc079..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "sheetsidebar.h" -#include "docsheet.h" -#include "thumbnailwidget.h" -#include "model.h" - -#include - -#include -#include -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -SheetSidebar::SheetSidebar(DocSheet *parent, PreviewWidgesFlags widgesFlag) - : QWidget(parent), docSheet(parent), widgetsFlag(widgesFlag) -{ - initWidget(); -} - -SheetSidebar::~SheetSidebar() -{ -} - -void SheetSidebar::initWidget() -{ - scaleRatio = 1.0; - oldVisible = false; - openDocOpenSuccess = false; - thumbnailWidget = nullptr; - - setFixedWidth(50); - QVBoxLayout *pVBoxLayout = new QVBoxLayout; - pVBoxLayout->setContentsMargins(0, 0, 0, 0); - pVBoxLayout->setSpacing(0); - this->setLayout(pVBoxLayout); - - stackLayout = new QStackedLayout; - QHBoxLayout *hLayout = new QHBoxLayout; - hLayout->setContentsMargins(15, 0, 15, 0); - - if (widgetsFlag.testFlag(PREVIEW_THUMBNAIL)) { - thumbnailWidget = new ThumbnailWidget(docSheet, this); - stackLayout->addWidget(thumbnailWidget); - } - - //! remove last spaceitem - QLayoutItem *item = hLayout->takeAt(hLayout->count() - 1); - if (item) delete item; - - pVBoxLayout->addLayout(stackLayout); - pVBoxLayout->addLayout(hLayout); - this->setVisible(false); -} - -void SheetSidebar::setCurrentPage(int page) -{ - if (thumbnailWidget) thumbnailWidget->handlePage(page - 1); -} - -void SheetSidebar::handleOpenSuccess() -{ - openDocOpenSuccess = true; - this->setVisible(docSheet->operation().sidebarVisible); - onHandleOpenSuccessDelay(); -} - -void SheetSidebar::onHandleOpenSuccessDelay() -{ - if (openDocOpenSuccess) { - QTimer::singleShot(100, this, SLOT(onHandWidgetDocOpenSuccess())); - } -} - -void SheetSidebar::onHandWidgetDocOpenSuccess() -{ - if (!this->isVisible()) - return; - - QWidget *curWidget = stackLayout->currentWidget(); - if (curWidget == thumbnailWidget) { - thumbnailWidget->handleOpenSuccess(); - } -} - -void SheetSidebar::resizeEvent(QResizeEvent *event) -{ - DWidget::resizeEvent(event); -} - -void SheetSidebar::showEvent(QShowEvent *event) -{ - DWidget::showEvent(event); - onHandleOpenSuccessDelay(); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.h deleted file mode 100644 index 9fb7a89d3d..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sheetsidebar.h +++ /dev/null @@ -1,93 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef SHEETSIDEBAR_H -#define SHEETSIDEBAR_H - -#include "preview_plugin_global.h" - -#include -#include - -namespace plugin_filepreview { -enum PreviewWidgesFlag { - PREVIEW_THUMBNAIL = 0x0001, -}; -} -Q_DECLARE_FLAGS(PreviewWidgesFlags, PREVIEW_NAMESPACE::PreviewWidgesFlag); -Q_DECLARE_OPERATORS_FOR_FLAGS(PreviewWidgesFlags) - -namespace plugin_filepreview { -class DocSheet; -class ThumbnailWidget; - -class SheetSidebar : public QWidget -{ - Q_OBJECT - -public: - explicit SheetSidebar(DocSheet *parent = nullptr, PreviewWidgesFlags widgesFlag = PREVIEW_THUMBNAIL); - - ~SheetSidebar() override; - - /**S - * @brief 设置当前页 - * @param page - */ - void setCurrentPage(int page); - - /** - * @brief 文档打开成功 - */ - void handleOpenSuccess(); - - /** - * @brief 重置模型数据 - */ - void changeResetModelData(); - -protected: - /** - * @brief 初始化控件 - */ - void initWidget(); - -protected: - /** - * @brief 窗口大小变化事件 - * @param event - */ - void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; - - /** - * @brief 显示事件 - * @param event - */ - void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; - -private slots: - - /** - * @brief 文档打开成功处理 - */ - void onHandWidgetDocOpenSuccess(); - - /** - * @brief 文档打开成功延迟处理 - */ - void onHandleOpenSuccessDelay(); - -private: - qreal scaleRatio { -1 }; - bool oldVisible { false }; - bool openDocOpenSuccess { false }; - - DocSheet *docSheet { nullptr }; - QStackedLayout *stackLayout { nullptr }; - PreviewWidgesFlags widgetsFlag; - - ThumbnailWidget *thumbnailWidget { nullptr }; -}; -} -#endif // SHEETSIDEBAR_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.cpp deleted file mode 100644 index bd11c837d5..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "sidebarimagelistview.h" -#include "docsheet.h" -#include "sidebarimageviewmodel.h" - -#include - -#include -#include -#include -#include -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -SideBarImageListView::SideBarImageListView(DocSheet *sheet, QWidget *parent) - : DListView(parent), docSheet(sheet) -{ - initControl(); - setAutoScroll(false); - setProperty("adaptScale", 0.5); - setSpacing(0); - setFocusPolicy(Qt::NoFocus); - setFrameShape(QFrame::NoFrame); - setSelectionMode(QAbstractItemView::SingleSelection); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setResizeMode(QListView::Fixed); - setViewMode(QListView::ListMode); - setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - setAutoFillBackground(true); - QPalette palet = this->palette(); - palet.setColor(QPalette::Background, Dtk::Gui::DGuiApplicationHelper::instance()->applicationPalette().itemBackground().color()); - setPalette(palet); -} - -void SideBarImageListView::initControl() -{ - listType = E_SideBar::SIDE_THUMBNIL; - imageModel = new SideBarImageViewModel(docSheet, this); - this->setModel(imageModel); -} - -void SideBarImageListView::handleOpenSuccess() -{ - if (listType == E_SideBar::SIDE_THUMBNIL) { - - QList pageSrclst; - int pagesNum = docSheet->pageCount(); - for (int index = 0; index < pagesNum; index++) - pageSrclst << ImagePageInfo_t(index); - imageModel->initModelLst(pageSrclst); - } -} - -void SideBarImageListView::onItemClicked(const QModelIndex &index) -{ - if (index.isValid()) { - docSheet->jumpToIndex(imageModel->getPageIndexForModelIndex(index.row())); - emit sigListItemClicked(index.row()); - } -} - -bool SideBarImageListView::scrollToIndex(int index, bool scrollTo) -{ - const QList &indexlst = imageModel->getModelIndexForPageIndex(index); - if (indexlst.size() > 0) { - const QModelIndex &index = indexlst.first(); - if (scrollTo) - this->scrollTo(index); - this->selectionModel()->select(index, QItemSelectionModel::SelectCurrent); - this->setCurrentIndex(index); - return true; - } else { - this->setCurrentIndex(QModelIndex()); - this->clearSelection(); - return false; - } -} - -void SideBarImageListView::mousePressEvent(QMouseEvent *event) -{ - DListView::mousePressEvent(event); - onItemClicked(this->indexAt(event->pos())); -} - -QModelIndex SideBarImageListView::pageUpIndex() -{ - return DListView::moveCursor(QAbstractItemView::MovePageUp, Qt::NoModifier); -} - -QModelIndex SideBarImageListView::pageDownIndex() -{ - return DListView::moveCursor(QAbstractItemView::MovePageDown, Qt::NoModifier); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.h deleted file mode 100644 index e94080bc40..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimagelistview.h +++ /dev/null @@ -1,93 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef SIDEBARIMAGELISTVIEW_H -#define SIDEBARIMAGELISTVIEW_H - -#include "preview_plugin_global.h" - -#include - -namespace plugin_filepreview { -class DocSheet; -class SideBarImageViewModel; - -const int LEFTMINWIDTH = 266; -const int LEFTMAXWIDTH = 380; - -class SideBarImageListView : public DTK_WIDGET_NAMESPACE::DListView -{ - Q_OBJECT -public: - SideBarImageListView(DocSheet *sheet, QWidget *parent = nullptr); - -signals: - - /** - * @brief sigListItemClicked - * 节点左键点击 - * @param row - */ - void sigListItemClicked(int row); - -public: - /** - * @brief handleOpenSuccess - * 文档打开成功,初始化相关数据 - */ - void handleOpenSuccess(); - - /** - * @brief scrollToIndex - * 滚动到指定页数 - * @param pageIndex - * @param scrollTo - * @return - */ - bool scrollToIndex(int pageIndex, bool scrollTo = true); - - /** - * @brief pageUpIndex - * 上翻页 - * @return - */ - QModelIndex pageUpIndex(); - - /** - * @brief pageDownIndex - * 下翻页 - * @return - */ - QModelIndex pageDownIndex(); - -private: - /** - * @brief initControl - * 初始化控件 - */ - void initControl(); - -private slots: - /** - * @brief onItemClicked - * 节点点击 - * @param index - */ - void onItemClicked(const QModelIndex &index); - -protected: - /** - * @brief mousePressEvent - * 鼠标点击事件 - * @param event - */ - void mousePressEvent(QMouseEvent *event); - -private: - int listType; - DocSheet *docSheet { nullptr }; - SideBarImageViewModel *imageModel { nullptr }; -}; -} -#endif // SIDEBARIMAGELISTVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.cpp deleted file mode 100644 index 1137f16ffa..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.cpp +++ /dev/null @@ -1,156 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "sidebarimageviewmodel.h" -#include "docsheet.h" -#include "pagerenderthread.h" - -#include -#include -#include - -using namespace plugin_filepreview; -ImagePageInfo_t::ImagePageInfo_t(int index) - : pageIndex(index) -{ -} - -bool ImagePageInfo_t::operator==(const ImagePageInfo_t &other) const -{ - return (this->pageIndex == other.pageIndex); -} - -bool ImagePageInfo_t::operator<(const ImagePageInfo_t &other) const -{ - return (this->pageIndex < other.pageIndex); -} - -bool ImagePageInfo_t::operator>(const ImagePageInfo_t &other) const -{ - return (this->pageIndex > other.pageIndex); -} - -SideBarImageViewModel::SideBarImageViewModel(DocSheet *sheet, QObject *parent) - : QAbstractListModel(parent), parentObj(parent), docSheet(sheet) -{ - connect(docSheet, &DocSheet::sigPageModified, this, &SideBarImageViewModel::onUpdateImage); -} - -void SideBarImageViewModel::resetData() -{ - beginResetModel(); - pageList.clear(); - endResetModel(); -} - -void SideBarImageViewModel::initModelLst(const QList &pagelst, bool sort) -{ - beginResetModel(); - - pageList = pagelst; - - if (sort) - std::sort(pageList.begin(), pageList.end()); - - endResetModel(); -} - -void SideBarImageViewModel::changeModelData(const QList &pagelst) -{ - pageList = pagelst; -} - -int SideBarImageViewModel::rowCount(const QModelIndex &) const -{ - return pageList.size(); -} - -int SideBarImageViewModel::columnCount(const QModelIndex &) const -{ - return 1; -} - -QVariant SideBarImageViewModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid()) - return QVariant(); - - int nRow = pageList.at(index.row()).pageIndex; - - if (-1 == nRow) - return QVariant(); - - if (role == ImageinfoType_e::IMAGE_PIXMAP) { - QPixmap pixmap = docSheet->thumbnail(nRow); - - if (pixmap.isNull()) { - //! 先填充空白 - QPixmap emptyPixmap(200, 200); - emptyPixmap.fill(Qt::white); - docSheet->setThumbnail(nRow, emptyPixmap); - - //! 使用线程 - DocPageThumbnailTask task; - task.sheet = docSheet; - task.index = nRow; - task.model = const_cast(this); - PageRenderThread::appendTask(task); - } - - return QVariant::fromValue(pixmap); - } else if (role == ImageinfoType_e::IMAGE_ROTATE) { - return QVariant::fromValue(docSheet->operation().rotation * 90); - } else if (role == Qt::AccessibleTextRole) { - return index.row(); - } else if (role == ImageinfoType_e::IMAGE_PAGE_SIZE) { - return QVariant::fromValue(docSheet->pageSizeByIndex(nRow)); - } - return QVariant(); -} - -bool SideBarImageViewModel::setData(const QModelIndex &index, const QVariant &data, int role) -{ - if (!index.isValid()) - return false; - return QAbstractListModel::setData(index, data, role); -} - -QList SideBarImageViewModel::getModelIndexForPageIndex(int pageIndex) -{ - QList modelIndexlst; - - int pageSize = pageList.size(); - - for (int index = 0; index < pageSize; index++) { - if (pageList.at(index) == ImagePageInfo_t(pageIndex)) - modelIndexlst << this->index(index); - } - return modelIndexlst; -} - -int SideBarImageViewModel::getPageIndexForModelIndex(int row) -{ - if (row >= 0 && row < pageList.size()) - return pageList.at(row).pageIndex; - return -1; -} - -void SideBarImageViewModel::onUpdateImage(int index) -{ - DocPageThumbnailTask task; - task.sheet = docSheet; - task.index = index; - task.model = const_cast(this); - PageRenderThread::appendTask(task); -} - -void SideBarImageViewModel::handleRenderThumbnail(int index, QPixmap pixmap) -{ - pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); - docSheet->setThumbnail(index, pixmap); - - const QList &modelIndexlst = getModelIndexForPageIndex(index); - for (const QModelIndex &modelIndex : modelIndexlst) - emit dataChanged(modelIndex, modelIndex); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.h deleted file mode 100644 index c244ec37ea..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/sidebarimageviewmodel.h +++ /dev/null @@ -1,145 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef SIDEBARIMAGEVIEWMODEL_H -#define SIDEBARIMAGEVIEWMODEL_H - -#include "preview_plugin_global.h" - -#include - -namespace plugin_filepreview { -typedef enum E_SideBar { - SIDE_THUMBNIL = 0 -} E_SideBar; - -typedef enum ImageinfoType_e { - IMAGE_PIXMAP = Qt::UserRole, - IMAGE_ROTATE = Qt::UserRole + 2, - IMAGE_PAGE_SIZE = Qt::UserRole + 6, -} ImageinfoType_e; - -typedef struct ImagePageInfo_t -{ - int pageIndex; - - QString strcontents; - - explicit ImagePageInfo_t(int index = -1); - - bool operator==(const ImagePageInfo_t &other) const; - - bool operator<(const ImagePageInfo_t &other) const; - - bool operator>(const ImagePageInfo_t &other) const; -} ImagePageInfo_t; -} - -Q_DECLARE_METATYPE(PREVIEW_NAMESPACE::ImagePageInfo_t); - -namespace plugin_filepreview { -class DocSheet; -class SideBarImageViewModel : public QAbstractListModel -{ - Q_OBJECT -public: - explicit SideBarImageViewModel(DocSheet *sheet, QObject *parent = nullptr); - -public: - /** - * @brief resetData - * 清空数据 - */ - void resetData(); - - /** - * @brief initModelLst - * 初始化MODEL数据 - * @param pagelst - * @param sort - */ - void initModelLst(const QList &pagelst, bool sort = false); - - /** - * @brief changeModelData - * 重置model数据 - * @param pagelst - */ - void changeModelData(const QList &pagelst); - - /** - * @brief getModelIndexForPageIndex - * 根据页码获取对应MODEL INDEX - * @param pageIndex - * @return - */ - QList getModelIndexForPageIndex(int pageIndex); - - /** - * @brief getPageIndexForModelIndex - * 根据节点索引值,获取对应页码 - * @param row - * @return - */ - int getPageIndexForModelIndex(int row); - - /** - * @brief handleThumbnail - * 处理缩略图 - * @param index - * @param pixmap - */ - void handleRenderThumbnail(int index, QPixmap pixmap); - -public slots: - /** - * @brief onUpdateImage - * 通知指定页码数据变更 - * @param index - */ - void onUpdateImage(int index); - -protected: - /** - * @brief columnCount - * view列数 - * @return - */ - int columnCount(const QModelIndex &) const override; - - /** - * @brief rowCount - * view行数 - * @param parent - * @return - */ - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - - /** - * @brief data - * view显示数据 - * @param index - * @param role - * @return - */ - QVariant data(const QModelIndex &index, int role) const override; - - /** - * @brief setData - * 设置model数据 - * @param index - * @param data - * @param role - * @return - */ - bool setData(const QModelIndex &index, const QVariant &data, int role) override; - -private: - QObject *parentObj { nullptr }; - DocSheet *docSheet { nullptr }; - QList pageList; - static QMap> g_sheetPixmapMap; -}; -} -#endif // SIDEBARIMAGEVIEWMODEL_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/theme.qrc b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/theme.qrc deleted file mode 100644 index 5464f14271..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/theme.qrc +++ /dev/null @@ -1,5 +0,0 @@ - - - dde-pdf-preview.theme - - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.cpp deleted file mode 100644 index ad473112ff..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "thumbnaildelegate.h" -#include "sidebarimageviewmodel.h" - -#include - -#include -#include -#include -#include -#include - -DGUI_USE_NAMESPACE -using namespace plugin_filepreview; -ThumbnailDelegate::ThumbnailDelegate(QAbstractItemView *parent) - : DStyledItemDelegate(parent) -{ - itemViewParent = parent; -} - -void ThumbnailDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - if (index.isValid()) { - qreal pixscale = itemViewParent->property("adaptScale").toDouble(); - - int rotate = index.data(ImageinfoType_e::IMAGE_ROTATE).toInt(); - - QMatrix matrix; - - matrix.rotate(rotate); - - const QPixmap &pixmap = index.data(ImageinfoType_e::IMAGE_PIXMAP).value().transformed(matrix); - - const int borderRadius = 6; - - QSize pageSize = index.data(ImageinfoType_e::IMAGE_PAGE_SIZE).toSize(); - - if (rotate == 90 || rotate == 270) - pageSize = QSize(pageSize.height(), pageSize.width()); - - pageSize.scale(static_cast(200 * pixscale * qApp->devicePixelRatio()), static_cast(200 * pixscale * qApp->devicePixelRatio()), Qt::KeepAspectRatio); - - const QSize &scalePixSize = pageSize / qApp->devicePixelRatio(); - - const QRect &rect = QRect(option.rect.center().x() - scalePixSize.width() / 2, option.rect.center().y() - scalePixSize.height() / 2, scalePixSize.width(), scalePixSize.height()); - - if (!pixmap.isNull()) { - //! clipPath pixmap - painter->save(); - QPainterPath clipPath; - clipPath.addRoundedRect(rect, borderRadius, borderRadius); - painter->setClipPath(clipPath); - painter->drawPixmap(rect.x(), rect.y(), rect.width(), rect.height(), pixmap); - painter->restore(); - } - - //! drawText RoundRect - painter->save(); - painter->setBrush(Qt::NoBrush); - if (itemViewParent->selectionModel()->isRowSelected(index.row(), index.parent())) { - painter->setPen(QPen(DTK_NAMESPACE::Gui::DGuiApplicationHelper::instance()->applicationPalette().highlight().color(), 2)); - painter->drawRoundedRect(rect, borderRadius, borderRadius); - } else { - painter->setPen(QPen(DTK_NAMESPACE::Gui::DGuiApplicationHelper::instance()->applicationPalette().frameShadowBorder().color(), 1)); - painter->drawRoundedRect(rect, borderRadius, borderRadius); - painter->setPen(QPen(DTK_NAMESPACE::Gui::DGuiApplicationHelper::instance()->applicationPalette().windowText().color())); - } - painter->restore(); - } -} - -QSize ThumbnailDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - return DStyledItemDelegate::sizeHint(option, index); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.h deleted file mode 100644 index e4ba956337..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnaildelegate.h +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef THUMBNAILDELEGATE_H -#define THUMBNAILDELEGATE_H - -#include "preview_plugin_global.h" - -#include - -namespace plugin_filepreview { -class ThumbnailDelegate : public DTK_WIDGET_NAMESPACE::DStyledItemDelegate -{ -public: - explicit ThumbnailDelegate(QAbstractItemView *parent = nullptr); - -protected: - /** - * @brief paint - * 绘制事件 - * @param painter - * @param option - * @param index - */ - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; - - /** - * @brief sizeHint - * 节点大小 - * @param option - * @param index - * @return - */ - QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; - -private: - QAbstractItemView *itemViewParent { nullptr }; -}; -} -#endif // THUMBNAILDELEGATE_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.cpp deleted file mode 100644 index da41defa42..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.cpp +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "thumbnailwidget.h" -#include "docsheet.h" -#include "sidebarimagelistview.h" -#include "sidebarimageviewmodel.h" -#include "thumbnaildelegate.h" - -#include - -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -const int LEFTMINHEIGHT = 110; - -ThumbnailWidget::ThumbnailWidget(DocSheet *sheet, DWidget *parent) - : DWidget(parent), docSheet(sheet) -{ - initWidget(); -} - -ThumbnailWidget::~ThumbnailWidget() -{ -} - -void ThumbnailWidget::initWidget() -{ - pImageListView = new SideBarImageListView(docSheet, this); - pImageListView->setAccessibleName("View_ImageList"); - ThumbnailDelegate *imageDelegate = new ThumbnailDelegate(pImageListView); - pImageListView->setItemDelegate(imageDelegate); - - QVBoxLayout *vBoxLayout = new QVBoxLayout(this); - vBoxLayout->setSpacing(0); - vBoxLayout->setContentsMargins(0, 0, 0, 0); - vBoxLayout->addWidget(pImageListView); - - this->setLayout(vBoxLayout); - pImageListView->setItemSize(QSize(LEFTMINWIDTH, LEFTMINHEIGHT)); -} - -void ThumbnailWidget::handleOpenSuccess() -{ - if (bIshandOpenSuccess) - return; - bIshandOpenSuccess = true; - pImageListView->handleOpenSuccess(); - scrollToCurrentPage(); -} - -void ThumbnailWidget::handlePage(int index) -{ - pImageListView->scrollToIndex(index); -} - -void ThumbnailWidget::adaptWindowSize(const double &scale) -{ - pImageListView->setProperty("adaptScale", scale); - pImageListView->setItemSize(QSize(static_cast(LEFTMINWIDTH * scale), static_cast(qMax(LEFTMINHEIGHT * scale, LEFTMINHEIGHT * 1.0)))); - pImageListView->reset(); - scrollToCurrentPage(); -} - -void ThumbnailWidget::scrollToCurrentPage() -{ - pImageListView->scrollToIndex(docSheet->currentIndex()); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.h deleted file mode 100644 index 2e7d4b2aef..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/pdf-preview/thumbnailwidget.h +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef THUMBNAILWIDGET_H -#define THUMBNAILWIDGET_H - -#include "preview_plugin_global.h" - -#include - -#include - -namespace plugin_filepreview { -class DocSheet; -class SideBarImageListView; -class ThumbnailWidget : public QWidget -{ - Q_OBJECT -public: - explicit ThumbnailWidget(DocSheet *sheet, QWidget *parent = nullptr); - ~ThumbnailWidget() Q_DECL_OVERRIDE; - -public: - /** - * @brief handleOpenSuccess - * 文档打开成功,初始化数据 - */ - void handleOpenSuccess(); - - /** - * @brief handlePage - * 滚动到指定页数 - * @param index - */ - void handlePage(int index); - - /** - * @brief adaptWindowSize - * 控件大小变化响应 - * @param scale - */ - void adaptWindowSize(const double &scale); - -protected: - /** - * @brief initWidget - * 初始化控件 - */ - void initWidget(); - -private: - /** - * @brief scrollToCurrentPage - * 滚动到当前页数 - */ - void scrollToCurrentPage(); - -private: - QPointer docSheet; - SideBarImageListView *pImageListView { nullptr }; - bool bIshandOpenSuccess { false }; -}; -} -#endif // THUMBNAILWIDGET_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/preview_plugin_global.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/preview_plugin_global.h deleted file mode 100644 index 834f6f8326..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/preview_plugin_global.h +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PREVIEW_PLUGIN_GLOBAL_H -#define PREVIEW_PLUGIN_GLOBAL_H - -#include - -#define PREVIEW_NAMESPACE plugin_filepreview - -#define PREVIEW_BEGIN_NAMESPACE namespace PREVIEW_NAMESPACE { -#define PREVIEW_END_NAMESPACE } -#define PREVIEW_USE_NAMESPACE using namespace PREVIEW_NAMESPACE; - -PREVIEW_BEGIN_NAMESPACE -DFM_LOG_USE_CATEGORY(PREVIEW_NAMESPACE) -PREVIEW_END_NAMESPACE - -#endif // PREVIEW_PLUGIN_GLOBAL_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/CMakeLists.txt deleted file mode 100644 index 699266f810..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/CMakeLists.txt +++ /dev/null @@ -1,70 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(dfmtext-preview) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -FILE(GLOB_RECURSE TEXTPREVIEW_FILES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*.json" - "${GlobalFiles}" - ) - -# Qt5 -set(BIN_NAME dfmtext-preview) -set(QT_VERSION_MAJOR 5) -set(DTK_VERSION_MAJOR "") -find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) - -add_library(${BIN_NAME} - SHARED - ${TEXTPREVIEW_FILES} -) - -set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - -target_link_libraries(${BIN_NAME} - DFM::base - DFM::framework -) - -#install library file -install(TARGETS - ${BIN_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} -) - -# Qt6 -if (DFM_BUILD_WITH_QT6) - set(BIN_NAME dfm6text-preview) - set(QT_VERSION_MAJOR 6) - set(DTK_VERSION_MAJOR 6) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core REQUIRED) - - add_library(${BIN_NAME} - SHARED - ${TEXTPREVIEW_FILES} - ) - - set_target_properties(${BIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - - target_link_libraries(${BIN_NAME} - DFM${DTK_VERSION_MAJOR}::base - DFM${DTK_VERSION_MAJOR}::framework - ) - - #install library file - install(TARGETS - ${BIN_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} - ) -endif() - -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/dde-text-preview-plugin.json DESTINATION ../../previews) - -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dde-text-preview-plugin.json DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/dde-text-preview-plugin.json b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/dde-text-preview-plugin.json deleted file mode 100644 index 5a9476d42b..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/dde-text-preview-plugin.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys" : ["text/*"] -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.cpp deleted file mode 100644 index d1293af464..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.cpp +++ /dev/null @@ -1,131 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "textbrowseredit.h" - -#include -#include - -#include - -using namespace plugin_filepreview; -constexpr int kReadTextSize { 1024 * 1024 * 5 }; -TextBrowserEdit::TextBrowserEdit(QWidget *parent) - : QPlainTextEdit(parent) -{ - setReadOnly(true); - setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard); - setLineWrapMode(QPlainTextEdit::WidgetWidth); - setFixedSize(800, 500); - setFocusPolicy(Qt::NoFocus); - setContextMenuPolicy(Qt::NoContextMenu); - setFrameStyle(QFrame::NoFrame); - - connect(verticalScrollBar(), &QScrollBar::valueChanged, this, &TextBrowserEdit::scrollbarValueChange); - connect(verticalScrollBar(), &QScrollBar::sliderMoved, this, &TextBrowserEdit::sliderPositionValueChange); -} - -TextBrowserEdit::~TextBrowserEdit() -{ - filestr.clear(); -} - -void TextBrowserEdit::setFileData(std::string &data) -{ - clear(); - filestr = data; - std::string::iterator temp = filestr.begin(); - appendText(temp); - this->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor); - lastPosition = verticalScrollBar()->sliderPosition(); -} - -void TextBrowserEdit::wheelEvent(QWheelEvent *e) -{ - QPoint numDegrees = e->angleDelta(); - if (numDegrees.y() < 0) { - int sbValue = verticalScrollBar()->value(); - if (verticalScrollBar()->maximum() <= sbValue) { - if (!filestr.empty()) { - std::string::iterator data = filestr.begin(); - appendText(data); - } - } - } - QPlainTextEdit::wheelEvent(e); -} - -void TextBrowserEdit::scrollbarValueChange(int value) -{ - int maxValue = verticalScrollBar()->maximum(); - if (maxValue <= value) { - verticalScrollBar()->setValue(value); - } -} - -void TextBrowserEdit::sliderPositionValueChange(int position) -{ - if (position > lastPosition) { - if (verticalScrollBar()->maximum() <= position) { - if (!filestr.empty()) { - std::string::iterator data = filestr.begin(); - appendText(data); - } - } - } - lastPosition = position; -} - -int TextBrowserEdit::verifyEndOfStrIntegrity(const char *s, int l) -{ - int len = 0, i = 0; - if (s == nullptr || *s == 0 || l <= 0) { - return 0; - } - while (*s) { - if ((*s & 0x80) == 0) { - i++; - s++; - len++; - } else { - if (*(s + 1) == 0) - break; - i += 3; - s += 3; - len += 3; - } - - if (i == l) - break; - else if (i > l) { - len -= 3; - break; - } - } - return len; -} - -void TextBrowserEdit::appendText(std::string::iterator &data) -{ - if (filestr.size() >= kReadTextSize) { - char temp[kReadTextSize] { 0 }; - - std::copy(data, data + kReadTextSize, temp); - - char ch = temp[kReadTextSize - 1]; - int l = verifyEndOfStrIntegrity(temp, kReadTextSize); - if (!(0 <= ch && 127 >= static_cast(ch))) { - temp[l] = '\0'; - } - - filestr.erase(std::begin(filestr), std::begin(filestr) + l); - QString textData = QString::fromLocal8Bit(temp, l); - appendPlainText(textData); - } else if (filestr.size() > 0) { - unsigned long len = static_cast(filestr.size()); - QString textData = QString::fromLocal8Bit(filestr.c_str(), static_cast(len)); - insertPlainText(textData); - filestr.clear(); - } -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.h deleted file mode 100644 index cd2d74f4ba..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textbrowseredit.h +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef TEXTBROWSER_H -#define TEXTBROWSER_H -#include "preview_plugin_global.h" - -#include - -#include - -namespace plugin_filepreview { -class TextBrowserEdit : public QPlainTextEdit -{ - Q_OBJECT -public: - explicit TextBrowserEdit(QWidget *parent = nullptr); - - virtual ~TextBrowserEdit() override; - - void setFileData(std::string &data); - -protected: - void wheelEvent(QWheelEvent *e) override; - -private slots: - void scrollbarValueChange(int value); - - void sliderPositionValueChange(int position); - -private: - int verifyEndOfStrIntegrity(const char *s, int l); - - void appendText(std::string::iterator &data); - - std::string filestr; - - int lastPosition { 0 }; -}; -} -#endif // TEXTBROWSER_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.cpp deleted file mode 100644 index 2123d1db78..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.cpp +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "textcontextwidget.h" -#include "textbrowseredit.h" - -#include - -#include - -using namespace plugin_filepreview; -DWIDGET_USE_NAMESPACE - -TextContextWidget::TextContextWidget(QWidget *parent) - : QWidget(parent) - , editWidget(new TextBrowserEdit(this)) -{ - DPlainTextEdit *titleWidget = new DPlainTextEdit(this); - titleWidget->setFixedHeight(30); - titleWidget->setFrameStyle(QFrame::NoFrame); - titleWidget->setReadOnly(true); - titleWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - - QVBoxLayout *mainLay = new QVBoxLayout(this); - mainLay->addWidget(titleWidget); - mainLay->addWidget(editWidget); - mainLay->setContentsMargins(0, 0, 0, 0); - mainLay->setSpacing(0); -} - -TextBrowserEdit *TextContextWidget::textBrowserEdit() const -{ - return editWidget; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.h deleted file mode 100644 index ce80943c49..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textcontextwidget.h +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef TEXTCONTEXTWIDGET_H -#define TEXTCONTEXTWIDGET_H - -#include - -namespace plugin_filepreview { -class TextBrowserEdit; -class TextContextWidget : public QWidget -{ - Q_OBJECT -public: - explicit TextContextWidget(QWidget *parent = nullptr); - plugin_filepreview::TextBrowserEdit *textBrowserEdit() const; - -private: - plugin_filepreview::TextBrowserEdit *editWidget { nullptr }; -}; -} -#endif // TEXTCONTEXTWIDGET_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.cpp deleted file mode 100644 index 7ccaee8662..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "textpreview.h" -#include "dfileservices.h" -#include "textbrowseredit.h" -#include "textcontextwidget.h" - -#include - -#include -#include -#include -#include - -using namespace std; -DFMBASE_USE_NAMESPACE -using namespace plugin_filepreview; -static constexpr int kReadTextSize { 1024 * 1024 * 5 }; - -TextPreview::TextPreview(QObject *parent) - : AbstractBasePreview(parent) -{ -} - -TextPreview::~TextPreview() -{ - if (textBrowser) - textBrowser->deleteLater(); -} - -bool TextPreview::setFileUrl(const QUrl &url) -{ - if (selectUrl == url) - return true; - - selectUrl = url; - - device.open(url.path().toLocal8Bit().data(), ios::binary); - - if (!device.is_open()) { - fmWarning() << "Text Preview: File open failed!"; - return false; - } - - if (!textBrowser) { - textBrowser = new TextContextWidget; - } - - titleStr = QFileInfo(url.toLocalFile()).fileName(); - - long len = device.seekg(0, ios::end).tellg(); - if (len <= 0) - return false; - - if (len > kReadTextSize) - len = kReadTextSize; - - char *buf = new char[static_cast(len)]; - device.seekg(0, ios::beg).read(buf, static_cast(len)); - device.close(); - std::string strBuf(buf, len); - textBrowser->textBrowserEdit()->setFileData(strBuf); - delete[] buf; - buf = nullptr; - - Q_EMIT titleChanged(); - - return true; -} - -QUrl TextPreview::fileUrl() const -{ - return selectUrl; -} - -QWidget *TextPreview::contentWidget() const -{ - return textBrowser; -} - -QString TextPreview::title() const -{ - return titleStr; -} - -bool TextPreview::showStatusBarSeparator() const -{ - return false; -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.h deleted file mode 100644 index dfa226f7f9..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreview.h +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef TEXTPREVIEW_H -#define TEXTPREVIEW_H - -#include "preview_plugin_global.h" - -#include - -#include -#include -#include -#include - -#include - -namespace plugin_filepreview { -class TextContextWidget; -class TextPreview : public DFMBASE_NAMESPACE::AbstractBasePreview -{ - Q_OBJECT - -public: - explicit TextPreview(QObject *parent = nullptr); - ~TextPreview() override; - - bool setFileUrl(const QUrl &url) override; - QUrl fileUrl() const override; - - QWidget *contentWidget() const override; - - QString title() const override; - bool showStatusBarSeparator() const override; - -private: - QUrl selectUrl; - QString titleStr; - - TextContextWidget *textBrowser { nullptr }; - - //! 操作文件的对象 - std::ifstream device; - - int textSize = 0; - - int readSize = 0; -}; -} -#endif // TEXTPREVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.cpp deleted file mode 100644 index e15e26c8a8..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "textpreviewplugin.h" -#include - -DFMBASE_USE_NAMESPACE -namespace plugin_filepreview { - -DFM_LOG_REISGER_CATEGORY(PREVIEW_NAMESPACE) - -AbstractBasePreview *TextPreviewPlugin::create(const QString &key) -{ - Q_UNUSED(key) - - return new TextPreview(); -} -} // namespace plugin_filepreview diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.h deleted file mode 100644 index 9ecad3ddfb..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/text-preview/textpreviewplugin.h +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef TEXTPREVIEWPLUGIN_H -#define TEXTPREVIEWPLUGIN_H - -#include "preview_plugin_global.h" -#include - -#include "textpreview.h" - -namespace plugin_filepreview { -class TextPreviewPlugin : public DFMBASE_NAMESPACE::AbstractFilePreviewPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID FilePreviewFactoryInterface_iid FILE "dde-text-preview-plugin.json") - -public: - DFMBASE_NAMESPACE::AbstractBasePreview *create(const QString &key) Q_DECL_OVERRIDE; -}; -} -#endif // TEXTPREVIEWPLUGIN_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/CMakeLists.txt b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/CMakeLists.txt deleted file mode 100644 index ddeecf8202..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -project(dfmvideo-preview) - -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -FILE(GLOB VIDEOPREVIEW_FILES - "${CMAKE_CURRENT_SOURCE_DIR}/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*/*.h" - "${CMAKE_CURRENT_SOURCE_DIR}/*/*/*.cpp" - "${CMAKE_CURRENT_SOURCE_DIR}/*.json" - "${CMAKE_CURRENT_SOURCE_DIR}/*.qrc" - "${GlobalFiles}" - ) - - -find_package(PkgConfig REQUIRED) -find_package(Qt5 COMPONENTS Core REQUIRED) - -pkg_search_module(libdmr REQUIRED libdmr) - -add_library(${PROJECT_NAME} - SHARED - ${VIDEOPREVIEW_FILES} -) - -set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../previews) - -target_include_directories(${PROJECT_NAME} - PUBLIC - ${libdmr_INCLUDE_DIRS} -) - -target_link_libraries(${PROJECT_NAME} - DFM::base - DFM::framework - ${libdmr_LIBRARIES} -) - -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/dde-video-preview-plugin.json DESTINATION ../../previews) - -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dde-video-preview-plugin.json DESTINATION ${DFM_PLUGIN_PREVIEW_DIR}) - -#install library file -install(TARGETS - ${PROJECT_NAME} - LIBRARY - DESTINATION - ${DFM_PLUGIN_PREVIEW_DIR} -) diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.json b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.json deleted file mode 100644 index a26abe3266..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Keys" : ["video/*", "application/vnd.adobe.flash.movie"] -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.qrc b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.qrc deleted file mode 100644 index 701cbe1827..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/dde-video-preview-plugin.qrc +++ /dev/null @@ -1,6 +0,0 @@ - - - icons/deepin/builtin/actions/dfm_pause_16px.svg - icons/deepin/builtin/actions/dfm_start_16px.svg - - diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_pause_16px.svg b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_pause_16px.svg deleted file mode 100644 index 25602b6557..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_pause_16px.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - icon_暂停 - - - - - - - - - - \ No newline at end of file diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_start_16px.svg b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_start_16px.svg deleted file mode 100644 index 715c7e9660..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/icons/deepin/builtin/actions/dfm_start_16px.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - icon_播放 - - - - - - - - - \ No newline at end of file diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.cpp deleted file mode 100644 index af69f48292..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.cpp +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "videopreview.h" - -#include -#include - -#include -#include -#include - -DWIDGET_USE_NAMESPACE -DFMBASE_USE_NAMESPACE -using namespace plugin_filepreview; - -VideoPreview::VideoPreview(QObject *parent) - : AbstractBasePreview(parent) -{ - setlocale(LC_NUMERIC, "C"); - - playerWidget = new VideoWidget(this); - playerWidget->setMinimumSize(800, 355); - statusBar = new VideoStatusBar(this); - - connect(&playerWidget->engine(), &dmr::PlayerEngine::stateChanged, this, &VideoPreview::sigPlayState); - connect(&playerWidget->engine(), &dmr::PlayerEngine::elapsedChanged, this, &VideoPreview::elapsedChanged); -} - -VideoPreview::~VideoPreview() -{ - if (statusBar) { - statusBar->hide(); - statusBar->deleteLater(); - } - - if (!playerWidget.isNull()) { - playerWidget->hide(); - disconnect(&playerWidget->engine(), &dmr::PlayerEngine::stateChanged, this, &VideoPreview::sigPlayState); - disconnect(&playerWidget->engine(), &dmr::PlayerEngine::elapsedChanged, this, &VideoPreview::elapsedChanged); - playerWidget.data()->deleteLater(); - } -} - -bool VideoPreview::setFileUrl(const QUrl &url) -{ - if (!playerWidget->engine().isPlayableFile(url)) - return false; - - bool ok = false; - info = dmr::MovieInfo::parseFromFile(QFileInfo(url.toLocalFile()), &ok); - - if (!ok) { - return false; - } - - playerWidget->title->setText(info.title); - playerWidget->title->adjustSize(); - statusBar->slider->setMaximum(static_cast(info.duration)); - videoUrl = QUrl::fromLocalFile(url.toLocalFile()); - - return true; -} - -QUrl VideoPreview::fileUrl() const -{ - return QUrl(videoUrl); -} - -QWidget *VideoPreview::contentWidget() const -{ - return playerWidget.data(); -} - -QWidget *VideoPreview::statusBarWidget() const -{ - return statusBar.data(); -} - -bool VideoPreview::showStatusBarSeparator() const -{ - return false; -} - -Qt::Alignment VideoPreview::statusBarWidgetAlignment() const -{ - return Qt::Alignment(); -} - -void VideoPreview::play() -{ - if (playerWidget && videoUrl.isValid()) { - playerWidget->play(videoUrl); - } -} - -void VideoPreview::pause() -{ - playerWidget->engine().pauseResume(); -} - -void VideoPreview::stop() -{ - playerWidget->engine().stop(); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.h deleted file mode 100644 index 74889fe890..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreview.h +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef VIDEOPREVIEW_H -#define VIDEOPREVIEW_H - -#include "videowidget.h" -#include "videostatusbar.h" -#include - -#include -#include -#include - -#include - -namespace plugin_filepreview { -class VideoPreview : public DFMBASE_NAMESPACE::AbstractBasePreview -{ - Q_OBJECT - -public: - explicit VideoPreview(QObject *parent = nullptr); - ~VideoPreview() override; - - bool setFileUrl(const QUrl &url) override; - QUrl fileUrl() const override; - - QWidget *contentWidget() const override; - QWidget *statusBarWidget() const override; - - bool showStatusBarSeparator() const override; - Qt::Alignment statusBarWidgetAlignment() const override; - - void play() override; - void pause() override; - void stop() override; - -signals: - void sigPlayState(); - - void elapsedChanged(); - -private: - QUrl videoUrl; - QPointer playerWidget; - dmr::MovieInfo info; - QPointer statusBar; - - friend class VideoWidget; - friend class VideoStatusBar; -}; -} -#endif // VIDEOPREVIEW_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.cpp deleted file mode 100644 index 5d8584bf5d..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "videopreviewplugin.h" - -DFMBASE_USE_NAMESPACE -namespace plugin_filepreview { -DFM_LOG_REISGER_CATEGORY(PREVIEW_NAMESPACE) - -AbstractBasePreview *VideoPreviewPlugin::create(const QString &key) -{ - Q_UNUSED(key) - - return new VideoPreview(); -} -} // namespace plugin_filepreview diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.h deleted file mode 100644 index 3f5e9e236e..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videopreviewplugin.h +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef VIDEOPREVIEWPLUGIN_H -#define VIDEOPREVIEWPLUGIN_H - -#include "preview_plugin_global.h" -#include "videopreview.h" -#include - -#include - -namespace plugin_filepreview { -class VideoPreviewPlugin : public DFMBASE_NAMESPACE::AbstractFilePreviewPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID FilePreviewFactoryInterface_iid FILE "dde-video-preview-plugin.json") - -public slots: - DFMBASE_NAMESPACE::AbstractBasePreview *create(const QString &key) override; -}; -} -#endif // VIDEOPREVIEWPLUGIN_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.cpp deleted file mode 100644 index 25921289cb..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.cpp +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "videostatusbar.h" -#include "videopreview.h" - -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -VideoStatusBar::VideoStatusBar(VideoPreview *preview) - : QWidget(nullptr), p(preview), slider(new QSlider(this)), timeLabel(new QLabel(this)), sliderIsPressed(false) -{ - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - - DIconButton *control_button = new DIconButton(this); - control_button->setFlat(true); - control_button->setIconSize({ 24, 24 }); - - control_button->setIcon(QIcon::fromTheme("dfm_pause")); - - QPalette pa_label; - - pa_label.setColor(QPalette::Foreground, QColor("#303030")); - timeLabel->setPalette(pa_label); - - slider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - slider->setMinimum(0); - slider->setOrientation(Qt::Horizontal); - - QHBoxLayout *layout = new QHBoxLayout(this); - - layout->setContentsMargins(0, 0, 20, 0); - layout->addWidget(control_button); - layout->addWidget(slider); - layout->addWidget(timeLabel); - - connect(control_button, &DIconButton::clicked, this, [this] { - // 由于调用了setBackendProperty("keep-open", "yes") - // 导致视频播放状态不对(要暂停到最后一帧,所以视频播放完毕后状态还是暂停) - // 如果是暂停状态,调用pause一定会播放,之后再调用play也没有影响 - // 反之,如果是停止状态,调用pause无反应,之后再调用play肯定会播放 - p->pause(); - p->playerWidget->engine().play(); - }); - - connect(p, &VideoPreview::sigPlayState, this, [this, control_button] { - if (p->playerWidget->engine().state() == dmr::PlayerEngine::Playing) { - control_button->setIcon(QIcon::fromTheme("dfm_pause")); - } else { - control_button->setIcon(QIcon::fromTheme("dfm_start")); - } - }); - - connect(slider, &QSlider::valueChanged, this, [this] { - p->playerWidget->engine().seekAbsolute(slider->value()); - }); - - connect(slider, &QSlider::sliderPressed, this, [this] { - sliderIsPressed = true; - }); - - connect(slider, &QSlider::sliderReleased, this, [this] { - sliderIsPressed = false; - }); - - connect(p, &VideoPreview::elapsedChanged, this, [this] { - if (!sliderIsPressed) { - QSignalBlocker blocker(slider); - Q_UNUSED(blocker) - slider->setValue(static_cast(p->playerWidget->engine().elapsed())); - } - timeLabel->setText(dmr::utils::Time2str(p->playerWidget->engine().elapsed())); - }); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.h deleted file mode 100644 index 0cb7e3d1d0..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videostatusbar.h +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef VIDEOSTATUSBAR_H -#define VIDEOSTATUSBAR_H - -#include "preview_plugin_global.h" - -#include -#include -#include - -namespace plugin_filepreview { -class VideoPreview; - -class VideoStatusBar : public QWidget -{ -public: - explicit VideoStatusBar(VideoPreview *preview); - - VideoPreview *p; - QSlider *slider; - QLabel *timeLabel; - bool sliderIsPressed; -}; -} -#endif // VIDEOSTATUSBAR_H diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.cpp b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.cpp deleted file mode 100644 index b0d30ca08f..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#include "videowidget.h" -#include "videopreview.h" - -#include - -DWIDGET_USE_NAMESPACE -using namespace plugin_filepreview; -VideoWidget::VideoWidget(VideoPreview *preview) - : dmr::PlayerWidget(nullptr), p(preview), title(new QLabel(this)) -{ - setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - - QPalette pa; - pa.setColor(QPalette::Foreground, Qt::white); - - title->setPalette(pa); - - DAnchorsBase::setAnchor(title, Qt::AnchorHorizontalCenter, this, Qt::AnchorHorizontalCenter); - - engine().setBackendProperty("keep-open", "yes"); -} - -QSize VideoWidget::sizeHint() const -{ - QSize screen_size; - - if (window()->windowHandle()) { - screen_size = window()->windowHandle()->screen()->availableSize(); - } else { - screen_size = qApp->desktop()->size(); - } - - return QSize(p->info.width, p->info.height).scaled(qMin(p->info.width, int(screen_size.width() * 0.5)), qMin(p->info.height, int(screen_size.height() * 0.5)), Qt::KeepAspectRatio); -} - -void VideoWidget::mouseReleaseEvent(QMouseEvent *event) -{ - p->pause(); - - dmr::PlayerWidget::mouseReleaseEvent(event); -} diff --git a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.h b/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.h deleted file mode 100644 index 5935a110d2..0000000000 --- a/src/plugins/common/dfmplugin-preview/pluginpreviews/video-preview/videowidget.h +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd. -// -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef PLAYERWIDGET_H -#define PLAYERWIDGET_H - -#include "preview_plugin_global.h" - -#include - -#include - -#include -#include - -namespace plugin_filepreview { -class VideoPreview; -class VideoWidget : public dmr::PlayerWidget -{ -public: - explicit VideoWidget(VideoPreview *preview); - - QSize sizeHint() const override; - - void mouseReleaseEvent(QMouseEvent *event) override; - - VideoPreview *p; - QLabel *title; -}; -} -#endif // PLAYERWIDGET_H