xref: /haiku/src/kits/shared/PromptWindow.cpp (revision 862696d9bb4bec6a362a10406a5d2611961132b5)
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