xref: /haiku/src/preferences/shortcuts/EditWindow.cpp (revision c237c4ce593ee823d9867fd997e51e4c447f5623)
1 /*
2  * Copyright 2015 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  * 		Josef Gajdusek
7  */
8 
9 
10 #include "EditWindow.h"
11 
12 #include <math.h>
13 
14 #include <Button.h>
15 #include <LayoutBuilder.h>
16 #include <TextControl.h>
17 #include <String.h>
18 #include <StringView.h>
19 
20 #include "ShortcutsWindow.h"
21 
22 
23 EditWindow::EditWindow(const char* placeholder, uint32 flags)
24 	:
25 	BWindow(BRect(0, 0, 0, 0), "", B_MODAL_WINDOW, flags)
26 {
27 	fTextControl = new BTextControl("", placeholder, NULL);
28 
29 	BButton* okButton = new BButton("OK", new BMessage(B_CONTROL_MODIFIED));
30 	okButton->SetExplicitAlignment(BAlignment(B_ALIGN_RIGHT, B_ALIGN_TOP));
31 	SetDefaultButton(okButton);
32 
33 	BLayoutBuilder::Group<>(this, B_VERTICAL)
34 		.SetInsets(B_USE_WINDOW_INSETS)
35 		.Add(fTextControl)
36 		.Add(okButton);
37 }
38 
39 
40 void
41 EditWindow::MessageReceived(BMessage* message)
42 {
43 	switch (message->what) {
44 		case B_CONTROL_MODIFIED:
45 			delete_sem(fSem);
46 			break;
47 		default:
48 			BWindow::MessageReceived(message);
49 			break;
50 	}
51 }
52 
53 
54 BString
55 EditWindow::Go()
56 {
57 	fSem = create_sem(0, "EditSem");
58 	if (fSem < B_OK) {
59 		Quit();
60 		return "";
61 	}
62 
63 	BSize psize = GetLayout()->PreferredSize();
64 	ResizeTo(max_c(be_plain_font->StringWidth(fTextControl->Text()) * 1.5,
65 				psize.Width()),
66 		psize.Height());
67 	Show();
68 	CenterOnScreen();
69 
70 	acquire_sem(fSem);
71 	BString result = fTextControl->Text();
72 	if (Lock())
73 		Quit();
74 
75 	return result;
76 }
77