diff dwtestoo.cpp @ 2962:e6072eb914ce

C++: Step 4 of the std::string transition. Remove C style string lambda support due to limitations of std::function. std::function due to its template definition cannot differentiate parameters. This causes std::function parameters to be indistiguishable despite different signatures. Use the C style function pointer instead if you want C style strings, not lambdas. Convert KeyPress lambda to use std::string, this was missed in the last commit.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 25 Feb 2023 04:25:21 +0000
parents b9bd130f438a
children 531d36ebf37a
line wrap: on
line diff
--- a/dwtestoo.cpp	Thu Feb 23 15:24:36 2023 +0000
+++ b/dwtestoo.cpp	Sat Feb 25 04:25:21 2023 +0000
@@ -112,8 +112,8 @@
 class DWTest : public DW::Window
 {
 private:
-    const char *ResolveKeyName(int vk) {
-        const char *keyname;
+    std::string ResolveKeyName(int vk) {
+        std::string keyname;
         switch(vk) {
             case  VK_LBUTTON : keyname =  "VK_LBUTTON"; break;
             case  VK_RBUTTON : keyname =  "VK_RBUTTON"; break;
@@ -194,7 +194,7 @@
         return keyname;
     }
 
-    const char *ResolveKeyModifiers(int mask) {
+    std::string ResolveKeyModifiers(int mask) {
         if((mask & KC_CTRL) && (mask & KC_SHIFT) && (mask & KC_ALT))
             return "KC_CTRL KC_SHIFT KC_ALT";
         else if((mask & KC_CTRL) && (mask & KC_SHIFT))
@@ -986,14 +986,18 @@
             return TRUE;
         });
 
-        render2->ConnectKeyPress([this, status1](char ch, int vk, int state, char *utf8) -> int
+        render2->ConnectKeyPress([this, status1](char ch, int vk, int state, std::string utf8) -> int
         {
-            char tmpbuf[101] = {0};
+            std::string buf = "Key: ";
+
             if(ch)
-                snprintf(tmpbuf, 100, "Key: %c(%d) Modifiers: %s(%d) utf8 %s", ch, ch, this->ResolveKeyModifiers(state), state,  utf8);
+                buf += std::string(1, ch) + "(" + std::to_string((int)ch) + ")";
             else
-                snprintf(tmpbuf, 100, "Key: %s(%d) Modifiers: %s(%d) utf8 %s", this->ResolveKeyName(vk), vk, ResolveKeyModifiers(state), state, utf8);
-            status1->SetText(tmpbuf);
+                buf += ResolveKeyName(vk) + "(" + std::to_string(vk) + ")";
+
+            buf += " Modifiers: " + ResolveKeyModifiers(state) + "(" + std::to_string(state) + ") utf8 " + utf8;
+
+            status1->SetText(buf);
             return FALSE;
         });