add_subdirectory( pics )
add_subdirectory( headings )

########### set variables #############

# Some definitions for experimental code or debugging
#add_definitions(-DWANT_LVTOOLTIP)                # umllistiew
#add_definitions(-DXMI_FLAT_PACKAGES)             # umlobject
#add_definitions(-DDEBUG_LVITEM_INSERTION_ORDER)  # umllistviewitem
#add_definitions(-DTRY_BUGFIX_120682)             # model_utils
#add_definitions(-DQ_CC_MSVC)                     # preprocesslexer
#add_definitions(-DDEBUG_CPPTREE2UML)             # cpptree2uml
#add_definitions(-DDEBUG_PRINTING)                # umlview
#add_definitions(-DVERBOSE_DEBUGGING)             # listpopupmenu, association, petaltree2uml,
                                                  # umlobject, umldoc, classifierlistpage

# Some Boost require exceptions
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  ${KDE4_ENABLE_EXCEPTIONS}")

include_directories(
  ${LIBXML2_INCLUDE_DIR}
  ${LIBXSLT_INCLUDE_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/
  ${CMAKE_CURRENT_SOURCE_DIR}/clipboard/
  ${CMAKE_CURRENT_SOURCE_DIR}/cmds
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/ada/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/as/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/cpp/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/csharp/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/d/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/idl/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/java/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/js/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/pascal/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/perl/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/php/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/python/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/ruby/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/sql/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/tcl/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/vala/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/xml/
  ${CMAKE_CURRENT_SOURCE_DIR}/codegenwizard/
  ${CMAKE_CURRENT_SOURCE_DIR}/codeimport/
  ${CMAKE_CURRENT_SOURCE_DIR}/codeimport/csharp/
  ${CMAKE_CURRENT_SOURCE_DIR}/codeimpwizard/
  ${CMAKE_CURRENT_SOURCE_DIR}/controller/
  ${CMAKE_CURRENT_SOURCE_DIR}/debug/
  ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/
  ${CMAKE_CURRENT_SOURCE_DIR}/docgenerators/
  ${CMAKE_CURRENT_SOURCE_DIR}/refactoring/
  ${CMAKE_CURRENT_SOURCE_DIR}/widgets/
  ${Boost_INCLUDE_DIR}
)

set(libdebug_SRCS
    debug/debug_utils.cpp
)

set(libcodegenerator_SRCS
    codegenerators/codegenfactory.cpp
    codegenerators/codegenpolicyext.cpp
    codegenerators/codeblock.cpp
    codegenerators/codeblockwithcomments.cpp
    codegenerators/codeclassfield.cpp
    codegenerators/codeclassfielddeclarationblock.cpp
    codegenerators/codecomment.cpp
    codegenerators/codedocument.cpp
    codegenerators/codegenerationpolicy.cpp
    codegenerators/codegenerator.cpp
    codegenerators/codegenobjectwithtextblocks.cpp
    codegenerators/codemethodblock.cpp
    codegenerators/codeoperation.cpp
    codegenerators/codeparameter.cpp
    codegenerators/codegen_utils.cpp
    codegenerators/hierarchicalcodeblock.cpp
    codegenerators/ownedcodeblock.cpp
    codegenerators/ownedhierarchicalcodeblock.cpp
    codegenerators/textblock.cpp
    codegenerators/java/javacodegenerator.cpp
    codegenerators/java/javaantcodedocument.cpp
    codegenerators/java/javacodeclassfield.cpp
    codegenerators/java/javaclassifiercodedocument.cpp
    codegenerators/java/javacodecomment.cpp
    codegenerators/java/javacodedocumentation.cpp
    codegenerators/java/javacodeoperation.cpp
    codegenerators/java/javacodeaccessormethod.cpp
    codegenerators/java/javaclassdeclarationblock.cpp
    codegenerators/java/javacodeclassfielddeclarationblock.cpp
    codegenerators/java/javacodegenerationpolicy.cpp
    codegenerators/java/javacodegenerationpolicypage.cpp
    codegenerators/cpp/cppcodegenerator.cpp
    codegenerators/cpp/cppcodedocumentation.cpp
    codegenerators/cpp/cppcodeclassfield.cpp
    codegenerators/cpp/cppcodecomment.cpp
    codegenerators/cpp/cppmakecodedocument.cpp
    codegenerators/cpp/cppsourcecodedocument.cpp
    codegenerators/cpp/cppsourcecodeoperation.cpp
    codegenerators/cpp/cppsourcecodeaccessormethod.cpp
    codegenerators/cpp/cppsourcecodeclassfielddeclarationblock.cpp
    codegenerators/cpp/cppheadercodedocument.cpp
    codegenerators/cpp/cppheaderclassdeclarationblock.cpp
    codegenerators/cpp/cppheadercodeoperation.cpp
    codegenerators/cpp/cppheadercodeaccessormethod.cpp
    codegenerators/cpp/cppheadercodeclassfielddeclarationblock.cpp
    codegenerators/cpp/cppcodegenerationpolicy.cpp
    codegenerators/cpp/cppcodegenerationpolicypage.cpp
    codegenerators/cpp/cppcodegenerationform.cpp
    codegenerators/d/dcodegenerator.cpp
    codegenerators/d/dcodedocumentation.cpp
    codegenerators/d/dcodeclassfield.cpp
    codegenerators/d/dcodecomment.cpp
    codegenerators/d/dclassdeclarationblock.cpp
    codegenerators/d/dclassifiercodedocument.cpp
    codegenerators/d/dcodeoperation.cpp
    codegenerators/d/dcodeaccessormethod.cpp
    codegenerators/d/dcodeclassfielddeclarationblock.cpp
    codegenerators/d/dcodegenerationpolicy.cpp
    codegenerators/d/dcodegenerationpolicypage.cpp
    codegenerators/ruby/rubycodegenerator.cpp
    codegenerators/ruby/rubycodeclassfield.cpp
    codegenerators/ruby/rubyclassifiercodedocument.cpp
    codegenerators/ruby/rubycodecomment.cpp
    codegenerators/ruby/rubycodedocumentation.cpp
    codegenerators/ruby/rubycodeoperation.cpp
    codegenerators/ruby/rubycodeaccessormethod.cpp
    codegenerators/ruby/rubyclassdeclarationblock.cpp
    codegenerators/ruby/rubycodeclassfielddeclarationblock.cpp
    codegenerators/ruby/rubycodegenerationpolicy.cpp
    codegenerators/ruby/rubycodegenerationpolicypage.cpp
    codegenerators/simplecodegenerator.cpp
    codegenerators/ada/adawriter.cpp
    codegenerators/as/aswriter.cpp
    codegenerators/cpp/cppwriter.cpp
    codegenerators/csharp/csharpwriter.cpp
    codegenerators/d/dwriter.cpp
    codegenerators/java/javawriter.cpp
    codegenerators/js/jswriter.cpp
    codegenerators/idl/idlwriter.cpp
    codegenerators/sql/mysqlwriter.cpp
    codegenerators/pascal/pascalwriter.cpp
    codegenerators/perl/perlwriter.cpp
    codegenerators/php/phpwriter.cpp
    codegenerators/php/php5writer.cpp
    codegenerators/sql/postgresqlwriter.cpp
    codegenerators/python/pythonwriter.cpp
    codegenerators/ruby/rubywriter.cpp
    codegenerators/sql/sqlwriter.cpp
    codegenerators/tcl/tclwriter.cpp
    codegenerators/vala/valawriter.cpp
    codegenerators/xml/xmlschemawriter.cpp
    codegenerators/xml/xmlelementcodeblock.cpp
    codegenerators/xml/xmlcodecomment.cpp
)

kde4_add_ui_files(  libcodegenerator_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/cpp/cppcodegenerationformbase.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/ruby/rubycodegenerationformbase.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/d/dcodegenerationformbase.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/codegenerators/java/javacodegenerationformbase.ui
)

set(libdocgenerator_SRCS
    docgenerators/docbookgenerator.cpp
    docgenerators/docbookgeneratorjob.cpp
    docgenerators/xhtmlgenerator.cpp
    docgenerators/docbook2xhtmlgeneratorjob.cpp
)

set(libdialogs_SRCS
    dialogs/autolayoutoptionpage.cpp
    dialogs/activitydialog.cpp
    dialogs/activitypage.cpp
    dialogs/assocgenpage.cpp
    dialogs/assocpage.cpp
    dialogs/assocpropdlg.cpp
    dialogs/assocrolepage.cpp
    dialogs/classgenpage.cpp
    dialogs/classifierlistpage.cpp
    dialogs/constraintlistpage.cpp
    dialogs/classoptionspage.cpp
    dialogs/classpropdlg.cpp
    dialogs/classwizard.cpp
    dialogs/codeeditor.cpp
    dialogs/codegenerationpolicypage.cpp
    dialogs/codeimportoptionspage.cpp
    dialogs/codeviewerdialog.cpp
    dialogs/codevieweroptionspage.cpp
    dialogs/codetextedit.cpp
    dialogs/codetexthighlighter.cpp
    dialogs/defaultcodegenpolicypage.cpp
    dialogs/diagramprintpage.cpp
    dialogs/dialog_utils.cpp
    dialogs/dialogbase.cpp
    dialogs/exportallviewsdialog.cpp
    dialogs/generaloptionpage.cpp
    dialogs/notedialog.cpp
    dialogs/objectnodedialog.cpp
    dialogs/overwritedialogue.cpp
    dialogs/pkgcontentspage.cpp
    dialogs/parmpropdlg.cpp
    dialogs/selectopdlg.cpp
    dialogs/settingsdlg.cpp
    dialogs/statedialog.cpp
    dialogs/umlattributedialog.cpp
    dialogs/umlcheckconstraintdialog.cpp
    dialogs/umlentityattributedialog.cpp
    dialogs/umlforeignkeyconstraintdialog.cpp
    dialogs/umlfiledialog.cpp
    dialogs/umloperationdialog.cpp
    dialogs/umltemplatedialog.cpp
    dialogs/umlroledialog.cpp
    dialogs/umlroleproperties.cpp
    dialogs/umluniqueconstraintdialog.cpp
    dialogs/umlviewdialog.cpp
    dialogs/umlwidgetstylepage.cpp
)

kde4_add_ui_files(  libdialogs_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/autolayoutoptionpage.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/codeviewerdialogbase.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/codevieweroptionsbase.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/exportallviewsdialogbase.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/umlrolepropertiesbase.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/diagrampropertiespage.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/dialogs/codeimportoptionspage.ui
)

set(librefactoring_SRCS
    refactoring/refactoringassistant.cpp
)

set(libcodegenwizard_SRCS
    codegenwizard/codegenselectpage.cpp
    codegenwizard/codegenoptionspage.cpp
    codegenwizard/codegenstatuspage.cpp
    codegenwizard/codegenerationwizard.cpp
)

kde4_add_ui_files(  libcodegenwizard_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/codegenwizard/codegenselectpage.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/codegenwizard/codegenoptionspage.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/codegenwizard/codegenstatuspage.ui
)

set(libcodeimpwizard_SRCS
    codeimpwizard/codeimpselectpage.cpp
    codeimpwizard/codeimpstatuspage.cpp
    codeimpwizard/codeimpthread.cpp
    codeimpwizard/codeimportingwizard.cpp
)

kde4_add_ui_files(  libcodeimpwizard_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/codeimpwizard/codeimpselectpage.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/codeimpwizard/codeimpstatuspage.ui
)

set(libcodeimport_SRCS
    codeimport/adaimport.cpp
    codeimport/classimport.cpp
    codeimport/idlimport.cpp
    codeimport/import_utils.cpp
    codeimport/javaimport.cpp
    codeimport/nativeimportbase.cpp
    codeimport/pascalimport.cpp
    codeimport/pythonimport.cpp
    codeimport/csharp/csharpimport.cpp
)

list(APPEND libcodeimport_SRCS
    codeimport/cppimport.cpp
)
set(libkdevcppparser_SRCS
    codeimport/kdevcppparser/ast.cpp
    codeimport/kdevcppparser/driver.cpp
    codeimport/kdevcppparser/errors.cpp
    codeimport/kdevcppparser/lexer.cpp
    codeimport/kdevcppparser/lookup.cpp
    codeimport/kdevcppparser/parser.cpp
    codeimport/kdevcppparser/preprocesslexer.cpp
    codeimport/kdevcppparser/tree_parser.cpp
    codeimport/kdevcppparser/ast_utils.cpp
    codeimport/kdevcppparser/cpptree2uml.cpp
)

set(libclipboard_SRCS
    clipboard/umldragdata.cpp
    clipboard/umlclipboard.cpp
    clipboard/idchangelog.cpp
)

set(libcmds_SRCS
    cmds/cmd_createDiagram.cpp
    cmds/cmd_handleRename.cpp
    cmds/cmd_moveWidget.cpp
    cmds/cmd_resizeWidget.cpp
    cmds/cmd_setStereotype.cpp
    cmds/cmd_setVisibility.cpp

    cmds/generic/cmd_createUMLObject.cpp
    cmds/generic/cmd_renameUMLObject.cpp

    cmds/widget/cmd_changeFontSelection.cpp
    cmds/widget/cmd_changeTextColor.cpp
    cmds/widget/cmd_changeLineColor.cpp
    cmds/widget/cmd_changeFillColor.cpp
    cmds/widget/cmd_changeMultiplicity.cpp
    cmds/widget/cmd_createWidget.cpp
    cmds/widget/cmd_setName.cpp
    cmds/widget/cmd_setTxt.cpp
)

set(libwidgets_SRCS
    widgets/activitywidget.cpp
    widgets/actorwidget.cpp
    widgets/artifactwidget.cpp
    widgets/associationline.cpp
    widgets/associationwidget.cpp
    widgets/boxwidget.cpp
    widgets/categorywidget.cpp
    widgets/classifierwidget.cpp
    widgets/combinedfragmentwidget.cpp
    widgets/componentwidget.cpp
    widgets/datatypewidget.cpp
    widgets/entitywidget.cpp
    widgets/enumwidget.cpp
    widgets/floatingdashlinewidget.cpp
    widgets/floatingtextwidget.cpp
    widgets/forkjoinwidget.cpp
    widgets/layoutgrid.cpp
    widgets/linkwidget.cpp
    widgets/messagewidget.cpp
    widgets/nodewidget.cpp
    widgets/notewidget.cpp
    widgets/objectnodewidget.cpp
    widgets/objectwidget.cpp
    widgets/packagewidget.cpp
    widgets/pinwidget.cpp
    widgets/preconditionwidget.cpp
    widgets/regionwidget.cpp
    widgets/seqlinewidget.cpp
    widgets/signalwidget.cpp
    widgets/statewidget.cpp
    widgets/toolbarstateonewidget.cpp
    widgets/umlwidget.cpp
    widgets/usecasewidget.cpp
    widgets/widget_factory.cpp
    widgets/widget_utils.cpp
    widgets/widgetbase.cpp
    widgets/widgetlist_utils.cpp
    widgets/statusbartoolbutton.cpp
)

set (libcontroller_SRCS
    controller/floatingtextwidgetcontroller.cpp
    controller/messagewidgetcontroller.cpp
#    controller/notewidgetcontroller.cpp
    controller/objectwidgetcontroller.cpp
    controller/umlwidgetcontroller.cpp
)

########### next target ###############

set(libumbrello_SRCS
    actor.cpp
    artifact.cpp
    association.cpp
    assocrules.cpp
    attribute.cpp
    basictypes.cpp
    category.cpp
    checkconstraint.cpp
    classifier.cpp
    classifiercodedocument.cpp
    classifierlistitem.cpp
    cmdlineexportallviewsevent.cpp
    codeaccessormethod.cpp
    component.cpp
    dotgenerator.cpp
    docwindow.cpp
    entity.cpp
    entityattribute.cpp
    entityconstraint.cpp
    enum.cpp
    enumliteral.cpp
    folder.cpp
    foreignkeyconstraint.cpp
    icon_utils.cpp
    import_rose.cpp
    listpopupmenu.cpp
    main.cpp
    model_utils.cpp
    node.cpp
    object_factory.cpp
    operation.cpp
    optionstate.cpp
    package.cpp
    petalnode.cpp
    petaltree2uml.cpp
    stereotype.cpp
    template.cpp
    toolbarstate.cpp
    toolbarstatearrow.cpp
    toolbarstateassociation.cpp
    toolbarstatefactory.cpp
    toolbarstatemessages.cpp
    toolbarstateother.cpp
    toolbarstatepool.cpp
    uml.cpp
    umlattributelist.cpp
    umlcanvasobject.cpp
    umlclassifierlistitemlist.cpp
    umldoc.cpp
    umlentityattributelist.cpp
    umlentityconstraintlist.cpp
    umllistview.cpp
    umllistviewitem.cpp
    umlobject.cpp
    umlobjectlist.cpp
    umlrole.cpp
    umlscene.cpp
    umlview.cpp
    umlviewimageexporter.cpp
    umlviewimageexporterall.cpp
    umlviewimageexportermodel.cpp
    uniqueconstraint.cpp
    uniqueid.cpp
    usecase.cpp
    worktoolbar.cpp
)

kde4_add_kcfg_files(umbrello_SRCS umbrellosettings.kcfgc)

set(umbrello_SRCS
    ${umbrello_SRCS}
    ${libcontroller_SRCS}
    ${libdebug_SRCS}
    ${libdialogs_SRCS}
    ${librefactoring_SRCS}
    ${libcodegenwizard_SRCS}
    ${libcodeimpwizard_SRCS}
    ${libclassparser_SRCS}
    ${libclipboard_SRCS}
    ${libkdevcppparser_SRCS}
    ${libcodeimport_SRCS}
    ${libcodegenerator_SRCS}
    ${libdocgenerator_SRCS}
    ${libcmds_SRCS}
    ${libwidgets_SRCS}
    ${libumbrello_SRCS}
)

kde4_add_app_icon(umbrello_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/global/hi*-app-umbrello.png")
kde4_add_executable(umbrello ${umbrello_SRCS})
target_link_libraries(umbrello ${KDE4_KFILE_LIBS} ${LIBXML2_LIBRARIES} ${LIBXSLT_LIBRARIES})
install(TARGETS umbrello ${INSTALL_TARGETS_DEFAULT_ARGS} )

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

install( PROGRAMS umbrello.desktop  DESTINATION  ${XDG_APPS_INSTALL_DIR} )
install( FILES
    umbrelloui.rc
    docgenerators/xmi2docbook.xsl
    docgenerators/docbook2xhtml.xsl
    docgenerators/xmi.css
    docgenerators/common.ent
    DESTINATION ${DATA_INSTALL_DIR}/umbrello )

install( DIRECTORY
    layouts
    DESTINATION ${DATA_INSTALL_DIR}/umbrello
    PATTERN .svn EXCLUDE )

kde4_install_icons( ${ICON_INSTALL_DIR} )

