#############################################################################
# Name:        build/cmake/samples/CMakeLists.txt
# Purpose:     CMake script to build samples
# Author:      Tobias Taschner
# Created:     2016-10-04
# Copyright:   (c) 2016 wxWidgets development team
# Licence:     wxWindows licence
#############################################################################

wx_add_sample(access accesstest.cpp DEPENDS wxUSE_ACCESSIBILITY)
wx_add_sample(animate anitest.cpp anitest.h DATA throbber.gif hourglass.ani DEPENDS wxUSE_ANIMATIONCTRL)
wx_add_sample(archive CONSOLE)
wx_add_sample(artprov arttest.cpp artbrows.cpp artbrows.h)
wx_add_sample(aui auidemo.cpp LIBRARIES aui html NAME auidemo DEPENDS wxUSE_AUI)
wx_add_sample(calendar RES calendar.rc DEPENDS wxUSE_CALENDARCTRL)
wx_add_sample(caret DEPENDS wxUSE_CARET)
wx_add_sample(clipboard DEPENDS wxUSE_CLIPBOARD)
wx_add_sample(collpane DEPENDS wxUSE_COLLPANE)
wx_add_sample(combo DATA dropbuth.png dropbutn.png dropbutp.png DEPENDS wxUSE_COMBOCTRL)
wx_add_sample(config conftest.cpp DEPENDS wxUSE_CONFIG)
wx_add_sample(console CONSOLE IMPORTANT)
wx_add_sample(dataview IMPORTANT dataview.cpp mymodels.cpp mymodels.h DEPENDS wxUSE_DATAVIEWCTRL)
if(wxUSE_ON_FATAL_EXCEPTION AND (NOT WIN32 OR MSVC))
    wx_add_sample(debugrpt LIBRARIES qa DEPENDS wxUSE_DEBUGREPORT)
endif()
set(SAMPLE_DIALOGS_SRC dialogs.cpp dialogs.h)
if(NOT wxBUILD_SHARED AND (WXMSW OR APPLE)) # AND NOT WXUNIV
    wx_list_add_prefix(SAMPLE_DIALOGS_SRC ../../src/generic/ colrdlgg.cpp dirdlgg.cpp filedlgg.cpp)
    if(WXMSW)
        wx_list_add_prefix(SAMPLE_DIALOGS_SRC ../../src/generic/ fontdlgg.cpp)
    endif()
endif()
if(WXGTK2)
    wx_list_add_prefix(SAMPLE_DIALOGS_SRC ../../src/generic/ filedlgg.cpp)
endif()
wx_add_sample(dialogs ${SAMPLE_DIALOGS_SRC} DATA tips.txt)
wx_add_sample(dialup nettest.cpp LIBRARIES net DEPENDS wxUSE_DIALUP_MANAGER)
wx_add_sample(display DEPENDS wxUSE_DISPLAY)
wx_add_sample(dnd dnd.cpp RES dnd.rc DATA wxwin.png DEPENDS wxUSE_DRAG_AND_DROP)
wx_add_sample(docview docview.cpp doc.cpp view.cpp docview.h doc.h view.h
    RES docview.rc LIBRARIES aui DEPENDS wxUSE_DOC_VIEW_ARCHITECTURE)
wx_add_sample(dragimag dragimag.cpp dragimag.h RES dragimag.rc
    DATA backgrnd.png shape01.png shape02.png shape03.png
    DEPENDS wxUSE_DRAGIMAGE)
wx_add_sample(drawing DATA pat4.bmp pat35.bmp pat36.bmp image.bmp mask.bmp)
wx_add_sample(erase)
wx_add_sample(event event.cpp gestures.cpp gestures.h)
wx_add_sample(except DEPENDS wxUSE_EXCEPTIONS)
wx_add_sample(exec)
wx_add_sample(font DATA wxprivate.ttf)
wx_add_sample(fswatcher DEPENDS wxUSE_FSWATCHER)
wx_add_sample(grid griddemo.cpp griddemo.h DEPENDS wxUSE_GRID)

wx_list_add_prefix(HELP_DOC_FILES doc/
    aindex.html down.gif dxxgifs.tex HIER.html icon1.gif icon2.gif index.html
    logo.gif wx204.htm wx34.htm wxExtHelpController.html wxhelp.map wx.htm
    )
wx_add_sample(help demo.cpp LIBRARIES html
    DATA
    back.gif bullet.bmp contents.gif cshelp.txt doc.chm doc.cnt doc.hhc
    doc.hhk doc.hhp doc.hlp doc.hpj doc.zip forward.gif up.gif
    ${HELP_DOC_FILES}
    NAME helpdemo
    DEPENDS wxUSE_HELP
    )
wx_add_sample(htlbox LIBRARIES html DEPENDS wxUSE_HTML)
if(wxUSE_HTML)
    include(html.cmake)
endif()
wx_add_sample(image image.cpp canvas.cpp canvas.h cursor_png.c RES image.rc
    DATA horse.png horse.jpg horse.bmp horse.gif horse.pcx horse.pnm
    horse_ag.pnm horse_rg.pnm horse.tif horse.tga horse.xpm horse.cur
    horse.ico horse3.ani smile.xbm toucan.png cmyk.jpg cursor.png
    DEPENDS wxUSE_IMAGE)
foreach(lang ar bg cs de fr it ka pl ru sv ja ja_JP.EUC-JP)
    list(APPEND INTERNAT_DATA_FILES ${lang}/internat.po ${lang}/internat.mo)
endforeach()
wx_add_sample(internat DATA ${INTERNAT_DATA_FILES} DEPENDS wxUSE_INTL)
# IPC samples
set(wxSAMPLE_FOLDER ipc)
wx_add_sample(ipc client.cpp client.h connection.h ipcsetup.h NAME ipcclient LIBRARIES net DEPENDS wxUSE_IPC)
wx_add_sample(ipc server.cpp server.h connection.h ipcsetup.h NAME ipcserver LIBRARIES net DEPENDS wxUSE_IPC)
wx_add_sample(ipc CONSOLE baseclient.cpp connection.h ipcsetup.h NAME baseipcclient LIBRARIES net DEPENDS wxUSE_IPC)
wx_add_sample(ipc CONSOLE baseserver.cpp connection.h ipcsetup.h NAME baseipcserver LIBRARIES net DEPENDS wxUSE_IPC)
set(wxSAMPLE_FOLDER)
wx_add_sample(joytest joytest.cpp joytest.h DATA buttonpress.wav DEPENDS wxUSE_JOYSTICK)
wx_add_sample(keyboard)
wx_add_sample(layout layout.cpp layout.h)
wx_add_sample(listctrl listtest.cpp listtest.h RES listtest.rc DEPENDS wxUSE_LISTCTRL)
wx_add_sample(mdi mdi.cpp mdi.h RES mdi.rc DEPENDS wxUSE_MDI wxUSE_DOC_VIEW_ARCHITECTURE wxUSE_MDI_ARCHITECTURE)
wx_add_sample(mediaplayer LIBRARIES media DEPENDS wxUSE_MEDIACTRL)
wx_add_sample(memcheck)
wx_add_sample(menu DEPENDS wxUSE_MENUS)
wx_add_sample(minimal IMPORTANT)
wx_add_sample(notebook notebook.cpp notebook.h LIBRARIES aui DEPENDS wxUSE_NOTEBOOK)
if(wxUSE_OPENGL)
    set(wxSAMPLE_SUBDIR opengl/)
    set(wxSAMPLE_FOLDER OpenGL)
    wx_add_sample(cube cube.cpp cube.h LIBRARIES gl)
    wx_add_sample(isosurf isosurf.cpp isosurf.h LIBRARIES gl DATA isosurf.dat.gz)
    wx_add_sample(penguin
        penguin.cpp dxfrenderer.cpp trackball.c
        dxfrenderer.h penguin.h trackball.h
        LIBRARIES gl
        DATA penguin.dxf.gz)
    wx_add_sample(pyramid
        pyramid.cpp oglstuff.cpp mathstuff.cpp oglpfuncs.cpp
        pyramid.h oglstuff.h mathstuff.h oglpfuncs.h
        LIBRARIES gl)
    set(wxSAMPLE_SUBDIR)
    set(wxSAMPLE_FOLDER)
endif()
wx_add_sample(ownerdrw RES ownerdrw.rc DATA sound.png nosound.png DEPENDS wxUSE_OWNER_DRAWN)
wx_add_sample(popup DEPENDS wxUSE_POPUPWIN)
wx_add_sample(power)
wx_add_sample(preferences DEPENDS wxUSE_PREFERENCES_EDITOR)
wx_add_sample(printing printing.cpp printing.h DEPENDS wxUSE_PRINTING_ARCHITECTURE)
wx_add_sample(propgrid propgrid.cpp propgrid_minimal.cpp sampleprops.cpp
    tests.cpp sampleprops.h propgrid.h LIBRARIES propgrid NAME propgriddemo DEPENDS wxUSE_PROPGRID)
wx_add_sample(render FOLDER render)
wx_add_sample(render DLL renddll.cpp NAME renddll FOLDER render)
wx_add_sample(ribbon ribbondemo.cpp LIBRARIES ribbon NAME ribbondemo DEPENDS wxUSE_RIBBON)
wx_add_sample(richtext LIBRARIES richtext html xml NAME richtextdemo DEPENDS wxUSE_XML wxUSE_RICHTEXT)
wx_add_sample(sashtest sashtest.cpp sashtest.h RES sashtest.rc DEPENDS wxUSE_SASH)
wx_add_sample(scroll)
wx_add_sample(secretstore CONSOLE DEPENDS wxUSE_SECRETSTORE)
wx_add_sample(shaped DATA star.png)
if(wxUSE_SOCKETS)
    wx_add_sample(sockets client.cpp NAME client LIBRARIES net FOLDER sockets)
    wx_add_sample(sockets server.cpp NAME server LIBRARIES net FOLDER sockets)
    wx_add_sample(sockets CONSOLE baseclient.cpp NAME baseclient LIBRARIES net FOLDER sockets)
    wx_add_sample(sockets CONSOLE baseserver.cpp NAME baseserver LIBRARIES net FOLDER sockets)
endif()
wx_add_sample(sound RES sound.rc DATA 9000g.wav cuckoo.wav doggrowl.wav tinkalink2.wav DEPENDS wxUSE_SOUND)
wx_add_sample(splash DATA splash.png press.mpg DEPENDS wxUSE_SPLASH)
if(TARGET splash AND wxUSE_MEDIACTRL)
    wx_exe_link_libraries(splash media)
endif()
wx_add_sample(splitter DEPENDS wxUSE_SPLITTER)
wx_add_sample(statbar DEPENDS wxUSE_STATUSBAR)
wx_add_sample(stc stctest.cpp edit.cpp prefs.cpp edit.h defsext.h prefs.h
    DATA stctest.cpp NAME stctest LIBRARIES stc DEPENDS wxUSE_STC)
wx_add_sample(svg svgtest.cpp RES svgtest.rc DEPENDS wxUSE_SVG)
wx_add_sample(taborder)
wx_add_sample(taskbar tbtest.cpp tbtest.h DEPENDS wxUSE_TASKBARICON)
wx_add_sample(text DEPENDS wxUSE_TEXTCTRL)
wx_add_sample(thread DEPENDS wxUSE_THREADS)
wx_add_sample(toolbar RES toolbar.rc DEPENDS wxUSE_TOOLBAR)
wx_add_sample(treectrl treetest.cpp treetest.h DEPENDS wxUSE_TREECTRL)
wx_add_sample(treelist DEPENDS wxUSE_TREELISTCTRL)
wx_add_sample(typetest typetest.cpp typetest.h)
wx_add_sample(uiaction DEPENDS wxUSE_UIACTIONSIMULATOR)
wx_add_sample(validate validate.cpp validate.h DEPENDS wxUSE_VALIDATORS)
wx_add_sample(vscroll vstest.cpp)
wx_add_sample(webview LIBRARIES webview NAME webviewsample DEPENDS wxUSE_WEBVIEW)
if(TARGET webviewsample AND wxUSE_STC)
    wx_exe_link_libraries(webviewsample stc)
endif()
# widgets Sample
set(SAMPLE_WIDGETS_SRC
    activityindicator.cpp
    bmpcombobox.cpp
    button.cpp
    checkbox.cpp
    choice.cpp
    clrpicker.cpp
    combobox.cpp
    datepick.cpp
    dirctrl.cpp
    dirpicker.cpp
    editlbox.cpp
    filectrl.cpp
    filepicker.cpp
    fontpicker.cpp
    gauge.cpp
    headerctrl.cpp
    hyperlnk.cpp
    itemcontainer.cpp
    listbox.cpp
    native.cpp
    notebook.cpp
    odcombobox.cpp
    radiobox.cpp
    searchctrl.cpp
    slider.cpp
    spinbtn.cpp
    static.cpp
    statbmp.cpp
    textctrl.cpp
    timepick.cpp
    toggle.cpp
    widgets.cpp
    widgets.h
    itemcontainer.h
    )
if(APPLE)
    # The source file using native controls uses Cocoa under OS X, so it must
    # be compiled as Objective C++ which means it must have .mm extension.
    # But this would make it uncompilable under the other platforms and we
    # don't want to have two files with identical contents. Hence this hack:
    # we have native.mm which just includes native.cpp under OS X, while
    # elsewhere we just compile native.cpp directly.
    list(APPEND SAMPLE_WIDGETS_SRC native_wrapper.mm)
endif()
wx_list_add_prefix(WIDGETS_RC_FILES icons/
    activityindicator.xpm bmpbtn.xpm bmpcombobox.xpm button.xpm
    checkbox.xpm choice.xpm choicebk.xpm clrpicker.xpm
    combobox.xpm datepick.xpm dirctrl.xpm dirpicker.xpm
    filepicker.xpm fontpicker.xpm gauge.xpm header.xpm
    hyperlnk.xpm listbook.xpm listbox.xpm native.xpm
    notebook.xpm odcombobox.xpm radiobox.xpm scrolbar.xpm
    slider.xpm spinbtn.xpm statbmp.xpm statbox.xpm
    stattext.xpm text.xpm timepick.xpm toggle.xpm
    )
wx_add_sample(widgets IMPORTANT ${SAMPLE_WIDGETS_SRC}
    DATA ${WIDGETS_RC_FILES} textctrl.cpp
    )
wx_add_sample(wizard DEPENDS wxUSE_WIZARDDLG)
wx_add_sample(wrapsizer)

wx_list_add_prefix(XRC_RC_FILES rc/
    aui.xpm aui.xrc
    artprov.xpm artprov.xrc basicdlg.xpm
    basicdlg.xrc controls.xpm controls.xrc custclas.xpm custclas.xrc
    derivdlg.xpm derivdlg.xrc fileopen.gif filesave.gif frame.xrc
    fuzzy.gif menu.xrc platform.xpm platform.xrc quotes.gif
    resource.xrc toolbar.xrc uncenter.xpm
    objref.xrc objrefdlg.xpm
    uncenter.xrc update.gif
    variable.xpm variable.xrc
    variants.xpm variants.xrc
    throbber.gif stop.xpm
    wxbanner.gif
    )
wx_add_sample(xrc
    xrcdemo.cpp
    myframe.cpp
    derivdlg.cpp
    custclas.cpp
    objrefdlg.cpp
    derivdlg.h
    xrcdemo.h
    myframe.h
    custclas.h
    objrefdlg.h
    DATA ${XRC_RC_FILES}
    LIBRARIES aui ribbon xrc html
    NAME xrcdemo
    DEPENDS wxUSE_XML wxUSE_XRC
    )
wx_add_sample(xti xti.cpp classlist.cpp codereadercallback.cpp
    classlist.h codereadercallback.h LIBRARIES xml
    DEPENDS wxUSE_XML wxUSE_EXTENDED_RTTI)

if(WIN32)
    # Windows only samples

    # DLL Sample
    if(wxUSE_DYNLIB_CLASS)
        wx_add_sample(dll DLL my_dll.cpp my_dll.h NAME my_dll FOLDER dll
            DEFINITIONS MY_DLL_BUILDING)
        if(NOT wxBUILD_SHARED)
            # this test only makes sense with statically built wx, otherwise
            # the same copy of wx would be used
            wx_add_sample(dll wx_exe.cpp my_dll.h NAME wx_exe FOLDER dll LIBRARIES my_dll)
        endif()

        wx_add_sample(dll sdk_exe.cpp my_dll.h NAME sdk_exe FOLDER dll LIBRARIES my_dll)
    endif()

    wx_add_sample(regtest RES regtest.rc DEPENDS wxUSE_REGKEY)
    wx_add_sample(oleauto DEPENDS wxUSE_OLE)

    if(WXMSW)
        wx_add_sample(nativdlg nativdlg.cpp nativdlg.h resource.h RES nativdlg.rc)
        #TODO: reenable when sample is fixed
        #wx_add_sample(mfc mfctest.cpp mfctest.h resource.h stdafx.h RES mfctest.rc)
        wx_add_sample(taskbarbutton DEPENDS wxUSE_TASKBARBUTTON)
    endif()
endif()
