* The window size is no longer directly saved when you change it in the menu.

* "Save as Default" now also saves the current Terminal size.
* Exchanged the strange default Termina sizes with some others, added a
  separator between the full screen setting.
* Removed the "Term" prefix from TermView::fTerm{Columns|Rows}.
* Whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29513 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2009-03-14 13:50:08 +00:00
parent 4dabc2e663
commit 7aed1511f6
3 changed files with 92 additions and 97 deletions
+49 -49
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2001-2008, Haiku, Inc.
* Copyright 2001-2009, Haiku, Inc.
* Copyright 2003-2004 Kian Duffy, [email protected]
* Parts Copyright 1998-1999 Kazuho Okui and Takashi Murai.
* All rights reserved. Distributed under the terms of the MIT license.
@@ -47,6 +47,7 @@
#include "CodeConv.h"
#include "Globals.h"
#include "PrefHandler.h"
#include "Shell.h"
#include "TermConst.h"
#include "TerminalCharClassifier.h"
@@ -166,8 +167,8 @@ private:
TermView::TermView(BRect frame, int32 argc, const char** argv, int32 historySize)
: BView(frame, "termview", B_FOLLOW_ALL,
B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE | B_PULSE_NEEDED),
fTermRows(ROWS_DEFAULT),
fTermColumns(COLUMNS_DEFAULT),
fColumns(COLUMNS_DEFAULT),
fRows(ROWS_DEFAULT),
fEncoding(M_UTF8),
fScrBufSize(historySize)
{
@@ -179,13 +180,13 @@ TermView::TermView(int rows, int columns, int32 argc, const char** argv,
int32 historySize)
: BView(BRect(0, 0, 0, 0), "termview", B_FOLLOW_ALL,
B_WILL_DRAW | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE | B_PULSE_NEEDED),
fTermRows(rows),
fTermColumns(columns),
fColumns(columns),
fRows(rows),
fEncoding(M_UTF8),
fScrBufSize(historySize)
{
_InitObject(argc, argv);
SetTermSize(fTermRows, fTermColumns, true);
SetTermSize(fRows, fColumns, true);
// TODO: Don't show the dragger, since replicant capabilities
// don't work very well ATM.
@@ -203,8 +204,8 @@ TermView::TermView(int rows, int columns, int32 argc, const char** argv,
TermView::TermView(BMessage* archive)
:
BView(archive),
fTermRows(ROWS_DEFAULT),
fTermColumns(COLUMNS_DEFAULT),
fColumns(COLUMNS_DEFAULT),
fRows(ROWS_DEFAULT),
fEncoding(M_UTF8),
fScrBufSize(1000)
{
@@ -213,10 +214,10 @@ TermView::TermView(BMessage* archive)
if (archive->FindInt32("encoding", (int32*)&fEncoding) < B_OK)
fEncoding = M_UTF8;
if (archive->FindInt32("columns", (int32*)&fTermColumns) < B_OK)
fTermColumns = COLUMNS_DEFAULT;
if (archive->FindInt32("rows", (int32*)&fTermRows) < B_OK)
fTermRows = ROWS_DEFAULT;
if (archive->FindInt32("columns", (int32*)&fColumns) < B_OK)
fColumns = COLUMNS_DEFAULT;
if (archive->FindInt32("rows", (int32*)&fRows) < B_OK)
fRows = ROWS_DEFAULT;
int32 argc = 0;
if (archive->HasInt32("argc"))
@@ -235,7 +236,7 @@ TermView::TermView(BMessage* archive)
/*! Initializes the object for further use.
The members fTermRows, fTermColumns, fEncoding, and fScrBufSize must
The members fRows, fColumns, fEncoding, and fScrBufSize must
already be initialized; they are not touched by this method.
*/
status_t
@@ -290,12 +291,12 @@ TermView::_InitObject(int32 argc, const char** argv)
if (fCharClassifier == NULL)
return B_NO_MEMORY;
status_t error = fTextBuffer->Init(fTermColumns, fTermRows, fScrBufSize);
status_t error = fTextBuffer->Init(fColumns, fRows, fScrBufSize);
if (error != B_OK)
return error;
fTextBuffer->SetEncoding(fEncoding);
error = fVisibleTextBuffer->Init(fTermColumns, fTermRows + 2, 0);
error = fVisibleTextBuffer->Init(fColumns, fRows + 2, 0);
if (error != B_OK)
return error;
@@ -304,10 +305,10 @@ TermView::_InitObject(int32 argc, const char** argv)
return B_NO_MEMORY;
SetTermFont(be_fixed_font);
SetTermSize(fTermRows, fTermColumns, false);
SetTermSize(fRows, fColumns, false);
//SetIMAware(false);
status_t status = fShell->Open(fTermRows, fTermColumns,
status_t status = fShell->Open(fRows, fColumns,
EncodingAsShortString(fEncoding), argc, argv);
if (status < B_OK)
@@ -360,9 +361,9 @@ TermView::Archive(BMessage* data, bool deep) const
if (status == B_OK)
status = data->AddInt32("encoding", (int32)fEncoding);
if (status == B_OK)
status = data->AddInt32("columns", (int32)fTermColumns);
status = data->AddInt32("columns", (int32)fColumns);
if (status == B_OK)
status = data->AddInt32("rows", (int32)fTermRows);
status = data->AddInt32("rows", (int32)fRows);
if (data->ReplaceString("class", "TermView") != B_OK)
data->AddString("class", "TermView");
@@ -422,9 +423,9 @@ void
TermView::GetPreferredSize(float *width, float *height)
{
if (width)
*width = fTermColumns * fFontWidth - 1;
*width = fColumns * fFontWidth - 1;
if (height)
*height = fTermRows * fFontHeight - 1;
*height = fRows * fFontHeight - 1;
}
@@ -453,9 +454,12 @@ TermView::SetTermSize(int rows, int columns, bool resize)
{
//debug_printf("TermView::SetTermSize(%d, %d)\n", rows, columns);
if (rows > 0)
fTermRows = rows;
fRows = rows;
if (columns > 0)
fTermColumns = columns;
fColumns = columns;
PrefHandler::Default()->setInt32(PREF_COLS, fColumns);
PrefHandler::Default()->setInt32(PREF_ROWS, fRows);
// To keep things simple, get rid of the selection first.
_Deselect();
@@ -469,23 +473,19 @@ TermView::SetTermSize(int rows, int columns, bool resize)
}
}
fTermRows = rows;
fTermColumns = columns;
//debug_printf("Invalidate()\n");
Invalidate();
if (fScrollBar != NULL) {
_UpdateScrollBarRange();
fScrollBar->SetSteps(fFontHeight, fFontHeight * fTermRows);
fScrollBar->SetSteps(fFontHeight, fFontHeight * fRows);
}
BRect rect(0, 0, fTermColumns * fFontWidth, fTermRows * fFontHeight);
BRect rect(0, 0, fColumns * fFontWidth, fRows * fFontHeight);
if (resize)
ResizeTo(rect.Width(), rect.Height());
// synchronize the visible text buffer
{
BAutolock _(fTextBuffer);
@@ -593,7 +593,7 @@ TermView::SetTermFont(const BFont *font)
_ScrollTo(0, false);
if (fScrollBar != NULL)
fScrollBar->SetSteps(fFontHeight, fFontHeight * fTermRows);
fScrollBar->SetSteps(fFontHeight, fFontHeight * fRows);
}
@@ -602,7 +602,7 @@ TermView::SetScrollBar(BScrollBar *scrollBar)
{
fScrollBar = scrollBar;
if (fScrollBar != NULL) {
fScrollBar->SetSteps(fFontHeight, fFontHeight * fTermRows);
fScrollBar->SetSteps(fFontHeight, fFontHeight * fRows);
}
}
@@ -703,10 +703,10 @@ TermView::_InvalidateTextRange(TermPos start, TermPos end)
if (start.y == end.y) {
_InvalidateTextRect(start.x, start.y, end.x, end.y);
} else {
_InvalidateTextRect(start.x, start.y, fTermColumns, start.y);
_InvalidateTextRect(start.x, start.y, fColumns, start.y);
if (end.y - start.y > 0)
_InvalidateTextRect(0, start.y + 1, fTermColumns, end.y - 1);
_InvalidateTextRect(0, start.y + 1, fColumns, end.y - 1);
_InvalidateTextRect(0, end.y, end.x, end.y);
}
@@ -891,7 +891,7 @@ TermView::_UpdateScrollBarRange()
historySize = fTextBuffer->HistorySize();
}
float viewHeight = fTermRows * fFontHeight;
float viewHeight = fRows * fFontHeight;
float historyHeight = (float)historySize * fFontHeight;
//debug_printf("TermView::_UpdateScrollBarRange(): history: %ld, range: %f - 0\n",
@@ -908,7 +908,7 @@ void
TermView::_UpdateSIGWINCH()
{
if (fFrameResized) {
fShell->UpdateWindowSize(fTermRows, fTermColumns);
fShell->UpdateWindowSize(fRows, fColumns);
fFrameResized = false;
}
}
@@ -921,7 +921,7 @@ TermView::AttachedToWindow()
MakeFocus(true);
if (fScrollBar) {
fScrollBar->SetSteps(fFontHeight, fFontHeight * fTermRows);
fScrollBar->SetSteps(fFontHeight, fFontHeight * fRows);
_UpdateScrollBarRange();
}
@@ -994,7 +994,7 @@ TermView::Draw(BRect updateRect)
for (int32 j = y1; j <= y2; j++) {
int32 k = x1;
char buf[fTermColumns * 4 + 1];
char buf[fColumns * 4 + 1];
if (fVisibleTextBuffer->IsFullWidthChar(j - firstVisible, k))
k--;
@@ -1233,7 +1233,7 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
case B_PAGE_UP:
if (mod & B_SHIFT_KEY) {
_ScrollTo(fScrollOffset - fFontHeight * fTermRows, true);
_ScrollTo(fScrollOffset - fFontHeight * fRows, true);
return;
}
if (rawChar == B_PAGE_UP)
@@ -1242,7 +1242,7 @@ TermView::KeyDown(const char *bytes, int32 numBytes)
case B_PAGE_DOWN:
if (mod & B_SHIFT_KEY) {
_ScrollTo(fScrollOffset + fFontHeight * fTermRows, true);
_ScrollTo(fScrollOffset + fFontHeight * fRows, true);
return;
}
if (rawChar == B_PAGE_DOWN)
@@ -1281,7 +1281,7 @@ TermView::FrameResized(float width, float height)
int32 columns = ((int32)width + 1) / fFontWidth;
int32 rows = ((int32)height + 1) / fFontHeight;
if (columns == fTermColumns && rows == fTermRows)
if (columns == fColumns && rows == fRows)
return;
bool hasResizeView = fResizeRunner != NULL;
@@ -1775,7 +1775,7 @@ TermView::_SynchronizeWithTextBuffer(int32 visibleDirtyTop,
// been scrolled in less than a sync update period. Once we're
// actively considering it, the same condition will convince us to
// actually do it.
if (fScrolledSinceLastSync + linesScrolled <= fTermRows) {
if (fScrolledSinceLastSync + linesScrolled <= fRows) {
// Condition doesn't hold yet. Reset if time is up, or otherwise
// keep counting.
if (timeElapsed > kSyncUpdateGranularity) {
@@ -1808,7 +1808,7 @@ TermView::_SynchronizeWithTextBuffer(int32 visibleDirtyTop,
// sync time not passed yet -- keep counting
fScrolledSinceLastSync += linesScrolled;
return;
} else if (fScrolledSinceLastSync + linesScrolled <= fTermRows) {
} else if (fScrolledSinceLastSync + linesScrolled <= fRows) {
// time's up, but not enough happened
delete fSyncRunner;
fSyncRunner = NULL;
@@ -2194,8 +2194,8 @@ TermView::_Select(TermPos start, TermPos end, bool inclusive,
if (start.x < 0)
start.x = 0;
if (end.x >= fTermColumns)
end.x = fTermColumns;
if (end.x >= fColumns)
end.x = fColumns;
TermPos minPos(0, -fTextBuffer->HistorySize());
TermPos maxPos(0, fTextBuffer->Height());
@@ -2217,8 +2217,8 @@ TermView::_Select(TermPos start, TermPos end, bool inclusive,
if (fTextBuffer->IsFullWidthChar(end.y, end.x)) {
end.x++;
if (end.x >= fTermColumns)
end.x = fTermColumns;
if (end.x >= fColumns)
end.x = fColumns;
}
if (fSelStart != fSelEnd)
@@ -2389,10 +2389,10 @@ TermView::GetFrameSize(float *width, float *height)
}
if (width != NULL)
*width = fTermColumns * fFontWidth;
*width = fColumns * fFontWidth;
if (height != NULL)
*height = (fTermRows + historySize) * fFontHeight;
*height = (fRows + historySize) * fFontHeight;
}
@@ -2483,7 +2483,7 @@ TermView::InitiateDrag()
if (fSelStart.y == fSelEnd.y)
rect.Set(start.x, start.y, end.x + fFontWidth, end.y + fFontHeight);
else
rect.Set(0, start.y, fTermColumns * fFontWidth, end.y + fFontHeight);
rect.Set(0, start.y, fColumns * fFontWidth, end.y + fFontHeight);
rect = rect & Bounds();
+3 -3
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2001-2008, Haiku.
* Copyright 2001-2009, Haiku.
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
@@ -208,8 +208,8 @@ private:
int32 fMouseButtons;
// Terminal rows and columns.
int fTermRows;
int fTermColumns;
int fColumns;
int fRows;
int fEncoding;
+40 -45
View File
@@ -2,7 +2,7 @@
* Copyright 2007 Haiku, Inc.
* Copyright (c) 2004 Daniel Furrer <[email protected]>
* Copyright (c) 2003-2004 Kian Duffy <[email protected]>
* Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
* Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
* Distributed under the terms of the MIT license.
*/
@@ -63,7 +63,7 @@ public:
class TermViewContainerView : public BView {
public:
TermViewContainerView(TermView* termView)
:
:
BView(BRect(), "term view container", B_FOLLOW_ALL, 0),
fTermView(termView)
{
@@ -161,7 +161,7 @@ TermWindow::TermWindow(BRect frame, const char* title, Arguments *args)
TermWindow::~TermWindow()
{
if (fPrefWindow)
if (fPrefWindow)
fPrefWindow->PostMessage(B_QUIT_REQUESTED);
if (fFindPanel && fFindPanel->Lock()) {
@@ -299,14 +299,14 @@ TermWindow::_SetupMenu()
fEncodingmenu = new BMenu("Text Encoding");
fEncodingmenu->SetRadioMode(true);
MakeEncodingMenu(fEncodingmenu, false);
fHelpmenu->AddItem(fWindowSizeMenu);
fHelpmenu->AddItem(fWindowSizeMenu);
fHelpmenu->AddItem(fEncodingmenu);
fHelpmenu->AddSeparatorItem();
fHelpmenu->AddItem(new BMenuItem("Preferences" B_UTF8_ELLIPSIS,
new BMessage(MENU_PREF_OPEN)));
fHelpmenu->AddSeparatorItem();
fHelpmenu->AddItem(new BMenuItem("Save as default",
new BMessage(SAVE_AS_DEFAULT)));
new BMessage(SAVE_AS_DEFAULT)));
fMenubar->AddItem(fHelpmenu);
AddChild(fMenubar);
@@ -358,7 +358,7 @@ TermWindow::MessageReceived(BMessage *message)
be_app->PostMessage(MENU_SWITCH_TERM);
break;
case MENU_NEW_TERM:
case MENU_NEW_TERM:
{
app_info info;
be_app->GetAppInfo(&info);
@@ -396,13 +396,13 @@ TermWindow::MessageReceived(BMessage *message)
case MSG_FIND:
fFindPanel->PostMessage(B_QUIT_REQUESTED);
message->FindBool("findselection", &fFindSelection);
if (!fFindSelection)
if (!fFindSelection)
message->FindString("findstring", &fFindString);
else
else
_ActiveTermView()->GetSelection(fFindString);
if (fFindString.Length() == 0) {
BAlert *alert = new BAlert("find failed", "No search string.", "Okay", NULL,
BAlert *alert = new BAlert("find failed", "No search string.", "Okay", NULL,
NULL, B_WIDTH_AS_USUAL, B_WARNING_ALERT);
alert->Go();
fFindBackwardMenuItem->SetEnabled(false);
@@ -461,29 +461,22 @@ TermWindow::MessageReceived(BMessage *message)
int32 columns, rows;
message->FindInt32("columns", &columns);
message->FindInt32("rows", &rows);
PrefHandler::Default()->setInt32(PREF_COLS, columns);
PrefHandler::Default()->setInt32(PREF_ROWS, rows);
_ActiveTermView()->SetTermSize(rows, columns, 0);
_ActiveTermView()->SetTermSize(rows, columns, false);
_ResizeView(_ActiveTermView());
BPath path;
if (PrefHandler::GetDefaultPath(path) == B_OK)
PrefHandler::Default()->SaveAsText(path.Path(), PREFFILE_MIMETYPE);
break;
}
case MSG_HALF_FONT_CHANGED:
case MSG_FULL_FONT_CHANGED:
case MSG_HALF_SIZE_CHANGED:
case MSG_FULL_SIZE_CHANGED:
case MSG_FULL_SIZE_CHANGED:
{
BFont font;
_GetPreferredFont(font);
_ActiveTermView()->SetTermFont(&font);
_ResizeView(_ActiveTermView());
break;
}
@@ -513,9 +506,9 @@ TermWindow::MessageReceived(BMessage *message)
fSavedFrame = BRect(0,0,-1,-1);
}
break;
case MSG_FONT_CHANGED:
PostMessage(MSG_HALF_FONT_CHANGED);
PostMessage(MSG_HALF_FONT_CHANGED);
break;
case MSG_COLOR_CHANGED:
@@ -525,7 +518,7 @@ TermWindow::MessageReceived(BMessage *message)
break;
}
case SAVE_AS_DEFAULT:
case SAVE_AS_DEFAULT:
{
BPath path;
if (PrefHandler::GetDefaultPath(path) == B_OK)
@@ -647,8 +640,8 @@ TermWindow::_SetTermColors(TermViewContainerView *containerView)
status_t
TermWindow::_DoPageSetup()
{
TermWindow::_DoPageSetup()
{
BPrintJob job("PageSetup");
// display the page configure panel
@@ -659,7 +652,7 @@ TermWindow::_DoPageSetup()
return status;
}
void
TermWindow::_DoPrint()
@@ -668,10 +661,10 @@ TermWindow::_DoPrint()
(new BAlert("Cancel", "Print cancelled.", "OK"))->Go();
return;
}
BPrintJob job("Print");
BPrintJob job("Print");
job.SetSettings(new BMessage(*fPrintSettings));
BRect pageRect = job.PrintableRect();
BRect curPageRect = pageRect;
@@ -690,18 +683,19 @@ TermWindow::_DoPrint()
curPageRect.OffsetTo(x * pWidth, y * pHeight);
job.DrawView(_ActiveTermView(), curPageRect, B_ORIGIN);
job.SpoolPage();
if (!job.CanContinue()){
if (!job.CanContinue()) {
// It is likely that the only way that the job was cancelled is
// because the user hit 'Cancel' in the page setup window, in which
// case, the user does *not* need to be told that it was cancelled.
// He/she will simply expect that it was done.
return;
// because the user hit 'Cancel' in the page setup window, in
// which case, the user does *not* need to be told that it was
// cancelled.
// He/she will simply expect that it was done.
return;
}
}
}
job.CommitJob();
job.CommitJob();
}
@@ -716,7 +710,8 @@ TermWindow::_AddTab(Arguments *args)
try {
// Note: I don't pass the Arguments class directly to the termview,
// only to avoid adding it as a dependency: in other words, to keep
// the TermView class as agnostic as possible about the surrounding world.
// the TermView class as agnostic as possible about the surrounding
// world.
CustomTermView *view = new CustomTermView(
PrefHandler::Default()->getInt32(PREF_ROWS),
PrefHandler::Default()->getInt32(PREF_COLS),
@@ -883,12 +878,11 @@ TermWindow::_ResizeView(TermView *view)
void
TermWindow::_BuildWindowSizeMenu(BMenu *menu)
{
const int32 windowSizes[5][2] = {
{ 80, 24 },
const int32 windowSizes[4][2] = {
{ 80, 25 },
{ 80, 40 },
{ 132, 24 },
{ 132, 25 }
{ 132, 25 },
{ 132, 40 }
};
const int32 sizeNum = sizeof(windowSizes) / sizeof(windowSizes[0]);
@@ -902,9 +896,10 @@ TermWindow::_BuildWindowSizeMenu(BMenu *menu)
message->AddInt32("rows", rows);
menu->AddItem(new BMenuItem(label, message));
}
menu->AddItem(new BMenuItem("Fullscreen",
new BMessage(FULLSCREEN), B_ENTER));
menu->AddSeparatorItem();
menu->AddItem(new BMenuItem("Fullscreen", new BMessage(FULLSCREEN),
B_ENTER));
}