From b1d018726ae50fbe4fc3dcdab95ef2421c3db706 Mon Sep 17 00:00:00 2001 From: zoff99 Date: Sat, 3 Feb 2024 11:07:16 +0100 Subject: [PATCH] add tooltip with emoji name to emoji popup --- .../applications/trifa/EmojiStrAndName.kt | 7 ++++ src/main/kotlin/Main.kt | 33 +++++++++++++++---- .../applications/trifa2/GroupSendMessage.kt | 27 +++++++++------ .../zoffcc/applications/trifa2/SendMessage.kt | 30 ++++++++++------- 4 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/zoffcc/applications/trifa/EmojiStrAndName.kt diff --git a/src/main/java/com/zoffcc/applications/trifa/EmojiStrAndName.kt b/src/main/java/com/zoffcc/applications/trifa/EmojiStrAndName.kt new file mode 100644 index 00000000..80b9b6f3 --- /dev/null +++ b/src/main/java/com/zoffcc/applications/trifa/EmojiStrAndName.kt @@ -0,0 +1,7 @@ +package com.zoffcc.applications.trifa + +class EmojiStrAndName +{ + var char: String = "" + var name: String = "" +} diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 6fcb7714..2b6e52b5 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -181,6 +181,7 @@ import javax.swing.UIManager import com.vanniktech.emoji.EmojiManager import com.vanniktech.emoji.ios.IosEmojiProvider import com.vanniktech.emoji.search.SearchEmojiManager +import com.zoffcc.applications.trifa.EmojiStrAndName private const val TAG = "trifa.Main.kt" var tox_running_state_wrapper = "start" @@ -225,7 +226,7 @@ const val MSG_TEXT_FONT_SIZE_EMOJI_ONLY = 55.0f const val MAX_ONE_ON_ONE_MESSAGES_TO_SHOW = 20000 const val MAX_GROUP_MESSAGES_TO_SHOW = 20000 const val SNACKBAR_TOAST_MS_DURATION: Long = 1000 -var emojis_cat_all_gropued: ArrayList>> = ArrayList() +var emojis_cat_all_gropued: ArrayList>> = ArrayList() var emojis_cat_all_cat_names: ArrayList = ArrayList() var emojis_cat_all_cat_emoji: ArrayList = ArrayList() val emojis_per_row = 6 @@ -1386,29 +1387,49 @@ fun main() = application(exitProcessOnExit = true) { for(j in 0..(IosEmojiProvider().categories.size - 1)) { Log.i(TAG, "adding emoji category: " + j + " : " + IosEmojiProvider().categories[j].categoryNames.values.elementAt(0)) - val emojis_cat_gropued: ArrayList> = ArrayList() + val emojis_cat_gropued: ArrayList> = ArrayList() emojis_cat_ = IosEmojiProvider().categories[j].emojis grouped_entries = emojis_cat_.size / emojis_per_row remain = emojis_cat_.size - (grouped_entries * emojis_per_row) for (i in 0..(grouped_entries - 1)) { val pos = i * emojis_per_row - val e: ArrayList = ArrayList() + val e: ArrayList = ArrayList() for (j in 0..(emojis_per_row - 1)) { // Log.i(TAG, "emoji name(s): " + emojis_cat_[pos + j].shortcodes) // Log.i(TAG, "emoji: " + emojis_cat_[pos + j].unicode) - e.add(emojis_cat_[pos + j].unicode) + val em = EmojiStrAndName() + em.char = emojis_cat_[pos + j].unicode + em.name = "" + try + { + em.name = emojis_cat_[pos + j].shortcodes.get(0) + } + catch(_: java.lang.Exception) + { + } + e.add(em) } emojis_cat_gropued.add(e) } if (remain > 0) { val pos = grouped_entries * emojis_per_row - val e: ArrayList = ArrayList() + val e: ArrayList = ArrayList() for (j in 0..(remain - 1)) { - e.add(emojis_cat_[pos + j].unicode) + val em = EmojiStrAndName() + em.char = emojis_cat_[pos + j].unicode + em.name = "" + try + { + em.name = emojis_cat_[pos + j].shortcodes.get(0) + } + catch(_: java.lang.Exception) + { + } + e.add(em) } emojis_cat_gropued.add(e) } diff --git a/src/main/kotlin/com/zoffcc/applications/trifa2/GroupSendMessage.kt b/src/main/kotlin/com/zoffcc/applications/trifa2/GroupSendMessage.kt index 2993a98a..3619aad7 100644 --- a/src/main/kotlin/com/zoffcc/applications/trifa2/GroupSendMessage.kt +++ b/src/main/kotlin/com/zoffcc/applications/trifa2/GroupSendMessage.kt @@ -1,3 +1,4 @@ +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.VerticalScrollbar import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -59,9 +60,11 @@ import androidx.compose.ui.window.PopupProperties import com.zoffcc.applications.trifa.Log import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import org.briarproject.briar.desktop.ui.Tooltip private const val TAG = "trifa.SendGroupMessage" +@OptIn(ExperimentalFoundationApi::class) @Composable fun GroupSendMessage(focusRequester: FocusRequester, selectedGroupId: String?, sendGroupMessage: (String) -> Unit) { var inputText by remember { mutableStateOf("") } @@ -201,10 +204,12 @@ fun GroupSendMessage(focusRequester: FocusRequester, selectedGroupId: String?, s Row() { for(k in 0..(emojis_cat_all_gropued.size - 1)) { - IconButton(modifier = Modifier.width(30.dp).height(30.dp), - onClick = { cur_emoji_cat = k }) { - Text(text = emojis_cat_all_cat_emoji.get(k), - color = Color.Black, fontSize = 20.sp, maxLines = 1) + Tooltip(text = emojis_cat_all_cat_names.get(k)) { + IconButton(modifier = Modifier.width(30.dp).height(30.dp), + onClick = { cur_emoji_cat = k }) { + Text(text = emojis_cat_all_cat_emoji.get(k), + color = Color.Black, fontSize = 20.sp, maxLines = 1) + } } } } @@ -224,12 +229,14 @@ fun GroupSendMessage(focusRequester: FocusRequester, selectedGroupId: String?, s val placeholder = "?" var curtext by remember { mutableStateOf(placeholder) } val scope = rememberCoroutineScope() - IconButton(modifier = Modifier.width(40.dp).height(40.dp), - onClick = { inputText = inputText + it[k] }) { - Text(text = curtext, color = Color.Black, fontSize = 30.sp, maxLines = 1) - scope.launch { - delay(62) - curtext = emojistr + Tooltip(text = if (emojistr.name.isEmpty()) "" else emojistr.name) { + IconButton(modifier = Modifier.width(40.dp).height(40.dp), + onClick = { inputText = inputText + it[k].char }) { + Text(text = curtext, color = Color.Black, fontSize = 30.sp, maxLines = 1) + scope.launch { + delay(62) + curtext = emojistr.char + } } } } diff --git a/src/main/kotlin/com/zoffcc/applications/trifa2/SendMessage.kt b/src/main/kotlin/com/zoffcc/applications/trifa2/SendMessage.kt index 5932bfeb..11593286 100644 --- a/src/main/kotlin/com/zoffcc/applications/trifa2/SendMessage.kt +++ b/src/main/kotlin/com/zoffcc/applications/trifa2/SendMessage.kt @@ -1,5 +1,6 @@ import androidx.compose.foundation.ContextMenuArea import androidx.compose.foundation.ContextMenuItem +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.VerticalScrollbar import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -79,12 +80,14 @@ import com.zoffcc.applications.trifa.TRIFAGlobals import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import org.briarproject.briar.desktop.ui.Tooltip import java.awt.image.BufferedImage import java.io.File import javax.imageio.ImageIO private const val TAG = "trifa.SendMessage" +@OptIn(ExperimentalFoundationApi::class) @Composable fun SendMessage(focusRequester: FocusRequester, selectedContactPubkey: String?, sendMessage: (String) -> Unit) { var inputText by remember { mutableStateOf("") } @@ -171,7 +174,8 @@ fun SendMessage(focusRequester: FocusRequester, selectedContactPubkey: String?, Text(text = "Type message...", fontSize = 14.sp) }, onValueChange = { - inputText = replace_emojis_in_text(it) + // inputText = replace_emojis_in_text(it) + inputText = it }, trailingIcon = { if (inputText.isNotEmpty()) { @@ -259,10 +263,12 @@ fun SendMessage(focusRequester: FocusRequester, selectedContactPubkey: String?, Row() { for(k in 0..(emojis_cat_all_gropued.size - 1)) { - IconButton(modifier = Modifier.width(30.dp).height(30.dp), - onClick = { cur_emoji_cat = k }) { - Text(text = emojis_cat_all_cat_emoji.get(k), - color = Color.Black, fontSize = 20.sp, maxLines = 1) + Tooltip(text = emojis_cat_all_cat_names.get(k)) { + IconButton(modifier = Modifier.width(30.dp).height(30.dp), + onClick = { cur_emoji_cat = k }) { + Text(text = emojis_cat_all_cat_emoji.get(k), + color = Color.Black, fontSize = 20.sp, maxLines = 1) + } } } } @@ -282,12 +288,14 @@ fun SendMessage(focusRequester: FocusRequester, selectedContactPubkey: String?, val placeholder = "?" var curtext by remember { mutableStateOf(placeholder) } val scope = rememberCoroutineScope() - IconButton(modifier = Modifier.width(40.dp).height(40.dp), - onClick = { inputText = inputText + it[k] }) { - Text(text = curtext, color = Color.Black, fontSize = 30.sp, maxLines = 1) - scope.launch { - delay(62) - curtext = emojistr + Tooltip(text = if (emojistr.name.isEmpty()) "" else emojistr.name) { + IconButton(modifier = Modifier.width(40.dp).height(40.dp), + onClick = { inputText = inputText + it[k].char }) { + Text(text = curtext, color = Color.Black, fontSize = 30.sp, maxLines = 1) + scope.launch { + delay(62) + curtext = emojistr.char + } } } }