# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1620938767 0 # Node ID dbfcc0e357d61e68b76f198f2ede02b6d4112088 # Parent f9367eb9a6e7db68881b93892bda0c5a740c2649 Android: Clean up the menus... add separator, remove tildes and implement callbacks. diff -r f9367eb9a6e7 -r dbfcc0e357d6 android/DWindows.kt --- a/android/DWindows.kt Thu May 13 19:54:15 2021 +0000 +++ b/android/DWindows.kt Thu May 13 20:46:07 2021 +0000 @@ -40,6 +40,7 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.content.res.ResourcesCompat +import androidx.core.view.MenuCompat import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayout @@ -419,21 +420,34 @@ menu = newmenu } if(menu != null) { + var group: Int = 0 + + // Enable group dividers for separators + MenuCompat.setGroupDividerEnabled(menu, true); + for (menuitem in children) { // Submenus on Android can't have submenus, so stop at depth 1 if (menuitem.submenu != null && menu !is SubMenu) { if(menuitem.submenuitem == null) { - menuitem.submenuitem = menu?.addSubMenu(0, menuitem.id, 0, menuitem.title) + menuitem.submenuitem = menu?.addSubMenu(group, menuitem.id, 0, menuitem.title) } menuitem.submenu!!.createMenu(menuitem.submenuitem) } else if(menuitem.submenu == null) { - if(menuitem.menuitem == null) { - menuitem.menuitem = menu?.add(0, menuitem.id, 0, menuitem.title) + if(menuitem.title!!.isEmpty()) { + group += 1 + } else if(menuitem.menuitem == null) { + menuitem.menuitem = menu?.add(group, menuitem.id, 0, menuitem.title) + menuitem.menuitem!!.setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener { item: MenuItem? -> + eventHandlerSimple(menuitem, 8) + true + }) } } } } } + + external fun eventHandlerSimple(item: DWMenuItem, message: Int) } class DWindows : AppCompatActivity() { diff -r f9367eb9a6e7 -r dbfcc0e357d6 android/dw.cpp --- a/android/dw.cpp Thu May 13 19:54:15 2021 +0000 +++ b/android/dw.cpp Thu May 13 20:46:07 2021 +0000 @@ -492,6 +492,15 @@ return timerfunc((void *)data); } +/* A more simple method for quicker calls */ +JNIEXPORT void JNICALL +Java_org_dbsoft_dwindows_DWMenu_eventHandlerSimple(JNIEnv* env, jobject obj, jobject obj1, jint message) { + void *params[8] = { nullptr }; + + _dw_event_handler(obj1, params, message); +} + + /* This function adds a signal handler callback into the linked list. */ void _dw_new_signal(ULONG message, HWND window, int msgid, void *signalfunction, void *discfunc, void *data) @@ -3984,6 +3993,27 @@ { } +char _dw_removetilde(char *dest, const char *src) +{ + int z, cur=0; + char accel = '\0'; + + for(z=0;zNewStringUTF(title); + jstring jstr = env->NewStringUTF(newtitle); // First get the class that contains the method you need to call jclass clazz = _dw_find_class(env, DW_CLASS_NAME); // Get the method that you want to call