include_directories(
  ${RADIO_SRC_DIR}/gui/colorlcd
  ${RADIO_SRC_DIR}/gui/colorlcd/layouts
  ${CMAKE_CURRENT_BINARY_DIR}/fonts
  ${RADIO_SRC_DIR}/thirdparty/libopenui/src
)

file(GLOB THEMES_SRC RELATIVE ${RADIO_SRC_DIR}/gui/colorlcd ${RADIO_SRC_DIR}/gui/colorlcd/themes/*.cpp)
file(GLOB LAYOUTS_SRC RELATIVE ${RADIO_SRC_DIR}/gui/colorlcd ${RADIO_SRC_DIR}/gui/colorlcd/layouts/*.cpp)
file(GLOB WIDGETS_SRC RELATIVE ${RADIO_SRC_DIR}/gui/colorlcd ${RADIO_SRC_DIR}/gui/colorlcd/widgets/*.cpp)

set(GUI_SRC
  ${GUI_SRC}
  str_functions.cpp
  colors.cpp
  lcd.cpp
  splash.cpp
  fonts.cpp
  curves.cpp
  bitmaps.cpp
  theme.cpp
  theme_manager.cpp
  color_editor_popup.cpp
  color_editor.cpp
  color_list.cpp
  preview_window.cpp
  file_carosell.cpp
  listbox.cpp
  tabsgroup.cpp
  page.cpp
  fab_button.cpp
  select_fab_button.cpp
  select_fab_carousel.cpp
  topbar.cpp
  layout.cpp
  widget.cpp
  widget_settings.cpp
  ${THEMES_SRC}
  ${LAYOUTS_SRC}
  ${WIDGETS_SRC}
  #  popups.cpp
  draw_functions.cpp
  #  menus.cpp
  menu_model.cpp
  model_select.cpp
  model_setup.cpp
  model_flightmodes.cpp
  model_inputs.cpp
  model_mixes.cpp
  model_outputs.cpp
  model_curves.cpp
  model_gvars.cpp
  model_logical_switches.cpp
  special_functions.cpp
  model_telemetry.cpp
  menu_radio.cpp
  radio_setup.cpp
  radio_sdmanager.cpp
  radio_tools.cpp
  radio_trainer.cpp
  radio_version.cpp
  radio_hardware.cpp
  radio_diagkeys.cpp
  radio_diaganas.cpp
  radio_theme.cpp
  radio_calibration.cpp
  view_about.cpp
  view_main.cpp
  view_main_menu.cpp
  view_main_decoration.cpp
  view_channels.cpp
  view_logical_switches.cpp
  view_statistics.cpp
  view_text.cpp
  menu_screen.cpp
  screen_setup.cpp
  switch_warn_dialog.cpp
  LvglWrapper.cpp
  )

macro(add_gui_src src)
  set(GUI_SRC
    ${GUI_SRC}
    ${src}
    )
endmacro(add_gui_src)

if(LUA)
  add_gui_src(standalone_lua.cpp)
  set(SRC ${SRC} lua/widgets.cpp)
endif()

if(LUA_MIXER)
  add_gui_src(model_mixer_scripts.cpp)
endif()

if(HELI)
  add_gui_src(model_heli.cpp)
endif()

if(PXX2 OR LUA OR MULTIMODULE)
  add_gui_src(radio_tools.cpp)
endif()

if(PXX2 OR MULTIMODULE)
  add_gui_src(radio_spectrum_analyser.cpp)
endif()

if(PXX2)
  add_gui_src(access_settings.cpp)
endif()

if(MULTIMODULE)
  add_gui_src(multi_rfprotos.cpp)
endif()

if(GHOST)
  add_gui_src(radio_ghost_module_config.cpp)
endif()

set(SRC ${SRC} storage/modelslist.cpp)

option(WINDOWS_INSPECT_BORDERS "Draw bounding boxes around windows" OFF)
if(WINDOWS_INSPECT_BORDERS)
  add_definitions(-DWINDOWS_INSPECT_BORDERS)
endif()

# includes libopenui
include(${RADIO_SRC_DIR}/thirdparty/libopenui/src/CMakeLists.txt)
include_directories(gui/libopenui)

add_definitions(-DLIBOPENUI)

foreach(LIBOPENUI_FILE ${LIBOPENUI_SRC})
  set(SRC ${SRC} thirdparty/libopenui/src/${LIBOPENUI_FILE})
endforeach()

set(LVGL_SOURCES
  core/lv_group.c
  core/lv_obj.c
  core/lv_event.c
  core/lv_indev.c
  core/lv_obj_scroll.c
  core/lv_obj_draw.c
  core/lv_disp.c
  core/lv_obj_style.c
  core/lv_theme.c
  core/lv_obj_style_gen.c
  core/lv_refr.c
  core/lv_indev_scroll.c
  core/lv_obj_class.c
  core/lv_obj_tree.c
  core/lv_obj_pos.c
  font/lv_font_montserrat_20.c
  font/lv_font_unscii_8.c
  font/lv_font_montserrat_48.c
  font/lv_font_montserrat_28.c
  font/lv_font_montserrat_26.c
  font/lv_font_montserrat_38.c
  font/lv_font_montserrat_18.c
  font/lv_font_montserrat_8.c
  font/lv_font_montserrat_44.c
  font/lv_font_montserrat_40.c
  font/lv_font_dejavu_16_persian_hebrew.c
  font/lv_font_montserrat_32.c
  font/lv_font_montserrat_46.c
  font/lv_font_montserrat_14.c
  font/lv_font_montserrat_12_subpx.c
  font/lv_font_montserrat_34.c
  font/lv_font_montserrat_16.c
  font/lv_font_montserrat_42.c
  font/lv_font_montserrat_12.c
  font/lv_font_simsun_16_cjk.c
  font/lv_font_montserrat_30.c
  font/lv_font_montserrat_22.c
  font/lv_font_montserrat_10.c
  font/lv_font_fmt_txt.c
  font/lv_font_montserrat_24.c
  font/lv_font_loader.c
  font/lv_font_montserrat_28_compressed.c
  font/lv_font.c
  font/lv_font_montserrat_36.c
  font/lv_font_unscii_16.c
  misc/lv_timer.c
  misc/lv_txt.c
  misc/lv_gc.c
  misc/lv_style_gen.c
  misc/lv_templ.c
  misc/lv_color.c
  misc/lv_fs.c
  misc/lv_printf.c
  misc/lv_style.c
  misc/lv_log.c
  misc/lv_area.c
  misc/lv_math.c
  misc/lv_lru.c
  misc/lv_tlsf.c
  misc/lv_anim_timeline.c
  misc/lv_ll.c
  misc/lv_bidi.c
  misc/lv_mem.c
  misc/lv_utils.c
  misc/lv_async.c
  misc/lv_anim.c
  misc/lv_txt_ap.c
  draw/lv_draw_mask.c
  draw/nxp_pxp/lv_gpu_nxp_pxp_osa.c
  draw/nxp_pxp/lv_gpu_nxp_pxp.c
  draw/lv_img_cache.c
  draw/stm32_dma2d/lv_gpu_stm32_dma2d.c
  draw/nxp_vglite/lv_gpu_nxp_vglite.c
  draw/sw/lv_draw_sw.c
  draw/sw/lv_draw_sw_blend.c
  draw/sw/lv_draw_sw_letter.c
  draw/sw/lv_draw_sw_arc.c
  draw/sw/lv_draw_sw_polygon.c
  draw/sw/lv_draw_sw_img.c
  draw/sw/lv_draw_sw_line.c
  draw/sw/lv_draw_sw_rect.c
  draw/lv_draw_line.c
  draw/sdl/lv_draw_sdl_rect.c
  draw/sdl/lv_draw_sdl_arc.c
  draw/sdl/lv_draw_sdl.c
  draw/sdl/lv_draw_sdl_mask.c
  draw/sdl/lv_draw_sdl_stack_blur.c
  draw/sdl/lv_draw_sdl_utils.c
  draw/sdl/lv_draw_sdl_img.c
  draw/sdl/lv_draw_sdl_blend.c
  draw/sdl/lv_draw_sdl_bg.c
  draw/sdl/lv_draw_sdl_label.c
  draw/sdl/lv_draw_sdl_texture_cache.c
  draw/sdl/lv_draw_sdl_line.c
  draw/sdl/lv_draw_sdl_composite.c
  draw/lv_draw.c
  draw/lv_img_buf.c
  draw/lv_draw_rect.c
  draw/lv_draw_label.c
  draw/lv_draw_img.c
  draw/sw/lv_draw_sw_line.c
  draw/sw/lv_draw_sw_rect.c
  draw/lv_draw_line.c
  draw/sdl/lv_draw_sdl_rect.c
  draw/sdl/lv_draw_sdl_arc.c
  draw/sdl/lv_draw_sdl.c
  draw/sdl/lv_draw_sdl_mask.c
  draw/sdl/lv_draw_sdl_stack_blur.c
  draw/sdl/lv_draw_sdl_utils.c
  draw/sdl/lv_draw_sdl_img.c
  draw/sdl/lv_draw_sdl_blend.c
  draw/sdl/lv_draw_sdl_bg.c
  draw/sdl/lv_draw_sdl_label.c
  draw/sdl/lv_draw_sdl_texture_cache.c
  draw/sdl/lv_draw_sdl_line.c
  draw/sdl/lv_draw_sdl_composite.c
  draw/lv_draw.c
  draw/lv_img_buf.c
  draw/lv_draw_rect.c
  draw/lv_draw_label.c
  draw/lv_draw_img.c
  draw/lv_draw_arc.c
  draw/lv_draw_triangle.c
  draw/lv_img_decoder.c
  hal/lv_hal_indev.c
  hal/lv_hal_disp.c
  hal/lv_hal_tick.c
  extra/others/monkey/lv_monkey.c
  extra/others/snapshot/lv_snapshot.c
  extra/layouts/grid/lv_grid.c
  extra/layouts/flex/lv_flex.c
  extra/libs/bmp/lv_bmp.c
  extra/libs/ffmpeg/lv_ffmpeg.c
  extra/libs/gif/lv_gif.c
  extra/libs/gif/gifdec.c
  extra/libs/freetype/lv_freetype.c
  extra/libs/qrcode/lv_qrcode.c
  extra/libs/qrcode/qrcodegen.c
  extra/libs/sjpg/tjpgd.c
  extra/libs/sjpg/lv_sjpg.c
  extra/libs/fsdrv/lv_fs_win32.c
  extra/libs/fsdrv/lv_fs_stdio.c
  extra/libs/fsdrv/lv_fs_posix.c
  extra/libs/fsdrv/lv_fs_fatfs.c
  extra/libs/rlottie/lv_rlottie.c
  extra/libs/png/lv_png.c
  extra/libs/png/lodepng.c
  extra/lv_extra.c
  extra/widgets/imgbtn/lv_imgbtn.c
  extra/widgets/menu/lv_menu.c
  extra/widgets/win/lv_win.c
  extra/widgets/colorwheel/lv_colorwheel.c
  extra/widgets/list/lv_list.c
  extra/widgets/chart/lv_chart.c
  extra/widgets/calendar/lv_calendar_header_arrow.c
  extra/widgets/calendar/lv_calendar.c
  extra/widgets/calendar/lv_calendar_header_dropdown.c
  extra/widgets/tileview/lv_tileview.c
  extra/widgets/led/lv_led.c
  extra/widgets/spinner/lv_spinner.c
  extra/widgets/tabview/lv_tabview.c
  extra/widgets/meter/lv_meter.c
  extra/widgets/spinbox/lv_spinbox.c
  extra/widgets/animimg/lv_animimg.c
  extra/widgets/span/lv_span.c
  extra/widgets/keyboard/lv_keyboard.c
  extra/widgets/msgbox/lv_msgbox.c
  extra/themes/basic/lv_theme_basic.c
  extra/themes/default/lv_theme_default.c
  extra/themes/mono/lv_theme_mono.c
  widgets/lv_line.c
  widgets/lv_dropdown.c
  widgets/lv_objx_templ.c
  widgets/lv_canvas.c
  widgets/lv_switch.c
  widgets/lv_btnmatrix.c
  widgets/lv_bar.c
  widgets/lv_roller.c
  widgets/lv_img.c
  widgets/lv_btn.c
  widgets/lv_checkbox.c
  widgets/lv_label.c
  widgets/lv_table.c
  widgets/lv_slider.c
  widgets/lv_textarea.c
  widgets/lv_arc.c
)


foreach(LVGL_FILE ${LVGL_SOURCES})
  set(SRC ${SRC} thirdparty/lvgl/src/${LVGL_FILE})
endforeach()

add_gui_src(fullscreen_dialog.cpp)
add_gui_src(message_dialog.cpp)
add_gui_src(confirm_dialog.cpp)
add_gui_src(timeedit.cpp)
add_gui_src(curve.cpp)
add_gui_src(sourcechoice.cpp)
add_gui_src(switchchoice.cpp)
add_gui_src(curveedit.cpp)

if(HARDWARE_TOUCH)
  add_gui_src(keyboard_curve.cpp)
endif()
