1/* 2 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "SetTitleDialog.h" 8 9#include <Button.h> 10#include <Catalog.h> 11#include <LayoutBuilder.h> 12#include <TextControl.h> 13 14 15static const uint32 kMessageOK = 'okok'; 16static const uint32 kMessageDefault = 'dflt'; 17static const uint32 kMessageTitleChanged = 'chng'; 18 19 20#undef B_TRANSLATION_CONTEXT 21#define B_TRANSLATION_CONTEXT "Terminal SetTitleWindow" 22 23 24// #pragma mark - SetTitleDialog 25 26 27SetTitleDialog::SetTitleDialog(const char* dialogTitle, const char* label, 28 const char* toolTip) 29 : 30 BWindow(BRect(0, 0, 0, 0), dialogTitle, B_BORDERED_WINDOW_LOOK, 31 B_FLOATING_APP_WINDOW_FEEL, 32 B_AUTO_UPDATE_SIZE_LIMITS | B_CLOSE_ON_ESCAPE), 33 fListener(NULL), 34 fTitle(), 35 fOldTitleUserDefined(false), 36 fTitleUserDefined(false) 37{ 38 BLayoutBuilder::Group<>(this, B_VERTICAL) 39 .SetInsets(10, 10, 10, 10) 40 .Add(fTitleTextControl = new BTextControl("title", label, "", NULL)) 41 .AddGroup(B_HORIZONTAL) 42 .Add(fDefaultButton = new BButton("defaultButton", 43 B_TRANSLATE("Use default"), new BMessage(kMessageDefault))) 44 .AddGlue() 45 .Add(fCancelButton = new BButton("cancelButton", 46 B_TRANSLATE("Cancel"), new BMessage(B_QUIT_REQUESTED))) 47 .Add(fOKButton = new BButton("okButton", B_TRANSLATE("OK"), 48 new BMessage(kMessageOK))); 49 50 fTitleTextControl->SetToolTip(toolTip); 51 52 fOKButton->MakeDefault(true); 53 54 UpdateSizeLimits(); 55 // as a courtesy to our creator, who might want to place us 56} 57 58 59SetTitleDialog::~SetTitleDialog() 60{ 61 if (fListener != NULL) { 62 // reset to old title 63 fListener->TitleChanged(this, fOldTitle, fOldTitleUserDefined); 64 65 Listener* listener = fListener; 66 fListener = NULL; 67 listener->SetTitleDialogDone(this); 68 } 69} 70 71 72void 73SetTitleDialog::Go(const BString& title, bool titleUserDefined, 74 Listener* listener) 75{ 76 fTitle = fOldTitle = title; 77 fTitleUserDefined = fOldTitleUserDefined = titleUserDefined; 78 79 fDefaultButton->SetEnabled(titleUserDefined); 80 81 fTitleTextControl->SetText(fTitle); 82 fTitleTextControl->SetModificationMessage( 83 new BMessage(kMessageTitleChanged)); 84 fTitleTextControl->MakeFocus(true); 85 86 fListener = listener; 87 88 Show(); 89} 90 91 92void 93SetTitleDialog::Finish() 94{ 95 if (Listener* listener = fListener) { 96 fListener = NULL; 97 listener->SetTitleDialogDone(this); 98 } 99 100 PostMessage(B_QUIT_REQUESTED); 101} 102 103 104void 105SetTitleDialog::MessageReceived(BMessage* message) 106{ 107 switch (message->what) { 108 case kMessageDefault: 109 if (fListener != NULL) 110 fListener->TitleChanged(this, BString(), false); 111 // We're done now, fall through... 112 113 case kMessageOK: 114 Finish(); 115 break; 116 117 case kMessageTitleChanged: 118 fTitle = fTitleTextControl->Text(); 119 fTitleUserDefined = true; 120 121 fDefaultButton->SetEnabled(true); 122 123 if (fListener != NULL) 124 fListener->TitleChanged(this, fTitle, fTitleUserDefined); 125 break; 126 127 default: 128 BWindow::MessageReceived(message); 129 break; 130 } 131 132} 133 134 135// #pragma mark - SetTitleDialog 136 137 138SetTitleDialog::Listener::~Listener() 139{ 140} 141