allow building without Qt Widgets specific features

This commit is contained in:
Martchus 2016-04-09 02:33:09 +02:00
parent fbfe8491ec
commit 323c3b8824
7 changed files with 89 additions and 36 deletions

View File

@ -2,17 +2,27 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
# add project files # add project files
set(HEADER_FILES set(HEADER_FILES
aboutdialog/aboutdialog.h
enterpassworddialog/enterpassworddialog.h
misc/dialogutils.h
misc/desktoputils.h
misc/xmlparsermacros.h misc/xmlparsermacros.h
misc/undefxmlparsermacros.h misc/undefxmlparsermacros.h
misc/trylocker.h misc/trylocker.h
misc/adoptlocker.h misc/adoptlocker.h
misc/dialogutils.cpp
misc/desktoputils.cpp
models/checklistmodel.h models/checklistmodel.h
resources/qtconfigarguments.h resources/qtconfigarguments.h
resources/resources.h resources/resources.h
)
set(SRC_FILES
misc/dialogutils.h
misc/desktoputils.h
models/checklistmodel.cpp
resources/qtconfigarguments.cpp
resources/resources.cpp
resources/qtutilsicons.qrc
)
set(WIDGETS_HEADER_FILES
aboutdialog/aboutdialog.h
enterpassworddialog/enterpassworddialog.h
settingsdialog/optioncategory.h settingsdialog/optioncategory.h
settingsdialog/optioncategoryfiltermodel.h settingsdialog/optioncategoryfiltermodel.h
settingsdialog/optioncategorymodel.h settingsdialog/optioncategorymodel.h
@ -25,17 +35,13 @@ set(HEADER_FILES
widgets/clearplaintextedit.h widgets/clearplaintextedit.h
widgets/clearspinbox.h widgets/clearspinbox.h
widgets/iconbutton.h widgets/iconbutton.h
widgets/pathselection.h
paletteeditor/paletteeditor.h paletteeditor/paletteeditor.h
paletteeditor/colorbutton.h paletteeditor/colorbutton.h
) )
set(SRC_FILES set(WIDGETS_SRC_FILES
aboutdialog/aboutdialog.cpp aboutdialog/aboutdialog.cpp
enterpassworddialog/enterpassworddialog.cpp enterpassworddialog/enterpassworddialog.cpp
misc/dialogutils.cpp
misc/desktoputils.cpp
models/checklistmodel.cpp
resources/qtconfigarguments.cpp
resources/resources.cpp
settingsdialog/optioncategory.cpp settingsdialog/optioncategory.cpp
settingsdialog/optioncategoryfiltermodel.cpp settingsdialog/optioncategoryfiltermodel.cpp
settingsdialog/optioncategorymodel.cpp settingsdialog/optioncategorymodel.cpp
@ -48,9 +54,9 @@ set(SRC_FILES
widgets/clearplaintextedit.cpp widgets/clearplaintextedit.cpp
widgets/clearspinbox.cpp widgets/clearspinbox.cpp
widgets/iconbutton.cpp widgets/iconbutton.cpp
widgets/pathselection.cpp
paletteeditor/paletteeditor.cpp paletteeditor/paletteeditor.cpp
paletteeditor/colorbutton.cpp paletteeditor/colorbutton.cpp
resources/qtutilsicons.qrc
) )
set(WIDGETS_UI_FILES set(WIDGETS_UI_FILES
aboutdialog/aboutdialog.ui aboutdialog/aboutdialog.ui
@ -58,6 +64,7 @@ set(WIDGETS_UI_FILES
settingsdialog/settingsdialog.ui settingsdialog/settingsdialog.ui
settingsdialog/qtappearanceoptionpage.ui settingsdialog/qtappearanceoptionpage.ui
settingsdialog/qtlanguageoptionpage.ui settingsdialog/qtlanguageoptionpage.ui
settingsdialog/qtenvoptionpage.ui
paletteeditor/paletteeditor.ui paletteeditor/paletteeditor.ui
) )
@ -111,18 +118,56 @@ if(MINGW)
set(CMAKE_SHARED_LIBRARY_PREFIX "") set(CMAKE_SHARED_LIBRARY_PREFIX "")
endif(MINGW) endif(MINGW)
# enable Qt Widgets GUI # read cached variables
set(WIDGETS_GUI "yes" CACHE STRING "enables/disables Qt Widgets specific features: yes (default) or no")
if(${WIDGETS_GUI} STREQUAL "yes")
message(STATUS "Building with Qt Widgets specific features.")
elseif(${WIDGETS_GUI} STREQUAL "no")
message(STATUS "Building WITHOUT Qt Widgets specific features.")
else()
message(FATAL_ERROR "Specification whether to build Qt Widgets specific features is invalid (must be either yes or no).")
endif()
set(GUI_QTQUICK "yes" CACHE STRING "enables/disables building Qt Quick specific features: yes (default) or no")
if(${GUI_QTQUICK} STREQUAL "yes")
message(STATUS "Building with Qt Quick specific features.")
elseif(${GUI_QTQUICK} STREQUAL "no")
message(STATUS "Building WITHOUT Qt Quick specific features.")
else()
message(FATAL_ERROR "Specification whether to build Qt Quick specific features is invalid (must be either yes or no).")
endif()
# enable Qt Widgets specific features
if(${WIDGETS_GUI} STREQUAL "yes")
add_definitions(
-DGUI_QTWIDGETS
-DMODEL_UNDO_SUPPORT
)
endif()
# enable Qt Quick specific features
if(${WIDGETS_GUI} STREQUAL "yes")
add_definitions(
-DGUI_QTQUICK
)
endif()
# disable new ABI (can't catch ios_base::failure with new ABI) # disable new ABI (can't catch ios_base::failure with new ABI)
add_definitions( add_definitions(
-DGUI_QTWIDGETS
-DMODEL_UNDO_SUPPORT
-D_GLIBCXX_USE_CXX11_ABI=0 -D_GLIBCXX_USE_CXX11_ABI=0
) )
# enable code for debugging
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DDEBUG_BUILD)
message(STATUS "Debug build enabled.")
endif()
# check required Qt 5 modules # check required Qt 5 modules
find_package(Qt5Core REQUIRED) find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED) find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED) if(${WIDGETS_GUI} STREQUAL "yes")
find_package(Qt5Widgets REQUIRED)
endif()
# enable moc, uic and rcc # enable moc, uic and rcc
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
@ -130,8 +175,13 @@ set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
# stuff which is only required when linking against Qt Widgets
if(${WIDGETS_GUI} STREQUAL "yes")
set(WIDGETS_STUFF ${GUI_TYPE} ${WIDGETS_HEADER_FILES} ${WIDGETS_SRC_FILES} ${WIDGETS_UI_FILES} ${QM_FILES} ${RES_FILES})
endif()
# executable and linking # executable and linking
add_library(${META_PROJECT_NAME} SHARED ${HEADER_FILES} ${SRC_FILES} ${WIDGETS_UI_FILES} ${RES_FILES} ${WINDOWS_ICON_PATH}) add_library(${META_PROJECT_NAME} SHARED ${HEADER_FILES} ${SRC_FILES} ${WIDGETS_STUFF} ${RES_FILES} ${WINDOWS_ICON_PATH})
if(WIN32) if(WIN32)
# WinAPI provides functions required for capslock detection # WinAPI provides functions required for capslock detection
add_definitions(-DPLATFORM_SPECIFIC_CAPSLOCK_DETECTION) add_definitions(-DPLATFORM_SPECIFIC_CAPSLOCK_DETECTION)

View File

@ -82,6 +82,8 @@ const QString &dialogStyle()
return style; return style;
} }
# ifdef GUI_QTWIDGETS
/*! /*!
* \brief Makes \a widget a heading. * \brief Makes \a widget a heading.
*/ */
@ -102,6 +104,8 @@ void updateStyle(QWidget *widget)
widget->update(); widget->update();
} }
# endif
#endif #endif
} // namespace Dialogs } // namespace Dialogs

View File

@ -28,8 +28,10 @@ QColor LIB_EXPORT windowFrameColor();
QColor LIB_EXPORT instructionTextColor(); QColor LIB_EXPORT instructionTextColor();
# endif # endif
const QString LIB_EXPORT &dialogStyle(); const QString LIB_EXPORT &dialogStyle();
# ifdef GUI_QTWIDGETS
void LIB_EXPORT makeHeading(QWidget *widget); void LIB_EXPORT makeHeading(QWidget *widget);
void LIB_EXPORT updateStyle(QWidget *widget); void LIB_EXPORT updateStyle(QWidget *widget);
# endif
#endif #endif
} // namespace Dialogs } // namespace Dialogs

View File

@ -6,9 +6,7 @@
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QList> #include <QList>
QT_BEGIN_NAMESPACE QT_FORWARD_DECLARE_CLASS(QSettings)
class QSettings;
QT_END_NAMESPACE
namespace Models { namespace Models {

View File

@ -81,11 +81,12 @@ void QtConfigArguments::applySettings() const
if(QStyle *style = QStyleFactory::create(QString::fromLocal8Bit(m_styleArg.values().front().data()))) { if(QStyle *style = QStyleFactory::create(QString::fromLocal8Bit(m_styleArg.values().front().data()))) {
QApplication::setStyle(style); QApplication::setStyle(style);
} else { } else {
cout << "Warning: Can not find the specified style." << endl; cerr << "Warning: Can not find the specified style." << endl;
} }
#endif #else
#ifdef GUI_QTQUICK # ifdef GUI_QTQUICK
cout << "Warning: Can not set a style for the Qt Quick GUI." << endl; cerr << "Warning: Can not set a style for the Qt Quick GUI." << endl;
# endif
#endif #endif
} }
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
@ -137,7 +138,7 @@ void QtConfigArguments::applySettings() const
try { try {
font.setPointSize(stringToNumber<int>(m_fontArg.values().back())); font.setPointSize(stringToNumber<int>(m_fontArg.values().back()));
} catch(const ConversionException &) { } catch(const ConversionException &) {
cout << "Warning: The specified font size is no number and will be ignored." << endl; cerr << "Warning: The specified font size is no number and will be ignored." << endl;
} }
QGuiApplication::setFont(font); QGuiApplication::setFont(font);
} else { } else {

View File

@ -1,16 +1,14 @@
#ifndef WIDGETS_CLEARABLEWIDGET_H #ifndef WIDGETS_BUTTONOVERLAY_H
#define WIDGETS_CLEARABLEWIDGET_H #define WIDGETS_BUTTONOVERLAY_H
#include <c++utilities/application/global.h> #include <c++utilities/application/global.h>
#include <QtGlobal> #include <QtGlobal>
QT_BEGIN_NAMESPACE QT_FORWARD_DECLARE_CLASS(QWidget)
class QWidget; QT_FORWARD_DECLARE_CLASS(QHBoxLayout)
class QHBoxLayout; QT_FORWARD_DECLARE_CLASS(QString)
class QString; QT_FORWARD_DECLARE_CLASS(QPixmap)
class QPixmap;
QT_END_NAMESPACE
namespace Widgets { namespace Widgets {
@ -73,4 +71,4 @@ inline bool ButtonOverlay::isInfoButtonEnabled() const
} }
#endif // WIDGETS_CLEARABLEWIDGET_H #endif // WIDGETS_BUTTONOVERLAY_H

View File

@ -1,5 +1,5 @@
#ifndef WIDGETS_TAGFIELDLINEEDIT_H #ifndef WIDGETS_CLEARLINEEDIT_H
#define WIDGETS_TAGFIELDLINEEDIT_H #define WIDGETS_CLEARLINEEDIT_H
#include "./buttonoverlay.h" #include "./buttonoverlay.h"
@ -30,4 +30,4 @@ private Q_SLOTS:
} }
#endif // WIDGETS_TAGFIELDLINEEDIT_H #endif // WIDGETS_CLEARLINEEDIT_H