1/* 2 * Copyright 2012, Rene Gollent, rene@gollent.com. 3 * Distributed under the terms of the MIT License. 4 */ 5#include "PromptWindow.h" 6 7#include <Button.h> 8#include <Catalog.h> 9#include <LayoutBuilder.h> 10#include <TextControl.h> 11 12 13static const uint32 kAcceptInput = 'acin'; 14 15 16PromptWindow::PromptWindow(const char* title, const char* label, 17 BMessenger target, BMessage* message) 18 : 19 BWindow(BRect(), title, B_FLOATING_WINDOW, B_NOT_RESIZABLE 20 | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE), 21 fTarget(target), 22 fMessage(message) 23{ 24 fTextControl = new BTextControl("promptcontrol", label, NULL, 25 new BMessage(kAcceptInput)); 26 BButton* cancelButton = new BButton("Cancel", new 27 BMessage(B_QUIT_REQUESTED)); 28 BButton* acceptButton = new BButton("Accept", new 29 BMessage(kAcceptInput)); 30 BLayoutBuilder::Group<>(this, B_VERTICAL) 31 .Add(fTextControl) 32 .AddGroup(B_HORIZONTAL) 33 .Add(acceptButton) 34 .Add(cancelButton); 35 36 fTextControl->TextView()->SetExplicitMinSize(BSize( 37 fTextControl->TextView()->StringWidth("1234567890"), B_SIZE_UNSET)); 38 fTextControl->SetTarget(this); 39 acceptButton->SetTarget(this); 40 cancelButton->SetTarget(this); 41 fTextControl->MakeFocus(true); 42} 43 44 45PromptWindow::~PromptWindow() 46{ 47 delete fMessage; 48} 49 50 51void 52PromptWindow::MessageReceived(BMessage* message) 53{ 54 switch (message->what) 55 { 56 case kAcceptInput: 57 { 58 fMessage->AddString("text", fTextControl->TextView()->Text()); 59 fTarget.SendMessage(fMessage); 60 PostMessage(B_QUIT_REQUESTED); 61 } 62 default: 63 { 64 BWindow::MessageReceived(message); 65 break; 66 } 67 } 68} 69 70 71status_t 72PromptWindow::SetTarget(BMessenger messenger) 73{ 74 fTarget = messenger; 75 return B_OK; 76} 77 78 79status_t 80PromptWindow::SetMessage(BMessage* message) 81{ 82 delete fMessage; 83 fMessage = message; 84 return B_OK; 85} 86