project(kdeui)

include_directories(
    ${CMAKE_SOURCE_DIR}/interfaces
    ${CMAKE_SOURCE_DIR}/interfaces/kregexpeditor
    ${CMAKE_SOURCE_DIR}/kdecore/sonnet
    ${CMAKE_SOURCE_DIR}/kdeui
    ${CMAKE_SOURCE_DIR}/kutils/kspeech
    ${CMAKE_BINARY_DIR}/kutils/kspeech
    ${KDE4_KDECORE_INCLUDES}
    actions
    colors
    config
    dialogs
    findreplace
    fonts
    icons
    itemviews
    jobs
    kernel
    notifications
    paged
    plotting
    shortcuts
    sonnet
    util
    widgets
    windowmanagement
    xmlgui
    ${CMAKE_CURRENT_BINARY_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}/util
)

include_directories(${CMAKE_CURRENT_BINARY_DIR}/widgets)

if (X11_Xkb_FOUND AND X11_Xkbfile_FOUND)
     set(HAVE_XKB TRUE)
endif()
configure_file(
    util/config-kkeyserver.h.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/util/config-kkeyserver.h
)

if(ENABLE_TESTING)
    add_subdirectory( tests )
    add_subdirectory( sonnet/tests )
endif()

########### next target ###############
set(kdeui_LIB_SRCS
    actions/kactioncollection.cpp
    actions/kactioncategory.cpp
    actions/kaction.cpp
    actions/kactionmenu.cpp
    actions/kcodecaction.cpp
    actions/kdualaction.cpp
    actions/kfontaction.cpp
    actions/kfontsizeaction.cpp
    actions/kpastetextaction.cpp
    actions/krecentfilesaction.cpp
    actions/kselectaction.cpp
    actions/kstandardaction.cpp
    actions/ktoggleaction.cpp
    actions/ktoggletoolbaraction.cpp
    actions/ktogglefullscreenaction.cpp
    actions/ktoolbarlabelaction.cpp
    actions/ktoolbarpopupaction.cpp
    actions/ktoolbarspaceraction.cpp
    colors/kcolorspaces.cpp
    colors/kcolorutils.cpp
    colors/kcolorscheme.cpp
    colors/kcolorcollection.cpp
    colors/kcolorhelpers.cpp
    colors/kcolorbutton.cpp
    colors/kcolorcombo.cpp
    colors/kcolorchoosermode.cpp
    colors/kcolordialog.cpp
    colors/kcolormimedata.cpp
    colors/kcolorvalueselector.cpp
    colors/khuesaturationselect.cpp
    config/kconfigskeleton.cpp
    config/kconfiggroupgui.cpp
    dialogs/kaboutkdedialog_p.cpp
    dialogs/kassistantdialog.cpp
    dialogs/kconfigdialog.cpp
    dialogs/kconfigdialogmanager.cpp
    dialogs/kdialog.cpp
    dialogs/kedittoolbar.cpp
    dialogs/kinputdialog.cpp
    dialogs/klinkdialog.cpp
    dialogs/kmessagebox.cpp
    dialogs/kmessageboxmessagehandler.cpp
    dialogs/kaboutapplicationdialog.cpp
    dialogs/kaboutapplicationpersonmodel_p.cpp
    dialogs/kaboutapplicationpersonlistdelegate_p.cpp
    dialogs/kaboutapplicationpersonlistview_p.cpp
    dialogs/knewpassworddialog.cpp
    dialogs/kpassworddialog.cpp
    dialogs/kpixmapregionselectordialog.cpp
    dialogs/kprogressdialog.cpp
    dialogs/kshortcuteditwidget.cpp
    dialogs/kshortcutseditordelegate.cpp
    dialogs/kshortcutseditoritem.cpp
    dialogs/kshortcutseditor.cpp
    dialogs/kshortcutschemeseditor.cpp
    dialogs/kshortcutsdialog.cpp
    dialogs/ksplashscreen.cpp
    dialogs/kswitchlanguagedialog_p.cpp
    dialogs/ktip.cpp
    findreplace/kfind.cpp
    findreplace/kreplace.cpp
    findreplace/kfinddialog.cpp
    findreplace/kreplacedialog.cpp
    fonts/fonthelpers.cpp
    fonts/kfontchooser.cpp
    fonts/kfontcombobox.cpp
    fonts/kfontdialog.cpp
    fonts/kfontrequester.cpp
    fonts/kfontutils.cpp
    icons/kiconeffect.cpp
    icons/kiconengine.cpp
    icons/kicon.cpp
    icons/kiconloader.cpp
    icons/kicontheme.cpp
    itemviews/kbreadcrumbselectionmodel.cpp
    itemviews/kcheckableproxymodel.cpp
    itemviews/klinkitemselectionmodel.cpp
    itemviews/kidentityproxymodel.cpp
    itemviews/krecursivefilterproxymodel.cpp
    itemviews/klistwidget.cpp
    itemviews/klistwidgetsearchline.cpp
    itemviews/ktreewidgetsearchline.cpp
    itemviews/kfilterproxysearchline.cpp
    itemviews/kextendableitemdelegate.cpp
    itemviews/kcategorizedsortfilterproxymodel.cpp
    itemviews/kcategorizedview.cpp
    itemviews/kcategorydrawer.cpp
    itemviews/kmodelindexproxymapper.cpp
    itemviews/kwidgetitemdelegate.cpp
    itemviews/kwidgetitemdelegatepool.cpp
    # This requires patches which are not yet in Qt. Disabled for now.
    # itemviews/kreparentingproxymodel.cpp
    jobs/kdialogjobuidelegate.cpp
    jobs/kabstractwidgetjobtracker.cpp
    jobs/kwidgetjobtracker.cpp
    jobs/kstatusbarjobtracker.cpp
    jobs/kuiserverjobtracker.cpp
    kernel/kapplication.cpp
    kernel/kclipboard.cpp
    kernel/kuniqueapplication.cpp
    kernel/ksessionmanager.cpp
    kernel/kstyle.cpp
    kernel/kstartupinfo.cpp
    kernel/kglobalsettings.cpp
    kernel/ksystemeventfilter.cpp
    notifications/knotification.cpp
    notifications/knotificationmanager.cpp
    notifications/knotificationrestrictions.cpp
    paged/kpagedialog.cpp
    paged/kpagemodel.cpp
    paged/kpageview.cpp
    paged/kpageview_p.cpp
    paged/kpagewidget.cpp
    paged/kpagewidgetmodel.cpp
    shortcuts/kshortcut.cpp
    shortcuts/kshortcutschemeshelper.cpp
    shortcuts/kstandardshortcut.cpp
    shortcuts/kglobalaccel.cpp
    shortcuts/kglobalshortcutinfo.cpp
    shortcuts/kglobalshortcutinfo_dbus.cpp
    shortcuts/kacceleratormanager.cpp
    shortcuts/kcheckaccelerators.cpp
    sonnet/dialog.cpp
    sonnet/configwidget.cpp
    sonnet/highlighter.cpp
    sonnet/configdialog.cpp
    sonnet/dictionarycombobox.cpp
    util/kcompletion.cpp
    util/kcompletionbase.cpp
    util/kcrash.cpp
    util/kcursor.cpp
    util/kguiitem.cpp
    util/kkeyserver.cpp
    util/kselectionowner.cpp
    util/knumvalidator.cpp
    util/kpassivepopup.cpp
    util/kpassivepopupmessagehandler.cpp
    util/kstandardguiitem.cpp
    util/kxerrorhandler.cpp
    util/kxmessages.cpp
    util/kundostack.cpp
    util/kpixmap.cpp
    util/kpixmapsequence.cpp
    util/kpixmapsequenceoverlaypainter.cpp
    util/kpixmapsequencewidget.cpp
    util/kimageio.cpp
    widgets/kactionselector.cpp
    widgets/kdialogbuttonbox.cpp
    widgets/kbuttongroup.cpp
    widgets/kcapacitybar.cpp
    widgets/kcmodule.cpp
    widgets/kcombobox.cpp
    widgets/kcompletionbox.cpp
    widgets/kdatecombobox.cpp
    widgets/kdatepicker.cpp
    widgets/kdatetable.cpp
    widgets/kdatetimeedit.cpp
    widgets/kdatetimewidget.cpp
    widgets/kdatewidget.cpp
    widgets/keditlistwidget.cpp
    widgets/khbox.cpp
    widgets/khelpmenu.cpp
    widgets/khistorycombobox.cpp
    widgets/kkeysequencewidget.cpp
    widgets/klanguagebutton.cpp
    widgets/kled.cpp
    widgets/klineedit.cpp
    widgets/kmainwindow.cpp
    widgets/kmenu.cpp
    widgets/kmessagewidget.cpp
    widgets/kmultitabbar.cpp
    widgets/knuminput.cpp
    widgets/kpixmapregionselectorwidget.cpp
    widgets/kpushbutton.cpp
    widgets/kratingpainter.cpp
    widgets/kratingwidget.cpp
    widgets/krestrictedline.cpp
    widgets/krichtextedit.cpp
    widgets/krichtextwidget.cpp
    widgets/kruler.cpp
    widgets/kselector.cpp
    widgets/kseparator.cpp
    widgets/kshortcutwidget.cpp
    widgets/ksqueezedtextlabel.cpp
    widgets/kstatusbar.cpp
    widgets/ktabbar.cpp
    widgets/ktabwidget.cpp
    widgets/ktextedit.cpp
    widgets/ktimecombobox.cpp
    widgets/ktimezonewidget.cpp
    widgets/ktitlewidget.cpp
    widgets/ktoolbar.cpp
    widgets/kurllabel.cpp
    widgets/kvbox.cpp
    widgets/kxyselector.cpp
    widgets/kdeuiwidgetsproxystyle.cpp
    widgets/nestedlisthelper.cpp
    xmlgui/kxmlguibuilder.cpp
    xmlgui/kxmlguiwindow.cpp
    xmlgui/kmainwindowiface.cpp
    xmlgui/kmenumenuhandler_p.cpp
    xmlgui/ktoolbarhandler.cpp
    xmlgui/kxmlguiclient.cpp
    xmlgui/kxmlguifactory.cpp
    xmlgui/kxmlguifactory_p.cpp
    xmlgui/kxmlguiversionhandler.cpp
    dialogs/kdeprintdialog.cpp
    notifications/ksystemtrayicon.cpp
    notifications/kstatusnotifieritem.cpp
    notifications/kstatusnotifieritemdbus_p.cpp
)

if(DBUSMENUQT_FOUND)
    include_directories(${DBUSMENUQT_INCLUDE_DIR})

    set(KDEUI_EXTRA_LIBS
        ${KDEUI_EXTRA_LIBS}
        ${DBUSMENUQT_LIBRARIES}
    )
endif()

qt4_add_dbus_interface(kdeui_LIB_SRCS
    notifications/org.kde.StatusNotifierWatcher.xml
    statusnotifierwatcher_interface
)

qt4_add_dbus_adaptor(kdeui_LIB_SRCS
    notifications/org.kde.StatusNotifierItem.xml
    notifications/kstatusnotifieritemdbus_p.h
    KStatusNotifierItemDBus
)

if(Q_WS_X11)
    set(kdeui_LIB_SRCS
        ${kdeui_LIB_SRCS}
        util/kkeyserver_x11.cpp
        dialogs/kcupsoptionswidget_p.cpp
        dialogs/kcupsoptionsjobwidget_p.cpp
        dialogs/kcupsoptionspageswidget_p.cpp
        dialogs/kcupsoptionssettingswidget_p.cpp
        windowmanagement/kwindowsystem_x11.cpp
        windowmanagement/kwindowinfo_x11.cpp
        windowmanagement/netwm.cpp
    )
endif()

if (Q_WS_X11 AND X11_Xkb_FOUND AND X11_Xkbfile_FOUND)
    include_directories (
        ${X11_Xkb_INCLUDE_PATH}
        ${X11_Xlib_INCLUDE_PATH}
    )
endif()

qt4_add_dbus_interfaces(kdeui_LIB_SRCS jobs/org.kde.JobViewServer.xml )

qt4_add_dbus_interface(kdeui_LIB_SRCS
    jobs/org.kde.JobView.xml
    jobviewiface
)

qt4_add_dbus_interface(kdeui_LIB_SRCS
    notifications/org.freedesktop.Notifications.xml
    notifications_interface
)

set(kglobalaccel_xml shortcuts/org.kde.KGlobalAccel.xml)
set_source_files_properties(${kglobalaccel_xml} PROPERTIES INCLUDE "kglobalshortcutinfo_p.h")
qt4_add_dbus_interface(kdeui_LIB_SRCS ${kglobalaccel_xml} kglobalaccel_interface )
install(FILES ${kglobalaccel_xml} DESTINATION ${KDE4_DBUS_INTERFACES_INSTALL_DIR})

set(kglobalaccel_component_xml shortcuts/org.kde.kglobalaccel.Component.xml)
set_source_files_properties(${kglobalaccel_component_xml} PROPERTIES INCLUDE "kglobalshortcutinfo_p.h")
qt4_add_dbus_interface(kdeui_LIB_SRCS ${kglobalaccel_component_xml} kglobalaccel_component_interface )
install(FILES ${kglobalaccel_component_xml} DESTINATION ${KDE4_DBUS_INTERFACES_INSTALL_DIR})

set(knotify_xml notifications/org.kde.KNotify.xml)
qt4_add_dbus_interface(kdeui_LIB_SRCS ${knotify_xml} knotify_interface)

add_library(kdeui ${LIBRARY_TYPE} ${kdeui_LIB_SRCS})

target_link_libraries(kdeui PRIVATE
    ${X11_LIBRARIES}
    ${KDEUI_EXTRA_LIBS}
)

target_link_libraries(kdeui PUBLIC
    ${KDE4_KDECORE_LIBS}
    ${KDE4_KSPEECH_LIBS}
    ${QT_QTGUI_LIBRARY}
    ${QT_QTXML_LIBRARY}
    ${QT_QTNETWORK_LIBRARY}
)

if(X11_XTest_FOUND)
   target_link_libraries(kdeui PRIVATE ${X11_XTest_LIB})
endif()

if(X11_Xcursor_FOUND)
   target_link_libraries(kdeui PRIVATE ${X11_Xcursor_LIB})
endif()

if(X11_Xfixes_FOUND)
   target_link_libraries(kdeui PRIVATE ${X11_Xfixes_LIB})
endif()

set_target_properties(kdeui PROPERTIES
    VERSION ${GENERIC_LIB_VERSION}
    SOVERSION ${GENERIC_LIB_SOVERSION}
)

########### install files ###############

generate_export_header(kdeui)

install(
    TARGETS kdeui
    EXPORT kdelibsLibraryTargets
    ${INSTALL_TARGETS_DEFAULT_ARGS}
)

install(
    FILES
    dialogs/aboutkde.png
    dialogs/kdeprint_nup1.png
    dialogs/kdeprint_nup2.png
    dialogs/kdeprint_nup4.png
    dialogs/kdeprint_nupother.png
    dialogs/ktip-bulb.png
    DESTINATION ${KDE4_DATA_INSTALL_DIR}/kdeui/pics
)

install(
    FILES
    xmlgui/ui_standards.rc
    DESTINATION
    ${KDE4_CONFIG_INSTALL_DIR}/ui
)

install(
    FILES
    ${CMAKE_CURRENT_BINARY_DIR}/kdeui_export.h
    actions/kactioncollection.h
    actions/kactioncategory.h
    actions/kaction.h
    actions/kactionmenu.h
    actions/kdualaction.h
    actions/kcodecaction.h
    actions/kfontaction.h
    actions/kfontsizeaction.h
    actions/kpastetextaction.h
    actions/krecentfilesaction.h
    actions/kselectaction.h
    actions/kstandardaction.h
    actions/ktoggleaction.h
    actions/ktoggletoolbaraction.h
    actions/ktogglefullscreenaction.h
    actions/ktoolbarlabelaction.h
    actions/ktoolbarpopupaction.h
    actions/ktoolbarspaceraction.h
    colors/kcolorutils.h
    colors/kcolorscheme.h
    colors/kcolorcollection.h
    colors/kcolorbutton.h
    colors/kcolorchoosermode.h
    colors/kcolorcombo.h
    colors/kcolordialog.h
    colors/kcolormimedata.h
    colors/kcolorvalueselector.h
    colors/khuesaturationselect.h
    config/kconfigskeleton.h
    dialogs/kaboutapplicationdialog.h
    dialogs/kassistantdialog.h
    dialogs/kconfigdialog.h
    dialogs/kconfigdialogmanager.h
    dialogs/kdeprintdialog.h
    dialogs/kdialog.h
    dialogs/kedittoolbar.h
    dialogs/kinputdialog.h
    dialogs/kmessagebox.h
    dialogs/kmessageboxmessagehandler.h
    dialogs/knewpassworddialog.h
    dialogs/kpassworddialog.h
    dialogs/kpixmapregionselectordialog.h
    dialogs/kprogressdialog.h
    dialogs/ksplashscreen.h
    dialogs/kshortcutsdialog.h
    dialogs/kshortcutseditor.h
    dialogs/ktip.h
    findreplace/kfind.h
    findreplace/kreplace.h
    findreplace/kfinddialog.h
    findreplace/kreplacedialog.h
    fonts/kfontchooser.h
    fonts/kfontcombobox.h
    fonts/kfontdialog.h
    fonts/kfontrequester.h
    fonts/kfontutils.h
    icons/kiconeffect.h
    icons/kicon.h
    # we install the private header as it is needed by kcm (tokoe)
    icons/k3icon_p.h
    icons/kiconloader.h
    icons/kicontheme.h
    itemviews/kbreadcrumbselectionmodel.h
    itemviews/kcheckableproxymodel.h
    itemviews/klinkitemselectionmodel.h
    itemviews/krecursivefilterproxymodel.h
    itemviews/klistwidget.h
    itemviews/kidentityproxymodel.h
    itemviews/klistwidgetsearchline.h
    itemviews/ktreewidgetsearchline.h
    itemviews/kfilterproxysearchline.h
    itemviews/kextendableitemdelegate.h
    itemviews/kcategorizedsortfilterproxymodel.h
    itemviews/kcategorizedview.h
    itemviews/kcategorydrawer.h
    itemviews/kmodelindexproxymapper.h
    itemviews/kwidgetitemdelegate.h
    # itemviews/kreparentingproxymodel.h
    jobs/kdialogjobuidelegate.h
    jobs/kabstractwidgetjobtracker.h
    jobs/kwidgetjobtracker.h
    jobs/kstatusbarjobtracker.h
    jobs/kuiserverjobtracker.h
    kernel/kapplication.h
    kernel/kuniqueapplication.h
    kernel/ksessionmanager.h
    kernel/kstyle.h
    kernel/kstartupinfo.h
    kernel/kglobalsettings.h
    kernel/ksystemeventfilter.h
    notifications/kstatusnotifieritem.h
    notifications/ksystemtrayicon.h
    notifications/knotification.h
    notifications/knotificationrestrictions.h
    paged/kpagedialog.h
    paged/kpagemodel.h
    paged/kpageview.h
    paged/kpagewidget.h
    paged/kpagewidgetmodel.h
    shortcuts/kshortcut.h
    shortcuts/kstandardshortcut.h
    shortcuts/kglobalaccel.h
    shortcuts/kglobalshortcutinfo.h
    shortcuts/kglobalshortcutinfo_p.h
    shortcuts/kacceleratormanager.h
    util/kaccelgen.h
    util/kcompletion.h
    util/kcrash.h
    util/kcursor.h
    util/kguiitem.h
    util/kkeyserver.h
    util/kselectionowner.h
    util/knumvalidator.h
    util/kpassivepopup.h
    util/kpassivepopupmessagehandler.h
    util/kstandardguiitem.h
    util/kxerrorhandler.h
    util/kxmessages.h
    util/kundostack.h
    util/kpixmap.h
    util/kpixmapsequence.h
    util/kpixmapsequenceoverlaypainter.h
    util/kpixmapsequencewidget.h
    util/kimageio.h
    widgets/kactionselector.h
    widgets/kdatecombobox.h
    widgets/kdatepicker.h
    widgets/kcapacitybar.h
    widgets/kcmodule.h
    widgets/kcombobox.h
    widgets/kcompletionbox.h
    widgets/kbuttongroup.h
    widgets/kdatetable.h
    widgets/kdatetimeedit.h
    widgets/kdatetimewidget.h
    widgets/kdatewidget.h
    widgets/kdialogbuttonbox.h
    widgets/keditlistwidget.h
    widgets/khbox.h
    widgets/khelpmenu.h
    widgets/khistorycombobox.h
    widgets/kkeysequencewidget.h
    widgets/klanguagebutton.h
    widgets/kled.h
    widgets/klineedit.h
    widgets/kmainwindow.h
    widgets/kmenu.h
    widgets/kmessagewidget.h
    widgets/kmultitabbar.h
    widgets/knuminput.h
    widgets/kpixmapregionselectorwidget.h
    widgets/kpushbutton.h
    widgets/kratingpainter.h
    widgets/kratingwidget.h
    widgets/krestrictedline.h
    widgets/krichtextedit.h
    widgets/krichtextwidget.h
    widgets/kseparator.h
    widgets/ksqueezedtextlabel.h
    widgets/ktextedit.h
    widgets/ktimecombobox.h
    widgets/ktimezonewidget.h
    widgets/ktitlewidget.h
    widgets/ktabbar.h
    widgets/ktabwidget.h
    widgets/kruler.h
    widgets/kselector.h
    widgets/kshortcutwidget.h
    widgets/kstatusbar.h
    widgets/ktoolbar.h
    widgets/kurllabel.h
    widgets/kvbox.h
    widgets/kxyselector.h
    windowmanagement/kwindowsystem.h
    windowmanagement/kwindowinfo.h
    windowmanagement/netwm_def.h
    windowmanagement/netwm.h
    xmlgui/kxmlguiwindow.h
    xmlgui/kxmlguiclient.h
    xmlgui/kxmlguibuilder.h
    xmlgui/kxmlguifactory.h
    util/fixx11h.h
    util/kkeyserver_x11.h
    DESTINATION ${KDE4_INCLUDE_INSTALL_DIR}
    COMPONENT Devel
)

# KDE 5 remove this
install(
    FILES
    widgets/kratingpainter.h
    widgets/kratingwidget.h
    DESTINATION ${KDE4_INCLUDE_INSTALL_DIR}/nepomuk
    COMPONENT Devel
)

install(
    FILES
    sonnet/dialog.h
    sonnet/highlighter.h
    sonnet/configdialog.h
    sonnet/configwidget.h
    sonnet/dictionarycombobox.h
    DESTINATION ${KDE4_INCLUDE_INSTALL_DIR}/sonnet
    COMPONENT Devel
)

install(
    PROGRAMS preparetips
    DESTINATION ${KDE4_BIN_INSTALL_DIR}
)

install(
    FILES
    colors/40.colors
    colors/Oxygen.colors
    colors/Web.colors
    colors/Royal.colors
    colors/Rainbow.colors
    DESTINATION ${KDE4_CONFIG_INSTALL_DIR}/colors
)

install(
    FILES
    jobs/org.kde.JobViewServer.xml
    jobs/org.kde.JobView.xml
    notifications/org.kde.StatusNotifierItem.xml
    notifications/org.kde.StatusNotifierWatcher.xml
    DESTINATION ${KDE4_DBUS_INTERFACES_INSTALL_DIR}
)

if(NOT Q_WS_X11)
    # install our copy of the rgb.txt named colors list on systems without X11
    install(
        FILES
        colors/rgb.txt
        DESTINATION ${KDE4_DATA_INSTALL_DIR}/kdeui
    )
endif()
