From 7aed1511f61ffb1e3c418dbbf797d6b2cf490910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 14 Mar 2009 13:50:08 +0000 Subject: [PATCH] * 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 --- src/apps/terminal/TermView.cpp | 98 ++++++++++++++++---------------- src/apps/terminal/TermView.h | 6 +- src/apps/terminal/TermWindow.cpp | 85 +++++++++++++-------------- 3 files changed, 92 insertions(+), 97 deletions(-) diff --git a/src/apps/terminal/TermView.cpp b/src/apps/terminal/TermView.cpp index 13c1a899ab..0d3710e792 100644 --- a/src/apps/terminal/TermView.cpp +++ b/src/apps/terminal/TermView.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2001-2008, Haiku, Inc. + * Copyright 2001-2009, Haiku, Inc. * 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. @@ -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(); diff --git a/src/apps/terminal/TermView.h b/src/apps/terminal/TermView.h index 7f91effab7..4efabac075 100644 --- a/src/apps/terminal/TermView.h +++ b/src/apps/terminal/TermView.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2008, Haiku. + * Copyright 2001-2009, Haiku. * Copyright (c) 2003-4 Kian Duffy * 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; diff --git a/src/apps/terminal/TermWindow.cpp b/src/apps/terminal/TermWindow.cpp index 3696d4f6fd..13be807032 100644 --- a/src/apps/terminal/TermWindow.cpp +++ b/src/apps/terminal/TermWindow.cpp @@ -2,7 +2,7 @@ * Copyright 2007 Haiku, Inc. * Copyright (c) 2004 Daniel Furrer * Copyright (c) 2003-2004 Kian Duffy - * 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)); }