# Copyright (c) 2018-2019 Jan Van Winkel <jan.van_winkel@dxplore.eu>
# SPDX-License-Identifier: Apache-2.0

menu "Objects"

config LVGL_USE_OBJ_REALIGN
	bool "Object realign support"
	help
	  Enable object realign support

choice
	prompt "Extend objects clickable area"
	default LVGL_EXT_CLICK_AREA_OFF

	config LVGL_EXT_CLICK_AREA_OFF
		bool "Disabled"

	config LVGL_EXT_CLICK_AREA_TINY
		bool "Only horizontally and vertical"

	config LVGL_EXT_CLICK_AREA_FULL
		bool "Full flexibility"
endchoice

config LVGL_USE_ARC
	bool "Arc Object"
	help
	  Enable arc object support

config LVGL_USE_BAR
	bool "Bar object"
	help
	  Enable bar object support

config LVGL_USE_BTN
	bool "Button object"
	depends on LVGL_USE_CONT
	help
	  Enable button object support

config LVGL_USE_BTNMATRIX
	bool "Button Matrix object"
	help
	  Enable button matrix object support

config LVGL_USE_CALENDAR
	bool "Calendar object"
	help
	  Enable calendar object support

config LVGL_USE_CANVAS
	bool "Canvas object"
	depends on LVGL_USE_IMG
	help
	  Enabled canvas object support

config LVGL_USE_CHART
	bool "Chart object"
	help
	  Enable chart object support

config LVGL_CHART_AXIS_TICK_LABEL_MAX_LEN
	int "Maximum length of axis label"
	default 256
	depends on LVGL_USE_CHART
	help
	  Maximum length of axis label

config LVGL_USE_CHECKBOX
	bool "Check box object"
	depends on LVGL_USE_BTN && LVGL_USE_LABEL
	help
	  Enable check box object support

config LVGL_USE_CONT
	bool "Container Object"
	help
	  Enable container object support

config LVGL_USE_CPICKER
	bool "Color picker object"
	help
	  Enable color picker object support

config LVGL_USE_DROPDOWN
	bool "Drop Down List object"
	depends on LVGL_USE_LABEL && LVGL_USE_PAGE
	help
	  Enable drop down list object support

config LVGL_DROPDOWN_DEF_ANIM_TIME
	int "Drop Down list animation time"
	default 200
	depends on LVGL_USE_DROPDOWN
	help
	  Drop down list animation time in milliseconds

config LVGL_USE_GAUGE
	bool "Gauge object"
	depends on LVGL_USE_BAR && LVGL_USE_LINEMETER
	help
	  Enable gauge object support

config LVGL_USE_IMG
	bool "Image Object"
	depends on LVGL_USE_LABEL
	help
	  Enable image object support

config LVGL_USE_IMGBTN
	bool "Image Button"
	depends on LVGL_USE_BTN
	help
	  Enable image button object support

config LVGL_IMGBTN_TILED
	bool "Image button tile support"
	depends on LVGL_USE_IMGBTN
	help
	  Enable tile support for image button

config LVGL_USE_KEYBOARD
	bool "Keyboard object"
	depends on LVGL_USE_BTNMATRIX
	help
	  Enable keyboard object support

config LVGL_USE_LABEL
	bool "Label Object"
	help
	  Enable label support

if LVGL_USE_LABEL

config LVGL_LABEL_DEF_SCROLL_SPEED
	int "Label scroll speed"
	default 25
	help
	  Scroll speed in pixels per second if scroll mode is enabled for a label

config LVGL_LABEL_TEXT_SEL
	bool "Enable label text selection"
	help
	  Enable label text selection

config LVGL_LABEL_WAIT_CHAR_COUNT
	int "Waiting period for label animation"
	default 3
	help
	  Waiting period at beginning/end of the label animation cycle

config LVGL_LABEL_LONG_TXT_HINT
	bool "Enable long text hint for labels"
	help
	  Enable support for long text hints

endif # LVGL_USE_LABEL

config LVGL_USE_LED
	bool "LED object"
	help
	  Enable LED object support

if LVGL_USE_LED

config LVGL_LED_BRIGHT_MIN
	int "LED minimum brightness"
	default 120
	help
	  LED minimum brightness

config LVGL_LED_BRIGHT_MAX
	int "LED maximum brightness"
	default 255
	help
	  LED maximum brightness

endif # LVGL_USE_LED

config LVGL_USE_LINE
	bool "Line Object"
	help
	  Enable line object support

config LVGL_USE_LINEMETER
	bool "Line meter object"
	help
	  Enable line meter object support

if LVGL_USE_LINEMETER

choice
	prompt "Line meter drawing precision"
	default LVGL_LINEMETER_PRECISE_NO_EXTRA

	config LVGL_LINEMETER_PRECISE_NO_EXTRA
		bool "No extra precision"

	config LVGL_LINEMETER_PRECISE_SOME_EXTRA
		bool "Some extra precision"

	config LVGL_LINEMETER_PRECISE_BEST
		bool "Best precision"
endchoice

endif # LVGL_USE_LINEMETER

config LVGL_USE_LIST
	bool "List object"
	depends on LVGL_USE_BTN && LVGL_USE_LABEL && LVGL_USE_PAGE
	help
	  Enable list object support

config LVGL_LIST_DEF_ANIM_TIME
	int "List focus default animation time"
	default 100
	depends on LVGL_USE_LIST
	help
	  List focus default animation time in milliseconds

config LVGL_USE_MSGBOX
	bool "Message box object"
	depends on LVGL_USE_BTNMATRIX && LVGL_USE_LABEL
	help
	  Enable message box object support

config LVGL_USE_OBJMASK
	bool "Mask object"
	help
	  Enable object mask support

config LVGL_USE_PAGE
	bool "Page object"
	depends on LVGL_USE_CONT
	help
	  Enable page object support

config LVGL_PAGE_DEF_ANIM_TIME
	int "Default page focus animation time"
	default 400
	depends on LVGL_USE_PAGE
	help
	  Default page focus animation time in milliseconds

config LVGL_USE_ROLLER
	bool "Roller object"
	depends on LVGL_USE_DROPDOWN
	help
	  Enable roller object support

if LVGL_USE_ROLLER

config LVGL_ROLLER_DEF_ANIM_TIME
	int "Roller animation time"
	default 200
	help
	  Roller animation time in milliseconds

config LVGL_ROLLER_INF_PAGES
	int "Number of pages for infinite roller"
	default 7
	help
	  Number of extra pages in case the roller is infinite

endif # LVGL_USE_ROLLER

config LVGL_USE_SLIDER
	bool "Slider object"
	depends on LVGL_USE_BAR
	help
	  Enable slider object support

config LVGL_USE_SPINBOX
	bool "Spinbox object"
	depends on LVGL_USE_TEXTAREA
	help
	  Enable spinbox object support

config LVGL_USE_SPINNER
	bool "Spinner object"
	depends on LVGL_USE_ARC
	help
	  Enable spinner object support

if LVGL_USE_SPINNER

config LVGL_SPINNER_DEF_ARC_LENGTH
	int "Default arc length"
	range 1 360
	default 60
	help
	  Default arc length for spinner in degrees

config LVGL_SPINNER_DEF_SPIN_TIME
	int "Default spin time"
	default 1000
	help
	  Default spin time for spinner in ms

choice
	prompt "Default spinner animation type"
	default LVGL_SPINNER_DEF_ANIM_SPINNING_ARC
	help
	  Default spinner animation type

	config LVGL_SPINNER_DEF_ANIM_SPINNING_ARC
		bool "Spinning arc"

	config LVGL_SPINNER_DEF_ANIM_FILLSPIN_ARC
		bool "Fill spin arc"

	config LVGL_SPINNER_DEF_ANIM_CONSTANT_ARC
		bool "Constant arc"
endchoice

endif # LVGL_USE_SPINNER

config LVGL_USE_SWITCH
	bool "Switch object"
	depends on LVGL_USE_SLIDER
	help
	  Enable switch object support

config LVGL_USE_TABLE
	bool "Table object"
	depends on LVGL_USE_LABEL
	help
	  Enable table object support

config LVGL_TABLE_COL_MAX
	int "Maximum number of table columns"
	default 12
	depends on LVGL_USE_TABLE
	help
	  Maximum number of columns to support in a table

config LVGL_USE_TABVIEW
	bool "Tab view object"
	depends on LVGL_USE_PAGE && LVGL_USE_BTNMATRIX
	help
	  Enable tab view object support

config LVGL_TABVIEW_DEF_ANIM_TIME
	int "Tab view animation time"
	default 300
	depends on LVGL_USE_TABVIEW
	help
	  Tab view animation time in milliseconds

config LVGL_USE_TEXTAREA
	bool "Text area object"
	depends on LVGL_USE_LABEL && LVGL_USE_PAGE
	help
	  Enable text area object support

if LVGL_USE_TEXTAREA

config LVGL_TA_DEF_CURSOR_BLINK_TIME
	int "Cursor Blink Time"
	default 400
	help
	  Text area cursor blink time in milliseconds

config LVGL_TA_DEF_PWD_SHOW_TIME
	int "Label scroll speed"
	default 1500
	help
	  Password character show time in milliseconds

endif # LVGL_USE_TEXTAREA

config LVGL_USE_TILEVIEW
	bool "Tile view object"
	depends on LVGL_USE_PAGE
	help
	  Enable tile view object support

config LVGL_TILEVIEW_DEF_ANIM_TIME
	int "Tile view animation time"
	default 300
	depends on LVGL_USE_TILEVIEW
	help
	  Tile view animation time in milliseconds

config LVGL_USE_WIN
	bool "Window object"
	depends on LVGL_USE_CONT && LVGL_USE_BTN && LVGL_USE_LABEL && LVGL_USE_IMG && LVGL_USE_PAGE
	help
	  Enable window object support

endmenu
