ui/winui/window.cpp

changeset 28
1ecc1183f046
parent 27
c254ed644edf
child 29
3fc287f06305
--- a/ui/winui/window.cpp	Sun Feb 11 13:59:02 2024 +0100
+++ b/ui/winui/window.cpp	Sun Feb 11 15:59:56 2024 +0100
@@ -220,16 +220,41 @@
 		dialog.Title(winrt::box_value(str));
 		free(str);
 	}
-	if (args.content) {
-		wchar_t *str = str2wstr(args.content, nullptr);
-		dialog.Content(winrt::box_value(str));
-		free(str);
+
+	TextBox textfield{ nullptr };
+	if (args.input) {
+		StackPanel panel = StackPanel();
+		panel.Orientation(Orientation::Vertical);
+		if (args.content) {
+			wchar_t *str = str2wstr(args.content, nullptr);
+			TextBlock label = TextBlock();
+			label.Text(str);
+			panel.Children().Append(label);
+			free(str);
+		}
+
+		textfield = TextBox();
+		Thickness margin = { 0, 5, 0, 0 };
+		textfield.Margin(margin);
+		panel.Margin(margin);
+
+		panel.Children().Append(textfield);
+
+		dialog.Content(panel);
+
+	} else {
+		if (args.content) {
+			wchar_t *str = str2wstr(args.content, nullptr);
+			dialog.Content(winrt::box_value(str));
+			free(str);
+		}
 	}
 
 	if (args.button1_label) {
 		wchar_t *str = str2wstr(args.button1_label, nullptr);
 		dialog.PrimaryButtonText(winrt::hstring(str));
 		free(str);
+		dialog.DefaultButton(ContentDialogButton::Primary);
 	}
 	if (args.button2_label) {
 		wchar_t *str = str2wstr(args.button2_label, nullptr);
@@ -257,7 +282,17 @@
 			evt.intval = 2;
 		}
 
+		if (args.input) {
+			std::wstring wstr(textfield.Text());
+			char *text = wchar2utf8(wstr.c_str(), wstr.length());
+			evt.eventdata = text;
+		}
+
 		args.result(&evt, args.resultdata);
+
+		if (evt.eventdata) {
+			free(evt.eventdata);
+		}
 	}
 }
 

mercurial