# 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_CALENDAR_WEEK_STARTS_MONDAY
	bool "Calendar week starts on Monday"
	depends on LVGL_USE_CALENDAR
	help
	  Start a calendar week on Monday

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
