/* * Copyright 2007-2009, Haiku, Inc. All rights reserved. * Copyright 2003-2004 Kian Duffy, myob@users.sourceforge.net * Parts Copyright 1998-1999 Kazuho Okui and Takashi Murai. * All rights reserved. Distributed under the terms of the MIT license. */ #include "AppearPrefView.h" #include "PrefHandler.h" #include "PrefWindow.h" #include "TermConst.h" #include #include #include #include #include #include #include #include #include #include #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "Terminal PrefWindow" PrefWindow::PrefWindow(const BMessenger& messenger) : BWindow(BRect(0, 0, 375, 185), "Terminal settings", B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS), fPreviousPref(new PrefHandler(PrefHandler::Default())), fSavePanel(NULL), fDirty(false), fTerminalMessenger(messenger) { BString app = B_TRANSLATE_SYSTEM_NAME("Terminal"); BString title = B_TRANSLATE_COMMENT("%app% settings", "window title"); title.ReplaceFirst("%app%", app); SetTitle(title); BLayoutBuilder::Group<>(this, B_VERTICAL) .AddGroup(B_VERTICAL) .SetInsets(B_USE_WINDOW_SPACING) .Add(fAppearanceView = new AppearancePrefView( B_TRANSLATE("Appearance"), fTerminalMessenger)) .AddGroup(B_HORIZONTAL) .Add(fDefaultsButton = new BButton("defaultsbutton", B_TRANSLATE("Defaults"), new BMessage(MSG_DEFAULTS_PRESSED), B_WILL_DRAW)) .Add(fRevertButton = new BButton("revertbutton", B_TRANSLATE("Revert"), new BMessage(MSG_REVERT_PRESSED), B_WILL_DRAW)) .AddGlue() .Add(fSaveAsFileButton = new BButton("savebutton", B_TRANSLATE("Save to file" B_UTF8_ELLIPSIS), new BMessage(MSG_SAVEAS_PRESSED), B_WILL_DRAW)) .End() .End(); fRevertButton->SetEnabled(fDirty); AddShortcut('Q', B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED)); AddShortcut('W', B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED)); CenterOnScreen(); Show(); } PrefWindow::~PrefWindow() { } void PrefWindow::Quit() { fTerminalMessenger.SendMessage(MSG_PREF_CLOSED); delete fPreviousPref; delete fSavePanel; BWindow::Quit(); } bool PrefWindow::QuitRequested() { if (fDirty) _Save(); return true; } void PrefWindow::_SaveAs() { if (!fSavePanel) { BMessenger messenger(this); fSavePanel = new BFilePanel(B_SAVE_PANEL, &messenger); } fSavePanel->Show(); } void PrefWindow::_SaveRequested(BMessage *msg) { entry_ref dirref; const char* filename; msg->FindRef("directory", &dirref); msg->FindString("name", &filename); BDirectory dir(&dirref); BPath path(&dir, filename); PrefHandler::Default()->SaveAsText(path.Path(), PREFFILE_MIMETYPE, TERM_SIGNATURE); } void PrefWindow::_Save() { delete fPreviousPref; fPreviousPref = new PrefHandler(PrefHandler::Default()); PrefHandler::Default()->SaveDefaultAsText(); fDirty = false; } void PrefWindow::_Revert() { if (fDirty) { PrefHandler::SetDefault(new PrefHandler(fPreviousPref)); fTerminalMessenger.SendMessage(MSG_HALF_FONT_CHANGED); fTerminalMessenger.SendMessage(MSG_COLOR_CHANGED); fTerminalMessenger.SendMessage(MSG_TAB_TITLE_SETTING_CHANGED); fTerminalMessenger.SendMessage(MSG_WINDOW_TITLE_SETTING_CHANGED); fAppearanceView->Revert(); fDirty = false; fRevertButton->SetEnabled(fDirty); } } void PrefWindow::MessageReceived(BMessage* msg) { switch (msg->what) { case MSG_SAVEAS_PRESSED: _SaveAs(); break; case MSG_REVERT_PRESSED: _Revert(); break; case MSG_DEFAULTS_PRESSED: PrefHandler::SetDefault(new PrefHandler(false)); fTerminalMessenger.SendMessage(MSG_HALF_FONT_CHANGED); fTerminalMessenger.SendMessage(MSG_COLOR_CHANGED); fTerminalMessenger.SendMessage(MSG_TAB_TITLE_SETTING_CHANGED); fTerminalMessenger.SendMessage(MSG_WINDOW_TITLE_SETTING_CHANGED); fAppearanceView->Revert(); // fallthrough case MSG_PREF_MODIFIED: fDirty = true; fRevertButton->SetEnabled(fDirty); break; case B_SAVE_REQUESTED: _SaveRequested(msg); break; default: BWindow::MessageReceived(msg); break; } }