changeset 2835:1f0017a07771

Android: Implement DW_SIGNAL_COLUMN_CLICK for containers in DW_CONTAINER_MODE_MULTI.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 12 Sep 2022 18:53:47 +0000
parents 0cbe8201db3c
children da90bf6d0564
files android/DWindows.kt android/dw.cpp
diffstat 2 files changed, 49 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/android/DWindows.kt	Mon Sep 12 10:13:24 2022 +0000
+++ b/android/DWindows.kt	Mon Sep 12 18:53:47 2022 +0000
@@ -2319,16 +2319,21 @@
     override fun getView(position: Int, view: View?, parent: ViewGroup): View {
         var rowView: DWContainerRow? = view as DWContainerRow?
         var displayColumns = model.numberOfColumns()
+        var isFilesystem: Boolean = false
+        var extraColumns: Int = 1
+
+        // If column 1 is bitmap and column 2 is text...
+        if(displayColumns > 1 && (model.getColumnType(0) and 1) != 0 &&
+            (model.getColumnType(1) and (1 shl 1)) != 0) {
+            // We are a filesystem style container...
+            isFilesystem = true
+            extraColumns = 2
+        }
 
         // In default mode (0), limit the columns to 1 or 2
         if(contMode == 0) {
-            // If column 1 is bitmap and column 2 is text...
-            if(displayColumns > 1 && (model.getColumnType(0) and 1) != 0 &&
-                (model.getColumnType(1) and (1 shl 1)) != 0) {
-                displayColumns = 2
-            } else {
-                displayColumns = 1
-            }
+            // depending on if we are filesystem style or not
+            displayColumns = extraColumns
         }
 
         // If the view passed in is null we need to create the layout
@@ -2361,8 +2366,16 @@
                     }
                     rowView.addView(imageview)
                 } else  {
-                    // Everything else id displayed as text
-                    val textview = TextView(context)
+                    // Everything else is displayed as text
+                    var textview: TextView? = null
+
+                    // Special case for DW_CONTAINER_MODE_MULTI
+                    if(contMode == 2 && i >= extraColumns) {
+                        // textview will be a text button instead
+                        textview = Button(context)
+                    } else {
+                        textview = TextView(context)
+                    }
                     var hsize = LinearLayout.LayoutParams.WRAP_CONTENT
                     if(contMode == 0)
                         hsize = LinearLayout.LayoutParams.MATCH_PARENT
@@ -2381,6 +2394,14 @@
                     } else if(content is Long || content is Int) {
                         textview.text = content.toString()
                     }
+                    textview.setOnClickListener {
+                        var columnClicked: Int = i
+                        if(isFilesystem) {
+                            columnClicked = i - 1
+                        }
+                        eventHandlerInt(parent, DWEvent.COLUMN_CLICK, columnClicked, 0, 0, 0)
+                    }
+
                     rowView.addView(textview)
                 }
             }
@@ -2430,6 +2451,14 @@
         }
         return rowView
     }
+    external fun eventHandlerInt(
+        obj1: View,
+        message: Int,
+        inta: Int,
+        intb: Int,
+        intc: Int,
+        intd: Int
+    )
 }
 
 private class DWMLE(c: Context): AppCompatEditText(c) {
--- a/android/dw.cpp	Mon Sep 12 10:13:24 2022 +0000
+++ b/android/dw.cpp	Mon Sep 12 18:53:47 2022 +0000
@@ -765,6 +765,17 @@
 }
 
 JNIEXPORT void JNICALL
+Java_org_dbsoft_dwindows_DWContainerAdapter_eventHandlerInt(JNIEnv* env, jobject obj, jobject obj1,
+                                                            jint message, jint inta, jint intb, jint intc, jint intd) {
+    void *params[_DW_EVENT_PARAM_SIZE] = { nullptr, nullptr, nullptr,
+                                           DW_INT_TO_POINTER(inta), DW_INT_TO_POINTER(intb),
+                                           DW_INT_TO_POINTER(intc), DW_INT_TO_POINTER(intd), nullptr,
+                                           DW_INT_TO_POINTER(message), nullptr };
+
+    _dw_event_handler(obj1, params);
+}
+
+JNIEXPORT void JNICALL
 Java_org_dbsoft_dwindows_DWindows_eventHandlerContainer(JNIEnv* env, jobject obj, jobject obj1,
                                                   jint message, jstring jtitle, jint x, jint y, jlong data) {
     const char *title = jtitle ? env->GetStringUTFChars(jtitle, nullptr) : nullptr;