Window size is now saved into preferences. This resolves bug #42

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18429 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
DarkWyrm
2006-08-07 13:57:30 +00:00
parent 1920c5bc7d
commit 464b524b93
+258 -277
View File
@@ -123,6 +123,7 @@ TermWindow::InitWindow(void)
// Initialize TermView. (font, size and color) // Initialize TermView. (font, size and color)
fTermView->SetTermFont(&halfFont, &fullFont); fTermView->SetTermFont(&halfFont, &fullFont);
BRect rect = fTermView->SetTermSize(gTermPref->getInt32(PREF_ROWS), BRect rect = fTermView->SetTermSize(gTermPref->getInt32(PREF_ROWS),
gTermPref->getInt32(PREF_COLS), 1); gTermPref->getInt32(PREF_COLS), 1);
@@ -191,37 +192,33 @@ TermWindow::MenusBeginning(void)
void void
TermWindow::SetupMenu(void) TermWindow::SetupMenu(void)
{ {
PrefHandler menuText; PrefHandler menuText;
LoadLocaleFile (&menuText); LoadLocaleFile (&menuText);
// Menu bar object. // Menu bar object.
fMenubar = new BMenuBar(Bounds(), "mbar"); fMenubar = new BMenuBar(Bounds(), "mbar");
/* // Make File Menu.
* Make File Menu. fFilemenu = new BMenu("Terminal");
*/ fFilemenu->AddItem(new BMenuItem("Switch Terminals", new BMessage(MENU_SWITCH_TERM),'G'));
fFilemenu = new BMenu("Terminal"); fFilemenu->AddItem(new BMenuItem("Start New Terminal", new BMessage(MENU_NEW_TERM), 'N'));
fFilemenu->AddItem(new BMenuItem("Switch Terminals", new BMessage(MENU_SWITCH_TERM),'G')); fFilemenu->AddSeparatorItem();
fFilemenu->AddItem(new BMenuItem("Start New Terminal", new BMessage(MENU_NEW_TERM), 'N')); fFilemenu->AddItem(new BMenuItem("Page Setup...", new BMessage(MENU_PAGE_SETUP)));
fFilemenu->AddSeparatorItem(); fFilemenu->AddItem(new BMenuItem("Print", new BMessage(MENU_PRINT),'P'));
fFilemenu->AddItem(new BMenuItem("Page Setup...", new BMessage(MENU_PAGE_SETUP))); fFilemenu->AddSeparatorItem();
fFilemenu->AddItem(new BMenuItem("Print", new BMessage(MENU_PRINT),'P')); fFilemenu->AddItem(new BMenuItem("About Terminal...", new BMessage(B_ABOUT_REQUESTED)));
fFilemenu->AddSeparatorItem(); fFilemenu->AddSeparatorItem();
fFilemenu->AddItem(new BMenuItem("About Terminal...", new BMessage(B_ABOUT_REQUESTED))); fFilemenu->AddItem(new BMenuItem("Quit", new BMessage(MENU_FILE_QUIT), 'Q'));
fFilemenu->AddSeparatorItem(); fMenubar->AddItem(fFilemenu);
fFilemenu->AddItem(new BMenuItem("Quit", new BMessage(MENU_FILE_QUIT), 'Q'));
fMenubar->AddItem(fFilemenu); // Make Edit Menu.
fEditmenu = new BMenu ("Edit");
/* fEditmenu->AddItem (new BMenuItem ("Copy", new BMessage (B_COPY),'C'));
* Make Edit Menu. fEditmenu->AddItem (new BMenuItem ("Paste", new BMessage (B_PASTE),'V'));
*/ fEditmenu->AddSeparatorItem ();
fEditmenu = new BMenu ("Edit"); fEditmenu->AddItem (new BMenuItem ("Select All", new BMessage (B_SELECT_ALL), 'A'));
fEditmenu->AddItem (new BMenuItem ("Copy", new BMessage (B_COPY),'C')); fEditmenu->AddItem (new BMenuItem ("Clear All", new BMessage (MENU_CLEAR_ALL), 'L'));
fEditmenu->AddItem (new BMenuItem ("Paste", new BMessage (B_PASTE),'V'));
fEditmenu->AddSeparatorItem ();
fEditmenu->AddItem (new BMenuItem ("Select All", new BMessage (B_SELECT_ALL), 'A'));
fEditmenu->AddItem (new BMenuItem ("Clear All", new BMessage (MENU_CLEAR_ALL), 'L'));
/* /*
// TODO: Implement Finding // TODO: Implement Finding
@@ -231,18 +228,15 @@ TermWindow::SetupMenu(void)
*/ */
fMenubar->AddItem (fEditmenu); fMenubar->AddItem (fEditmenu);
// Make Help Menu.
/*
* Make Help Menu.
*/
fHelpmenu = new BMenu("Settings"); fHelpmenu = new BMenu("Settings");
fWindowSizeMenu = new BMenu("Window Size"); fWindowSizeMenu = new BMenu("Window Size");
fWindowSizeMenu->AddItem(new BMenuItem("80x24", new BMessage(EIGHTYTWENTYFOUR))); fWindowSizeMenu->AddItem(new BMenuItem("80x24", new BMessage(EIGHTYTWENTYFOUR)));
fWindowSizeMenu->AddItem(new BMenuItem("80x25", new BMessage(EIGHTYTWENTYFIVE))); fWindowSizeMenu->AddItem(new BMenuItem("80x25", new BMessage(EIGHTYTWENTYFIVE)));
fWindowSizeMenu->AddItem(new BMenuItem("80x40", new BMessage(EIGHTYFORTY))); fWindowSizeMenu->AddItem(new BMenuItem("80x40", new BMessage(EIGHTYFORTY)));
fWindowSizeMenu->AddItem(new BMenuItem("132x24", new BMessage(ONETHREETWOTWENTYFOUR))); fWindowSizeMenu->AddItem(new BMenuItem("132x24", new BMessage(ONETHREETWOTWENTYFOUR)));
fWindowSizeMenu->AddItem(new BMenuItem("132x25", new BMessage(ONETHREETWOTWENTYFIVE))); fWindowSizeMenu->AddItem(new BMenuItem("132x25", new BMessage(ONETHREETWOTWENTYFIVE)));
fWindowSizeMenu->AddItem(new BMenuItem("Fullscreen", new BMessage(FULLSCREEN), B_ENTER)); fWindowSizeMenu->AddItem(new BMenuItem("Fullscreen", new BMessage(FULLSCREEN), B_ENTER));
// Considering we have this in the preferences window, this menu is not // Considering we have this in the preferences window, this menu is not
// needed and should not be shown if we are to not confuse the user // needed and should not be shown if we are to not confuse the user
@@ -271,7 +265,7 @@ TermWindow::SetupMenu(void)
fHelpmenu->AddSeparatorItem(); fHelpmenu->AddSeparatorItem();
fHelpmenu->AddItem(new BMenuItem("Save as default", new BMessage(SAVE_AS_DEFAULT))); fHelpmenu->AddItem(new BMenuItem("Save as default", new BMessage(SAVE_AS_DEFAULT)));
fMenubar->AddItem(fHelpmenu); fMenubar->AddItem(fHelpmenu);
AddChild(fMenubar); AddChild(fMenubar);
} }
@@ -284,233 +278,223 @@ TermWindow::MessageReceived(BMessage *message)
BFont halfFont; BFont halfFont;
BFont fullFont; BFont fullFont;
switch (message->what) { switch (message->what) {
case MENU_SWITCH_TERM: {
case MENU_SWITCH_TERM: be_app->PostMessage(MENU_SWITCH_TERM);
be_app->PostMessage(MENU_SWITCH_TERM); break;
break; }
case MENU_NEW_TERM: {
case MENU_NEW_TERM: { app_info info;
app_info info; be_app->GetAppInfo(&info);
be_app->GetAppInfo(&info);
// try launching two different ways to work around possible problems
// try launching two different ways to work around possible problems if (be_roster->Launch(&info.ref)!=B_OK)
if (be_roster->Launch(&info.ref)!=B_OK) be_roster->Launch(TERM_SIGNATURE);
be_roster->Launch(TERM_SIGNATURE); break;
} }
break; case MENU_PREF_OPEN: {
if (!fPrefWindow)
case MENU_PREF_OPEN: fPrefWindow = new PrefDlg(this);
if (!fPrefWindow){ else
fPrefWindow = new PrefDlg(this); fPrefWindow->Activate();
}else{ break;
fPrefWindow->Activate(); }
} case MSG_PREF_CLOSED: {
break; fPrefWindow = NULL;
break;
case MSG_PREF_CLOSED: }
fPrefWindow = NULL; case MENU_FILE_QUIT: {
break; be_app->PostMessage(B_QUIT_REQUESTED);
break;
case MENU_FILE_QUIT: }
be_app->PostMessage(B_QUIT_REQUESTED); case MENU_ENCODING: {
break; message->FindInt32 ("op", &coding_id);
case MENU_ENCODING: gNowCoding = coding_id;
message->FindInt32 ("op", &coding_id); SetCoding(coding_id);
gNowCoding = coding_id; break;
SetCoding(coding_id); }
break; // Extended B_SET_PROPERTY. Dispatch this message,
// Set coding ID.
/* case B_SET_PROPERTY: {
* Extended B_SET_PROPERTY. Dispatch this message, int32 i;
* Set coding ID. BMessage spe;
*/ message->GetCurrentSpecifier(&i, &spe);
case B_SET_PROPERTY: if (!strcmp("encode", spe.FindString("property", i))){
{ message->FindInt32 ("data", &coding_id);
int32 i; gNowCoding = coding_id;
BMessage spe; SetCoding (coding_id);
message->GetCurrentSpecifier(&i, &spe);
if (!strcmp("encode", spe.FindString("property", i))){ message->SendReply(B_REPLY);
message->FindInt32 ("data", &coding_id); } else {
gNowCoding = coding_id; BWindow::MessageReceived(message);
SetCoding (coding_id); }
break;
message->SendReply(B_REPLY); }
}else{
BWindow::MessageReceived(message); // Extended B_GET_PROPERTY. Dispatch this message, reply now coding ID.
} case B_GET_PROPERTY: {
break; int32 i;
} BMessage spe;
message->GetCurrentSpecifier(&i, &spe);
/* if (!strcmp("encode", spe.FindString("property", i))){
* Extended B_GET_PROPERTY. Dispatch this message, BMessage reply(B_REPLY);
* reply now coding ID. reply.AddInt32("result", gNowCoding);
*/ message->SendReply(&reply);
case B_GET_PROPERTY: }
{ else if (!strcmp("tty", spe.FindString("property", i))) {
int32 i; BMessage reply(B_REPLY);
BMessage spe; reply.AddString("result", &tty_name[8]);
message->GetCurrentSpecifier(&i, &spe); message->SendReply(&reply);
if (!strcmp("encode", spe.FindString("property", i))){ } else {
BMessage reply(B_REPLY); BWindow::MessageReceived(message);
reply.AddInt32("result", gNowCoding); }
message->SendReply(&reply); break;
}else if (!strcmp("tty", spe.FindString("property", i))){
BMessage reply(B_REPLY);
reply.AddString("result", &tty_name[8]);
message->SendReply(&reply);
}else{
BWindow::MessageReceived(message);
}
break;
}
/*
* Message from Preference panel.
*/
case MSG_ROWS_CHANGED:
case MSG_COLS_CHANGED:
r = fTermView->SetTermSize (gTermPref->getInt32 (PREF_ROWS),
gTermPref->getInt32 (PREF_COLS),
0);
ResizeTo (r.Width()+ B_V_SCROLL_BAR_WIDTH + VIEW_OFFSET * 2,
r.Height()+fMenubar->Bounds().Height() + VIEW_OFFSET *2);
break;
case MSG_HALF_FONT_CHANGED:
case MSG_FULL_FONT_CHANGED:
case MSG_HALF_SIZE_CHANGED:
case MSG_FULL_SIZE_CHANGED:
halfFont.SetFamilyAndStyle (gTermPref->getString(PREF_HALF_FONT_FAMILY),
NULL);
halfFont.SetSize (gTermPref->getFloat(PREF_HALF_FONT_SIZE));
halfFont.SetSpacing (B_FIXED_SPACING);
fullFont.SetFamilyAndStyle (gTermPref->getString(PREF_FULL_FONT_FAMILY),
NULL);
fullFont.SetSize (gTermPref->getFloat(PREF_FULL_FONT_SIZE));
fullFont.SetSpacing (B_FIXED_SPACING);
fTermView->SetTermFont (&halfFont, &fullFont);
r = fTermView->SetTermSize (0, 0, 0);
int width, height;
fTermView->GetFontSize (&width, &height);
SetSizeLimits (MIN_COLS * width, MAX_COLS * width,
MIN_COLS * height, MAX_COLS * height);
ResizeTo (r.Width()+ B_V_SCROLL_BAR_WIDTH + VIEW_OFFSET * 2,
r.Height()+fMenubar->Bounds().Height() + VIEW_OFFSET * 2);
fTermView->Invalidate();
break;
case EIGHTYTWENTYFOUR:
gTermPref->setString(PREF_COLS, "80");
gTermPref->setString(PREF_ROWS, "24");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
case EIGHTYTWENTYFIVE:
gTermPref->setString(PREF_COLS, "80");
gTermPref->setString(PREF_ROWS, "25");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
case EIGHTYFORTY:
gTermPref->setString(PREF_COLS, "80");
gTermPref->setString(PREF_ROWS, "40");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
case ONETHREETWOTWENTYFOUR:
gTermPref->setString(PREF_COLS, "132");
gTermPref->setString(PREF_ROWS, "24");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
case ONETHREETWOTWENTYFIVE:
gTermPref->setString(PREF_COLS, "132");
gTermPref->setString(PREF_ROWS, "25");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
case FULLSCREEN:
if (!fSavedFrame.IsValid()) { // go fullscreen
float mbHeight = fMenubar->Bounds().Height() + 1;
fSavedFrame = Frame();
BScreen screen(this);
fTermView->ScrollBar()->Hide();
fMenubar->Hide();
fBaseView->MoveTo(0,0);
fBaseView->ResizeBy(B_V_SCROLL_BAR_WIDTH, mbHeight);
fSavedLook = Look();
// done before ResizeTo to work around a Dano bug (not erasing the decor)
SetLook(B_NO_BORDER_WINDOW_LOOK);
ResizeTo(screen.Frame().Width()+1, screen.Frame().Height()+1);
MoveTo(screen.Frame().left, screen.Frame().top);
} else { // exit fullscreen
float mbHeight = fMenubar->Bounds().Height() + 1;
fMenubar->Show();
fTermView->ScrollBar()->Show();
ResizeTo(fSavedFrame.Width(), fSavedFrame.Height());
MoveTo(fSavedFrame.left, fSavedFrame.top);
fBaseView->ResizeBy(-B_V_SCROLL_BAR_WIDTH, -mbHeight);
fBaseView->MoveTo(0,mbHeight);
SetLook(fSavedLook);
fSavedFrame = BRect(0,0,-1,-1);
} }
break;
case MSG_FONT_CHANGED: // Message from Preference panel.
gTermPref->setString (PREF_HALF_FONT_FAMILY, fNewFontMenu->FindMarked()->Label()); case MSG_ROWS_CHANGED:
this->PostMessage (MSG_HALF_FONT_CHANGED); case MSG_COLS_CHANGED: {
break; r = fTermView->SetTermSize (gTermPref->getInt32 (PREF_ROWS),
gTermPref->getInt32 (PREF_COLS), 0);
case MSG_COLOR_CHANGED: ResizeTo (r.Width()+ B_V_SCROLL_BAR_WIDTH + VIEW_OFFSET * 2,
fBaseView->SetViewColor (gTermPref->getRGB (PREF_TEXT_BACK_COLOR)); r.Height()+fMenubar->Bounds().Height() + VIEW_OFFSET *2);
fTermView->SetTermColor ();
fBaseView->Invalidate();
fTermView->Invalidate();
break;
case SAVE_AS_DEFAULT:
{
BPath path; BPath path;
if (PrefHandler::GetDefaultPath(path) == B_OK) if (PrefHandler::GetDefaultPath(path) == B_OK)
gTermPref->SaveAsText(path.Path(), PREFFILE_MIMETYPE); gTermPref->SaveAsText(path.Path(), PREFFILE_MIMETYPE);
break;
} }
break; case MSG_HALF_FONT_CHANGED:
case MENU_PAGE_SETUP: case MSG_FULL_FONT_CHANGED:
DoPageSetup (); case MSG_HALF_SIZE_CHANGED:
break; case MSG_FULL_SIZE_CHANGED: {
case MENU_PRINT:
DoPrint (); halfFont.SetFamilyAndStyle (gTermPref->getString(PREF_HALF_FONT_FAMILY),NULL);
break; halfFont.SetSize (gTermPref->getFloat(PREF_HALF_FONT_SIZE));
halfFont.SetSpacing (B_FIXED_SPACING);
case MSGRUN_WINDOW:
fTermView->UpdateSIGWINCH (); fullFont.SetFamilyAndStyle (gTermPref->getString(PREF_FULL_FONT_FAMILY),NULL);
break; fullFont.SetSize (gTermPref->getFloat(PREF_FULL_FONT_SIZE));
fullFont.SetSpacing (B_FIXED_SPACING);
case B_ABOUT_REQUESTED:
be_app->PostMessage(B_ABOUT_REQUESTED); fTermView->SetTermFont (&halfFont, &fullFont);
break; r = fTermView->SetTermSize (0, 0, 0);
default: int width, height;
BWindow::MessageReceived(message);
break; fTermView->GetFontSize (&width, &height);
}
SetSizeLimits (MIN_COLS * width, MAX_COLS * width,
MIN_COLS * height, MAX_COLS * height);
ResizeTo (r.Width()+ B_V_SCROLL_BAR_WIDTH + VIEW_OFFSET * 2,
r.Height()+fMenubar->Bounds().Height() + VIEW_OFFSET * 2);
fTermView->Invalidate();
break;
}
case EIGHTYTWENTYFOUR: {
gTermPref->setString(PREF_COLS, "80");
gTermPref->setString(PREF_ROWS, "24");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
}
case EIGHTYTWENTYFIVE: {
gTermPref->setString(PREF_COLS, "80");
gTermPref->setString(PREF_ROWS, "25");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
}
case EIGHTYFORTY: {
gTermPref->setString(PREF_COLS, "80");
gTermPref->setString(PREF_ROWS, "40");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
}
case ONETHREETWOTWENTYFOUR: {
gTermPref->setString(PREF_COLS, "132");
gTermPref->setString(PREF_ROWS, "24");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
}
case ONETHREETWOTWENTYFIVE: {
gTermPref->setString(PREF_COLS, "132");
gTermPref->setString(PREF_ROWS, "25");
this->PostMessage (MSG_ROWS_CHANGED);
this->PostMessage (MSG_COLS_CHANGED);
break;
}
case FULLSCREEN: {
if (!fSavedFrame.IsValid()) { // go fullscreen
float mbHeight = fMenubar->Bounds().Height() + 1;
fSavedFrame = Frame();
BScreen screen(this);
fTermView->ScrollBar()->Hide();
fMenubar->Hide();
fBaseView->MoveTo(0,0);
fBaseView->ResizeBy(B_V_SCROLL_BAR_WIDTH, mbHeight);
fSavedLook = Look();
// done before ResizeTo to work around a Dano bug (not erasing the decor)
SetLook(B_NO_BORDER_WINDOW_LOOK);
ResizeTo(screen.Frame().Width()+1, screen.Frame().Height()+1);
MoveTo(screen.Frame().left, screen.Frame().top);
} else { // exit fullscreen
float mbHeight = fMenubar->Bounds().Height() + 1;
fMenubar->Show();
fTermView->ScrollBar()->Show();
ResizeTo(fSavedFrame.Width(), fSavedFrame.Height());
MoveTo(fSavedFrame.left, fSavedFrame.top);
fBaseView->ResizeBy(-B_V_SCROLL_BAR_WIDTH, -mbHeight);
fBaseView->MoveTo(0,mbHeight);
SetLook(fSavedLook);
fSavedFrame = BRect(0,0,-1,-1);
}
break;
}
case MSG_FONT_CHANGED: {
gTermPref->setString (PREF_HALF_FONT_FAMILY, fNewFontMenu->FindMarked()->Label());
this->PostMessage (MSG_HALF_FONT_CHANGED);
break;
}
case MSG_COLOR_CHANGED: {
fBaseView->SetViewColor (gTermPref->getRGB (PREF_TEXT_BACK_COLOR));
fTermView->SetTermColor ();
fBaseView->Invalidate();
fTermView->Invalidate();
break;
}
case SAVE_AS_DEFAULT: {
BPath path;
if (PrefHandler::GetDefaultPath(path) == B_OK)
gTermPref->SaveAsText(path.Path(), PREFFILE_MIMETYPE);
break;
}
case MENU_PAGE_SETUP: {
DoPageSetup ();
break;
}
case MENU_PRINT: {
DoPrint ();
break;
}
case MSGRUN_WINDOW: {
fTermView->UpdateSIGWINCH ();
break;
}
case B_ABOUT_REQUESTED: {
be_app->PostMessage(B_ABOUT_REQUESTED);
break;
}
default: {
BWindow::MessageReceived(message);
break;
}
}
} }
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// WindowActivated (bool) // WindowActivated (bool)
@@ -536,11 +520,11 @@ TermWindow::WindowActivated (bool )
void void
TermWindow::Quit(void) TermWindow::Quit(void)
{ {
delete fTermParse; delete fTermParse;
delete fCodeConv; delete fCodeConv;
if(fPrefWindow) fPrefWindow->PostMessage (B_QUIT_REQUESTED); if(fPrefWindow) fPrefWindow->PostMessage (B_QUIT_REQUESTED);
be_app->PostMessage (B_QUIT_REQUESTED, be_app); be_app->PostMessage (B_QUIT_REQUESTED, be_app);
BWindow::Quit (); BWindow::Quit ();
} }
@@ -557,18 +541,15 @@ TermWindow::QuitRequested(void)
int int
TermWindow::GetTimeZone () TermWindow::GetTimeZone ()
{ {
struct timeval tv; struct timeval tv;
struct timezone tm; struct timezone tm;
gettimeofday (&tv, &tm); gettimeofday (&tv, &tm);
return -tm.tz_minuteswest / 60; return -tm.tz_minuteswest / 60;
} }
#include "spawn.h"
void void
TermWindow::TermWinActivate() TermWindow::TermWinActivate()
{ {