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