diff --git a/CMakeLists.txt b/CMakeLists.txt index e64e2842a44..51c61d8940a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,1205 +1,1211 @@ cmake_minimum_required(VERSION 2.8.12) project(calligra) message(STATUS "Using CMake version: ${CMAKE_VERSION}") if (POLICY CMP0002) cmake_policy(SET CMP0002 OLD) endif() if (POLICY CMP0017) cmake_policy(SET CMP0017 NEW) endif () if (POLICY CMP0022) cmake_policy(SET CMP0022 OLD) endif () if (POLICY CMP0026) cmake_policy(SET CMP0026 OLD) endif() if (POLICY CMP0046) cmake_policy(SET CMP0046 OLD) endif () if (POLICY CMP0059) cmake_policy(SET CMP0059 OLD) endif() if (POLICY CMP0063) cmake_policy(SET CMP0063 NEW) endif() # ensure out-of-source build string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" isBuildInSource) if(isBuildInSource) message(FATAL_ERROR "Compiling Calligra inside the source folder is not possible.\nPlease refer to the build instruction: https://community.kde.org/Calligra/Building/3\nYou need to clean up the source folder from all build artifacts just created, otherwise further building attempts will fail again: With a git repo, you can use \"git clean -df\" in the toplevel source folder (attention! will remove also uncommited changes to the source code). With sources from a file bundle (like a zip file), delete the source folder and unbundle the sources again.") endif() ###################### ####################### ## Constants defines ## ####################### ###################### # define common versions of Calligra applications, used to generate calligraversion.h # update these version for every release: set(CALLIGRA_VERSION_STRING "3.0.1") set(CALLIGRA_STABLE_VERSION_MAJOR 3) # 3 for 3.x, 4 for 4.x, etc. set(CALLIGRA_STABLE_VERSION_MINOR 0) # 0 for 3.0, 1 for 3.1, etc. set(CALLIGRA_VERSION_RELEASE 1) # 89 for Alpha, increase for next test releases, set 0 for first Stable, etc. #set(CALLIGRA_ALPHA 1) # uncomment only for Alpha #set(CALLIGRA_BETA 1) # uncomment only for Beta #set(CALLIGRA_RC 1) # uncomment only for RC set(CALLIGRA_YEAR 2017) # update every year if(NOT DEFINED CALLIGRA_ALPHA AND NOT DEFINED CALLIGRA_BETA AND NOT DEFINED CALLIGRA_RC) set(CALLIGRA_STABLE 1) # do not edit endif() message(STATUS "Calligra version: ${CALLIGRA_VERSION_STRING}") # Define the generic version of the Calligra libraries here # This makes it easy to advance it when the next Calligra release comes. # 14 was the last GENERIC_CALLIGRA_LIB_VERSION_MAJOR of the previous Calligra series # (2.x) so we're starting with 15 in 3.x series. if(CALLIGRA_STABLE_VERSION_MAJOR EQUAL 3) math(EXPR GENERIC_CALLIGRA_LIB_VERSION_MAJOR "${CALLIGRA_STABLE_VERSION_MINOR} + 15") else() # let's make sure we won't forget to update the "15" message(FATAL_ERROR "Reminder: please update offset == 15 used to compute GENERIC_CALLIGRA_LIB_VERSION_MAJOR to something bigger") endif() set(GENERIC_CALLIGRA_LIB_VERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}.0.0") set(GENERIC_CALLIGRA_LIB_SOVERSION "${GENERIC_CALLIGRA_LIB_VERSION_MAJOR}") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules") message("Module path:" ${CMAKE_MODULE_PATH}) # fetch git revision for the current build set(CALLIGRA_GIT_SHA1_STRING "") set(CALLIGRA_GIT_BRANCH_STRING "") include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC GIT_SHA1) get_git_branch(GIT_BRANCH) if(GIT_SHA1 AND GIT_BRANCH) string(SUBSTRING ${GIT_SHA1} 0 7 GIT_SHA1) set(CALLIGRA_GIT_SHA1_STRING ${GIT_SHA1}) set(CALLIGRA_GIT_BRANCH_STRING ${GIT_BRANCH}) endif() if(NOT DEFINED RELEASE_BUILD) # estimate mode by CMAKE_BUILD_TYPE content if not set on cmdline string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_TOLOWER) set(RELEASE_BUILD_TYPES "release" "relwithdebinfo" "minsizerel") list(FIND RELEASE_BUILD_TYPES "${CMAKE_BUILD_TYPE_TOLOWER}" INDEX) if (INDEX EQUAL -1) set(RELEASE_BUILD FALSE) else() set(RELEASE_BUILD TRUE) endif() endif() message(STATUS "Release build: ${RELEASE_BUILD}") ############ ############# ## Options ## ############# ############ option(GHNS "support Get Hot New Stuff" OFF) option(PACKAGERS_BUILD "Build support of multiple CPU architectures in one binary. Should be used by packagers only." ON) ####################### ######################## ## Productset setting ## ######################## ####################### # For predefined productsets see the definitions in CalligraProducts.cmake and # in the files in the folder cmake/productsets. # Finding out the products & features to build is done in 5 steps: # 1. have the user define the products/features wanted, by giving a productset # 2. estimate all additional required products/features # 3. estimate which of the products/features can be build by external deps # 4. find which products/features have been temporarily disabled due to problems # 5. estimate which of the products/features can be build by internal deps # get the special macros include(CalligraProductSetMacros) # get the definitions of products, features and product sets include(CalligraProducts.cmake) set(PRODUCTSET_DEFAULT "ALL") if(NOT PRODUCTSET) set(PRODUCTSET ${PRODUCTSET_DEFAULT} CACHE STRING "Set of products/features to build" FORCE) endif() if (RELEASE_BUILD) set(CALLIGRA_SHOULD_BUILD_STAGING FALSE) if(BUILD_UNMAINTAINED) set(CALLIGRA_SHOULD_BUILD_UNMAINTAINED TRUE) else() set(CALLIGRA_SHOULD_BUILD_UNMAINTAINED FALSE) endif() else () set(CALLIGRA_SHOULD_BUILD_STAGING TRUE) set(CALLIGRA_SHOULD_BUILD_UNMAINTAINED TRUE) endif () # finally choose products/features to build calligra_set_productset(${PRODUCTSET}) ########################## ########################### ## Look for ECM, Qt, KF5 ## ########################### ########################## find_package(ECM 1.7.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) # ECM KDE macros (include first, to have their policies and settings effect all other macros) include(KDEInstallDirs) include(KDECMakeSettings NO_POLICY_SCOPE) include(KDECompilerSettings NO_POLICY_SCOPE) # CMake macros include(CMakePackageConfigHelpers) include(WriteBasicConfigVersionFile) include(CheckFunctionExists) include(CheckTypeSize) include(CheckIncludeFile) include(GenerateExportHeader) include(FeatureSummary) # ECM macros include(ECMOptionalAddSubdirectory) include(ECMInstallIcons) include(ECMAddAppIcon) include(ECMSetupVersion) include(ECMAddTests) include(ECMMarkAsTest) include(ECMMarkNonGuiExecutable) include(ECMGenerateHeaders) # own macros include(MacroBoolTo01) include(MacroOptionalFindPackage) include(MacroEnsureVersion) include(MacroJPEG) include(MacroDesktopToJson) set(REQUIRED_KF5_VERSION "5.7.0") find_package(KF5 ${REQUIRED_KF5_VERSION} REQUIRED COMPONENTS Archive Codecs Completion Config ConfigWidgets CoreAddons DBusAddons DocTools GuiAddons I18n IconThemes ItemViews JobWidgets KCMUtils KDELibs4Support KIO Kross Notifications NotifyConfig Parts Sonnet TextWidgets Wallet WidgetsAddons WindowSystem XmlGui ) find_package(KF5Activities) find_package(KF5KHtml) set_package_properties(KF5Activities PROPERTIES TYPE OPTIONAL ) set_package_properties(KF5KHtml PROPERTIES PURPOSE "Required for HTML2ODS import filter" TYPE OPTIONAL ) if(KF5Activities_FOUND) set(HAVE_KACTIVITIES TRUE) endif() if(${KF5_VERSION} VERSION_LESS "5.16.0") set(CALLIGRA_OLD_PLUGIN_METADATA TRUE) endif() set(REQUIRED_QT_VERSION "5.3.0") find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Core Gui Network PrintSupport Svg Test Widgets Xml ) find_package(Qt5 ${REQUIRED_QT_VERSION} QUIET COMPONENTS DBus OpenGL Quick Sql WebKit - WebKitWidgets +# WebKitWidgets ) +message("**********************************************************************************************************************") +message("**********************************************************************************************************************") +message("Qt WebKitWidgets is required for Stage's html export preview. This will need porting, as that module no longer exists.") +message("**********************************************************************************************************************") +message("**********************************************************************************************************************") + # Qt5Declarative was removed in Qt 5.6.0 so search for it in a separate call # Including it in a collected find_package(Qt5 ...) call can lead to a fatal not-found error: # * Qt5 (required version >= 5.3.0) find_package(Qt5Declarative ${REQUIRED_QT_VERSION} QUIET) set_package_properties(Qt5DBus PROPERTIES TYPE RECOMMENDED ) set_package_properties(Qt5Declarative PROPERTIES PURPOSE "Required for QtQuick1 components" TYPE RECOMMENDED ) set_package_properties(Qt5OpenGL PROPERTIES PURPOSE "Required for QtQuick1 components" TYPE RECOMMENDED ) set_package_properties(Qt5Quick PROPERTIES PURPOSE "Required for QtQuick2 components" TYPE RECOMMENDED ) set_package_properties(Qt5Sql PROPERTIES PURPOSE "Optional for Sheets' database connection" TYPE OPTIONAL ) set_package_properties(Qt5WebKit PROPERTIES PURPOSE "Required for Braindump's Web shape" TYPE OPTIONAL ) set_package_properties(Qt5WebKitWidget PROPERTIES PURPOSE "Required for Stage" TYPE RECOMMENDED ) if(Qt5WebKit_FOUND) add_definitions( -DCAN_USE_QTWEBKIT ) endif() set(HAVE_OPENGL ${Qt5OpenGL_FOUND}) if (GHNS) find_package(Attica 3.0) find_package(NewStuff) set_package_properties(Attica PROPERTIES DESCRIPTION "Attica is used for Get Hot New Stuff." URL "https://projects.kde.org/projects/kdesupport/attica" TYPE OPTIONAL ) if (NOT LIBATTICA_FOUND) set(GHNS FALSE) else () message(STATUS "WARNING: You are compiling with Get Hot New Stuff enabled. Do not do that when building distribution packages. GHNS is unusable these days until someone starts maintaining it again.") endif () endif () find_package(X11) if(X11_FOUND) find_package(Qt5 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS X11Extras ) set(HAVE_X11 TRUE) add_definitions(-DHAVE_X11) else() set(HAVE_X11 FALSE) endif() # use sane compile flags add_definitions( -DQT_USE_QSTRINGBUILDER -DQT_STRICT_ITERATORS -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DQT_NO_URL_CAST_FROM_STRING -DQT_NO_CAST_TO_ASCII ) # only with this definition will all the FOO_TEST_EXPORT macro do something # TODO: check if this can be moved to only those places which make use of it, # to reduce global compiler definitions that would trigger a recompile of # everything on a change (like adding/removing tests to/from the build) if(BUILD_TESTING) add_definitions(-DCOMPILING_TESTS) endif() # overcome some platform incompatibilities if(WIN32) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/winquirks) add_definitions(-D_USE_MATH_DEFINES) add_definitions(-DNOMINMAX) set(WIN32_PLATFORM_NET_LIBS ws2_32.lib netapi32.lib) endif() ########################### ############################ ## Required dependencies ## ############################ ########################### find_package(Perl REQUIRED) find_package(ZLIB REQUIRED) add_definitions(-DBOOST_ALL_NO_LIB) find_package(Boost REQUIRED COMPONENTS system) # for pigment and stage if (NOT Boost_FOUND) message(FATAL_ERROR "Did not find Boost. Boost is required for the core libraries, stage, sheets.") endif () ########################### ############################ ## Optional dependencies ## ############################ ########################### ## ## Check for OpenEXR ## macro_optional_find_package(OpenEXR) macro_bool_to_01(OPENEXR_FOUND HAVE_OPENEXR) ## ## Test for GNU Scientific Library ## macro_optional_find_package(GSL 1.7) set_package_properties(GSL_FOUND PROPERTIES DESCRIPTION "GNU Scientific Library" URL "https://www.gnu.org/software/gsl" PURPOSE "Required by Sheets' solver plugin" TYPE OPTIONAL ) macro_bool_to_01(GSL_FOUND HAVE_GSL) configure_file(config-gsl.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-gsl.h ) ## ## Test for Phonon4Qt5 ## find_package(Phonon4Qt5 QUIET) set_package_properties(Phonon4Qt5 PROPERTIES DESCRIPTION "Abstraction lib for multimedia applications" URL "https://www.kde.org/" PURPOSE "Required by Stage event actions and Videoshape plugin" TYPE OPTIONAL ) ## ## Test for KF5CalendarCore ## find_package(KF5CalendarCore CONFIG QUIET) set_package_properties(KF5CalendarCore PROPERTIES DESCRIPTION "KDE Calendar Library" URL "https://www.kde.org/" PURPOSE "Required by Plan Ical export and optionally used by semantic item Event" TYPE OPTIONAL ) ## ## Test for KF5Contacts ## find_package(KF5Contacts CONFIG QUIET) set_package_properties(KF5Contacts PROPERTIES DESCRIPTION "KDE Address book Library" URL "https://www.kde.org/" PURPOSE "Optionally used by semantic item Contact" TYPE OPTIONAL ) ## ## Test for KF5AkonadiContact ## find_package(KF5AkonadiContact CONFIG QUIET) set_package_properties(KF5AkonadiContact PROPERTIES DESCRIPTION "Library for Accessing Contacts stored in Akonadi" URL "https://www.kde.org/" PURPOSE "Optionally used by Plan" TYPE OPTIONAL ) ## ## Test for KF5AkonadiCore ## find_package(KF5Akonadi CONFIG QUIET) set_package_properties(KF5Akonadi PROPERTIES DESCRIPTION "Library for general Access to Akonadi" URL "https://www.kde.org/" PURPOSE "Optionally used by semantic items Event and Contact" TYPE OPTIONAL ) ## ## Test for KGantt ## macro_optional_find_package(KGantt 2.6.0 QUIET) set_package_properties(KGantt PROPERTIES DESCRIPTION "Library for creating Gantt diagrams (part of KDiagram)" URL "https://www.kde.org/" PURPOSE "Required by Plan" TYPE RECOMMENDED ) ## ## Test for KChart ## macro_optional_find_package(KChart 2.6.0 QUIET) set_package_properties(KChart PROPERTIES DESCRIPTION "Library for creating business charts (part of KDiagram)" URL "https://www.kde.org/" PURPOSE "Required by Chart shape and Plan" TYPE RECOMMENDED ) ## ## Test for KReport ## macro_optional_find_package(KReport 3.0 QUIET) ## Test if the package is a stable version ## This is a temporary measure to avoid that the whole calligra build fails on build.kde.org if (KReport_FOUND AND KReport_VERSION_PATCH GREATER 80) message(WARNING "KReport version found is not stable: ${KReport_VERSION}") set(KReport_FOUND FALSE) endif() set_package_properties(KReport PROPERTIES DESCRIPTION "A framework for the creation and generation of reports in multiple formats" URL "https://community.kde.org/KReport" PURPOSE "Required by Plan" TYPE RECOMMENDED ) ## ## Test for KPropertyWidgets ## macro_optional_find_package(KPropertyWidgets 3.0 QUIET) ## Test if the package is a stable version ## This is a temporary measure to avoid that the whole calligra build fails on build.kde.org if (KPropertyWidgets_FOUND AND KPropertyWidgets_VERSION_PATCH GREATER 80) message(WARNING "KPropertyWidgets version found is not stable: ${KPropertyWidgets_VERSION}") set(KPropertyWidgets_FOUND FALSE) endif() set_package_properties(KPropertyWidgets PROPERTIES DESCRIPTION "A property editing framework with editor widget" URL "https://community.kde.org/KProperty" PURPOSE "Required by Plan" TYPE RECOMMENDED ) ## ## Test for eigen3 ## macro_optional_find_package(Eigen3) set_package_properties(Eigen3 PROPERTIES DESCRIPTION "C++ template library for linear algebra" URL "http://eigen.tuxfamily.org" PURPOSE "Required by Calligra Sheets" TYPE RECOMMENDED ) ## ## Test for QCA2 ## macro_optional_find_package(Qca-qt5 2.1.0 QUIET) set_package_properties(Qca-qt5 PROPERTIES DESCRIPTION "Qt Cryptographic Architecture" URL "http:/download.kde.org/stable/qca-qt5" PURPOSE "Required for encrypted OpenDocument files and encrypted xls files support (available as a module in kdesupport)" TYPE OPTIONAL ) ## ## Test for soprano ## # QT5TODO: push for released (and maintained) Qt5 version of Soprano, T462, T461 # macro_optional_find_package(Soprano) set(Soprano_FOUND FALSE) set_package_properties(Soprano PROPERTIES DESCRIPTION "RDF handling library" URL "http://soprano.sourceforge.net/" PURPOSE "Required to handle RDF metadata in ODF" TYPE OPTIONAL ) if(NOT Soprano_FOUND) set(SOPRANO_INCLUDE_DIR "") endif() ## ## Test for marble ## macro_optional_find_package(Marble CONFIG) set_package_properties(Marble PROPERTIES DESCRIPTION "World Globe Widget library" URL "https://marble.kde.org/" PURPOSE "Required by RDF to show locations on a map" TYPE OPTIONAL ) ## ## Test for lcms ## macro_optional_find_package(LCMS2) set_package_properties(LCMS2 PROPERTIES DESCRIPTION "LittleCMS, a color management engine" URL "http://www.littlecms.com" PURPOSE "Will be used for color management" TYPE OPTIONAL ) if(LCMS2_FOUND) if(NOT ${LCMS2_VERSION} VERSION_LESS 2040 ) set(HAVE_LCMS24 TRUE) endif() set(HAVE_REQUIRED_LCMS_VERSION TRUE) set(HAVE_LCMS2 TRUE) endif() ## ## Test for Vc ## set(OLD_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ) set(HAVE_VC FALSE) if( NOT MSVC) macro_optional_find_package(Vc 1.1.0) set_package_properties(Vc PROPERTIES DESCRIPTION "Portable, zero-overhead SIMD library for C++" URL "https://github.com/VcDevel/Vc" PURPOSE "Required by the pigment for vectorization" TYPE OPTIONAL ) macro_bool_to_01(Vc_FOUND HAVE_VC) macro_bool_to_01(PACKAGERS_BUILD DO_PACKAGERS_BUILD) endif() configure_file(config-vc.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-vc.h ) if(HAVE_VC) message(STATUS "Vc found!") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/vc") include (VcMacros) if(Vc_COMPILER_IS_CLANG) set(ADDITIONAL_VC_FLAGS "-Wabi -ffp-contract=fast -fPIC") elseif (NOT MSVC) set(ADDITIONAL_VC_FLAGS "-Wabi -fabi-version=0 -ffp-contract=fast -fPIC") endif() #Handle Vc master if(Vc_COMPILER_IS_GCC OR Vc_COMPILER_IS_CLANG) AddCompilerFlag("-std=c++11" _ok) if(NOT _ok) AddCompilerFlag("-std=c++0x" _ok) endif() endif() macro(ko_compile_for_all_implementations_no_scalar _objs _src) if(PACKAGERS_BUILD) vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} ONLY SSE2 SSSE3 SSE4_1 AVX AVX2+FMA+BMI2) else() set(${_objs} ${_src}) endif() endmacro() macro(ko_compile_for_all_implementations _objs _src) if(PACKAGERS_BUILD) vc_compile_for_all_implementations(${_objs} ${_src} FLAGS ${ADDITIONAL_VC_FLAGS} ONLY Scalar SSE2 SSSE3 SSE4_1 AVX AVX2+FMA+BMI2) else() set(${_objs} ${_src}) endif() endmacro() if (NOT PACKAGERS_BUILD) # Optimize the whole Calligra for current architecture set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Vc_DEFINITIONS}") endif () endif() set(CMAKE_MODULE_PATH ${OLD_CMAKE_MODULE_PATH} ) if(WIN32) set(LIB_INSTALL_DIR ${LIB_INSTALL_DIR} RUNTIME DESTINATION ${BIN_INSTALL_DIR} LIBRARY ${INSTALL_TARGETS_DEFAULT_ARGS} ARCHIVE ${INSTALL_TARGETS_DEFAULT_ARGS} ) endif() ## ## Test for Fontconfig ## ## Only test if on non-Windows system if(NOT WIN32 AND NOT APPLE) macro_optional_find_package(Fontconfig) set_package_properties(Fontconfig PROPERTIES DESCRIPTION "Library for configuring and customizing font access" URL "http://fontconfig.org" PURPOSE "Required to handle exact font size" TYPE RECOMMENDED ) endif() ## ## Test for Freetype ## ## Only test if on non-Windows system if(NOT WIN32 AND NOT APPLE) macro_optional_find_package(Freetype) set_package_properties(Freetype PROPERTIES DESCRIPTION "A Free, High-Quality, and Portable Font Engine" URL "http://www.freetype.org/" PURPOSE "Required to handle exact font size" TYPE RECOMMENDED ) endif() if(NOT FONTCONFIG_FOUND OR NOT FREETYPE_FOUND) set(FONTCONFIG_INCLUDE_DIR "") set(FREETYPE_INCLUDE_DIRS "") else() add_definitions( -DSHOULD_BUILD_FONT_CONVERSION ) endif() ## ## Test endianess ## include (TestBigEndian) test_big_endian(CMAKE_WORDS_BIGENDIAN) ## ## Test SharedMimeInfo ## macro_optional_find_package(SharedMimeInfo) set_package_properties(SharedMimeInfo PROPERTIES DESCRIPTION "Shared Mime Info" URL "http://freedesktop.org/wiki/Software/shared-mime-info" PURPOSE "Required to determine file types SVM or all of MSOOXML." TYPE RECOMMENDED ) ## ## Test for Okular ## macro_optional_find_package(Okular5 0.99.60 QUIET) set_package_properties(Okular5 PROPERTIES DESCRIPTION "A unified document viewer" URL "https://okular.kde.org/" PURPOSE "Required to build the plugins for Okular" TYPE OPTIONAL ) ## ## Test for librevenge ## macro_optional_find_package(LibRevenge) set_package_properties(LibRevenge PROPERTIES DESCRIPTION "A base library for writing document import filters" URL "http://sf.net/p/libwpd/librevenge/" PURPOSE "Required by various import filters" TYPE OPTIONAL ) ## ## Test for libodfgen ## macro_optional_find_package(LibOdfGen) set_package_properties(LibOdfGen PROPERTIES DESCRIPTION "Open Document Format Generation Library" URL "http://sf.net/p/libwpd/libodfgen/" PURPOSE "Required by various import filters" TYPE OPTIONAL ) ## ## Test for WordPerfect Document Library ## macro_optional_find_package(LibWpd) set_package_properties(LibWpd PROPERTIES DESCRIPTION "WordPerfect Document Library" URL "http://libwpd.sourceforge.net/" PURPOSE "Required by the Words WPD import filter" TYPE OPTIONAL ) ## ## Test for WordPerfect Graphics Library ## macro_optional_find_package(LibWpg) set_package_properties(LibWpg PROPERTIES DESCRIPTION "WordPerfect Graphics Library" URL "http://libwpg.sourceforge.net/" PURPOSE "Required by the Karbon WPG import filter" TYPE OPTIONAL ) ## ## Test for Microsoft Works Document Library ## macro_optional_find_package(LibWps) set_package_properties(LibWps PROPERTIES DESCRIPTION "Microsoft Works Document Library" URL "http://libwps.sourceforge.net/" PURPOSE "Required by the Words WPS import filter" TYPE OPTIONAL ) ## ## Test for Microsoft Visio Document Library ## macro_optional_find_package(LibVisio) set_package_properties(LibVisio PROPERTIES DESCRIPTION "Visio Import Filter Library" URL "https://wiki.documentfoundation.org/DLP/Libraries/libvisio" PURPOSE "Required by the Flow visio import filter" TYPE OPTIONAL ) ## ## Test for Apple Keynote Document Library ## macro_optional_find_package(LibEtonyek) set_package_properties(LibEtonyek PROPERTIES DESCRIPTION "Apple Keynote Document Library" URL "https://wiki.documentfoundation.org/DLP/Libraries/libetonyek" PURPOSE "Required by the Stage keynote import filter" TYPE OPTIONAL ) ## ## Test for qt-poppler ## macro_optional_find_package(Poppler) set_package_properties(Poppler PROPERTIES DESCRIPTION "A PDF rendering library" URL "http://poppler.freedesktop.org" PURPOSE "Required by the Karbon PDF import filter and CSTester PDF feature" TYPE OPTIONAL ) ## ## Test for qt-poppler not-officially-supported XPDF Headers ## Installing these is off by default in poppler sources, so lets make ## sure they're really there before trying to build the pdf import ## macro_optional_find_package(PopplerXPDFHeaders) set_package_properties(PopplerXPDFHeaders PROPERTIES DESCRIPTION "XPDF headers in the Poppler Qt5 interface library" URL "http://poppler.freedesktop.org" PURPOSE "Required by the Karbon PDF import filter" TYPE OPTIONAL ) ## ## Test for libgit2 ## macro_optional_find_package(Libgit2) ## ## Generate a file for prefix information ## ############################### ################################ ## Add Calligra helper macros ## ################################ ############################### include(MacroCalligraAddBenchmark) #################### ##################### ## Define includes ## ##################### #################### # WARNING: make sure that QT_INCLUDES is the first directory to be added to include_directory before # any other include directory # for config.h and includes (if any?) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/interfaces ) set(KOVERSION_INCLUDES ${CMAKE_SOURCE_DIR}/libs/version ${CMAKE_BINARY_DIR}/libs/version ) include_directories(${KOVERSION_INCLUDES}) # koplugin is at the bottom of the stack set(KOPLUGIN_INCLUDES ${CMAKE_SOURCE_DIR}/libs/plugin) set(KUNDO2_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kundo2 ${CMAKE_BINARY_DIR}/libs/kundo2) # koodf is at the bottom of the stack set(KOODF_INCLUDES ${CMAKE_SOURCE_DIR}/libs/odf ${CMAKE_SOURCE_DIR}/libs/store ${CMAKE_BINARY_DIR}/libs/odf ${CMAKE_BINARY_DIR}/libs/store ${KOVERSION_INCLUDES} ) # pigment depends on koplugin and lcms set(PIGMENT_INCLUDES ${KOPLUGIN_INCLUDES} ${KOVERSION_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/pigment ${CMAKE_BINARY_DIR}/libs/pigment ${CMAKE_SOURCE_DIR}/libs/pigment/compositeops ${CMAKE_SOURCE_DIR}/libs/pigment/resources ${Boost_INCLUDE_DIRS} ) # flake depends on koodf and pigment set(FLAKE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/flake ${KOODF_INCLUDES} ${PIGMENT_INCLUDES} ${KUNDO2_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/widgetutils ${CMAKE_SOURCE_DIR}/libs/flake/commands ${CMAKE_SOURCE_DIR}/libs/flake/tools ${CMAKE_SOURCE_DIR}/libs/flake/svg ${CMAKE_BINARY_DIR}/libs/flake) # vectorimage set(VECTORIMAGE_INCLUDES ${CMAKE_SOURCE_DIR}/libs/vectorimage ${CMAKE_SOURCE_DIR}/libs/vectorimage/libemf ${CMAKE_SOURCE_DIR}/libs/vectorimage/libsvm ${CMAKE_SOURCE_DIR}/libs/vectorimage/libwmf) # KoText depends on koplugin, odf set(KOTEXT_INCLUDES ${CMAKE_SOURCE_DIR}/libs/text ${CMAKE_BINARY_DIR}/libs/text ${CMAKE_SOURCE_DIR}/libs/text/changetracker ${CMAKE_SOURCE_DIR}/libs/text/styles ${CMAKE_SOURCE_DIR}/libs/text/opendocument ${SOPRANO_INCLUDE_DIR} ${FLAKE_INCLUDES} ${KOODF_INCLUDES}) # TextLayout depends on kotext set(TEXTLAYOUT_INCLUDES ${KOTEXT_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/textlayout ${CMAKE_BINARY_DIR}/libs/textlayout) # Widgets depends on kotext and flake set(KOWIDGETS_INCLUDES ${KOTEXT_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/widgetutils ${CMAKE_BINARY_DIR}/libs/widgetutils ${CMAKE_SOURCE_DIR}/libs/widgets ${CMAKE_BINARY_DIR}/libs/widgets) # BasicFlakes depends on flake, widgets set(BASICFLAKES_INCLUDES ${KOWIDGETS_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/basicflakes ${CMAKE_SOURCE_DIR}/libs/basicflakes/tools) # komain depends on kotext & flake set(KOMAIN_INCLUDES ${KOWIDGETS_INCLUDES} ${TEXTLAYOUT_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/main ${CMAKE_BINARY_DIR}/libs/main ${CMAKE_SOURCE_DIR}/libs/main/config) set(KORDF_INCLUDES ${KOMAIN_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/rdf ) set(KORDF_LIBS kordf) if(SHOULD_BUILD_FEATURE_SCRIPTING) set(KOKROSS_INCLUDES ${CMAKE_SOURCE_DIR}/libs/kross ${CMAKE_BINARY_DIR}/libs/kross) endif() # kopageapp set(KOPAGEAPP_INCLUDES ${TEXTLAYOUT_INCLUDES} ${PIGMENT_INCLUDES} ${KOMAIN_INCLUDES} ${CMAKE_SOURCE_DIR}/libs/widgets ${CMAKE_SOURCE_DIR}/libs/pageapp ${CMAKE_SOURCE_DIR}/libs/pageapp/commands ${CMAKE_BINARY_DIR}/libs/pageapp ) ############################################# #### filter libraries #### ############################################# # libodf2 set(KOODF2_INCLUDES ${CMAKE_SOURCE_DIR}/filters/libodf2 ${CMAKE_SOURCE_DIR}/filters/libodf2/chart ) # libodfreader set(KOODFREADER_INCLUDES ${CMAKE_SOURCE_DIR}/filters/libodfreader ) ################################################### #################################################### ## Detect which products/features can be compiled ## #################################################### ################################################### if (NOT WIN32) set(NOT_WIN TRUE) endif() if (NOT QT_MAC_USE_COCOA) set(NOT_COCOA TRUE) endif() if (KReport_FOUND AND KREPORT_SCRIPTING) set(KReport_WithScripting_FOUND TRUE) endif() calligra_drop_product_on_bad_condition( FEATURE_RDF Soprano_FOUND "Soprano not found" ) -calligra_drop_product_on_bad_condition( PART_STAGE - Qt5WebKitWidgets_FOUND "Qt5WebKitWidgets devel not found" -) +# calligra_drop_product_on_bad_condition( PART_STAGE +# Qt5WebKitWidgets_FOUND "Qt5WebKitWidgets devel not found" +# ) calligra_drop_product_on_bad_condition( PART_SHEETS EIGEN3_FOUND "Eigen devel not found" ) calligra_drop_product_on_bad_condition( OKULAR_GENERATOR_ODP Okular5_FOUND "Okular devel not found" ) calligra_drop_product_on_bad_condition( OKULAR_GENERATOR_ODT Okular5_FOUND "Okular devel not found" ) calligra_drop_product_on_bad_condition( PLUGIN_CHARTSHAPE KChart_FOUND "KChart devel not found" ) calligra_drop_product_on_bad_condition( PLUGIN_VIDEOSHAPE Phonon4Qt5_FOUND "Phonon4Qt5 devel not found" ) calligra_drop_product_on_bad_condition( FILTER_KEY_TO_ODP LIBODFGEN_FOUND "libodfgen devel not found" LIBETONYEK_FOUND "libetonyek devel not found" LIBREVENGE_FOUND "librevenge devel not found" ) calligra_drop_product_on_bad_condition( FILTER_VISIO_TO_ODG LIBODFGEN_FOUND "libodfgen devel not found" LIBVISIO_FOUND "libvisio devel not found" LIBREVENGE_FOUND "librevenge devel not found" ) calligra_drop_product_on_bad_condition( FILTER_WORDPERFECT_TO_ODT LIBODFGEN_FOUND "libodfgen devel not found" LIBWPD_FOUND "libwpd devel not found" LIBWPG_FOUND "libwpg devel not found" LIBREVENGE_FOUND "librevenge devel not found" ) calligra_drop_product_on_bad_condition( FILTER_WORKS_TO_ODT LIBODFGEN_FOUND "libodfgen devel not found" LIBWPS_FOUND "libwps devel not found" LIBREVENGE_FOUND "librevenge devel not found" ) calligra_drop_product_on_bad_condition( FILTER_WPG_TO_SVG LIBWPG_FOUND "libwpg devel not found" LIBREVENGE_FOUND "librevenge devel not found" ) calligra_drop_product_on_bad_condition( FILTER_WPG_TO_ODG LIBODFGEN_FOUND "libodfgen devel not found" LIBWPG_FOUND "libwpg devel not found" LIBREVENGE_FOUND "librevenge devel not found" ) calligra_drop_product_on_bad_condition( FILTER_PDF_TO_SVG NOT_WIN "not supported on Windows" PopplerXPDFHeaders_FOUND "poppler xpdf headers not found" ) calligra_drop_product_on_bad_condition( FILTER_HTML_TO_ODS NOT_WIN "not supported on Windows" NOT_COCOA "not supported with Qt Cocoa" KF5KHtml_FOUND "KF5KHtml devel not found" ) calligra_drop_product_on_bad_condition( FILTER_SHEETS_TO_HTML NOT_WIN "not supported on Windows" NOT_COCOA "not supported with Qt Cocoa" ) calligra_drop_product_on_bad_condition( FILTER_KSPREAD_TO_LATEX NOT_WIN "not supported on Windows" NOT_COCOA "not supported with Qt Cocoa" ) calligra_drop_product_on_bad_condition( APP_BRAINDUMP NOT_WIN "unmaintained on Windows" ) calligra_drop_product_on_bad_condition( APP_PLAN KGantt_FOUND "KGantt devel not found" KChart_FOUND "KChart devel not found" KReport_WithScripting_FOUND "KReport with scripting support not found" KPropertyWidgets_FOUND "KPropertyWidgets not found" ) calligra_drop_product_on_bad_condition( PLUGIN_CALLIGRAGEMINI_GIT LIBGIT2_FOUND "libgit2 devel not found" ) calligra_drop_product_on_bad_condition( PART_QTQUICK Qt5OpenGL_FOUND "Qt OpenGL not found" Qt5Declarative_FOUND "QtDeclarative not found" ) calligra_drop_product_on_bad_condition( PART_COMPONENTS Qt5Quick_FOUND "QtQuick not found" ) calligra_drop_product_on_bad_condition( APP_SLIDECOMPARE Qt5OpenGL_FOUND "Qt OpenGL not found" ) ############################################# #### Backward compatibility BUILD_x=off #### ############################################# # workaround: disable directly all products which might be activated by internal # dependencies, but belong to scope of old flag calligra_drop_products_on_old_flag(braindump APP_BRAINDUMP) calligra_drop_products_on_old_flag(flow APP_FLOW) calligra_drop_products_on_old_flag(karbon APP_KARBON) calligra_drop_products_on_old_flag(plan APP_PLAN) calligra_drop_products_on_old_flag(sheets PART_SHEETS APP_SHEETS) calligra_drop_products_on_old_flag(stage PART_STAGE APP_STAGE) calligra_drop_products_on_old_flag(words PART_WORDS APP_WORDS) ############################################# #### Temporarily broken products #### ############################################# # If a product does not build due to some temporary brokeness disable it here, # by calling calligra_disable_product with the product id and the reason, # e.g.: # calligra_disable_product(APP_FOO "isn't buildable at the moment") ############################################# #### Calculate buildable products #### ############################################# calligra_drop_unbuildable_products() ############################################# #### Setup product-depending vars #### ############################################# if(SHOULD_BUILD_FEATURE_RDF) add_definitions( -DSHOULD_BUILD_RDF ) endif() ################### #################### ## Subdirectories ## #################### ################### add_subdirectory(words) if (SHOULD_BUILD_APP_FLOW) add_subdirectory(flow) endif () add_subdirectory(stage) if(SHOULD_BUILD_APP_PLAN) add_subdirectory(plan) endif() add_subdirectory(sheets) if(SHOULD_BUILD_APP_KARBON) add_subdirectory(karbon) endif() if(SHOULD_BUILD_APP_BRAINDUMP) add_subdirectory(braindump) endif() if(SHOULD_BUILD_DOC) add_subdirectory(doc) endif() if(SHOULD_BUILD_PART_QTQUICK) add_subdirectory(qtquick) endif() if(SHOULD_BUILD_PART_COMPONENTS) add_subdirectory(components) endif() if(SHOULD_BUILD_GEMINI) add_subdirectory(gemini) endif() # non-app directories are moved here because they can depend on SHOULD_BUILD_{appname} variables set above add_subdirectory(libs) add_subdirectory(interfaces) add_subdirectory(pics) add_subdirectory(plugins) add_subdirectory(servicetypes) add_subdirectory(devtools) add_subdirectory(extras) add_subdirectory(filters) add_subdirectory(data) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) calligra_product_deps_report("product_deps") calligra_log_should_build() add_custom_target(apidox doc/api/gendocs.pl WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) configure_file(KoConfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h ) if (SHOULD_BUILD_DEVEL_HEADERS) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/KoConfig.h DESTINATION ${INCLUDE_INSTALL_DIR}/calligra COMPONENT Devel) endif() if (BUILD_TESTING) add_subdirectory(tests) endif(BUILD_TESTING) diff --git a/stage/part/CMakeLists.txt b/stage/part/CMakeLists.txt index 558472a6563..f37562bacb7 100644 --- a/stage/part/CMakeLists.txt +++ b/stage/part/CMakeLists.txt @@ -1,227 +1,227 @@ project(stagepart) include_directories( ${KOMAIN_INCLUDES} ${KOPAGEAPP_INCLUDES} ${Boost_INCLUDE_DIR}) if (NOT WIN32) ## Disable tests in Windows whilst they break builds add_subdirectory(tests) endif() add_subdirectory(tools) ### calligrastageprivate ### set( calligrastageprivate_LIB_SRCS StageDebug.cpp KPrFactory.cpp KPrDocument.cpp KPrDeclarations.cpp KPrPart.cpp KPrView.cpp KPrViewModePresentation.cpp KPrViewModeNotes.cpp KPrViewModeSlidesSorter.cpp KPrViewModePreviewPageEffect.cpp KPrViewModePreviewShapeAnimations.cpp KPrPresentationTool.cpp KPrAnimationDirector.cpp KPrShapeAnimations.cpp KPrShapeManagerAnimationStrategy.cpp KPrShapeManagerDisplayMasterStrategy.cpp KPrPageData.cpp KPrPage.cpp KPrMasterPage.cpp KPrNotes.cpp KPrSoundData.cpp KPrSoundCollection.cpp KPrEventActionData.cpp KPrEventActionWidget.cpp KPrPageApplicationData.cpp KPrShapeApplicationData.cpp KPrCustomSlideShows.cpp KPrPresenterViewBaseInterface.cpp KPrPresenterViewInterface.cpp KPrPresenterViewSlidesInterface.cpp KPrPresenterViewToolWidget.cpp KPrPresenterViewWidget.cpp KPrEndOfSlideShowPage.cpp KPrPlaceholderShape.cpp KPrPlaceholderShapeFactory.cpp KPrPlaceholderStrategy.cpp KPrPlaceholderPictureStrategy.cpp KPrPlaceholderTextStrategy.cpp KPrPresentationHighlightWidget.cpp KPrPresentationDrawWidget.cpp KPrPresentationBlackWidget.cpp KPrPresentationStrategy.cpp KPrPresentationHighlightStrategy.cpp KPrPresentationBlackStrategy.cpp KPrPresentationStrategyBase.cpp KPrPresentationToolEventForwarder.cpp KPrPresentationDrawStrategy.cpp KPrPageSelectStrategyBase.cpp KPrPageSelectStrategyFixed.cpp KPrPageSelectStrategyActive.cpp KPrDurationParser.cpp KPrHtmlExport.cpp KPrHtmlExportUiDelegate.cpp KPrPicturesImport.cpp KPrPdfPrintJob.cpp KPrSlidesSorterDocumentModel.cpp KPrSlidesManagerView.cpp KPrCustomSlideShowsModel.cpp KPrSlidesSorterItemDelegate.cpp KPrPageLayoutWidget.cpp commands/KPrAnimationCreateCommand.cpp commands/KPrAnimationRemoveCommand.cpp commands/KPrPageEffectSetCommand.cpp commands/KPrPageLayoutCommand.cpp commands/KPrEditCustomSlideShowsCommand.cpp commands/KPrAddCustomSlideShowCommand.cpp commands/KPrDelCustomSlideShowCommand.cpp commands/KPrRenameCustomSlideShowCommand.cpp commands/KPrDeleteSlidesCommand.cpp commands/KPrEditAnimationTimeLineCommand.cpp commands/KPrAnimationEditNodeTypeCommand.cpp commands/KPrReorderAnimationCommand.cpp commands/KPrReplaceAnimationCommand.cpp dockers/KPrPreviewWidget.cpp pageeffects/KPrPageEffectRunner.cpp pageeffects/KPrPageEffect.cpp pageeffects/KPrPageEffectStrategy.cpp pageeffects/KPrPageEffectFactory.cpp pageeffects/KPrPageEffectRegistry.cpp animations/KPrAnimationBase.cpp animations/KPrAnimSet.cpp animations/KPrAnimate.cpp animations/KPrAnimateColor.cpp animations/KPrAnimateMotion.cpp animations/KPrAnimateTransform.cpp animations/KPrAnimTransitionFilter.cpp animations/KPrAnimationFactory.cpp animations/KPrAnimationCache.cpp animations/KPrTextBlockPaintStrategy.cpp animations/KPrShapeAnimation.cpp animations/KPrAnimationStep.cpp animations/KPrAnimationSubStep.cpp animations/KPrAnimationLoader.cpp animations/KPrAnimationData.cpp animations/strategy/KPrAnimationValue.cpp animations/strategy/KPrFormulaParser.cpp animations/strategy/KPrAnimationAttribute.cpp animations/strategy/KPrSmilValues.cpp animations/strategy/KPrAttributeX.cpp animations/strategy/KPrAttributeY.cpp animations/strategy/KPrAttributeWidth.cpp animations/strategy/KPrAttributeHeight.cpp animations/strategy/KPrAttributeRotate.cpp pagelayout/KPrPlaceholder.cpp pagelayout/KPrPageLayout.cpp pagelayout/KPrPageLayouts.cpp pagelayout/KPrPageLayoutSharedSavingData.cpp pagelayout/KPrPlaceholders.cpp ui/KPrConfigureSlideShowDialog.cpp ui/KPrConfigurePresenterViewDialog.cpp ui/KPrPresentationToolWidget.cpp ui/KPrHtmlExportDialog.cpp tools/KPrPlaceholderTool.cpp tools/KPrPlaceholderToolFactory.cpp ) if(Qt5DBus_FOUND) set( calligrastageprivate_LIB_SRCS ${calligrastageprivate_LIB_SRCS} KPrViewAdaptor.cpp KPrPresentationToolAdaptor.cpp ) endif() ki18n_wrap_ui(calligrastageprivate_LIB_SRCS ui/KPrConfigureSlideShow.ui ui/KPrConfigurePresenterView.ui ui/KPrPresentationTool.ui ui/KPrHtmlExport.ui ) add_library(calligrastageprivate SHARED ${calligrastageprivate_LIB_SRCS}) generate_export_header(calligrastageprivate BASE_NAME stage EXPORT_FILE_NAME stage_generated_export.h ) target_link_libraries(calligrastageprivate PUBLIC kopageapp PRIVATE kowidgets kotextlayout koplugin KF5::Archive KF5::IconThemes Qt5::Svg - Qt5::WebKitWidgets +# Qt5::WebKitWidgets ) if(HAVE_OPENGL) target_link_libraries(calligrastageprivate PRIVATE Qt5::OpenGL) endif() set_target_properties(calligrastageprivate PROPERTIES VERSION ${GENERIC_CALLIGRA_LIB_VERSION} SOVERSION ${GENERIC_CALLIGRA_LIB_SOVERSION} ) install(TARGETS calligrastageprivate ${INSTALL_TARGETS_DEFAULT_ARGS}) ### calligrastagepart ### set(calligrastagepart_PART_SRCS KPrFactoryInit.cpp ) add_library(calligrastagepart MODULE ${calligrastagepart_PART_SRCS}) calligra_part_desktop_to_json(calligrastagepart stagepart.desktop) target_link_libraries(calligrastagepart calligrastageprivate ) install(TARGETS calligrastagepart DESTINATION ${PLUGIN_INSTALL_DIR}/calligra/parts) ### GUI files ### install( FILES calligrastage.rc calligrastage_readonly.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/calligrastage) install( FILES calligrastagerc DESTINATION ${CONFIG_INSTALL_DIR} ) ### Predefined Animations ### install(FILES animations/animations.xml DESTINATION ${DATA_INSTALL_DIR}/calligrastage/animations) ### Include files ### if (SHOULD_BUILD_DEVEL_HEADERS) install( FILES stage_export.h KPrAnimationDirector.h KPrCustomSlideShows.h KPrDocument.h KPrPage.h KPrPageData.h KPrDeclarations.h KPrPresentationTool.h KPrNotes.h KPrShapeAnimations.h KPrView.h KPrViewModePresentation.h DESTINATION ${INCLUDE_INSTALL_DIR}/calligrastage/part COMPONENT Devel) install( FILES animations/KPrAnimationData.h animations/KPrAnimationStep.h animations/KPrShapeAnimation.h DESTINATION ${INCLUDE_INSTALL_DIR}/calligrastage/part/animations COMPONENT Devel) install( FILES pagelayout/KPrPlaceholders.h DESTINATION ${INCLUDE_INSTALL_DIR}/calligrastage/part/pagelayout COMPONENT Devel) endif() diff --git a/stage/part/ui/KPrHtmlExportDialog.cpp b/stage/part/ui/KPrHtmlExportDialog.cpp index 11f89a1df36..3e2bd7ae1ec 100644 --- a/stage/part/ui/KPrHtmlExportDialog.cpp +++ b/stage/part/ui/KPrHtmlExportDialog.cpp @@ -1,340 +1,340 @@ /* This file is part of the KDE project * Copyright (C) 2009 Yannick Motta * Copyright (C) 2009-2010 Benjamin Port * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "KPrHtmlExportDialog.h" #include #include #include -#include +// #include #include #include #include #include #include #include #include #include "KPrHtmlExport.h" KPrHtmlExportDialog::KPrHtmlExportDialog(const QList &slides, const QString &title, const QString &author, QWidget *parent) : KoDialog(parent) , m_allSlides(slides) , m_title(title) { QWidget *widget = new QWidget(this); ui.setupUi(widget); setMainWidget(widget); setCaption( i18n("Html Export")); setButtonText(Ok, i18n("Export")); ui.klineedit_title->setText(m_title); ui.klineedit_author->setText(author); connect(ui.pushbuttonBrowseTemplate, SIGNAL(clicked()), this, SLOT(browserAction())); - connect(&preview, SIGNAL(loadFinished(bool)), this, SLOT(renderPreview())); +// connect(&preview, SIGNAL(loadFinished(bool)), this, SLOT(renderPreview())); connect(ui.klineedit_title, SIGNAL(editingFinished()), this, SLOT(generatePreview())); connect(ui.klineedit_author, SIGNAL(editingFinished()), this, SLOT(generatePreview())); connect(ui.kListBox_slides, SIGNAL(currentRowChanged(int)), this, SLOT(generatePreview(int))); connect(ui.kcombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(generatePreview())); connect(ui.pushButton_selectAll, SIGNAL(clicked()), this, SLOT(checkAllItems())); connect(ui.pushButton_deselectAll, SIGNAL(clicked()), this, SLOT(uncheckAllItems())); connect(ui.toolButton_previous, SIGNAL(clicked()), this, SLOT(generatePrevious())); connect(ui.toolButton_next, SIGNAL(clicked()), this, SLOT(generateNext())); connect(ui.pushButton_Favorite, SIGNAL(clicked()), this, SLOT(favoriteAction())); connect(ui.kcombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateFavoriteButton())); this->updateFavoriteButton(); this->frameToRender = 0; this->generateSlidesNames(slides); this->loadTemplatesList(); this->generatePreview(); } QList KPrHtmlExportDialog::checkedSlides() { QList selectedSlides; int countItems = ui.kListBox_slides->count(); for (int i = 0; i < countItems; ++i) { if (ui.kListBox_slides->item(i)->checkState() == Qt::Checked) { selectedSlides.append(this->m_allSlides.at(i)); } } return selectedSlides; } void KPrHtmlExportDialog::checkAllItems() { int countItems = ui.kListBox_slides->count(); for (int i = 0; i < countItems; ++i ){ ui.kListBox_slides->item(i)->setCheckState(Qt::Checked); } } void KPrHtmlExportDialog::uncheckAllItems() { int countItems = ui.kListBox_slides->count(); for (int i = 0; i < countItems; ++i) { ui.kListBox_slides->item(i)->setCheckState(Qt::Unchecked); } } QStringList KPrHtmlExportDialog::slidesNames(){ QStringList names; int countItems = ui.kListBox_slides->count(); for (int i = 0; i < countItems; ++i) { if (ui.kListBox_slides->item(i)->checkState() == Qt::Checked) { names.append(ui.kListBox_slides->item(i)->text()); } } return names; } QUrl KPrHtmlExportDialog::templateUrl() { return QUrl::fromLocalFile(ui.kcombobox->itemData(ui.kcombobox->currentIndex()).toString()); } void KPrHtmlExportDialog::generateSlidesNames(const QList &slides) { QString slideName; for (int i = 0; i < slides.count(); ++i) { if (slides.at(i)->name().isEmpty()) { slideName = i18n("Slide %1", QString::number(i + 1)); } else { slideName = slides.at(i)->name(); } QListWidgetItem *listItem = new QListWidgetItem(slideName); listItem->setFlags(listItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsEditable); listItem->setCheckState(Qt::Checked); ui.kListBox_slides->addItem(listItem); } } void KPrHtmlExportDialog::loadTemplatesList() { const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("calligrastage/templates/exportHTML/templates"), QStandardPaths::LocateDirectory); for (QStringList::ConstIterator path=dirs.constBegin(); path!=dirs.constEnd(); ++path) { QDir dir(*path); dir.setFilter(QDir::Files); QStringList entries = dir.entryList(); for (QStringList::ConstIterator entry=entries.constBegin(); entry!=entries.constEnd(); ++entry) { if (*entry != "." && *entry != "..") { QString name = *entry; if(name.endsWith(QLatin1String(".zip"), Qt::CaseInsensitive)){ name.chop(4); } ui.kcombobox->addItem(name, QVariant(QString(*path + *entry))); } } } ui.kcombobox->insertSeparator(ui.kcombobox->count()); } void KPrHtmlExportDialog::addSelectedTemplateToFavorite() { QString savePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/stage/templates/exportHTML/templates/"); QUrl templatePath = QUrl::fromLocalFile(ui.kcombobox->itemData(ui.kcombobox->currentIndex()).toString()); savePath += templatePath.fileName(); if(!(QFile::copy(templatePath.toLocalFile(), savePath))){ QMessageBox::information(this, i18n("Error"), i18n("There is already a favorite file with this name")); } else { // Update list QString name(ui.kcombobox->itemText(ui.kcombobox->currentIndex())); // deactivate preview disconnect(ui.kcombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(generatePreview())); ui.kcombobox->removeItem(ui.kcombobox->currentIndex()); ui.kcombobox->insertItem(0, name, savePath); ui.kcombobox->setCurrentIndex(0); //reactivate preview connect( ui.kcombobox, SIGNAL(currentIndexChanged(int)), this, SLOT(generatePreview())); } } void KPrHtmlExportDialog::delSelectedTemplateFromFavorite() { QString templatePath(ui.kcombobox->itemData(ui.kcombobox->currentIndex()).toString()); QFile::remove(templatePath); // Update list ui.kcombobox->removeItem(ui.kcombobox->currentIndex()); } void KPrHtmlExportDialog::browserAction() { QFileDialog dialog(this); dialog.setMimeTypeFilters(QStringList(QStringLiteral("application/zip"))); if (dialog.exec() == QDialog::Accepted) { const QString filePath = dialog.selectedFiles().first(); if (verifyZipFile(filePath)) { QString name = QFileInfo(filePath).fileName(); if (name.endsWith(QLatin1String(".zip"), Qt::CaseInsensitive)) { name.chop(4); } ui.kcombobox->addItem(name, filePath); ui.kcombobox->setCurrentIndex(ui.kcombobox->count() - 1); } this->updateFavoriteButton(); } } bool KPrHtmlExportDialog::verifyZipFile(const QString &zipLocalPath){ QString message; KZip zip(zipLocalPath); if (!zip.open(QIODevice::ReadOnly)) { message = i18n("Incorrect file, .zip only or corrupted zip"); } else { // verify the file contains style.css QStringList filenameList = zip.directory()->entries(); if (!filenameList.contains("style.css")) { message = i18n("Zip file need to contain style.css"); } } if(!message.isEmpty()){ QMessageBox::information(this, i18n("Error"), message); } return message.isEmpty(); } QString KPrHtmlExportDialog::title() { return ui.klineedit_title->text(); } QString KPrHtmlExportDialog::author() { return ui.klineedit_author->text(); } bool KPrHtmlExportDialog::openBrowser() { return ui.checkBox_browser->checkState(); } void KPrHtmlExportDialog::generatePrevious() { generatePreview(--frameToRender); } void KPrHtmlExportDialog::generateNext() { generatePreview(++frameToRender); } void KPrHtmlExportDialog::generatePreview(int item) { if (item >= 0) { frameToRender = item; } ui.kListBox_slides->setCurrentRow(frameToRender); // refresh button status ui.toolButton_previous->setEnabled(frameToRender > 0); ui.toolButton_next->setEnabled(frameToRender < (m_allSlides.size() - 1)); KPrHtmlExport previewGenerator; QList slides; QStringList slidesNames; slides.append(this->m_allSlides.at(frameToRender)); slidesNames.append(ui.kListBox_slides->item(frameToRender)->text()); QUrl url = previewGenerator.exportPreview(KPrHtmlExport::Parameter(templateUrl(), static_cast(parentWidget()), slides, QUrl(), this->author(), ui.klineedit_title->text(), slidesNames, false)); - preview.mainFrame()->load(url); +// preview.mainFrame()->load(url); } void KPrHtmlExportDialog::renderPreview() { - preview.currentFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); - preview.currentFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); - preview.setViewportSize(preview.currentFrame()->contentsSize()); - QImage image(preview.currentFrame()->contentsSize(), QImage::Format_ARGB32); - QPainter painter(&image); +// preview.currentFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); +// preview.currentFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); +// preview.setViewportSize(preview.currentFrame()->contentsSize()); +// QImage image(preview.currentFrame()->contentsSize(), QImage::Format_ARGB32); +// QPainter painter(&image); - preview.mainFrame()->render(&painter); - painter.end(); +// preview.mainFrame()->render(&painter); +// painter.end(); - QImage thumbnail = image.scaled(ui.qLabel_preview->size(), Qt::KeepAspectRatio); - ui.qLabel_preview->setPixmap(QPixmap::fromImage(thumbnail)); +// QImage thumbnail = image.scaled(ui.qLabel_preview->size(), Qt::KeepAspectRatio); +// ui.qLabel_preview->setPixmap(QPixmap::fromImage(thumbnail)); } bool KPrHtmlExportDialog::selectedTemplateIsFavorite() { QString templatePath(ui.kcombobox->itemData(ui.kcombobox->currentIndex()).toString()); return templatePath.startsWith(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); } bool KPrHtmlExportDialog::selectedTemplateIsSystemFavorite() { QString templatePath(ui.kcombobox->itemData(ui.kcombobox->currentIndex()).toString()); QString dir; const QString writablePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); const QStringList paths = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("calligrastage/templates/exportHTML"), QStandardPaths::LocateDirectory); foreach (const QString &path, paths) { if (!path.startsWith(writablePath)) { dir = path; } } return (!dir.isNull()) && templatePath.contains(dir); } void KPrHtmlExportDialog::updateFavoriteButton() { if (this->selectedTemplateIsFavorite() || this->selectedTemplateIsSystemFavorite()) { ui.pushButton_Favorite->setText(i18n("Delete Template")); if (this->selectedTemplateIsSystemFavorite()) { ui.pushButton_Favorite->setEnabled(false); ui.pushButton_Favorite->setToolTip(i18n("You may not remove the templates provided with the application")); } else { ui.pushButton_Favorite->setEnabled(true); ui.pushButton_Favorite->setToolTip(""); } } else { ui.pushButton_Favorite->setText(i18n("Add Template")); ui.pushButton_Favorite->setEnabled(true); ui.pushButton_Favorite->setToolTip(""); } } void KPrHtmlExportDialog::favoriteAction() { if (this->selectedTemplateIsFavorite()) { int button = QMessageBox::question(this, i18n("Confirm remove"), i18n("Are you sure you want to remove \"%1\"?", ui.kcombobox->currentText()), QMessageBox::Yes | QMessageBox::No); if (button == QMessageBox::Yes){ this->delSelectedTemplateFromFavorite(); } } else { this->addSelectedTemplateToFavorite(); } } diff --git a/stage/part/ui/KPrHtmlExportDialog.h b/stage/part/ui/KPrHtmlExportDialog.h index 0b4c96147a7..4c4d098ea4c 100644 --- a/stage/part/ui/KPrHtmlExportDialog.h +++ b/stage/part/ui/KPrHtmlExportDialog.h @@ -1,78 +1,78 @@ /* This file is part of the KDE project * Copyright (C) 2009 Yannick Motta * Copyright (C) 2009-2010 Benjamin Port * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef KPRHTMLEXPORTDIALOG_H #define KPRHTMLEXPORTDIALOG_H #include "ui_KPrHtmlExport.h" -#include +// #include #include #include class QUrl; class KPrHtmlExportDialog : public KoDialog { Q_OBJECT public: KPrHtmlExportDialog(const QList &slides, const QString &title, const QString &author, QWidget *parent=0); QList checkedSlides(); QStringList slidesNames(); QUrl templateUrl(); QString title(); QString author(); bool openBrowser(); private Q_SLOTS: void checkAllItems(); void uncheckAllItems(); void renderPreview(); void favoriteAction(); void updateFavoriteButton(); void generateNext(); void generatePrevious(); void generatePreview(int item=-1); void browserAction(); private: void generateSlidesNames(const QList &slides); void loadTemplatesList(); bool selectedTemplateIsFavorite(); bool selectedTemplateIsSystemFavorite(); bool verifyZipFile(const QString &zipLocalPath); void addSelectedTemplateToFavorite(); void delSelectedTemplateFromFavorite(); QList m_allSlides; QString m_title; Ui::KPrHtmlExport ui; - QWebPage preview; +// QWebPage preview; int frameToRender; }; #endif // KPRHTMLEXPORTDIALOG_H