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