# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1627256102 0 # Node ID dcd71b04cc469c7031806cf81940d57cc48243dc # Parent 4d5467e571150b2b39b76a59fd7e5ca074d5120e 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. diff -r 4d5467e57115 -r dcd71b04cc46 android/DWindows.kt --- a/android/DWindows.kt Fri Jul 23 21:02:36 2021 +0000 +++ b/android/DWindows.kt Sun Jul 25 23:35:02 2021 +0000 @@ -55,6 +55,28 @@ import java.util.* import java.util.concurrent.locks.ReentrantLock +object DWEvent { + const val TIMER = 0 + const val CONFIGURE = 1 + const val KEY_PRESS = 2 + const val BUTTON_PRESS = 3 + const val BUTTON_RELEASE = 4 + const val MOTION_NOTIFY = 5 + const val DELETE = 6 + const val EXPOSE = 7 + const val CLICKED = 8 + const val ITEM_ENTER = 9 + const val ITEM_CONTEXT = 10 + const val LIST_SELECT = 11 + const val ITEM_SELECT = 12 + const val SET_FOCUS = 13 + const val VALUE_CHANGED = 14 + const val SWITCH_PAGE = 15 + const val TREE_EXPAND = 16 + const val COLUMN_CLICK = 17 + const val HTML_RESULT = 18 + const val HTML_CHANGED = 19 +} class DWTabViewPagerAdapter : RecyclerView.Adapter() { val viewList = mutableListOf() @@ -84,12 +106,12 @@ } override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) { // Handle the DW_HTML_CHANGE_STARTED event - eventHandlerHTMLChanged(view, 19, url, 1) + eventHandlerHTMLChanged(view, DWEvent.HTML_CHANGED, url, 1) } override fun onPageFinished(view: WebView, url: String) { // Handle the DW_HTML_CHANGE_COMPLETE event - eventHandlerHTMLChanged(view, 19, url, 4) + eventHandlerHTMLChanged(view, DWEvent.HTML_CHANGED, url, 4) } external fun eventHandlerHTMLChanged(obj1: View, message: Int, URI: String, status: Int) @@ -127,7 +149,7 @@ value = minimum } setText(value.toString()) - eventHandlerInt(14, value.toInt(), 0, 0, 0) + eventHandlerInt(DWEvent.VALUE_CHANGED, value.toInt(), 0, 0, 0) return true } else if (event.x <= v.compoundDrawables[DRAWABLE_LEFT].bounds.width()) { val newvalue = this.text.toString().toLongOrNull() @@ -144,7 +166,7 @@ value = minimum } setText(value.toString()) - eventHandlerInt(14, value.toInt(), 0, 0, 0) + eventHandlerInt(DWEvent.VALUE_CHANGED, value.toInt(), 0, 0, 0) return true } } @@ -185,7 +207,7 @@ selected = position setText(item) lpw!!.dismiss() - eventHandlerInt(11, position, 0, 0, 0) + eventHandlerInt(DWEvent.LIST_SELECT, position, 0, 0, 0) } override fun onTouch(v: View, event: MotionEvent): Boolean { @@ -227,7 +249,7 @@ override fun onItemClick(parent: AdapterView<*>?, view: View, position: Int, id: Long) { selected = position - eventHandlerInt(11, position, 0, 0, 0) + eventHandlerInt(DWEvent.LIST_SELECT, position, 0, 0, 0) } external fun eventHandlerInt( @@ -250,14 +272,14 @@ override fun onSizeChanged(width: Int, height: Int, oldWidth: Int, oldHeight: Int) { super.onSizeChanged(width, height, oldWidth, oldHeight) // Send DW_SIGNAL_CONFIGURE - eventHandlerInt(1, width, height, 0, 0) + eventHandlerInt(DWEvent.CONFIGURE, width, height, 0, 0) } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) cachedCanvas = canvas // Send DW_SIGNAL_EXPOSE - eventHandlerInt(7, 0, 0, this.width, this.height) + eventHandlerInt(DWEvent.EXPOSE, 0, 0, this.width, this.height) cachedCanvas = null } @@ -448,7 +470,7 @@ menuitem.menuitem!!.isChecked = menuitem.checked menuitem.menuitem!!.isEnabled = menuitem.enabled menuitem.menuitem!!.setOnMenuItemClickListener { item: MenuItem? -> - eventHandlerSimple(menuitem, 8) + eventHandlerSimple(menuitem, DWEvent.CLICKED) true } } @@ -807,7 +829,7 @@ val width: Int = windowLayout!!.width val height: Int = windowLayout!!.height - eventHandlerInt(windowLayout as View, 1, width, height, 0, 0) + eventHandlerInt(windowLayout as View, DWEvent.CONFIGURE, width, height, 0, 0) } } @@ -1426,7 +1448,7 @@ button!!.id = cid button!!.setOnClickListener { lastClickView = button!! - eventHandlerSimple(button!!, 8) + eventHandlerSimple(button!!, DWEvent.CLICKED) } } return button @@ -1443,7 +1465,7 @@ button!!.setImageResource(resid) button!!.setOnClickListener { lastClickView = button!! - eventHandlerSimple(button!!, 8) + eventHandlerSimple(button!!, DWEvent.CLICKED) } } return button @@ -1460,7 +1482,7 @@ button!!.id = cid button!!.setOnClickListener { lastClickView = button!! - eventHandlerSimple(button!!, 8) + eventHandlerSimple(button!!, DWEvent.CLICKED) } for (ext in exts) { @@ -1491,7 +1513,7 @@ button!!.id = cid button!!.setOnClickListener { lastClickView = button!! - eventHandlerSimple(button!!, 8) + eventHandlerSimple(button!!, DWEvent.CLICKED) } button!!.setImageBitmap(b) } @@ -1534,7 +1556,7 @@ radiobutton!!.text = text radiobutton!!.setOnClickListener { lastClickView = radiobutton!! - eventHandlerSimple(radiobutton!!, 8) + eventHandlerSimple(radiobutton!!, DWEvent.CLICKED) } } return radiobutton @@ -1552,7 +1574,7 @@ checkbox!!.text = text checkbox!!.setOnClickListener { lastClickView = checkbox!! - eventHandlerSimple(checkbox!!, 8) + eventHandlerSimple(checkbox!!, DWEvent.CLICKED) } } return checkbox @@ -1752,7 +1774,7 @@ val adapter = pager.adapter as DWTabViewPagerAdapter pager.currentItem = tab.position - eventHandlerNotebook(notebook!!, 15, adapter.pageList[tab.position]) + eventHandlerNotebook(notebook!!, DWEvent.SWITCH_PAGE, adapter.pageList[tab.position]) } override fun onTabUnselected(tab: TabLayout.Tab) {} @@ -1971,7 +1993,7 @@ } override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { - eventHandlerInt(slider as View, 14, slider!!.progress, 0, 0, 0) + eventHandlerInt(slider as View, DWEvent.VALUE_CHANGED, slider!!.progress, 0, 0, 0) } }) } @@ -2054,7 +2076,7 @@ waitOnUiThread { html.evaluateJavascript(javascript) { value -> // Execute onReceiveValue's code - eventHandlerHTMLResult(html, 18, value, data) + eventHandlerHTMLResult(html, DWEvent.HTML_RESULT, value, data) } } } @@ -2173,10 +2195,10 @@ if(cont!!.choiceMode != ListView.CHOICE_MODE_MULTIPLE || (position == adapter.lastClickRow && (now - adapter.lastClick) < ViewConfiguration.getDoubleTapTimeout())) { - eventHandlerContainer(cont!!, 9, title, 0, 0, data) + eventHandlerContainer(cont!!, DWEvent.ITEM_ENTER, title, 0, 0, data) } else { // If we are mutiple select, generate a SELECT event - eventHandlerContainer(cont!!, 12, title, 0, 0, data) + eventHandlerContainer(cont!!, DWEvent.ITEM_SELECT, title, 0, 0, data) } adapter.lastClick = now adapter.lastClickRow = position @@ -2187,7 +2209,7 @@ val data = adapter.model.getRowData(adapter.selectedItem) lastClickView = cont!! - eventHandlerContainer(cont!!, 10, title, 0, 0, data) + eventHandlerContainer(cont!!, DWEvent.ITEM_CONTEXT, title, 0, 0, data) } true } @@ -2196,7 +2218,7 @@ val data = adapter.model.getRowData(position) lastClickView = cont!! - eventHandlerContainer(cont!!, 10, title, 0, 0, data) + eventHandlerContainer(cont!!, DWEvent.ITEM_CONTEXT, title, 0, 0, data) true } } @@ -2920,13 +2942,13 @@ render!!.evx = event.x render!!.evy = event.y lastClickView = render!! - eventHandlerInt(render!!, 4, event.x.toInt(), event.y.toInt(), render!!.button, 0) + eventHandlerInt(render!!, DWEvent.BUTTON_RELEASE, event.x.toInt(), event.y.toInt(), render!!.button, 0) } MotionEvent.ACTION_MOVE -> { render!!.evx = event.x render!!.evy = event.y lastClickView = render!! - eventHandlerInt(render!!, 5, event.x.toInt(), event.y.toInt(), 1, 0) + eventHandlerInt(render!!, DWEvent.MOTION_NOTIFY, event.x.toInt(), event.y.toInt(), 1, 0) } } return false @@ -2936,18 +2958,18 @@ // Long click functions as button 2 render!!.button = 2 lastClickView = render!! - eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0) + eventHandlerInt(render!!, DWEvent.BUTTON_PRESS, render!!.evx.toInt(), render!!.evy.toInt(), 2, 0) true } render!!.setOnClickListener{ // Normal click functions as button 1 render!!.button = 1 lastClickView = render!! - eventHandlerInt(render!!, 3, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0) + eventHandlerInt(render!!, DWEvent.BUTTON_PRESS, render!!.evx.toInt(), render!!.evy.toInt(), 1, 0) } render!!.setOnKeyListener(View.OnKeyListener { v, keyCode, event -> if (event.action == KeyEvent.ACTION_DOWN) { - eventHandlerKey(render!!, 2, keyCode, event.unicodeChar, event.modifiers, event.characters) + eventHandlerKey(render!!, DWEvent.KEY_PRESS, keyCode, event.unicodeChar, event.modifiers, event.characters) } false }) diff -r 4d5467e57115 -r dcd71b04cc46 android/dw.cpp --- a/android/dw.cpp Fri Jul 23 21:02:36 2021 +0000 +++ b/android/dw.cpp Sun Jul 25 23:35:02 2021 +0000 @@ -241,25 +241,25 @@ #define SIGNALMAX 19 static DWSignalList DWSignalTranslate[SIGNALMAX] = { - { 1, DW_SIGNAL_CONFIGURE }, - { 2, DW_SIGNAL_KEY_PRESS }, - { 3, DW_SIGNAL_BUTTON_PRESS }, - { 4, DW_SIGNAL_BUTTON_RELEASE }, - { 5, DW_SIGNAL_MOTION_NOTIFY }, - { 6, DW_SIGNAL_DELETE }, - { 7, DW_SIGNAL_EXPOSE }, - { 8, DW_SIGNAL_CLICKED }, - { 9, DW_SIGNAL_ITEM_ENTER }, - { 10, DW_SIGNAL_ITEM_CONTEXT }, - { 11, DW_SIGNAL_LIST_SELECT }, - { 12, DW_SIGNAL_ITEM_SELECT }, - { 13, DW_SIGNAL_SET_FOCUS }, - { 14, DW_SIGNAL_VALUE_CHANGED }, - { 15, DW_SIGNAL_SWITCH_PAGE }, - { 16, DW_SIGNAL_TREE_EXPAND }, - { 17, DW_SIGNAL_COLUMN_CLICK }, - { 18, DW_SIGNAL_HTML_RESULT }, - { 19, DW_SIGNAL_HTML_CHANGED } + { _DW_EVENT_CONFIGURE, DW_SIGNAL_CONFIGURE }, + { _DW_EVENT_KEY_PRESS, DW_SIGNAL_KEY_PRESS }, + { _DW_EVENT_BUTTON_PRESS, DW_SIGNAL_BUTTON_PRESS }, + { _DW_EVENT_BUTTON_RELEASE, DW_SIGNAL_BUTTON_RELEASE }, + { _DW_EVENT_MOTION_NOTIFY, DW_SIGNAL_MOTION_NOTIFY }, + { _DW_EVENT_DELETE, DW_SIGNAL_DELETE }, + { _DW_EVENT_EXPOSE, DW_SIGNAL_EXPOSE }, + { _DW_EVENT_CLICKED, DW_SIGNAL_CLICKED }, + { _DW_EVENT_ITEM_ENTER, DW_SIGNAL_ITEM_ENTER }, + { _DW_EVENT_ITEM_CONTEXT, DW_SIGNAL_ITEM_CONTEXT }, + { _DW_EVENT_LIST_SELECT, DW_SIGNAL_LIST_SELECT }, + { _DW_EVENT_ITEM_SELECT, DW_SIGNAL_ITEM_SELECT }, + { _DW_EVENT_SET_FOCUS, DW_SIGNAL_SET_FOCUS }, + { _DW_EVENT_VALUE_CHANGED, DW_SIGNAL_VALUE_CHANGED }, + { _DW_EVENT_SWITCH_PAGE, DW_SIGNAL_SWITCH_PAGE }, + { _DW_EVENT_TREE_EXPAND, DW_SIGNAL_TREE_EXPAND }, + { _DW_EVENT_COLUMN_CLICK, DW_SIGNAL_COLUMN_CLICK }, + { _DW_EVENT_HTML_RESULT, DW_SIGNAL_HTML_RESULT }, + { _DW_EVENT_HTML_CHANGED, DW_SIGNAL_HTML_CHANGED } }; #define _DW_EVENT_PARAM_SIZE 10 @@ -275,7 +275,7 @@ switch(message) { /* Timer event */ - case 0: + case _DW_EVENT_TIMER: { int (*timerfunc)(void *) = (int (* API)(void *))handler->signalfunction; @@ -285,7 +285,7 @@ break; } /* Configure/Resize event */ - case 1: + case _DW_EVENT_CONFIGURE: { int (*sizefunc)(HWND, int, int, void *) = (int (* API)(HWND, int, int, void *))handler->signalfunction; int width = DW_POINTER_TO_INT(params[3]); @@ -297,7 +297,7 @@ retval = 0; break; } - case 2: + case _DW_EVENT_KEY_PRESS: { int (*keypressfunc)(HWND, char, int, int, void *, char *) = (int (* API)(HWND, char, int, int, void *, char *))handler->signalfunction; char *utf8 = (char *)params[1], ch = (char)DW_POINTER_TO_INT(params[3]); @@ -307,8 +307,8 @@ break; } /* Button press and release event */ - case 3: - case 4: + case _DW_EVENT_BUTTON_PRESS: + case _DW_EVENT_BUTTON_RELEASE: { int (* API buttonfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))handler->signalfunction; int button = params[5] ? DW_POINTER_TO_INT(params[5]) : 1; @@ -317,7 +317,7 @@ break; } /* Motion notify event */ - case 5: + case _DW_EVENT_MOTION_NOTIFY: { int (* API motionfunc)(HWND, int, int, int, void *) = (int (* API)(HWND, int, int, int, void *))handler->signalfunction; @@ -325,14 +325,14 @@ break; } /* Window close event */ - case 6: + case _DW_EVENT_DELETE: { int (* API closefunc)(HWND, void *) = (int (* API)(HWND, void *))handler->signalfunction; retval = closefunc(handler->window, handler->data); break; } /* Window expose/draw event */ - case 7: + case _DW_EVENT_EXPOSE: { DWExpose exp; int (* API exposefunc)(HWND, DWExpose *, void *) = (int (* API)(HWND, DWExpose *, void *))handler->signalfunction; @@ -348,7 +348,7 @@ return retval; } /* Clicked event for buttons and menu items */ - case 8: + case _DW_EVENT_CLICKED: { int (* API clickfunc)(HWND, void *) = (int (* API)(HWND, void *))handler->signalfunction; @@ -356,7 +356,7 @@ break; } /* Container class selection event */ - case 9: + case _DW_EVENT_ITEM_ENTER: { int (*containerselectfunc)(HWND, char *, void *, void *) =(int (* API)(HWND, char *, void *, void *)) handler->signalfunction; @@ -364,7 +364,7 @@ break; } /* Container context menu event */ - case 10: + case _DW_EVENT_ITEM_CONTEXT: { int (* API containercontextfunc)(HWND, char *, int, int, void *, void *) = (int (* API)(HWND, char *, int, int, void *, void *))handler->signalfunction; char *text = (char *)params[1]; @@ -376,8 +376,8 @@ break; } /* Generic selection changed event for several classes */ - case 11: - case 14: + case _DW_EVENT_LIST_SELECT: + case _DW_EVENT_VALUE_CHANGED: { int (* API valuechangedfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))handler->signalfunction; int selected = DW_POINTER_TO_INT(params[3]); @@ -386,7 +386,7 @@ break; } /* Tree class selection event */ - case 12: + case _DW_EVENT_ITEM_SELECT: { int (* API treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = (int (* API)(HWND, HTREEITEM, char *, void *, void *))handler->signalfunction; char *text = (char *)params[1]; @@ -396,7 +396,7 @@ break; } /* Set Focus event */ - case 13: + case _DW_EVENT_SET_FOCUS: { int (* API setfocusfunc)(HWND, void *) = (int (* API)(HWND, void *))handler->signalfunction; @@ -404,7 +404,7 @@ break; } /* Notebook page change event */ - case 15: + case _DW_EVENT_SWITCH_PAGE: { int (* API switchpagefunc)(HWND, unsigned long, void *) = (int (* API)(HWND, unsigned long, void *))handler->signalfunction; unsigned long pageID = DW_POINTER_TO_INT(params[3]); @@ -413,7 +413,7 @@ break; } /* Tree expand event */ - case 16: + case _DW_EVENT_TREE_EXPAND: { int (* API treeexpandfunc)(HWND, HTREEITEM, void *) = (int (* API)(HWND, HTREEITEM, void *))handler->signalfunction; @@ -421,7 +421,7 @@ break; } /* Column click event */ - case 17: + case _DW_EVENT_COLUMN_CLICK: { int (* API clickcolumnfunc)(HWND, int, void *) = (int (* API)(HWND, int, void *))handler->signalfunction; int column_num = DW_POINTER_TO_INT(params[3]); @@ -430,7 +430,7 @@ break; } /* HTML result event */ - case 18: + case _DW_EVENT_HTML_RESULT: { int (* API htmlresultfunc)(HWND, int, char *, void *, void *) = (int (* API)(HWND, int, char *, void *, void *))handler->signalfunction; char *result = (char *)params[1]; @@ -439,7 +439,7 @@ break; } /* HTML changed event */ - case 19: + case _DW_EVENT_HTML_CHANGED: { int (* API htmlchangedfunc)(HWND, int, char *, void *) = (int (* API)(HWND, int, char *, void *))handler->signalfunction; char *uri = (char *)params[1]; diff -r 4d5467e57115 -r dcd71b04cc46 dw.h --- a/dw.h Fri Jul 23 21:02:36 2021 +0000 +++ b/dw.h Sun Jul 25 23:35:02 2021 +0000 @@ -1610,6 +1610,38 @@ #define HTIMER_TYPEDEFED 1 #endif +#if defined(__ANDROID__) || defined(__IOS__) || defined(__MAC__) +/* On platforms which do not use integer messages: Android, iOS and Mac + * We create our own internal messages so it works similar to the message based + * platforms: OS/2 and Windows. + * GTK does does not use integer messages, but already has a signal based system. + */ +typedef enum +{ + _DW_EVENT_TIMER = 0, /* Internal message for timers */ + _DW_EVENT_CONFIGURE, /* Internal message for configure (resize) */ + _DW_EVENT_KEY_PRESS, /* Internal message for key press */ + _DW_EVENT_BUTTON_PRESS, /* Internal message for button press */ + _DW_EVENT_BUTTON_RELEASE, /* Internal message for button release */ + _DW_EVENT_MOTION_NOTIFY, /* Internal message for motion notification */ + _DW_EVENT_DELETE, /* Internal message for delete (object destruction) */ + _DW_EVENT_EXPOSE, /* Internal message for expose (draw) */ + _DW_EVENT_CLICKED, /* Internal message for click (touch) */ + _DW_EVENT_ITEM_ENTER, /* Internal message for (container) item enter (activation) */ + _DW_EVENT_ITEM_CONTEXT, /* Internal message for (container) item context (menu) */ + _DW_EVENT_LIST_SELECT, /* Internal message for list(box) selection */ + _DW_EVENT_ITEM_SELECT, /* Internal message for (container) item selection */ + _DW_EVENT_SET_FOCUS, /* Internal message for (widget) setting focus */ + _DW_EVENT_VALUE_CHANGED, /* Internal message for (widget) value changed */ + _DW_EVENT_SWITCH_PAGE, /* Internal message for (notebook) page changed */ + _DW_EVENT_TREE_EXPAND, /* Internal message for tree (node) expanded */ + _DW_EVENT_COLUMN_CLICK, /* Internal message for (container) column clicked */ + _DW_EVENT_HTML_RESULT, /* Internal message for HTML javascript result */ + _DW_EVENT_HTML_CHANGED, /* Internal message for HTML status changed */ + _DW_EVENT_MAX +} _DW_EVENTS; +#endif + /* Some dark mode constants for supported platforms */ #define DW_DARK_MODE_DISABLED 0 #define DW_DARK_MODE_BASIC 1