* Copyright 2014-2016, Rene Gollent, rene@gollent.com.
* Distributed under the terms of the MIT License.
*/
#include "ExpressionPromptWindow.h"
#include <Button.h>
#include <LayoutBuilder.h>
#include <String.h>
#include <TextControl.h>
#include "AppMessageCodes.h"
ExpressionPromptWindow::ExpressionPromptWindow(BHandler* addTarget,
BHandler* closeTarget)
:
BWindow(BRect(), "Add Expression", B_FLOATING_WINDOW,
B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE),
fExpressionInput(NULL),
fCancelButton(NULL),
fAddButton(NULL),
fAddTarget(addTarget),
fCloseTarget(closeTarget)
{
}
ExpressionPromptWindow::~ExpressionPromptWindow()
{
}
ExpressionPromptWindow*
ExpressionPromptWindow::Create(BHandler* addTarget, BHandler* closeTarget)
{
ExpressionPromptWindow* self = new ExpressionPromptWindow(addTarget,
closeTarget);
try {
self->_Init();
} catch (...) {
delete self;
throw;
}
return self;
}
void
ExpressionPromptWindow::_Init()
{
fExpressionInput = new BTextControl("Expression:", NULL, NULL);
BLayoutItem* labelItem = fExpressionInput->CreateLabelLayoutItem();
BLayoutItem* inputItem = fExpressionInput->CreateTextViewLayoutItem();
inputItem->SetExplicitMinSize(BSize(200.0, B_SIZE_UNSET));
inputItem->SetExplicitMaxSize(BSize(B_SIZE_UNLIMITED, B_SIZE_UNSET));
labelItem->View()->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
BLayoutBuilder::Group<>(this, B_VERTICAL)
.SetInsets(B_USE_DEFAULT_SPACING)
.AddGroup(B_HORIZONTAL, 4.0f)
.Add(labelItem)
.Add(inputItem)
.End()
.AddGroup(B_HORIZONTAL, 4.0f)
.AddGlue()
.Add((fCancelButton = new BButton("Cancel",
new BMessage(B_QUIT_REQUESTED))))
.Add((fAddButton = new BButton("Add",
new BMessage(MSG_ADD_NEW_EXPRESSION))))
.End();
fExpressionInput->SetTarget(this);
fCancelButton->SetTarget(this);
fAddButton->SetTarget(this);
fAddButton->MakeDefault(true);
fExpressionInput->TextView()->MakeFocus(true);
}
void
ExpressionPromptWindow::Show()
{
CenterOnScreen();
BWindow::Show();
}
bool
ExpressionPromptWindow::QuitRequested()
{
BMessenger messenger(fCloseTarget);
messenger.SendMessage(MSG_EXPRESSION_PROMPT_WINDOW_CLOSED);
return BWindow::QuitRequested();
}
void
ExpressionPromptWindow::MessageReceived(BMessage* message)
{
switch (message->what) {
case MSG_ADD_NEW_EXPRESSION:
{
BMessage addMessage(MSG_ADD_NEW_EXPRESSION);
addMessage.AddString("expression", fExpressionInput->Text());
addMessage.AddBool("persistent", true);
BMessenger(fAddTarget).SendMessage(&addMessage);
PostMessage(B_QUIT_REQUESTED);
break;
}
default:
BWindow::MessageReceived(message);
break;
}
}