141 lines
2.9 KiB
C++
141 lines
2.9 KiB
C++
/*
|
|
* Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
|
|
|
|
#include "SetTitleDialog.h"
|
|
|
|
#include <Button.h>
|
|
#include <Catalog.h>
|
|
#include <LayoutBuilder.h>
|
|
#include <TextControl.h>
|
|
|
|
|
|
static const uint32 kMessageOK = 'okok';
|
|
static const uint32 kMessageDefault = 'dflt';
|
|
static const uint32 kMessageTitleChanged = 'chng';
|
|
|
|
|
|
#undef B_TRANSLATION_CONTEXT
|
|
#define B_TRANSLATION_CONTEXT "Terminal SetTitleWindow"
|
|
|
|
|
|
// #pragma mark - SetTitleDialog
|
|
|
|
|
|
SetTitleDialog::SetTitleDialog(const char* dialogTitle, const char* label,
|
|
const char* toolTip)
|
|
:
|
|
BWindow(BRect(0, 0, 0, 0), dialogTitle, B_BORDERED_WINDOW_LOOK,
|
|
B_FLOATING_APP_WINDOW_FEEL,
|
|
B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE),
|
|
fListener(NULL),
|
|
fTitle(),
|
|
fOldTitleUserDefined(false),
|
|
fTitleUserDefined(false)
|
|
{
|
|
BLayoutBuilder::Group<>(this, B_VERTICAL)
|
|
.SetInsets(10, 10, 10, 10)
|
|
.Add(fTitleTextControl = new BTextControl("title", label, "", NULL))
|
|
.AddGroup(B_HORIZONTAL)
|
|
.Add(fDefaultButton = new BButton("defaultButton",
|
|
B_TRANSLATE("Use default"), new BMessage(kMessageDefault)))
|
|
.AddGlue()
|
|
.Add(fCancelButton = new BButton("cancelButton",
|
|
B_TRANSLATE("Cancel"), new BMessage(B_QUIT_REQUESTED)))
|
|
.Add(fOKButton = new BButton("okButton", B_TRANSLATE("OK"),
|
|
new BMessage(kMessageOK)));
|
|
|
|
fTitleTextControl->SetToolTip(toolTip);
|
|
|
|
fOKButton->MakeDefault(true);
|
|
|
|
UpdateSizeLimits();
|
|
// as a courtesy to our creator, who might want to place us
|
|
}
|
|
|
|
|
|
SetTitleDialog::~SetTitleDialog()
|
|
{
|
|
if (fListener != NULL) {
|
|
// reset to old title
|
|
fListener->TitleChanged(this, fOldTitle, fOldTitleUserDefined);
|
|
|
|
Listener* listener = fListener;
|
|
fListener = NULL;
|
|
listener->SetTitleDialogDone(this);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
SetTitleDialog::Go(const BString& title, bool titleUserDefined,
|
|
Listener* listener)
|
|
{
|
|
fTitle = fOldTitle = title;
|
|
fTitleUserDefined = fOldTitleUserDefined = titleUserDefined;
|
|
|
|
fDefaultButton->SetEnabled(titleUserDefined);
|
|
|
|
fTitleTextControl->SetText(fTitle);
|
|
fTitleTextControl->SetModificationMessage(
|
|
new BMessage(kMessageTitleChanged));
|
|
fTitleTextControl->MakeFocus(true);
|
|
|
|
fListener = listener;
|
|
|
|
Show();
|
|
}
|
|
|
|
|
|
void
|
|
SetTitleDialog::Finish()
|
|
{
|
|
if (Listener* listener = fListener) {
|
|
fListener = NULL;
|
|
listener->SetTitleDialogDone(this);
|
|
}
|
|
|
|
PostMessage(B_QUIT_REQUESTED);
|
|
}
|
|
|
|
|
|
void
|
|
SetTitleDialog::MessageReceived(BMessage* message)
|
|
{
|
|
switch (message->what) {
|
|
case kMessageDefault:
|
|
if (fListener != NULL)
|
|
fListener->TitleChanged(this, BString(), false);
|
|
// We're done now, fall through...
|
|
|
|
case kMessageOK:
|
|
Finish();
|
|
break;
|
|
|
|
case kMessageTitleChanged:
|
|
fTitle = fTitleTextControl->Text();
|
|
fTitleUserDefined = true;
|
|
|
|
fDefaultButton->SetEnabled(true);
|
|
|
|
if (fListener != NULL)
|
|
fListener->TitleChanged(this, fTitle, fTitleUserDefined);
|
|
break;
|
|
|
|
default:
|
|
BWindow::MessageReceived(message);
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// #pragma mark - SetTitleDialog
|
|
|
|
|
|
SetTitleDialog::Listener::~Listener()
|
|
{
|
|
}
|