Style cleanups

Usability fixes for preferences window


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13507 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
DarkWyrm 2005-07-06 19:31:17 +00:00
parent dd80de6b0d
commit ec87043e1a
6 changed files with 421 additions and 547 deletions

View File

@ -33,23 +33,19 @@
#include <Menu.h>
#include <MenuItem.h>
#include <PopUpMenu.h>
#include <TextControl.h>
#include <Beep.h>
#include <stdlib.h>
#include "AppearPrefView.h"
#include "MenuUtil.h"
#include "PrefHandler.h"
#include "TermWindow.h"
#include "TermConst.h"
#include "MenuUtil.h"
#include "TTextControl.h"
#define MAX_FONT_SIZE 32
#define MIN_FONT_SIZE 6
BPopUpMenu *MakeFontMenu(ulong msg, const char *defaultFontName);
BPopUpMenu *MakeSizeMenu(ulong msg, uint8 defaultSize);
AppearancePrefView::AppearancePrefView (BRect frame, const char *name,
TermWindow *window)
AppearancePrefView::AppearancePrefView (BRect frame, const char *name, TermWindow *window)
:PrefView (frame, name)
{
const char *color_tbl[]=
@ -64,139 +60,181 @@ AppearancePrefView::AppearancePrefView (BRect frame, const char *name,
};
fTermWindow = window;
mHalfFont = new BMenuField(BRect(0,0,220,20), "halffont", "Half Size Font", MakeFontMenu(MSG_HALF_FONT_CHANGED, gTermPref->getString(PREF_HALF_FONT_FAMILY)), B_WILL_DRAW);
AddChild(mHalfFont);
mHalfFont->SetDivider (120);
mHalfSize = new TTextControl(BRect(220, 0, 300, 20), "halfsize", "Size", "", new BMessage(MSG_HALF_SIZE_CHANGED));
AddChild(mHalfSize);
mHalfSize->SetText(gTermPref->getString(PREF_HALF_FONT_SIZE));
mHalfSize->SetDivider (50);
mFullFont = new BMenuField(BRect(0,30,220,50), "fullfont", "Full Size Font", MakeFontMenu(MSG_FULL_FONT_CHANGED, gTermPref->getString(PREF_FULL_FONT_FAMILY)), B_WILL_DRAW);
AddChild(mFullFont);
mFullFont->SetDivider (120);
float fontDividerSize = StringWidth("Half Size Font") + 15.0;
float sizeDividerSize = StringWidth("Size") + 15.0;
BRect r(5,5,225,25);
BMenu *menu = MakeFontMenu(MSG_HALF_FONT_CHANGED, gTermPref->getString(PREF_HALF_FONT_FAMILY));
fHalfFont = new BMenuField(r, "halffont", "Half Width Font", menu, B_WILL_DRAW);
AddChild(fHalfFont);
fHalfFont->SetDivider(fontDividerSize);
r.OffsetBy(r.Width() + 10, 0);
menu = MakeSizeMenu(MSG_HALF_SIZE_CHANGED, 12);
fHalfFontSize = new BMenuField(r, "halfsize", "Size", menu, B_WILL_DRAW);
fHalfFontSize->SetDivider(sizeDividerSize);
AddChild(fHalfFontSize);
r.OffsetBy(-r.Width() - 10,r.Height() + 5);
menu = MakeFontMenu(MSG_FULL_FONT_CHANGED, gTermPref->getString(PREF_FULL_FONT_FAMILY));
fFullFont = new BMenuField(r, "fullfont", "Full Width Font", menu, B_WILL_DRAW);
AddChild(fFullFont);
fFullFont->SetDivider(fontDividerSize);
mFullSize = new TTextControl(BRect(220, 30, 300, 50), "fullsize", "Size", "", new BMessage(MSG_FULL_SIZE_CHANGED));
AddChild(mFullSize);
mFullSize->SetText(gTermPref->getString(PREF_FULL_FONT_SIZE));
mFullSize->SetDivider (50);
mColorField = new BMenuField(BRect(0,60,200,80), NULL, NULL, MakeMenu (MSG_COLOR_FIELD_CHANGED, color_tbl, color_tbl[0]), B_WILL_DRAW);
AddChild(mColorField);
mColorCtl = SetupBColorControl(BPoint(20, 85), B_CELLS_32x8, 6, MSG_COLOR_CHANGED);
mColorCtl->SetValue(gTermPref->getRGB(PREF_TEXT_FORE_COLOR));
r.OffsetBy(r.Width() + 10, 0);
menu = MakeSizeMenu(MSG_FULL_SIZE_CHANGED, 12);
fFullFontSize = new BMenuField(r, "fullsize", "Size", menu, B_WILL_DRAW);
fFullFontSize->SetDivider(sizeDividerSize);
AddChild(fFullFontSize);
r.OffsetBy(-r.Width() - 10,r.Height() + 25);
fColorField = new BMenuField(r, NULL, NULL, MakeMenu (MSG_COLOR_FIELD_CHANGED, color_tbl, color_tbl[0]), B_WILL_DRAW);
AddChild(fColorField);
fColorCtl = SetupBColorControl(BPoint(r.left, r.bottom + 10), B_CELLS_32x8, 6,
MSG_COLOR_CHANGED);
fColorCtl->SetValue(gTermPref->getRGB(PREF_TEXT_FORE_COLOR));
}
void
AppearancePrefView::Revert (void)
{
mHalfSize->SetText (gTermPref->getString (PREF_HALF_FONT_SIZE));
mFullSize->SetText (gTermPref->getString (PREF_FULL_FONT_SIZE));
mColorField->Menu()->ItemAt(0)->SetMarked (true);
mColorCtl->SetValue (gTermPref->getRGB(PREF_TEXT_FORE_COLOR));
fColorField->Menu()->ItemAt(0)->SetMarked (true);
fColorCtl->SetValue (gTermPref->getRGB(PREF_TEXT_FORE_COLOR));
mHalfFont->Menu()->FindItem (gTermPref->getString(PREF_HALF_FONT_FAMILY))->SetMarked(true);
mFullFont->Menu()->FindItem (gTermPref->getString(PREF_FULL_FONT_FAMILY))->SetMarked(true);
return;
}
////////////////////////////////////////////////////////////////////////////
// SaveIfModified (void)
//
////////////////////////////////////////////////////////////////////////////
void
AppearancePrefView::SaveIfModified (void)
{
BMessenger messenger (fTermWindow);
if (mHalfSize->IsModified()) {
gTermPref->setString (PREF_HALF_FONT_SIZE, mHalfSize->Text());
messenger.SendMessage (MSG_HALF_SIZE_CHANGED);
mHalfSize->ModifiedText (false);
}
if (mFullSize->IsModified()) {
gTermPref->setString (PREF_FULL_FONT_SIZE, mFullSize->Text());
messenger.SendMessage (MSG_FULL_SIZE_CHANGED);
mFullSize->ModifiedText (false);
}
return;
fHalfFont->Menu()->FindItem (gTermPref->getString(PREF_HALF_FONT_FAMILY))->SetMarked(true);
fFullFont->Menu()->FindItem (gTermPref->getString(PREF_FULL_FONT_FAMILY))->SetMarked(true);
fHalfFontSize->Menu()->FindItem (gTermPref->getString(PREF_HALF_FONT_FAMILY))->SetMarked(true);
fFullFontSize->Menu()->FindItem (gTermPref->getString(PREF_FULL_FONT_FAMILY))->SetMarked(true);
}
void
AppearancePrefView::AttachedToWindow (void)
{
mHalfSize->SetTarget (this);
mFullSize->SetTarget (this);
mHalfFont->Menu()->SetTargetForItems(this);
mFullFont->Menu()->SetTargetForItems(this);
mColorCtl->SetTarget (this);
mColorField->Menu()->SetTargetForItems(this);
fHalfFontSize->Menu()->SetTargetForItems(this);
fFullFontSize->Menu()->SetTargetForItems(this);
fHalfFont->Menu()->SetTargetForItems(this);
fFullFont->Menu()->SetTargetForItems(this);
fColorCtl->SetTarget (this);
fColorField->Menu()->SetTargetForItems(this);
}
void
AppearancePrefView::MessageReceived (BMessage *msg)
{
bool modified = false;
int size;
switch (msg->what) {
case MSG_HALF_FONT_CHANGED:
gTermPref->setString (PREF_HALF_FONT_FAMILY, mHalfFont->Menu()->FindMarked()->Label());
modified = true;
break;
case MSG_HALF_SIZE_CHANGED:
size = atoi (mHalfSize->Text());
if (size > MAX_FONT_SIZE || size < MIN_FONT_SIZE) {
mHalfSize->SetText (gTermPref->getString (PREF_HALF_FONT_SIZE));
beep ();
} else {
gTermPref->setString (PREF_HALF_FONT_SIZE, mHalfSize->Text());
modified = true;
}
break;
case MSG_FULL_FONT_CHANGED:
gTermPref->setString (PREF_FULL_FONT_FAMILY, mFullFont->Menu()->FindMarked()->Label());
modified = true;
break;
case MSG_FULL_SIZE_CHANGED:
size = atoi (mHalfSize->Text());
if (size > MAX_FONT_SIZE || size < MIN_FONT_SIZE) {
mFullSize->SetText (gTermPref->getString (PREF_FULL_FONT_SIZE));
beep ();
} else {
gTermPref->setString (PREF_FULL_FONT_SIZE, mFullSize->Text());
}
modified = true;
break;
case MSG_COLOR_CHANGED:
gTermPref->setRGB(mColorField->Menu()->FindMarked()->Label(), mColorCtl->ValueAsColor());
modified = true;
break;
case MSG_COLOR_FIELD_CHANGED:
mColorCtl->SetValue(gTermPref->getRGB (mColorField->Menu()->FindMarked()->Label()));
break;
default:
PrefView::MessageReceived(msg);
return; // Oh !
}
if(modified){
fTermWindow->PostMessage (msg);
(this->Window())->PostMessage(MSG_PREF_MODIFIED);
}
switch (msg->what)
{
case MSG_HALF_FONT_CHANGED:
{
gTermPref->setString (PREF_HALF_FONT_FAMILY, fHalfFont->Menu()->FindMarked()->Label());
modified = true;
break;
}
case MSG_HALF_SIZE_CHANGED:
{
gTermPref->setString (PREF_HALF_FONT_SIZE, fHalfFontSize->Menu()->FindMarked()->Label());
modified = true;
break;
}
case MSG_FULL_FONT_CHANGED:
{
gTermPref->setString (PREF_FULL_FONT_FAMILY, fFullFont->Menu()->FindMarked()->Label());
modified = true;
break;
}
case MSG_FULL_SIZE_CHANGED:
{
gTermPref->setString (PREF_FULL_FONT_SIZE, fFullFontSize->Menu()->FindMarked()->Label());
modified = true;
break;
}
case MSG_COLOR_CHANGED:
{
gTermPref->setRGB(fColorField->Menu()->FindMarked()->Label(), fColorCtl->ValueAsColor());
modified = true;
break;
}
case MSG_COLOR_FIELD_CHANGED:
{
fColorCtl->SetValue(gTermPref->getRGB (fColorField->Menu()->FindMarked()->Label()));
break;
}
default:
{
PrefView::MessageReceived(msg);
return; // Oh !
}
}
if(modified)
{
fTermWindow->PostMessage(msg);
Window()->PostMessage(MSG_PREF_MODIFIED);
}
}
BPopUpMenu *
MakeFontMenu(ulong msg, const char *defaultFontName)
{
BPopUpMenu *menu = new BPopUpMenu("");
int32 numFamilies = count_font_families();
for ( int32 i = 0; i < numFamilies; i++ )
{
font_family family;
uint32 flags;
if ( get_font_family(i, &family, &flags) == B_OK )
{
menu->AddItem(new BMenuItem(family, new BMessage(msg)));
if(!strcmp(defaultFontName, family))
{
BMenuItem *item=menu->ItemAt(i);
item->SetMarked(true);
}
}
}
return menu;
}
BPopUpMenu *
MakeSizeMenu(ulong msg, uint8 defaultSize)
{
BPopUpMenu *menu = new BPopUpMenu("size");
BMenuItem *item;
for(uint8 i=9; i<13; i++)
{
BString string;
string << i;
item = new BMenuItem(string.String(), new BMessage(msg));
menu->AddItem(item);
if(i == defaultSize)
item->SetMarked(true);
}
item = new BMenuItem("14", new BMessage(msg));
menu->AddItem(item);
if(defaultSize == 14)
item->SetMarked(true);
item = new BMenuItem("16", new BMessage(msg));
menu->AddItem(item);
if(defaultSize == 16)
item->SetMarked(true);
return menu;
}

View File

@ -38,30 +38,24 @@ class TTextControl;
class AppearancePrefView : public PrefView
{
public:
AppearancePrefView(BRect r,
const char *name,
TermWindow *window);
public:
AppearancePrefView(BRect r, const char *name,
TermWindow *window);
virtual void Revert (void);
virtual void SaveIfModified (void);
virtual void MessageReceived (BMessage *);
virtual void AttachedToWindow (void);
virtual void Revert (void);
virtual void MessageReceived (BMessage *);
virtual void AttachedToWindow (void);
private:
TTextControl *mHalfSize;
TTextControl *mFullSize;
BMenuField *mHalfFont;
BMenuField *mFullFont;
BMenuField *mColorField;
BColorControl *mColorCtl;
int mSubMenu_button;
int mPaste_button;
TermWindow *fTermWindow;
private:
BMenuField *fHalfFont,
*fHalfFontSize,
*fFullFont,
*fFullFontSize;
BMenuField *fColorField;
BColorControl *fColorCtl;
TermWindow *fTermWindow;
};
#endif //AppearancePrefView_H_INCLUDED

View File

@ -44,132 +44,83 @@ extern PrefHandler *gTermPref;
#define LOCALE_FILE_DIR PREF_FOLDER"menu/"
//////////////////////////////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////////////
BPopUpMenu *
MakeFontMenu(ulong msg, const char *defaultFontName)
{
BPopUpMenu *menu = new BPopUpMenu("font");
int32 numFamilies = count_font_families();
for ( int32 i = 0; i < numFamilies; i++ ) {
font_family family;
uint32 flags;
if ( get_font_family(i, &family, &flags) == B_OK ) {
menu->AddItem(new BMenuItem(family, new BMessage(msg)));
if(!strcmp(defaultFontName, family)){
(menu->ItemAt(i))->SetMarked(true);
}
}
}
return menu;
}
//////////////////////////////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////////////
BPopUpMenu *
MakeMenu(ulong msg, const char **items, const char *defaultItemName)
{
BPopUpMenu *menu = new BPopUpMenu("");
int32 i = 0;
while(*items) {
menu->AddItem(new BMenuItem(*items, new BMessage(msg)));
if(!strcmp(*items, defaultItemName)){
(menu->ItemAt(i))->SetMarked(true);
}
items++;
i++;
}
return menu;
BPopUpMenu *menu = new BPopUpMenu("");
int32 i = 0;
while(*items)
{
menu->AddItem(new BMenuItem(*items, new BMessage(msg)));
if(!strcmp(*items, defaultItemName))
{
(menu->ItemAt(i))->SetMarked(true);
}
items++;
i++;
}
return menu;
}
////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////
int
longname2op(const char *longname)
{
int op = M_UTF8;
const etable *s = encoding_table;
for (int i = 0; s->name; s++, i++){
if(!strcmp(s->name, longname)) {
op = s->op;
break;
}
}
return op;
int op = M_UTF8;
const etable *s = encoding_table;
for (int i = 0; s->name; s++, i++)
{
if(!strcmp(s->name, longname))
{
op = s->op;
break;
}
}
return op;
}
////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////
const char*
const char *
op2longname(int op)
{
return encoding_table[op].name;
return encoding_table[op].name;
}
//////////////////////////////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////////////
void
MakeEncodingMenu(BMenu *eMenu, int coding, bool flag)
{
const etable *e = encoding_table;
int i = 0;
while(e->name){
BMessage *msg = new BMessage(MENU_ENCODING);
msg->AddInt32("op", (int32)e->op);
if (flag) {
eMenu->AddItem(new BMenuItem(e->name, msg, e->shortcut));
}
else {
eMenu->AddItem(new BMenuItem(e->name, msg));
}
if ( i == coding) {
(eMenu->ItemAt(i))->SetMarked(true);
}
e++;
i++;
}
const etable *e = encoding_table;
int i = 0;
while(e->name)
{
BMessage *msg = new BMessage(MENU_ENCODING);
msg->AddInt32("op", (int32)e->op);
if (flag)
eMenu->AddItem(new BMenuItem(e->name, msg, e->shortcut));
else
eMenu->AddItem(new BMenuItem(e->name, msg));
if ( i == coding)
{
(eMenu->ItemAt(i))->SetMarked(true);
}
e++;
i++;
}
}
//////////////////////////////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////////////
void
LoadLocaleFile (PrefHandler *pref)
LoadLocaleFile(PrefHandler *pref)
{
const char *locale;
char buf[B_PATH_NAME_LENGTH];
status_t sts;
/*
* Open menu localize file.
*/
locale = gTermPref->getString (PREF_GUI_LANGUAGE);
sprintf (buf, "%s%s", LOCALE_FILE_DIR, locale);
sts = pref->OpenText (buf);
if (sts == B_ERROR)
pref->OpenText (LOCALE_FILE_DEFAULT);
return;
const char *locale;
char buf[B_PATH_NAME_LENGTH];
status_t sts;
locale = gTermPref->getString (PREF_GUI_LANGUAGE);
sprintf (buf, "%s%s", LOCALE_FILE_DIR, locale);
sts = pref->OpenText (buf);
if (sts == B_ERROR)
pref->OpenText (LOCALE_FILE_DEFAULT);
}

View File

@ -41,15 +41,13 @@ class BPopUpMenu;
class BMenu;
class PrefHandler;
BPopUpMenu * MakeFontMenu(ulong msg, const char *defaultFontName);
BPopUpMenu * MakeMenu(ulong msg, const char **items,
const char *defaultItemName);
BPopUpMenu * MakeMenu(ulong msg, const char **items,
const char *defaultItemName);
int longname2op(const char *longname);
const char* op2longname(int op);
void MakeEncodingMenu(BMenu *eMenu, int coding, bool flag);
void LoadLocaleFile (PrefHandler *);
int longname2op(const char *longname);
const char * op2longname(int op);
void MakeEncodingMenu(BMenu *eMenu, int coding, bool flag);
void LoadLocaleFile (PrefHandler *);
#ifdef __cplusplus
}

View File

@ -29,7 +29,6 @@
*/
#include <Box.h>
#include <Button.h>
#include <TabView.h>
#include <FilePanel.h>
#include <Screen.h>
#include <Alert.h>
@ -44,306 +43,209 @@
#include "MenuUtil.h"
#include "AppearPrefView.h"
//#include "ShellPrefView.h"
#include "PrefView.h"
#include "spawn.h"
// Gloval Preference Handler
// Global Preference Handler
extern PrefHandler *gTermPref;
//////////////////////////////////////////////////////////////////////////////
// PrefDlg
// Constructer
//////////////////////////////////////////////////////////////////////////////
PrefDlg::PrefDlg(TermWindow *inWindow)
: BWindow(CenteredRect(BRect(0, 0, 350, 250)), "Preference",
B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
B_NOT_RESIZABLE|B_NOT_ZOOMABLE)
: BWindow(CenteredRect(BRect(0, 0, 350, 215)), "Preference",
B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
B_NOT_RESIZABLE|B_NOT_ZOOMABLE)
{
fTermWindow = inWindow;
fPrefTemp = new PrefHandler(gTermPref);
fDirty = false;
fSavePanel = NULL;
SetupContent();
Show();
AddShortcut ((ulong)'Q', (ulong)B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED));
AddShortcut ((ulong)'W', (ulong)B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED));
fTermWindow = inWindow;
fPrefTemp = new PrefHandler(gTermPref);
fDirty = false;
fSavePanel = NULL;
BRect r;
BView *top = new BView(Bounds(), "topview", B_FOLLOW_NONE, B_WILL_DRAW);
top->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
AddChild(top);
r=top->Bounds();
r.bottom *= .75;
AppearancePrefView *prefView= new AppearancePrefView(r, "Appearance",
fTermWindow);
top->AddChild(prefView);
fSaveAsFileButton = new BButton(BRect(0,0,1,1), "savebutton",
"Save to File",
new BMessage(MSG_SAVEAS_PRESSED),
B_FOLLOW_TOP, B_WILL_DRAW);
fSaveAsFileButton->ResizeToPreferred();
fSaveAsFileButton->MoveTo(5, top->Bounds().Height() - 5 -
fSaveAsFileButton->Bounds().Height());
top->AddChild(fSaveAsFileButton);
fSaveButton = new BButton(BRect(0,0,1,1), "okbutton", "OK",
new BMessage(MSG_SAVE_PRESSED), B_FOLLOW_TOP,
B_WILL_DRAW);
fSaveButton->ResizeToPreferred();
fSaveButton->MoveTo(top->Bounds().Width() - 5 - fSaveButton->Bounds().Width(),
top->Bounds().Height() - 5 - fSaveButton->Bounds().Height());
fSaveButton->MakeDefault(true);
top->AddChild(fSaveButton);
fRevertButton = new BButton(BRect(0,0,1,1), "revertbutton",
"Cancel", new BMessage(MSG_REVERT_PRESSED),
B_FOLLOW_TOP, B_WILL_DRAW);
fRevertButton->ResizeToPreferred();
fRevertButton->MoveTo(fSaveButton->Frame().left - 10 -
fRevertButton->Bounds().Width(),
top->Bounds().Height() - 5 -
fRevertButton->Bounds().Height());
top->AddChild(fRevertButton);
AddShortcut ((ulong)'Q', (ulong)B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED));
AddShortcut ((ulong)'W', (ulong)B_COMMAND_KEY, new BMessage(B_QUIT_REQUESTED));
Show();
}
//////////////////////////////////////////////////////////////////////////////
// PrefDlg
//////////////////////////////////////////////////////////////////////////////
PrefDlg::~PrefDlg (void)
{
}
//////////////////////////////////////////////////////////////////////////////
// SetupContent()
// Set up content of window.
//////////////////////////////////////////////////////////////////////////////
void
PrefDlg::SetupContent()
{
BRect r;
Lock();
BView *top = new BView(Bounds(), "topview", B_FOLLOW_NONE, B_WILL_DRAW);
top->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
AddChild (top);
//
// Tab View
//
r = top->Bounds();
r.bottom -= 40;
r.InsetBy (0, 5);
fTabView = new BTabView(r, "tab_view", B_WIDTH_FROM_WIDEST);
fTabView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
r = fTabView->Bounds();
r.InsetBy(10,10);
r.bottom -= fTabView->TabHeight();
fTabView->AddTab(new AppearancePrefView (r, "Appearance", fTermWindow));
// fTabView->AddTab(new ShellPrefView (r, "Shell", fTermWindow));
//
// OK, Apply and Cancel button.
//
fSaveAsFileButton = new BButton(BRect(50,215,150,20), "savebutton", "Save to File", new BMessage(MSG_SAVEAS_PRESSED), B_FOLLOW_TOP, B_WILL_DRAW);
top->AddChild(fSaveAsFileButton);
fRevertButton = new BButton(BRect(180,215,250,20), "revertbutton", "Cancel", new BMessage(MSG_REVERT_PRESSED), B_FOLLOW_TOP, B_WILL_DRAW);
top->AddChild(fRevertButton);
fSaveButton = new BButton(BRect(260,215,330,20), "okbutton", "OK", new BMessage(MSG_SAVE_PRESSED), B_FOLLOW_TOP, B_WILL_DRAW);
top->AddChild(fSaveButton);
top->AddChild (fTabView);
Unlock();
}
//////////////////////////////////////////////////////////////////////////////
// if OK button pressed
//
//////////////////////////////////////////////////////////////////////////////
void
PrefDlg::Quit()
{
fTermWindow->PostMessage(MSG_PREF_CLOSED);
delete fPrefTemp;
delete fSavePanel;
BWindow::Quit();
fTermWindow->PostMessage(MSG_PREF_CLOSED);
delete fPrefTemp;
delete fSavePanel;
BWindow::Quit();
}
//////////////////////////////////////////////////////////////////////////////
// QuitRequested
// if close box checked and perf is changed..
//////////////////////////////////////////////////////////////////////////////
bool
PrefDlg::QuitRequested ()
PrefDlg::QuitRequested()
{
if(!fDirty) return true;
BAlert *alert = new BAlert("",
"Save changes to this preference panel?",
"Cancel", "Don't Save",
"Save",
B_WIDTH_AS_USUAL,
B_OFFSET_SPACING,
B_WARNING_ALERT);
alert->SetShortcut(0, B_ESCAPE);
alert->SetShortcut(1, 'd');
alert->SetShortcut(2, 's');
int32 button_index = alert->Go();
switch (button_index) {
case 0: // Cancel
return false;
break;
case 2: // Save
this->doSave();
break;
case 1: // Don't Save
default:
break;
}
return true;
if(!fDirty)
return true;
BAlert *alert = new BAlert("", "Save changes to this preference panel?",
"Cancel", "Don't Save", "Save",
B_WIDTH_AS_USUAL, B_OFFSET_SPACING,
B_WARNING_ALERT);
alert->SetShortcut(0, B_ESCAPE);
alert->SetShortcut(1, 'd');
alert->SetShortcut(2, 's');
int32 button_index = alert->Go();
if(button_index==0)
return false;
else
if(button_index==2)
doSave();
return true;
}
//////////////////////////////////////////////////////////////////////////////
// if SaveAs button pressed
//
//////////////////////////////////////////////////////////////////////////////
void
PrefDlg::doSaveAs (void)
{
for (int32 i = 0; i < fTabView->CountTabs(); i++) {
// PrefView *aView = (PrefView *)fTabView->ViewForTab(i);
// aView->SaveIfModified ();
}
if(!fSavePanel){
fSavePanel = new BFilePanel(B_SAVE_PANEL, new BMessenger(this));
}
fSavePanel->Show();
if(!fSavePanel)
fSavePanel = new BFilePanel(B_SAVE_PANEL, new BMessenger(this));
fSavePanel->Show();
}
//////////////////////////////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////////////
void
PrefDlg::SaveRequested(BMessage *msg)
{
entry_ref dirref;
const char *filename;
msg->FindRef("directory", &dirref);
msg->FindString("name", &filename);
BDirectory dir(&dirref);
BPath path(&dir, filename);
gTermPref->SaveAsText (path.Path(), PREFFILE_MIMETYPE, TERM_SIGNATURE);
entry_ref dirref;
const char *filename;
msg->FindRef("directory", &dirref);
msg->FindString("name", &filename);
BDirectory dir(&dirref);
BPath path(&dir, filename);
gTermPref->SaveAsText (path.Path(), PREFFILE_MIMETYPE, TERM_SIGNATURE);
}
//////////////////////////////////////////////////////////////////////////////
// if OK button pressed
//
//////////////////////////////////////////////////////////////////////////////
void
PrefDlg::doSave (void)
{
for (int32 i = 0; i < fTabView->CountTabs(); i++) {
// PrefView *aView = (PrefView *)fTabView->ViewForTab(i);
// aView->SaveIfModified ();
}
delete fPrefTemp;
fPrefTemp = new PrefHandler (gTermPref);
gTermPref->SaveAsText (TERM_PREF, PREFFILE_MIMETYPE);
fDirty = false;
delete fPrefTemp;
fPrefTemp = new PrefHandler (gTermPref);
gTermPref->SaveAsText (TERM_PREF, PREFFILE_MIMETYPE);
fDirty = false;
}
//////////////////////////////////////////////////////////////////////////////
// if cancel button pressed
//
//////////////////////////////////////////////////////////////////////////////
void
PrefDlg::doRevert (void)
{
BMessenger messenger (fTermWindow);
delete gTermPref;
gTermPref = new PrefHandler (fPrefTemp);
messenger.SendMessage (MSG_HALF_FONT_CHANGED);
messenger.SendMessage (MSG_COLOR_CHANGED);
messenger.SendMessage (MSG_ROWS_CHANGED);
messenger.SendMessage (MSG_INPUT_METHOD_CHANGED);
this->DisableUpdates();
this->Lock();
for (int32 i = 0; i < fTabView->CountTabs(); i++) {
// PrefView *aView = (PrefView *)fTabView->ViewForTab(i);
// aView->Revert ();
}
this->Unlock();
this->EnableUpdates();
fDirty = false;
BMessenger messenger (fTermWindow);
delete gTermPref;
gTermPref = new PrefHandler (fPrefTemp);
messenger.SendMessage (MSG_HALF_FONT_CHANGED);
messenger.SendMessage (MSG_COLOR_CHANGED);
messenger.SendMessage (MSG_ROWS_CHANGED);
messenger.SendMessage (MSG_INPUT_METHOD_CHANGED);
fDirty = false;
}
//////////////////////////////////////////////////////////////////////////////
//
//
//////////////////////////////////////////////////////////////////////////////
void
PrefDlg::MessageReceived(BMessage *msg)
{
switch (msg->what) {
case MSG_SAVE_PRESSED:
doSave();
PostMessage(B_QUIT_REQUESTED);
break;
case MSG_SAVEAS_PRESSED:
doSaveAs();
break;
case MSG_REVERT_PRESSED:
doRevert();
PostMessage(B_QUIT_REQUESTED);
break;
case MSG_PREF_MODIFIED:
fDirty = true;
break;
case B_SAVE_REQUESTED:
this->SaveRequested(msg);
break;
default:
BWindow::MessageReceived(msg);
break;
}
switch (msg->what)
{
case MSG_SAVE_PRESSED:
{
doSave();
PostMessage(B_QUIT_REQUESTED);
break;
}
case MSG_SAVEAS_PRESSED:
{
doSaveAs();
break;
}
case MSG_REVERT_PRESSED:
{
doRevert();
PostMessage(B_QUIT_REQUESTED);
break;
}
case MSG_PREF_MODIFIED:
{
fDirty = true;
break;
}
case B_SAVE_REQUESTED:
{
SaveRequested(msg);
break;
}
default:
{
BWindow::MessageReceived(msg);
break;
}
}
}
//////////////////////////////////////////////////////////////////////////////
// SetupBox
// make Box
//////////////////////////////////////////////////////////////////////////////
BBox *
PrefDlg::SetupBox(BRect r, const char *label, BView *parent)
{
BBox *b;
b = new BBox(r);
b->SetLabel(label);
parent->AddChild(b);
return b;
}
//////////////////////////////////////////////////////////////////////////////
// SetupButton
// make Button
//////////////////////////////////////////////////////////////////////////////
//BButton *
//PrefDlg::SetupButton(BRect r, const char *label, ulong msg, BView *parent, bool defaultButton)
//{
// BButton *b;
//
// b = new BButton(r, "", label, new BMessage(msg));
// parent->AddChild(b);
//
// if (defaultButton)
// (parent->Window())->SetDefaultButton(b);
//
// return b;
//}
//////////////////////////////////////////////////////////////////////////////
// Ajust Input Rect to locate center of Screen.
// ( static member function. )
//////////////////////////////////////////////////////////////////////////////
BRect
PrefDlg::CenteredRect(BRect r)
{
BRect screenRect = BScreen().Frame();
screenRect.InsetBy(10,10);
float x = screenRect.left + (screenRect.Width() - r.Width()) / 2;
float y = screenRect.top + (screenRect.Height() - r.Height()) / 3;
r.OffsetTo(x, y);
return r;
BRect screenRect = BScreen().Frame();
screenRect.InsetBy(10,10);
float x = screenRect.left + (screenRect.Width() - r.Width()) / 2;
float y = screenRect.top + (screenRect.Height() - r.Height()) / 3;
r.OffsetTo(x, y);
return r;
}

View File

@ -55,38 +55,29 @@ class BFilePanel;
class PrefDlg : public BWindow
{
public:
PrefDlg(TermWindow *inWindow);
~PrefDlg ();
void Quit();
PrefDlg(TermWindow *inWindow);
~PrefDlg();
void Quit();
private:
void doSave (void);
void doSaveAs (void);
void doRevert (void);
void SaveRequested(BMessage *msg);
bool QuitRequested ();
void MessageReceived (BMessage *msg);
void SetupContent();
BBox* SetupBox(BRect r, const char *label, BView *parent);
BButton* SetupButton(BRect r, const char *label, ulong msg,
BView *parent, bool defaultButton=false);
static BRect CenteredRect(BRect r);
private:
TermWindow *fTermWindow;
BTabView *fTabView;
PrefHandler *fPrefTemp;
BFilePanel *fSavePanel;
BButton *fSaveAsFileButton;
BButton *fRevertButton;
BButton *fSaveButton;
bool fDirty;
void doSave (void);
void doSaveAs (void);
void doRevert (void);
void SaveRequested(BMessage *msg);
bool QuitRequested();
void MessageReceived (BMessage *msg);
static BRect CenteredRect(BRect r);
TermWindow *fTermWindow;
PrefHandler *fPrefTemp;
BFilePanel *fSavePanel;
BButton *fSaveAsFileButton,
*fRevertButton,
*fSaveButton;
bool fDirty;
};
#endif //PREFDLG_H_INCLUDED