Mercurial > dwindows
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 |