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

menu "Objects"

config LVGL_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_OBJ_LABEL
	bool "Label Object"
	help
	  Enable label support

if LVGL_OBJ_LABEL

config LVGL_OBJ_LABEL_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_OBJ_LABEL_TEXT_SEL
	bool "Enable label text selection"
	help
	  Enable label text selection

config LVGL_OBJ_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_OBJ_LABEL_LONG_TXT_HINT
	bool "Enable long text hint for labels"
	help
	  Enable support for long text hints

endif # LVGL_OBJ_LABEL

config LVGL_OBJ_IMAGE
	bool "Image Object"
	depends on LVGL_OBJ_LABEL
	help
	  Enable image object support

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

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

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

config LVGL_OBJ_PAGE
	bool "Page object"
	depends on LVGL_OBJ_CONTAINER
	help
	  Enable page object support

if LVGL_OBJ_PAGE
config LVGL_OBJ_PAGE_DEF_ANIM_TIME
	int "Default page focus animation time"
	default 400
	help
	  Default page focus animation time in milliseconds
endif

config LVGL_OBJ_WINDOW
	bool "Window object"
	depends on LVGL_OBJ_CONTAINER && LVGL_OBJ_BUTTON && LVGL_OBJ_LABEL && LVGL_OBJ_IMAGE && LVGL_OBJ_PAGE
	help
	  Enable window object support

config LVGL_OBJ_TAB_VIEW
	bool "Tab view object"
	depends on LVGL_OBJ_PAGE && LVGL_OBJ_BUTTON_MATRIX
	help
	  Enable tab view object support

if LVGL_OBJ_TAB_VIEW

config LVGL_OBJ_TAB_VIEW_ANIMATION_TIME
	int "Tab view animation time"
	default 300
	help
	  Tab view animation time in milliseconds

endif

config LVGL_OBJ_TILE_VIEW
	bool "Tile view object"
	depends on LVGL_OBJ_PAGE
	help
	  Enable tile view object support

if LVGL_OBJ_TILE_VIEW
config LVGL_OBJ_TILE_VIEW_ANIMATION_TIME
	int "Tile view animation time"
	default 300
	help
	  Tile view animation time in milliseconds

endif

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

config LVGL_OBJ_PRELOAD
	bool "Pre-load object"
	depends on LVGL_OBJ_ARC
	help
	  Enabled pre-load object support

if	LVGL_OBJ_PRELOAD

config LVGL_OBJ_PRELOAD_DEF_ARC_LENGTH
	int "Default arc length"
	range 1 360
	default 60
	help
	  Default arc length for pre-load in degrees

config LVGL_OBJ_PRELOAD_DEF_SPIN_TIME
	int "Default spin time"
	default 1000
	help
	  Default spin time for pre-load in ms

choice
	prompt "Default pre-load animation type"
	default LVGL_OBJ_PRELOAD_DEF_ANIMATION_SPIN_ARC
	help
	  Default pre-load animation type

	config LVGL_OBJ_PRELOAD_DEF_ANIMATION_SPIN_ARC
		bool "Spinning Arc"

	config LVGL_OBJ_PRELOAD_DEF_ANIMATION_FILL
		bool "Fill"

endchoice
endif

config LVGL_OBJ_CANVAS
	bool "Canvas object"
	depends on LVGL_OBJ_IMAGE
	help
	  Enabled canvas object support

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

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

config LVGL_OBJ_GAUGE
	bool "Gauge object"
	depends on LVGL_OBJ_BAR && LVGL_OBJ_LINE_METER
	help
	  Enable gauge object support

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

if LVGL_OBJ_CHART
config LVGL_OBJ_CHART_AXIS_TICK_LABEL_MAX_LEN
	int "Maximum length of axis label"
	default 20
	help
	  Maximum length of axis label
endif

config LVGL_OBJ_TABLE
	bool "Table object"
	depends on LVGL_OBJ_LABEL
	help
	  Enable table object support

if LVGL_OBJ_TABLE
config LVGL_OBJ_TABLE_COLUMN_MAX
	int "Maximum number of table columns"
	default 12
	help
	  Maximum number of columns to support in a table
endif

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

config LVGL_OBJ_MSG_BOX
	bool "Message box object"
	depends on LVGL_OBJ_BUTTON_MATRIX && LVGL_OBJ_LABEL
	help
	  Enable message box object support

config LVGL_OBJ_TEXT_AREA
	bool "Text area object"
	depends on LVGL_OBJ_LABEL && LVGL_OBJ_PAGE
	help
	  Enable text area object support

if LVGL_OBJ_TEXT_AREA

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

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

endif

config LVGL_OBJ_SPINBOX
	bool "Spinbox object"
	depends on LVGL_OBJ_TEXT_AREA
	help
	  Enable spinbox object support

config LVGL_OBJ_BUTTON
	bool "Button object"
	depends on LVGL_OBJ_CONTAINER
	help
	  Enable button object support

if LVGL_OBJ_BUTTON

config LVGL_OBJ_BUTTON_INK_EFFECT
	bool "Enable ink effect"
	help
	  Enable ink, press, effect for buttons

config LVGL_OBJ_IMG_BUTTON
	bool "Image Button"
	help
	  Enable image button object support

if LVGL_OBJ_IMG_BUTTON
config LVGL_OBJ_IMG_BUTTON_TILED
	bool "Image button tile support"
	help
	  Enable tile support for image button
endif

endif

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

config LVGL_OBJ_KEYBOARD
	bool "Keyboard object"
	depends on LVGL_OBJ_BUTTON_MATRIX
	help
	  Enable keyboard object support

config LVGL_OBJ_CHECK_BOX
	bool "Check box object"
	depends on LVGL_OBJ_BUTTON && LVGL_OBJ_LABEL
	help
	  Enable check box object support

config LVGL_OBJ_LIST
	bool "List object"
	depends on LVGL_OBJ_BUTTON && LVGL_OBJ_LABEL && LVGL_OBJ_PAGE
	help
	  Enable list object support

if LVGL_OBJ_LIST

config LVGL_OBJ_LIST_FOCUS_TIME
	int "List focus time"
	default 100
	help
	  List focus animation time in milliseconds

endif

config LVGL_OBJ_DROP_DOWN_LIST
	bool "Drop Down List object"
	depends on LVGL_OBJ_LABEL && LVGL_OBJ_PAGE
	help
	  Enable drop down list object support

if LVGL_OBJ_DROP_DOWN_LIST

config LVGL_OBJ_DROP_DOWN_LIST_ANIM_TIME
	int "Drop Down list animation time"
	default 200
	help
	  Drop down list animation time in milliseconds

endif

config LVGL_OBJ_ROLLER
	bool "Roller object"
	depends on LVGL_OBJ_DROP_DOWN_LIST
	help
	  Enable roller object support

if LVGL_OBJ_ROLLER

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

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

endif

config LVGL_OBJ_SLIDER
	bool "Slider object"
	depends on LVGL_OBJ_BAR
	help
	  Enable slider object support

config LVGL_OBJ_SWITCH
	bool "Switch object"
	depends on LVGL_OBJ_SLIDER
	help
	  Enable switch object support

endmenu
