97 lines
1.9 KiB
C++
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;
|
|
}
|