16bfaef2bSRene Gollent /* 26bfaef2bSRene Gollent * Copyright 2012, Rene Gollent, rene@gollent.com. 36bfaef2bSRene Gollent * Distributed under the terms of the MIT License. 46bfaef2bSRene Gollent */ 56bfaef2bSRene Gollent #include "PromptWindow.h" 66bfaef2bSRene Gollent 76bfaef2bSRene Gollent #include <Button.h> 86bfaef2bSRene Gollent #include <Catalog.h> 96bfaef2bSRene Gollent #include <LayoutBuilder.h> 106bfaef2bSRene Gollent #include <TextControl.h> 116bfaef2bSRene Gollent 126bfaef2bSRene Gollent 136bfaef2bSRene Gollent static const uint32 kAcceptInput = 'acin'; 146bfaef2bSRene Gollent 156bfaef2bSRene Gollent 166bfaef2bSRene Gollent PromptWindow::PromptWindow(const char* title, const char* label, 176bfaef2bSRene Gollent BMessenger target, BMessage* message) 186bfaef2bSRene Gollent : 196bfaef2bSRene Gollent BWindow(BRect(), title, B_FLOATING_WINDOW, B_NOT_RESIZABLE 206bfaef2bSRene Gollent | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE), 216bfaef2bSRene Gollent fTarget(target), 226bfaef2bSRene Gollent fMessage(message) 236bfaef2bSRene Gollent { 246bfaef2bSRene Gollent fTextControl = new BTextControl("promptcontrol", label, NULL, 256bfaef2bSRene Gollent new BMessage(kAcceptInput)); 266bfaef2bSRene Gollent BButton* cancelButton = new BButton("Cancel", new 276bfaef2bSRene Gollent BMessage(B_QUIT_REQUESTED)); 286bfaef2bSRene Gollent BButton* acceptButton = new BButton("Accept", new 296bfaef2bSRene Gollent BMessage(kAcceptInput)); 306bfaef2bSRene Gollent BLayoutBuilder::Group<>(this, B_VERTICAL) 316bfaef2bSRene Gollent .Add(fTextControl) 326bfaef2bSRene Gollent .AddGroup(B_HORIZONTAL) 336bfaef2bSRene Gollent .Add(acceptButton) 346bfaef2bSRene Gollent .Add(cancelButton); 356bfaef2bSRene Gollent 366bfaef2bSRene Gollent fTextControl->TextView()->SetExplicitMinSize(BSize( 376bfaef2bSRene Gollent fTextControl->TextView()->StringWidth("1234567890"), B_SIZE_UNSET)); 386bfaef2bSRene Gollent fTextControl->SetTarget(this); 396bfaef2bSRene Gollent acceptButton->SetTarget(this); 406bfaef2bSRene Gollent cancelButton->SetTarget(this); 41*862696d9SRene Gollent fTextControl->MakeFocus(true); 426bfaef2bSRene Gollent } 436bfaef2bSRene Gollent 446bfaef2bSRene Gollent 456bfaef2bSRene Gollent PromptWindow::~PromptWindow() 466bfaef2bSRene Gollent { 476bfaef2bSRene Gollent delete fMessage; 486bfaef2bSRene Gollent } 496bfaef2bSRene Gollent 506bfaef2bSRene Gollent 516bfaef2bSRene Gollent void 526bfaef2bSRene Gollent PromptWindow::MessageReceived(BMessage* message) 536bfaef2bSRene Gollent { 546bfaef2bSRene Gollent switch (message->what) 556bfaef2bSRene Gollent { 566bfaef2bSRene Gollent case kAcceptInput: 576bfaef2bSRene Gollent { 586bfaef2bSRene Gollent fMessage->AddString("text", fTextControl->TextView()->Text()); 596bfaef2bSRene Gollent fTarget.SendMessage(fMessage); 606bfaef2bSRene Gollent PostMessage(B_QUIT_REQUESTED); 616bfaef2bSRene Gollent } 626bfaef2bSRene Gollent default: 636bfaef2bSRene Gollent { 646bfaef2bSRene Gollent BWindow::MessageReceived(message); 656bfaef2bSRene Gollent break; 666bfaef2bSRene Gollent } 676bfaef2bSRene Gollent } 686bfaef2bSRene Gollent } 696bfaef2bSRene Gollent 706bfaef2bSRene Gollent 716bfaef2bSRene Gollent status_t 726bfaef2bSRene Gollent PromptWindow::SetTarget(BMessenger messenger) 736bfaef2bSRene Gollent { 74*862696d9SRene Gollent fTarget = messenger; 75*862696d9SRene Gollent return B_OK; 766bfaef2bSRene Gollent } 776bfaef2bSRene Gollent 786bfaef2bSRene Gollent 796bfaef2bSRene Gollent status_t 806bfaef2bSRene Gollent PromptWindow::SetMessage(BMessage* message) 816bfaef2bSRene Gollent { 82*862696d9SRene Gollent delete fMessage; 83*862696d9SRene Gollent fMessage = message; 84*862696d9SRene Gollent return B_OK; 856bfaef2bSRene Gollent } 86