haiku/src/kits/shared/PromptWindow.cpp
2013-05-05 08:55:13 -04:00

97 lines
1.9 KiB
C++

/*
* Copyright 2012-2013, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
#include "PromptWindow.h"
#include <Button.h>
#include <Catalog.h>
#include <LayoutBuilder.h>
#include <StringView.h>
#include <TextControl.h>
static const uint32 kAcceptInput = 'acin';
PromptWindow::PromptWindow(const char* title, const char* label,
const char* info, BMessenger target, BMessage* message)
:
BWindow(BRect(), title, B_FLOATING_WINDOW, B_NOT_RESIZABLE
| B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE),
fTarget(target),
fMessage(message)
{
fInfoView = new BStringView("info", info);
fTextControl = new BTextControl("promptcontrol", label, NULL,
new BMessage(kAcceptInput));
BButton* cancelButton = new BButton("Cancel", new
BMessage(B_QUIT_REQUESTED));
BButton* acceptButton = new BButton("Accept", new
BMessage(kAcceptInput));
BLayoutBuilder::Group<>(this, B_VERTICAL)
.SetInsets(B_USE_DEFAULT_SPACING)
.Add(fInfoView)
.Add(fTextControl)
.AddGroup(B_HORIZONTAL)
.AddGlue()
.Add(cancelButton)
.Add(acceptButton)
.End()
.End();
if (info == NULL)
fInfoView->Hide();
fTextControl->TextView()->SetExplicitMinSize(BSize(200.0, B_SIZE_UNSET));
fTextControl->SetTarget(this);
acceptButton->SetTarget(this);
cancelButton->SetTarget(this);
fTextControl->MakeFocus(true);
SetDefaultButton(acceptButton);
}
PromptWindow::~PromptWindow()
{
delete fMessage;
}
void
PromptWindow::MessageReceived(BMessage* message)
{
switch (message->what)
{
case kAcceptInput:
{
fMessage->AddString("text", fTextControl->TextView()->Text());
fTarget.SendMessage(fMessage);
PostMessage(B_QUIT_REQUESTED);
}
default:
{
BWindow::MessageReceived(message);
break;
}
}
}
status_t
PromptWindow::SetTarget(BMessenger messenger)
{
fTarget = messenger;
return B_OK;
}
status_t
PromptWindow::SetMessage(BMessage* message)
{
delete fMessage;
fMessage = message;
return B_OK;
}