Mercurial > dwindows
comparison android/DWindows.kt @ 2620:dcd71b04cc46
Android: Add internal event constants for more clarity about what code does.
Several platforms which do not use integer messages for events have our own
internal system implemented, adding enum constants for each internal message.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sun, 25 Jul 2021 23:35:02 +0000 |
parents | dbcd9416e9c9 |
children | 22105f99dd6a |
comparison
equal
deleted
inserted
replaced
2619:4d5467e57115 | 2620:dcd71b04cc46 |
---|---|
53 import java.io.File | 53 import java.io.File |
54 import java.io.IOException | 54 import java.io.IOException |
55 import java.util.* | 55 import java.util.* |
56 import java.util.concurrent.locks.ReentrantLock | 56 import java.util.concurrent.locks.ReentrantLock |
57 | 57 |
58 object DWEvent { | |
59 const val TIMER = 0 | |
60 const val CONFIGURE = 1 | |
61 const val KEY_PRESS = 2 | |
62 const val BUTTON_PRESS = 3 | |
63 const val BUTTON_RELEASE = 4 | |
64 const val MOTION_NOTIFY = 5 | |
65 const val DELETE = 6 | |
66 const val EXPOSE = 7 | |
67 const val CLICKED = 8 | |
68 const val ITEM_ENTER = 9 | |
69 const val ITEM_CONTEXT = 10 | |
70 const val LIST_SELECT = 11 | |
71 const val ITEM_SELECT = 12 | |
72 const val SET_FOCUS = 13 | |
73 const val VALUE_CHANGED = 14 | |
74 const val SWITCH_PAGE = 15 | |
75 const val TREE_EXPAND = 16 | |
76 const val COLUMN_CLICK = 17 | |
77 const val HTML_RESULT = 18 | |
78 const val HTML_CHANGED = 19 | |
79 } | |
58 | 80 |
59 class DWTabViewPagerAdapter : RecyclerView.Adapter<DWTabViewPagerAdapter.DWEventViewHolder>() { | 81 class DWTabViewPagerAdapter : RecyclerView.Adapter<DWTabViewPagerAdapter.DWEventViewHolder>() { |
60 val viewList = mutableListOf<LinearLayout>() | 82 val viewList = mutableListOf<LinearLayout>() |
61 val pageList = mutableListOf<Long>() | 83 val pageList = mutableListOf<Long>() |
62 var currentPageID = 0L | 84 var currentPageID = 0L |
82 // to match the behavior on the other platforms | 104 // to match the behavior on the other platforms |
83 return false | 105 return false |
84 } | 106 } |
85 override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) { | 107 override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) { |
86 // Handle the DW_HTML_CHANGE_STARTED event | 108 // Handle the DW_HTML_CHANGE_STARTED event |
87 eventHandlerHTMLChanged(view, 19, url, 1) | 109 eventHandlerHTMLChanged(view, DWEvent.HTML_CHANGED, url, 1) |
88 } | 110 } |
89 | 111 |
90 override fun onPageFinished(view: WebView, url: String) { | 112 override fun onPageFinished(view: WebView, url: String) { |
91 // Handle the DW_HTML_CHANGE_COMPLETE event | 113 // Handle the DW_HTML_CHANGE_COMPLETE event |
92 eventHandlerHTMLChanged(view, 19, url, 4) | 114 eventHandlerHTMLChanged(view, DWEvent.HTML_CHANGED, url, 4) |
93 } | 115 } |
94 | 116 |
95 external fun eventHandlerHTMLChanged(obj1: View, message: Int, URI: String, status: Int) | 117 external fun eventHandlerHTMLChanged(obj1: View, message: Int, URI: String, status: Int) |
96 } | 118 } |
97 | 119 |
125 } | 147 } |
126 if(value < minimum) { | 148 if(value < minimum) { |
127 value = minimum | 149 value = minimum |
128 } | 150 } |
129 setText(value.toString()) | 151 setText(value.toString()) |
130 eventHandlerInt(14, value.toInt(), 0, 0, 0) | 152 eventHandlerInt(DWEvent.VALUE_CHANGED, value.toInt(), 0, 0, 0) |
131 return true | 153 return true |
132 } else if (event.x <= v.compoundDrawables[DRAWABLE_LEFT].bounds.width()) { | 154 } else if (event.x <= v.compoundDrawables[DRAWABLE_LEFT].bounds.width()) { |
133 val newvalue = this.text.toString().toLongOrNull() | 155 val newvalue = this.text.toString().toLongOrNull() |
134 | 156 |
135 if(newvalue != null) { | 157 if(newvalue != null) { |
142 } | 164 } |
143 if(value < minimum) { | 165 if(value < minimum) { |
144 value = minimum | 166 value = minimum |
145 } | 167 } |
146 setText(value.toString()) | 168 setText(value.toString()) |
147 eventHandlerInt(14, value.toInt(), 0, 0, 0) | 169 eventHandlerInt(DWEvent.VALUE_CHANGED, value.toInt(), 0, 0, 0) |
148 return true | 170 return true |
149 } | 171 } |
150 } | 172 } |
151 return false | 173 return false |
152 } | 174 } |
183 override fun onItemClick(parent: AdapterView<*>?, view: View, position: Int, id: Long) { | 205 override fun onItemClick(parent: AdapterView<*>?, view: View, position: Int, id: Long) { |
184 val item = list[position] | 206 val item = list[position] |
185 selected = position | 207 selected = position |
186 setText(item) | 208 setText(item) |
187 lpw!!.dismiss() | 209 lpw!!.dismiss() |
188 eventHandlerInt(11, position, 0, 0, 0) | 210 eventHandlerInt(DWEvent.LIST_SELECT, position, 0, 0, 0) |
189 } | 211 } |
190 | 212 |
191 override fun onTouch(v: View, event: MotionEvent): Boolean { | 213 override fun onTouch(v: View, event: MotionEvent): Boolean { |
192 val DRAWABLE_RIGHT = 2 | 214 val DRAWABLE_RIGHT = 2 |
193 | 215 |
225 onItemClickListener = this | 247 onItemClickListener = this |
226 } | 248 } |
227 | 249 |
228 override fun onItemClick(parent: AdapterView<*>?, view: View, position: Int, id: Long) { | 250 override fun onItemClick(parent: AdapterView<*>?, view: View, position: Int, id: Long) { |
229 selected = position | 251 selected = position |
230 eventHandlerInt(11, position, 0, 0, 0) | 252 eventHandlerInt(DWEvent.LIST_SELECT, position, 0, 0, 0) |
231 } | 253 } |
232 | 254 |
233 external fun eventHandlerInt( | 255 external fun eventHandlerInt( |
234 message: Int, | 256 message: Int, |
235 inta: Int, | 257 inta: Int, |
248 var button: Int = 1 | 270 var button: Int = 1 |
249 | 271 |
250 override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) { | 272 override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) { |
251 super.onSizeChanged(width, height, oldWidth, oldHeight) | 273 super.onSizeChanged(width, height, oldWidth, oldHeight) |
252 // Send DW_SIGNAL_CONFIGURE | 274 // Send DW_SIGNAL_CONFIGURE |
253 eventHandlerInt(1, width, height, 0, 0) | 275 eventHandlerInt(DWEvent.CONFIGURE, width, height, 0, 0) |
254 } | 276 } |
255 | 277 |
256 override fun onDraw(canvas: Canvas) { | 278 override fun onDraw(canvas: Canvas) { |
257 super.onDraw(canvas) | 279 super.onDraw(canvas) |
258 cachedCanvas = canvas | 280 cachedCanvas = canvas |
259 // Send DW_SIGNAL_EXPOSE | 281 // Send DW_SIGNAL_EXPOSE |
260 eventHandlerInt(7, 0, 0, this.width, this.height) | 282 eventHandlerInt(DWEvent.EXPOSE, 0, 0, this.width, this.height) |
261 cachedCanvas = null | 283 cachedCanvas = null |
262 } | 284 } |
263 | 285 |
264 external fun eventHandlerInt( | 286 external fun eventHandlerInt( |
265 message: Int, | 287 message: Int, |
446 menuitem.menuitem = menu?.add(group, menuitem.id, 0, menuitem.title) | 468 menuitem.menuitem = menu?.add(group, menuitem.id, 0, menuitem.title) |
447 menuitem.menuitem!!.isCheckable = menuitem.check | 469 menuitem.menuitem!!.isCheckable = menuitem.check |
448 menuitem.menuitem!!.isChecked = menuitem.checked | 470 menuitem.menuitem!!.isChecked = menuitem.checked |
449 menuitem.menuitem!!.isEnabled = menuitem.enabled | 471 menuitem.menuitem!!.isEnabled = menuitem.enabled |
450 menuitem.menuitem!!.setOnMenuItemClickListener { item: MenuItem? -> | 472 menuitem.menuitem!!.setOnMenuItemClickListener { item: MenuItem? -> |
451 eventHandlerSimple(menuitem, 8) | 473 eventHandlerSimple(menuitem, DWEvent.CLICKED) |
452 true | 474 true |
453 } | 475 } |
454 } | 476 } |
455 } | 477 } |
456 } | 478 } |
805 // Send a DW_SIGNAL_CONFIGURE on orientation change | 827 // Send a DW_SIGNAL_CONFIGURE on orientation change |
806 if(windowLayout != null) { | 828 if(windowLayout != null) { |
807 val width: Int = windowLayout!!.width | 829 val width: Int = windowLayout!!.width |
808 val height: Int = windowLayout!!.height | 830 val height: Int = windowLayout!!.height |
809 | 831 |
810 eventHandlerInt(windowLayout as View, 1, width, height, 0, 0) | 832 eventHandlerInt(windowLayout as View, DWEvent.CONFIGURE, width, height, 0, 0) |
811 } | 833 } |
812 } | 834 } |
813 | 835 |
814 override fun onCreateOptionsMenu(menu: Menu?): Boolean { | 836 override fun onCreateOptionsMenu(menu: Menu?): Boolean { |
815 if(menuBar == null) { | 837 if(menuBar == null) { |
1424 button!!.isAllCaps = false | 1446 button!!.isAllCaps = false |
1425 button!!.text = text | 1447 button!!.text = text |
1426 button!!.id = cid | 1448 button!!.id = cid |
1427 button!!.setOnClickListener { | 1449 button!!.setOnClickListener { |
1428 lastClickView = button!! | 1450 lastClickView = button!! |
1429 eventHandlerSimple(button!!, 8) | 1451 eventHandlerSimple(button!!, DWEvent.CLICKED) |
1430 } | 1452 } |
1431 } | 1453 } |
1432 return button | 1454 return button |
1433 } | 1455 } |
1434 | 1456 |
1441 button!!.tag = dataArrayMap | 1463 button!!.tag = dataArrayMap |
1442 button!!.id = resid | 1464 button!!.id = resid |
1443 button!!.setImageResource(resid) | 1465 button!!.setImageResource(resid) |
1444 button!!.setOnClickListener { | 1466 button!!.setOnClickListener { |
1445 lastClickView = button!! | 1467 lastClickView = button!! |
1446 eventHandlerSimple(button!!, 8) | 1468 eventHandlerSimple(button!!, DWEvent.CLICKED) |
1447 } | 1469 } |
1448 } | 1470 } |
1449 return button | 1471 return button |
1450 } | 1472 } |
1451 | 1473 |
1458 | 1480 |
1459 button!!.tag = dataArrayMap | 1481 button!!.tag = dataArrayMap |
1460 button!!.id = cid | 1482 button!!.id = cid |
1461 button!!.setOnClickListener { | 1483 button!!.setOnClickListener { |
1462 lastClickView = button!! | 1484 lastClickView = button!! |
1463 eventHandlerSimple(button!!, 8) | 1485 eventHandlerSimple(button!!, DWEvent.CLICKED) |
1464 } | 1486 } |
1465 | 1487 |
1466 for (ext in exts) { | 1488 for (ext in exts) { |
1467 // Try to load the image, and protect against exceptions | 1489 // Try to load the image, and protect against exceptions |
1468 try { | 1490 try { |
1489 | 1511 |
1490 button!!.tag = dataArrayMap | 1512 button!!.tag = dataArrayMap |
1491 button!!.id = cid | 1513 button!!.id = cid |
1492 button!!.setOnClickListener { | 1514 button!!.setOnClickListener { |
1493 lastClickView = button!! | 1515 lastClickView = button!! |
1494 eventHandlerSimple(button!!, 8) | 1516 eventHandlerSimple(button!!, DWEvent.CLICKED) |
1495 } | 1517 } |
1496 button!!.setImageBitmap(b) | 1518 button!!.setImageBitmap(b) |
1497 } | 1519 } |
1498 return button | 1520 return button |
1499 } | 1521 } |
1532 radiobutton!!.tag = dataArrayMap | 1554 radiobutton!!.tag = dataArrayMap |
1533 radiobutton!!.id = cid | 1555 radiobutton!!.id = cid |
1534 radiobutton!!.text = text | 1556 radiobutton!!.text = text |
1535 radiobutton!!.setOnClickListener { | 1557 radiobutton!!.setOnClickListener { |
1536 lastClickView = radiobutton!! | 1558 lastClickView = radiobutton!! |
1537 eventHandlerSimple(radiobutton!!, 8) | 1559 eventHandlerSimple(radiobutton!!, DWEvent.CLICKED) |
1538 } | 1560 } |
1539 } | 1561 } |
1540 return radiobutton | 1562 return radiobutton |
1541 } | 1563 } |
1542 | 1564 |
1550 checkbox!!.tag = dataArrayMap | 1572 checkbox!!.tag = dataArrayMap |
1551 checkbox!!.id = cid | 1573 checkbox!!.id = cid |
1552 checkbox!!.text = text | 1574 checkbox!!.text = text |
1553 checkbox!!.setOnClickListener { | 1575 checkbox!!.setOnClickListener { |
1554 lastClickView = checkbox!! | 1576 lastClickView = checkbox!! |
1555 eventHandlerSimple(checkbox!!, 8) | 1577 eventHandlerSimple(checkbox!!, DWEvent.CLICKED) |
1556 } | 1578 } |
1557 } | 1579 } |
1558 return checkbox | 1580 return checkbox |
1559 } | 1581 } |
1560 | 1582 |
1750 tabs.addOnTabSelectedListener(object : OnTabSelectedListener { | 1772 tabs.addOnTabSelectedListener(object : OnTabSelectedListener { |
1751 override fun onTabSelected(tab: TabLayout.Tab) { | 1773 override fun onTabSelected(tab: TabLayout.Tab) { |
1752 val adapter = pager.adapter as DWTabViewPagerAdapter | 1774 val adapter = pager.adapter as DWTabViewPagerAdapter |
1753 | 1775 |
1754 pager.currentItem = tab.position | 1776 pager.currentItem = tab.position |
1755 eventHandlerNotebook(notebook!!, 15, adapter.pageList[tab.position]) | 1777 eventHandlerNotebook(notebook!!, DWEvent.SWITCH_PAGE, adapter.pageList[tab.position]) |
1756 } | 1778 } |
1757 | 1779 |
1758 override fun onTabUnselected(tab: TabLayout.Tab) {} | 1780 override fun onTabUnselected(tab: TabLayout.Tab) {} |
1759 override fun onTabReselected(tab: TabLayout.Tab) {} | 1781 override fun onTabReselected(tab: TabLayout.Tab) {} |
1760 }) | 1782 }) |
1969 | 1991 |
1970 override fun onStartTrackingTouch(seekBar: SeekBar) { | 1992 override fun onStartTrackingTouch(seekBar: SeekBar) { |
1971 } | 1993 } |
1972 | 1994 |
1973 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { | 1995 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { |
1974 eventHandlerInt(slider as View, 14, slider!!.progress, 0, 0, 0) | 1996 eventHandlerInt(slider as View, DWEvent.VALUE_CHANGED, slider!!.progress, 0, 0, 0) |
1975 } | 1997 } |
1976 }) | 1998 }) |
1977 } | 1999 } |
1978 return slider | 2000 return slider |
1979 } | 2001 } |
2052 fun htmlJavascriptRun(html: WebView, javascript: String, data: Long) | 2074 fun htmlJavascriptRun(html: WebView, javascript: String, data: Long) |
2053 { | 2075 { |
2054 waitOnUiThread { | 2076 waitOnUiThread { |
2055 html.evaluateJavascript(javascript) { value -> | 2077 html.evaluateJavascript(javascript) { value -> |
2056 // Execute onReceiveValue's code | 2078 // Execute onReceiveValue's code |
2057 eventHandlerHTMLResult(html, 18, value, data) | 2079 eventHandlerHTMLResult(html, DWEvent.HTML_RESULT, value, data) |
2058 } | 2080 } |
2059 } | 2081 } |
2060 } | 2082 } |
2061 | 2083 |
2062 fun htmlAction(html: WebView, action: Int) | 2084 fun htmlAction(html: WebView, action: Int) |
2171 // If we are single select or we got a double tap... | 2193 // If we are single select or we got a double tap... |
2172 // Generate an ENTER event | 2194 // Generate an ENTER event |
2173 if(cont!!.choiceMode != ListView.CHOICE_MODE_MULTIPLE || | 2195 if(cont!!.choiceMode != ListView.CHOICE_MODE_MULTIPLE || |
2174 (position == adapter.lastClickRow && | 2196 (position == adapter.lastClickRow && |
2175 (now - adapter.lastClick) < ViewConfiguration.getDoubleTapTimeout())) { | 2197 (now - adapter.lastClick) < ViewConfiguration.getDoubleTapTimeout())) { |
2176 eventHandlerContainer(cont!!, 9, title, 0, 0, data) | 2198 eventHandlerContainer(cont!!, DWEvent.ITEM_ENTER, title, 0, 0, data) |
2177 } else { | 2199 } else { |
2178 // If we are mutiple select, generate a SELECT event | 2200 // If we are mutiple select, generate a SELECT event |
2179 eventHandlerContainer(cont!!, 12, title, 0, 0, data) | 2201 eventHandlerContainer(cont!!, DWEvent.ITEM_SELECT, title, 0, 0, data) |
2180 } | 2202 } |
2181 adapter.lastClick = now | 2203 adapter.lastClick = now |
2182 adapter.lastClickRow = position | 2204 adapter.lastClickRow = position |
2183 } | 2205 } |
2184 cont!!.setOnContextClickListener { | 2206 cont!!.setOnContextClickListener { |
2185 if(adapter.selectedItem > -1 && adapter.selectedItem < adapter.model.numberOfRows()) { | 2207 if(adapter.selectedItem > -1 && adapter.selectedItem < adapter.model.numberOfRows()) { |
2186 val title = adapter.model.getRowTitle(adapter.selectedItem) | 2208 val title = adapter.model.getRowTitle(adapter.selectedItem) |
2187 val data = adapter.model.getRowData(adapter.selectedItem) | 2209 val data = adapter.model.getRowData(adapter.selectedItem) |
2188 | 2210 |
2189 lastClickView = cont!! | 2211 lastClickView = cont!! |
2190 eventHandlerContainer(cont!!, 10, title, 0, 0, data) | 2212 eventHandlerContainer(cont!!, DWEvent.ITEM_CONTEXT, title, 0, 0, data) |
2191 } | 2213 } |
2192 true | 2214 true |
2193 } | 2215 } |
2194 cont!!.setOnItemLongClickListener { parent, view, position, id -> | 2216 cont!!.setOnItemLongClickListener { parent, view, position, id -> |
2195 val title = adapter.model.getRowTitle(position) | 2217 val title = adapter.model.getRowTitle(position) |
2196 val data = adapter.model.getRowData(position) | 2218 val data = adapter.model.getRowData(position) |
2197 | 2219 |
2198 lastClickView = cont!! | 2220 lastClickView = cont!! |
2199 eventHandlerContainer(cont!!, 10, title, 0, 0, data) | 2221 eventHandlerContainer(cont!!, DWEvent.ITEM_CONTEXT, title, 0, 0, data) |
2200 true | 2222 true |
2201 } | 2223 } |
2202 } | 2224 } |
2203 return cont | 2225 return cont |
2204 } | 2226 } |
2918 } | 2940 } |
2919 MotionEvent.ACTION_UP -> { | 2941 MotionEvent.ACTION_UP -> { |
2920 render!!.evx = event.x | 2942 render!!.evx = event.x |
2921 render!!.evy = event.y | 2943 render!!.evy = event.y |
2922 lastClickView = render!! | 2944 lastClickView = render!! |
2923 eventHandlerInt(render!!, 4, event.x.toInt(), event.y.toInt(), render!!.button, 0) | 2945 eventHandlerInt(render!!, DWEvent.BUTTON_RELEASE, event.x.toInt(), event.y.toInt(), render!!.button, 0) |
2924 } | 2946 } |
2925 MotionEvent.ACTION_MOVE -> { | 2947 MotionEvent.ACTION_MOVE -> { |
2926 render!!.evx = event.x | 2948 render!!.evx = event.x |
2927 render!!.evy = event.y | 2949 render!!.evy = event.y |
2928 lastClickView = render!! | 2950 lastClickView = render!! |
2929 eventHandlerInt(render!!, 5, event.x.toInt(), event.y.toInt(), 1, 0) | 2951 eventHandlerInt(render!!, DWEvent.MOTION_NOTIFY, event.x.toInt(), event.y.toInt(), 1, 0) |
2930 } | 2952 } |
2931 } | 2953 } |
2932 return false | 2954 return false |
2933 } | 2955 } |
2934 }) | 2956 }) |
2935 render!!.setOnLongClickListener{ | 2957 render!!.setOnLongClickListener{ |
2936 // Long click functions as button 2 | 2958 // Long click functions as button 2 |
2937 render!!.button = 2 | 2959 render!!.button = 2 |
2938 lastClickView = render!! | 2960 lastClickView = render!! |
2939 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0) | 2961 eventHandlerInt(render!!, DWEvent.BUTTON_PRESS, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0) |
2940 true | 2962 true |
2941 } | 2963 } |
2942 render!!.setOnClickListener{ | 2964 render!!.setOnClickListener{ |
2943 // Normal click functions as button 1 | 2965 // Normal click functions as button 1 |
2944 render!!.button = 1 | 2966 render!!.button = 1 |
2945 lastClickView = render!! | 2967 lastClickView = render!! |
2946 eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0) | 2968 eventHandlerInt(render!!, DWEvent.BUTTON_PRESS, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0) |
2947 } | 2969 } |
2948 render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event -> | 2970 render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event -> |
2949 if (event.action == KeyEvent.ACTION_DOWN) { | 2971 if (event.action == KeyEvent.ACTION_DOWN) { |
2950 eventHandlerKey(render!!, 2, keyCode, event.unicodeChar, event.modifiers, event.characters) | 2972 eventHandlerKey(render!!, DWEvent.KEY_PRESS, keyCode, event.unicodeChar, event.modifiers, event.characters) |
2951 } | 2973 } |
2952 false | 2974 false |
2953 }) | 2975 }) |
2954 } | 2976 } |
2955 return render | 2977 return render |