# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1663008827 0 # Node ID 1f0017a0777167fcf085caf26e6406c352bc7515 # Parent 0cbe8201db3c911dd1ad70ffbdcf26f698d3f596 Android: Implement DW_SIGNAL_COLUMN_CLICK for containers in DW_CONTAINER_MODE_MULTI. diff -r 0cbe8201db3c -r 1f0017a07771 android/DWindows.kt --- 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) { diff -r 0cbe8201db3c -r 1f0017a07771 android/dw.cpp --- 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;