/* * Copyright 2015 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: * Josef Gajdusek */ #include "EditWindow.h" #include #include #include #include #include #include #include "ShortcutsWindow.h" EditWindow::EditWindow(const char* placeholder, uint32 flags) : BWindow(BRect(0, 0, 0, 0), "", B_MODAL_WINDOW, flags) { fTextControl = new BTextControl("", placeholder, NULL); BButton* okButton = new BButton("OK", new BMessage(B_CONTROL_MODIFIED)); okButton->SetExplicitAlignment(BAlignment(B_ALIGN_RIGHT, B_ALIGN_TOP)); SetDefaultButton(okButton); BLayoutBuilder::Group<>(this, B_VERTICAL) .SetInsets(B_USE_WINDOW_INSETS) .Add(fTextControl) .Add(okButton); } void EditWindow::MessageReceived(BMessage* message) { switch (message->what) { case B_CONTROL_MODIFIED: delete_sem(fSem); break; default: BWindow::MessageReceived(message); break; } } BString EditWindow::Go() { fSem = create_sem(0, "EditSem"); if (fSem < B_OK) { Quit(); return ""; } BSize psize = GetLayout()->PreferredSize(); ResizeTo(max_c(be_plain_font->StringWidth(fTextControl->Text()) * 1.5, psize.Width()), psize.Height()); Show(); CenterOnScreen(); acquire_sem(fSem); BString result = fTextControl->Text(); if (Lock()) Quit(); return result; }