find_package(Qt6 REQUIRED COMPONENTS Core Gui Svg UiTools Widgets Xml)
find_package(Qt6 REQUIRED COMPONENTS Core)

set(PROJECT_HEADERS
    actionentry.h
    common/bindparam.h
    common/booltoolbutton.h
    common/centerediconitemdelegate.h
    common/colorbutton.h
    common/colorpickerpopup.h
    common/combonowheelfilter.h
    common/configcombobox.h
    common/configradiobutton.h
    common/customsplitter.h
    common/datawidgetmapper.h
    common/dbcombobox.h
    common/deleteonfocusoutfilter.h
    common/dialogsizehandler.h
    common/extactioncontainer.h
    common/extactionprototype.h
    common/extlineedit.h
    common/exttableview.h
    common/exttablewidget.h
    common/fileedit.h
    common/fontedit.h
    common/immediatetooltip.h
    common/intvalidator.h
    common/ipvalidator.h
    common/materialswitch.h
    common/mouseshortcut.h
    common/numericspinbox.h
    common/passwordtogglehelper.h
    common/tablewidget.h
    common/userinputfilter.h
    common/verifiablewizardpage.h
    common/widgetcover.h
    common/widgetstateindicator.h
    completer/completeritemdelegate.h
    completer/completermodel.h
    completer/completerview.h
    completer/completerwindow.h
    configmapper.h
    configwidgets/cellrenderertable.h
    configwidgets/combodatawidget.h
    configwidgets/listtostringlisthash.h
    configwidgets/styleconfigwidget.h
    constraints/columncheckpanel.h
    constraints/columncollatepanel.h
    constraints/columndefaultpanel.h
    constraints/columnforeignkeypanel.h
    constraints/columngeneratedpanel.h
    constraints/columnnotnullpanel.h
    constraints/columnprimarykeypanel.h
    constraints/columnuniqueandnotnullpanel.h
    constraints/columnuniquepanel.h
    constraints/constraintcheckpanel.h
    constraints/constraintpanel.h
    constraints/tablecheckpanel.h
    constraints/tableforeignkeypanel.h
    constraints/tablepkanduniquepanel.h
    constraints/tableprimarykeypanel.h
    constraints/tableuniquepanel.h
    customconfigwidgetplugin.h
    datagrid/cellrendererplugin.h
    datagrid/fkcombobox.h
    datagrid/sqldatasourcequerymodel.h
    datagrid/sqlqueryitemdelegate.h
    datagrid/sqlqueryitem.h
    datagrid/sqlqueryitemlineedit.h
    datagrid/sqlquerymodelcolumn.h
    datagrid/sqlquerymodel.h
    datagrid/sqlqueryrownummodel.h
    datagrid/sqlqueryview.h
    datagrid/sqltablemodel.h
    datagrid/sqlviewmodel.h
    dataview.h
    dblistmodel.h
    dbobjectdialogs.h
    dbobjlistmodel.h
    dbtree/dbtree.h
    dbtree/dbtreeitemdelegate.h
    dbtree/dbtreeitemfactory.h
    dbtree/dbtreeitem.h
    dbtree/dbtreemodel.h
    dbtree/dbtreeview.h
    debugconsole.h
    dialogs/aboutdialog.h
    dialogs/bindparamsdialog.h
    dialogs/columndialogconstraintsmodel.h
    dialogs/columndialog.h
    dialogs/configdialog.h
    dialogs/constraintdialog.h
    dialogs/cssdebugdialog.h
    dialogs/dbdialog.h
    dialogs/ddlpreviewdialog.h
    dialogs/errorsconfirmdialog.h
    dialogs/execfromfiledialog.h
    dialogs/exportdialog.h
    dialogs/fileexecerrorsdialog.h
    dialogs/importdialog.h
    dialogs/indexdialog.h
    dialogs/indexexprcolumndialog.h
    dialogs/languagedialog.h
    dialogs/messagelistdialog.h
    dialogs/newconstraintdialog.h
    dialogs/newversiondialog.h
    dialogs/populateconfigdialog.h
    dialogs/populatedialog.h
    dialogs/quitconfirmdialog.h
    dialogs/searchtextdialog.h
    dialogs/sortdialog.h
    dialogs/triggercolumnsdialog.h
    dialogs/triggerdialog.h
    dialogs/versionconvertsummarydialog.h
    extendedpalette.h
    formmanager.h
    formview.h
    gui_global.h
    icon.h
    iconmanager.h
    mainwindow.h
    mdiarea.h
    mdichild.h
    mdiwindow.h
    multieditor/multieditorbool.h
    multieditor/multieditordate.h
    multieditor/multieditordatetime.h
    multieditor/multieditordialog.h
    multieditor/multieditorfk.h
    multieditor/multieditor.h
    multieditor/multieditorhex.h
    multieditor/multieditornumeric.h
    multieditor/multieditortext.h
    multieditor/multieditortime.h
    multieditor/multieditorwidget.h
    multieditor/multieditorwidgetplugin.h
    qhexedit2/commands.h
    qhexedit2/qhexedit.h
    qhexedit2/qhexedit_p.h
    qhexedit2/xbytearray.h
    qtscriptsyntaxhighlighter.h
    searchtextlocator.h
    selectabledbmodel.h
    selectabledbobjmodel.h
    sqlcompareview.h
    sqleditor.h
    sqlitesyntaxhighlighter.h
    sqlview.h
    statusfield.h
    style.h
    syntaxhighlighterplugin.h
    taskbar.h
    themetuner.h
    uiconfig.h
    uicustomicon.h
    uidebug.h
    uiloader.h
    uiloaderpropertyhandler.h
    uiscriptingcombo.h
    uiscriptingedit.h
    uiurlbutton.h
    uiutils.h
    widgetresizer.h
    windows/codesnippeteditor.h
    windows/codesnippeteditormodel.h
    windows/collationseditor.h
    windows/collationseditormodel.h
    windows/constrainttabmodel.h
    windows/ddlhistorywindow.h
    windows/editorwindow.h
    windows/functionseditor.h
    windows/functionseditormodel.h
    windows/sqliteextensioneditor.h
    windows/sqliteextensioneditormodel.h
    windows/tableconstraintsmodel.h
    windows/tablestructuremodel.h
    windows/tablewindow.h
    windows/viewwindow.h
    common/spinnowheelfilter.h
    dialogs/settingsexportdialog.h
    dialogs/settingsimportdialog.h
    codesnippetspanel.h
    completer/completersnippetdelegate.h
    dialogs/manualcommitwalmodedialog.h
    dialogs/manualcommitpendingtxdialog.h
    commandpalette/commandpalette.h
    commandpalette/cpconfigdialogprovider.h
    commandpalette/cpdbobjectsprovider.h
    commandpalette/cpmdiwindowsprovider.h
    commandpalette/cpglobalactionsprovider.h
    common/htmlbutton.h
)

set(PROJECT_SOURCES
    actionentry.cpp
    common/booltoolbutton.cpp
    common/centerediconitemdelegate.cpp
    common/colorbutton.cpp
    common/colorpickerpopup.cpp
    common/combonowheelfilter.cpp
    common/configcombobox.cpp
    common/configradiobutton.cpp
    common/customsplitter.cpp
    common/datawidgetmapper.cpp
    common/dbcombobox.cpp
    common/deleteonfocusoutfilter.cpp
    common/dialogsizehandler.cpp
    common/extactioncontainer.cpp
    common/extactionprototype.cpp
    common/extlineedit.cpp
    common/exttableview.cpp
    common/exttablewidget.cpp
    common/fileedit.cpp
    common/fontedit.cpp
    common/immediatetooltip.cpp
    common/intvalidator.cpp
    common/ipvalidator.cpp
    common/materialswitch.cpp
    common/mouseshortcut.cpp
    common/numericspinbox.cpp
    common/passwordtogglehelper.cpp
    common/tablewidget.cpp
    common/userinputfilter.cpp
    common/verifiablewizardpage.cpp
    common/widgetcover.cpp
    common/widgetstateindicator.cpp
    completer/completeritemdelegate.cpp
    completer/completermodel.cpp
    completer/completerview.cpp
    completer/completerwindow.cpp
    configmapper.cpp
    configwidgets/cellrenderertable.cpp
    configwidgets/combodatawidget.cpp
    configwidgets/listtostringlisthash.cpp
    configwidgets/styleconfigwidget.cpp
    constraints/columncheckpanel.cpp
    constraints/columncollatepanel.cpp
    constraints/columndefaultpanel.cpp
    constraints/columnforeignkeypanel.cpp
    constraints/columngeneratedpanel.cpp
    constraints/columnnotnullpanel.cpp
    constraints/columnprimarykeypanel.cpp
    constraints/columnuniqueandnotnullpanel.cpp
    constraints/columnuniquepanel.cpp
    constraints/constraintcheckpanel.cpp
    constraints/constraintpanel.cpp
    constraints/tablecheckpanel.cpp
    constraints/tableforeignkeypanel.cpp
    constraints/tablepkanduniquepanel.cpp
    constraints/tableprimarykeypanel.cpp
    constraints/tableuniquepanel.cpp
    datagrid/fkcombobox.cpp
    datagrid/sqldatasourcequerymodel.cpp
    datagrid/sqlqueryitem.cpp
    datagrid/sqlqueryitemdelegate.cpp
    datagrid/sqlqueryitemlineedit.cpp
    datagrid/sqlquerymodelcolumn.cpp
    datagrid/sqlquerymodel.cpp
    datagrid/sqlqueryrownummodel.cpp
    datagrid/sqlqueryview.cpp
    datagrid/sqltablemodel.cpp
    datagrid/sqlviewmodel.cpp
    dataview.cpp
    dblistmodel.cpp
    dbobjectdialogs.cpp
    dbobjlistmodel.cpp
    dbtree/dbtree.cpp
    dbtree/dbtreeitem.cpp
    dbtree/dbtreeitemdelegate.cpp
    dbtree/dbtreeitemfactory.cpp
    dbtree/dbtreemodel.cpp
    dbtree/dbtreeview.cpp
    debugconsole.cpp
    dialogs/aboutdialog.cpp
    dialogs/bindparamsdialog.cpp
    dialogs/columndialogconstraintsmodel.cpp
    dialogs/columndialog.cpp
    dialogs/configdialog.cpp
    dialogs/constraintdialog.cpp
    dialogs/cssdebugdialog.cpp
    dialogs/dbdialog.cpp
    dialogs/ddlpreviewdialog.cpp
    dialogs/errorsconfirmdialog.cpp
    dialogs/execfromfiledialog.cpp
    dialogs/exportdialog.cpp
    dialogs/fileexecerrorsdialog.cpp
    dialogs/importdialog.cpp
    dialogs/indexdialog.cpp
    dialogs/indexexprcolumndialog.cpp
    dialogs/languagedialog.cpp
    dialogs/messagelistdialog.cpp
    dialogs/newconstraintdialog.cpp
    dialogs/newversiondialog.cpp
    dialogs/populateconfigdialog.cpp
    dialogs/populatedialog.cpp
    dialogs/quitconfirmdialog.cpp
    dialogs/searchtextdialog.cpp
    dialogs/sortdialog.cpp
    dialogs/triggercolumnsdialog.cpp
    dialogs/triggerdialog.cpp
    dialogs/versionconvertsummarydialog.cpp
    extendedpalette.cpp
    formmanager.cpp
    formview.cpp
    icon.cpp
    iconmanager.cpp
    mainwindow.cpp
    mdiarea.cpp
    mdichild.cpp
    mdiwindow.cpp
    multieditor/multieditorbool.cpp
    multieditor/multieditor.cpp
    multieditor/multieditordate.cpp
    multieditor/multieditordatetime.cpp
    multieditor/multieditordialog.cpp
    multieditor/multieditorfk.cpp
    multieditor/multieditorhex.cpp
    multieditor/multieditornumeric.cpp
    multieditor/multieditortext.cpp
    multieditor/multieditortime.cpp
    multieditor/multieditorwidget.cpp
    qhexedit2/commands.cpp
    qhexedit2/qhexedit.cpp
    qhexedit2/qhexedit_p.cpp
    qhexedit2/xbytearray.cpp
    qtscriptsyntaxhighlighter.cpp
    searchtextlocator.cpp
    selectabledbmodel.cpp
    selectabledbobjmodel.cpp
    sqlcompareview.cpp
    sqleditor.cpp
    sqlitesyntaxhighlighter.cpp
    sqlview.cpp
    statusfield.cpp
    style.cpp
    taskbar.cpp
    themetuner.cpp
    uiconfig.cpp
    uicustomicon.cpp
    uidebug.cpp
    uiloader.cpp
    uiscriptingcombo.cpp
    uiscriptingedit.cpp
    uiurlbutton.cpp
    uiutils.cpp
    widgetresizer.cpp
    windows/codesnippeteditor.cpp
    windows/codesnippeteditormodel.cpp
    windows/collationseditor.cpp
    windows/collationseditormodel.cpp
    windows/constrainttabmodel.cpp
    windows/ddlhistorywindow.cpp
    windows/editorwindow.cpp
    windows/functionseditor.cpp
    windows/functionseditormodel.cpp
    windows/sqliteextensioneditor.cpp
    windows/sqliteextensioneditormodel.cpp
    windows/tableconstraintsmodel.cpp
    windows/tablestructuremodel.cpp
    windows/tablewindow.cpp
    windows/viewwindow.cpp
    common/spinnowheelfilter.cpp
    dialogs/settingsexportdialog.cpp
    dialogs/settingsimportdialog.cpp
    codesnippetspanel.cpp
    completer/completersnippetdelegate.cpp
    dialogs/manualcommitwalmodedialog.cpp
    dialogs/manualcommitpendingtxdialog.cpp
    commandpalette/commandpalette.cpp
    commandpalette/cpconfigdialogprovider.cpp
    commandpalette/cpdbobjectsprovider.cpp
    commandpalette/cpmdiwindowsprovider.cpp
    commandpalette/cpglobalactionsprovider.cpp
    common/htmlbutton.cpp
)

qt_add_resources(PROJECT_SOURCES
    gui.qrc
)
if(NOT WITH_SHARED_RES)
    qt_add_resources(PROJECT_SOURCES
        icons.qrc
    )
endif()

qt_wrap_ui(PROJECT_SOURCES
    common/fontedit.ui
    completer/completerwindow.ui
    constraints/columncollatepanel.ui
    constraints/columndefaultpanel.ui
    constraints/columnforeignkeypanel.ui
    constraints/columngeneratedpanel.ui
    constraints/columnprimarykeypanel.ui
    constraints/columnuniqueandnotnullpanel.ui
    constraints/constraintcheckpanel.ui
    constraints/tableforeignkeypanel.ui
    constraints/tablepkanduniquepanel.ui
    dbtree/dbtree.ui
    debugconsole.ui
    dialogs/aboutdialog.ui
    dialogs/bindparamsdialog.ui
    dialogs/columndialog.ui
    dialogs/configdialog.ui
    dialogs/constraintdialog.ui
    dialogs/cssdebugdialog.ui
    dialogs/dbdialog.ui
    dialogs/ddlpreviewdialog.ui
    dialogs/errorsconfirmdialog.ui
    dialogs/execfromfiledialog.ui
    dialogs/exportdialog.ui
    dialogs/fileexecerrorsdialog.ui
    dialogs/importdialog.ui
    dialogs/indexdialog.ui
    dialogs/indexexprcolumndialog.ui
    dialogs/languagedialog.ui
    dialogs/messagelistdialog.ui
    dialogs/newconstraintdialog.ui
    dialogs/newversiondialog.ui
    dialogs/populateconfigdialog.ui
    dialogs/populatedialog.ui
    dialogs/quitconfirmdialog.ui
    dialogs/searchtextdialog.ui
    dialogs/sortdialog.ui
    dialogs/triggercolumnsdialog.ui
    dialogs/triggerdialog.ui
    dialogs/versionconvertsummarydialog.ui
    forms/sqlformatterplugin.ui
    mainwindow.ui
    statusfield.ui
    windows/codesnippeteditor.ui
    windows/collationseditor.ui
    windows/ddlhistorywindow.ui
    windows/editorwindow.ui
    windows/functionseditor.ui
    windows/sqliteextensioneditor.ui
    windows/tablewindow.ui
    windows/viewwindow.ui
    dialogs/settingsexportdialog.ui
    dialogs/settingsimportdialog.ui
    codesnippetspanel.ui
    dialogs/manualcommitwalmodedialog.ui
    dialogs/manualcommitpendingtxdialog.ui
)

add_library(guiLetos SHARED ${PROJECT_HEADERS} ${PROJECT_SOURCES})
letos_set_output_properties(guiLetos)
set_target_properties(guiLetos PROPERTIES
    VERSION 1.0.0
    SOVERSION 1
)
target_compile_definitions(guiLetos PRIVATE
    GUI_LIBRARY
)
target_link_libraries(guiLetos PRIVATE
    Qt::Core
    Qt::Gui
    Qt::Svg
    Qt::UiTools
    Qt::Widgets
    Qt::Xml
    coreLetos
)
target_link_libraries(guiLetos PRIVATE Qt6::Core)

install(
    TARGETS guiLetos
    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)

if(WITH_SHARED_RES)
    file(GLOB icons_files img/*)
    install(
        FILES ${icons_files}
        DESTINATION "${LETOS_INSTALL_DATADIR}/img"
    )
endif()
