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