diff --git a/CMakeLists.txt b/CMakeLists.txt index d418656..7a4b1a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,100 +1,102 @@ project( klook ) cmake_minimum_required( VERSION 3.5.1 FATAL_ERROR ) set (QT_MIN_VERSION "5.9.0") set (KF5_MIN_VERSION "5.35.0") # TODO: find an appropriate version find_package(ECM ${KF5_MIN_VERSION} REQUIRED CONFIG) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") # Yeah, everything is deprecated, we know include(FeatureSummary) include(ECMAddAppIcon) include(ECMInstallIcons) include(KDEInstallDirs) include(KDECompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) kde_enable_exceptions() # We actually use/handle exceptions find_package( Qt5 ${QT_MIN_VERSION} NO_MODULE REQUIRED Core Gui Quick Qml) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS KDELibs4Support KIO Parts Declarative Plasma + DBusAddons ) find_package(Phonon4Qt5 REQUIRED) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) add_subdirectory( icons ) set(EXIV2_MIN_VERSION "0.19") find_package(Exiv2) set( QRC_RESOURCES src/resources.qrc ) file( GLOB qml_files "${CMAKE_CURRENT_SOURCE_DIR}/src/qml/*.qml" ) set( klook_SRCS src/main.cpp src/declarativeviewer.cpp src/video.cpp src/text.cpp src/file.cpp src/listitem.cpp src/previewgenerator.cpp src/previewprovider.cpp src/filemodel.cpp src/klookapp.cpp src/audio.cpp src/mimeprovider.cpp src/kpartsdeclarativeitem.cpp src/kpartswidget.cpp src/listitemcontent.cpp src/exifimageprovider.cpp src/rotatedimage.cpp ${qml_files} ) #set_source_files_properties(src/rotatedimage.cpp PROPERTIES COMPILE_FLAGS ${KDE4_ENABLE_EXCEPTIONS}) file(GLOB ICON_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/icons/hi*-apps-klook.png" ) ecm_add_app_icon(klook_SRCS ICONS ${ICON_SRCS}) add_executable( klook ${klook_SRCS} ${QRC_SOURCES} ) target_include_directories(klook SYSTEM PUBLIC ${PHONON_INCLUDE_DIR}) target_link_libraries(klook KF5::KIOCore KF5::KIOFileWidgets KF5::KIOWidgets KF5::KIONTLM ${EXIV2_LIBRARIES} KF5::Plasma ${PHONON_LIBRARY} KF5::Parts KF5::Declarative KF5::KDELibs4Support + KF5::DBusAddons Qt5::Core Qt5::Gui Qt5::Qml Qt5::Quick ) install( TARGETS klook ${INSTALL_TARGETS_DEFAULT_ARGS} ) install( FILES ${qml_files} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/ ) install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/qml/images/ DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/images ) #FIX AT SOME OTHER POINT IN TIME #Translations #if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/locale) #find_package( Msgfmt REQUIRED ) #find_package( Gettext REQUIRED ) #add_subdirectory( locale ) #endif() diff --git a/src/declarativeviewer.cpp b/src/declarativeviewer.cpp index e0904c1..257ff4c 100644 --- a/src/declarativeviewer.cpp +++ b/src/declarativeviewer.cpp @@ -1,742 +1,743 @@ /* KLook * Copyright (c) 2011-2012 ROSA * Authors: Julia Mineeva, Evgeniy Auzhin, Sergey Borovkov. * License: GPLv3 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3, * or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "declarativeviewer.h" #include "audio.h" #include "exifimageprovider.h" #include "file.h" #include "filemodel.h" #include "kpartsdeclarativeitem.h" #include "kpartswidget.h" #include "listitem.h" #include "mimeprovider.h" #include "previewgenerator.h" #include "previewprovider.h" #include "text.h" #include "video.h" #include #include #include #include #include +#include #include #include #include #include #include #include #include static int header_height = 27; static int border_width = 2; static int height_offset = 27; static int arrowIconWidth = 29; static int arrowIconHeight = 16; static int min_width = 600; static int min_height = 427; DeclarativeViewer::DeclarativeViewer(QWindow* parent) : QQuickView(parent) , m_lastMousePosition(0, 0) , m_isSingleMode(true) , m_moving(false) , m_resize(false) , m_isEmbedded(false) , m_isGallery(false) , m_currentFile(0) , m_region(FRAME_REGION) { KDeclarative::KDeclarative kdeclarative; kdeclarative.setDeclarativeEngine(engine()); kdeclarative.initialize(); kdeclarative.setupBindings(); engine()->addImageProvider("preview", new PreviewProvider); engine()->addImageProvider("mime", new MimeProvider); engine()->addImageProvider("exif", new ExifImageProvider); setResizeMode(QQuickView::SizeRootObjectToView); //setMinimumSize(min_width, min_height); TODO: fixme m_fileModel = new FileModel(this); m_fileModel->setRoleNames(ListItem::roleNames()); PreviewGenerator::instance()->setModel(m_fileModel); registerTypes(); //setWindowFlags(Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::FramelessWindowHint); FIXME //setAttribute(Qt::WA_TranslucentBackground); FIXME //setStyleSheet("background:transparent;"); FIXME - connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)), SLOT(focusChanged(QWidget*, QWidget*))); - connect(engine(), SIGNAL(quit()), qApp, SLOT(quit())); + connect(qApp, &QApplication::focusChanged, this, &DeclarativeViewer::focusChanged); + connect(engine(), &QQmlEngine::quit, qApp, &QApplication::quit); } DeclarativeViewer::~DeclarativeViewer() { delete PreviewGenerator::instance(); } void DeclarativeViewer::init(QStringList urls, bool embedded, const QRect& rc, int indexToShow) { if(!urls.size()) { qDebug() << "No files to display. Closing..."; qApp->exit(); return; } rootContext()->setContextProperty("indexToShow", indexToShow); initModel(urls); m_rcIcon = rc; setViewMode(urls.count() > 1 ? Multi : Single); rootContext()->setContextProperty("embedded", m_isEmbedded); setEmbedded(embedded); m_currentFile = m_fileModel->file(indexToShow); KWindowSystem::setState(winId(), NET::SkipTaskbar); if(!isVisible()) QTimer::singleShot(200, this, SLOT(showWindow())); emit setStartWindow(); } void DeclarativeViewer::registerTypes() { qmlRegisterType