comparison android/DWindows.kt @ 2806:d7b6e19e44d2

Android: Add support for menu item handles in dw_window_set_style(). Also implement auto toggling of menu item checks. Only invalidate the menu after it is changed.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 20 Jul 2022 09:30:33 +0000
parents ebe139dc16dd
children 965c3c6ed1ed
comparison
equal deleted inserted replaced
2805:ebe139dc16dd 2806:d7b6e19e44d2
2048 menuitem.menuitem = menu?.add(group, menuitem.id, 0, menuitem.title) 2048 menuitem.menuitem = menu?.add(group, menuitem.id, 0, menuitem.title)
2049 menuitem.menuitem!!.isCheckable = menuitem.check 2049 menuitem.menuitem!!.isCheckable = menuitem.check
2050 menuitem.menuitem!!.isChecked = menuitem.checked 2050 menuitem.menuitem!!.isChecked = menuitem.checked
2051 menuitem.menuitem!!.isEnabled = menuitem.enabled 2051 menuitem.menuitem!!.isEnabled = menuitem.enabled
2052 menuitem.menuitem!!.setOnMenuItemClickListener { item: MenuItem? -> 2052 menuitem.menuitem!!.setOnMenuItemClickListener { item: MenuItem? ->
2053 // Toggle the check automatically
2054 if(menuitem.menuitem!!.isCheckable) {
2055 menuitem.menuitem!!.isChecked = !menuitem.menuitem!!.isChecked
2056 menuitem.checked = menuitem.menuitem!!.isChecked
2057 }
2053 eventHandlerSimple(menuitem, DWEvent.CLICKED) 2058 eventHandlerSimple(menuitem, DWEvent.CLICKED)
2054 true 2059 true
2055 } 2060 }
2056 } 2061 }
2057 } 2062 }
2771 2776
2772 fun menuSetState(menu: DWMenu, cid: Int, state: Int) 2777 fun menuSetState(menu: DWMenu, cid: Int, state: Int)
2773 { 2778 {
2774 for(menuitem in menu.children) { 2779 for(menuitem in menu.children) {
2775 if(menuitem.id == cid) { 2780 if(menuitem.id == cid) {
2781 var changed: Boolean = false
2776 // Handle DW_MIS_ENABLED/DISABLED 2782 // Handle DW_MIS_ENABLED/DISABLED
2777 if((state and (1 or (1 shl 1))) != 0) { 2783 if((state and (1 or (1 shl 1))) != 0) {
2778 var enabled = false 2784 var enabled = false
2779 2785
2780 // Handle DW_MIS_ENABLED 2786 // Handle DW_MIS_ENABLED
2781 if ((state and 1) != 0) { 2787 if ((state and 1) != 0) {
2782 enabled = true 2788 enabled = true
2783 } 2789 }
2784 menuitem.enabled = enabled 2790 menuitem.enabled = enabled
2785 if(menuitem.menuitem != null) { 2791 if (menuitem.menuitem != null && menuitem.menuitem!!.isEnabled != enabled) {
2786 runOnUiThread { 2792 menuitem.menuitem!!.isEnabled = enabled
2787 menuitem.menuitem!!.isEnabled = enabled 2793 changed = true
2788 invalidateOptionsMenu()
2789 }
2790 } 2794 }
2791 } 2795 }
2792 2796
2793 // Handle DW_MIS_CHECKED/UNCHECKED 2797 // Handle DW_MIS_CHECKED/UNCHECKED
2794 if((state and ((1 shl 2) or (1 shl 3))) != 0) { 2798 if((state and ((1 shl 2) or (1 shl 3))) != 0) {
2797 // Handle DW_MIS_CHECKED 2801 // Handle DW_MIS_CHECKED
2798 if ((state and (1 shl 2)) != 0) { 2802 if ((state and (1 shl 2)) != 0) {
2799 checked = true 2803 checked = true
2800 } 2804 }
2801 menuitem.checked = checked 2805 menuitem.checked = checked
2802 if(menuitem.menuitem != null) { 2806 if (menuitem.menuitem != null && menuitem.menuitem!!.isChecked != checked) {
2807 menuitem.menuitem!!.isChecked = checked
2808 changed = true
2809 }
2810 if(changed == true) {
2803 runOnUiThread { 2811 runOnUiThread {
2804 menuitem.menuitem!!.isChecked = checked
2805 invalidateOptionsMenu() 2812 invalidateOptionsMenu()
2806 } 2813 }
2807 } 2814 }
2808 } 2815 }
2809 } 2816 }
2888 if((mask and 1) == 1) { 2895 if((mask and 1) == 1) {
2889 val button = window as ImageButton 2896 val button = window as ImageButton
2890 if((style and 1) == 1) { 2897 if((style and 1) == 1) {
2891 button.background = null 2898 button.background = null
2892 } // TODO: Handle turning border back on if possible 2899 } // TODO: Handle turning border back on if possible
2900 }
2901 } else if(window is DWMenuItem) {
2902 var menuitem = window as DWMenuItem
2903 var changed: Boolean = false
2904
2905 // Handle DW_MIS_ENABLED/DISABLED
2906 if((mask and (1 or (1 shl 1))) != 0) {
2907 var enabled = false
2908
2909 // Handle DW_MIS_ENABLED = 1 or DW_MIS_DISABLED = 0
2910 if (((mask and 1) != 0 && (style and 1) != 0) ||
2911 ((mask and (1 shl 1) != 0 && (style and (1 shl 1) == 0)))) {
2912 enabled = true
2913 }
2914 menuitem.enabled = enabled
2915 if(menuitem.menuitem != null && menuitem.menuitem!!.isEnabled != enabled) {
2916 menuitem.menuitem!!.isEnabled = enabled
2917 changed = true
2918 }
2919 }
2920
2921 // Handle DW_MIS_CHECKED/UNCHECKED
2922 if((mask and ((1 shl 2) or (1 shl 3))) != 0) {
2923 var checked = false
2924
2925 // Handle DW_MIS_CHECKED = 1 or DW_MIS_UNCHECKED = 0
2926 if (((mask and (1 shl 2)) != 0 && (style and (1 shl 2)) != 0) ||
2927 ((mask and (1 shl 3) != 0 && (style and (1 shl 3) == 0)))) {
2928 checked = true
2929 }
2930 menuitem.checked = checked
2931 if (menuitem.menuitem != null && menuitem.menuitem!!.isChecked != checked) {
2932 menuitem.menuitem!!.isChecked = checked
2933 changed = true
2934 }
2935 }
2936 if(changed == true) {
2937 runOnUiThread {
2938 invalidateOptionsMenu()
2939 }
2893 } 2940 }
2894 } 2941 }
2895 } 2942 }
2896 } 2943 }
2897 2944