Mercurial > dwindows
diff android/DWindows.kt @ 2560:3da35cd91ca7
Android: Implement querying containers and ENTER and CONTEXT callbacks.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 18 May 2021 18:41:35 +0000 |
parents | ebc6a4ff5f1f |
children | f28d7d0ca5ed |
line wrap: on
line diff
--- a/android/DWindows.kt Tue May 18 07:55:59 2021 +0000 +++ b/android/DWindows.kt Tue May 18 18:41:35 2021 +0000 @@ -467,6 +467,7 @@ var data = mutableListOf<Any?>() var rowdata = mutableListOf<Long>() var rowtitle = mutableListOf<String?>() + var querypos: Int = -1 fun numberOfColumns(): Int { @@ -1976,18 +1977,188 @@ waitOnUiThread { var dataArrayMap = SimpleArrayMap<String, Long>() + var adapter = DWContainerAdapter(this) cont = ListView(this) cont!!.tag = dataArrayMap cont!!.id = cid - cont!!.adapter = DWContainerAdapter(this) + cont!!.adapter = adapter if(multi != 0) { cont!!.choiceMode = ListView.CHOICE_MODE_MULTIPLE; } + cont!!.setOnItemClickListener { parent, view, position, id -> + val title = adapter.model.getRowTitle(position) + val data = adapter.model.getRowData(position) + + eventHandlerContainer(cont!!, 9, title, 0, 0, data) + } + cont!!.setOnItemLongClickListener { parent, view, position, id -> + val title = adapter.model.getRowTitle(position) + val data = adapter.model.getRowData(position) + + eventHandlerContainer(cont!!, 10, title, 0, 0, data) + true + } } return cont } + fun containerGetTitleStart(cont: ListView, flags: Int): String? + { + var retval: String? = null + + waitOnUiThread { + val adapter: DWContainerAdapter = cont.adapter as DWContainerAdapter + + // Handle DW_CRA_SELECTED + if((flags and 1) != 0) { + val checked: SparseBooleanArray = cont.getCheckedItemPositions() + val position = checked.keyAt(0) + + if(position != null) { + adapter.model.querypos = position + retval = adapter.model.getRowTitle(position) + } else { + adapter.model.querypos = -1 + } + } else { + if(adapter.model.rowdata.size == 0) { + adapter.model.querypos = -1 + } else { + retval = adapter.model.getRowTitle(0) + adapter.model.querypos = 0 + } + } + } + return retval + } + + fun containerGetTitleNext(cont: ListView, flags: Int): String? + { + var retval: String? = null + + waitOnUiThread { + val adapter: DWContainerAdapter = cont.adapter as DWContainerAdapter + + if(adapter.model.querypos != -1) { + // Handle DW_CRA_SELECTED + if ((flags and 1) != 0) { + val checked: SparseBooleanArray = cont.getCheckedItemPositions() + + // Otherwise loop until we find our current place + for (i in 0 until checked.size()) { + // Item position in adapter + val position: Int = checked.keyAt(i) + + if (position != null) { + // If we are at our current point... check to see + // if there is another one, and return it... + // otherwise we will return -1 to indicated we are done. + if (adapter.model.querypos == position && (i + 1) < checked.size()) { + val newpos = checked.keyAt(i + 1) + + if (newpos != null) { + adapter.model.querypos = newpos + retval = adapter.model.getRowTitle(newpos) + } else { + adapter.model.querypos = -1 + } + } + } else { + adapter.model.querypos = -1 + } + } + } else { + if (adapter.model.rowtitle.size > adapter.model.querypos) { + adapter.model.querypos += 1 + retval = adapter.model.getRowTitle(adapter.model.querypos) + } else { + adapter.model.querypos = -1 + } + } + } + } + return retval + } + + fun containerGetDataStart(cont: ListView, flags: Int): Long + { + var retval: Long = 0 + + waitOnUiThread { + val adapter: DWContainerAdapter = cont.adapter as DWContainerAdapter + + // Handle DW_CRA_SELECTED + if((flags and 1) != 0) { + val checked: SparseBooleanArray = cont.getCheckedItemPositions() + val position = checked.keyAt(0) + + if(position != null) { + adapter.model.querypos = position + retval = adapter.model.getRowData(position) + } else { + adapter.model.querypos = -1 + } + } else { + if(adapter.model.rowdata.size == 0) { + adapter.model.querypos = -1 + } else { + retval = adapter.model.getRowData(0) + adapter.model.querypos = 0 + } + } + } + return retval + } + + fun containerGetDataNext(cont: ListView, flags: Int): Long + { + var retval: Long = 0 + + waitOnUiThread { + val adapter: DWContainerAdapter = cont.adapter as DWContainerAdapter + + if(adapter.model.querypos != -1) { + // Handle DW_CRA_SELECTED + if ((flags and 1) != 0) { + val checked: SparseBooleanArray = cont.getCheckedItemPositions() + + // Otherwise loop until we find our current place + for (i in 0 until checked.size()) { + // Item position in adapter + val position: Int = checked.keyAt(i) + + if (position != null) { + // If we are at our current point... check to see + // if there is another one, and return it... + // otherwise we will return -1 to indicated we are done. + if (adapter.model.querypos == position && (i + 1) < checked.size()) { + val newpos = checked.keyAt(i + 1) + + if (newpos != null) { + adapter.model.querypos = newpos + retval = adapter.model.getRowData(newpos) + } else { + adapter.model.querypos = -1 + } + } + } else { + adapter.model.querypos = -1 + } + } + } else { + if (adapter.model.rowdata.size > adapter.model.querypos) { + adapter.model.querypos += 1 + retval = adapter.model.getRowData(adapter.model.querypos) + } else { + adapter.model.querypos = -1 + } + } + } + } + return retval + } + fun containerAddColumn(cont: ListView, title: String, flags: Int) { waitOnUiThread { @@ -3076,6 +3247,7 @@ external fun eventHandlerNotebook(obj1: View, message: Int, pageID: Long) external fun eventHandlerTimer(sigfunc: Long, data: Long): Int external fun eventHandlerHTMLResult(obj1: View, message: Int, result: String, data: Long) + external fun eventHandlerContainer(obj1: View, message: Int, title: String?, x: Int, y: Int, data: Long) companion object {