* Removed useless context menu.

* Removed useless mouse button preferences.
* The secondary and tertiary buttons now both paste the selection (or clipboard data)
  into the Terminal, this fixes bug #1159.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20772 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2007-04-20 16:09:27 +00:00
parent 15b4543f2c
commit ef502a7eb3
4 changed files with 313 additions and 486 deletions
+1 -4
View File
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2003-2006, Haiku, Inc. All Rights Reserved.
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Copyright (c) 2004 Daniel Furrer <[email protected]>
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Copyright (c) 1998,99 Kazuho Okui and Takashi Murai.
@@ -55,9 +55,6 @@ static const pref_defaults kTermDefaults[] = {
{ PREF_TEXT_ENCODING, "UTF-8" },
{ PREF_SELECT_MBUTTON, "Button 1"},
{ PREF_PASTE_MBUTTON, "Button 2"},
{ PREF_SUBMENU_MBUTTON, "Button 3"},
{ PREF_MOUSE_IMAGE, "Hand cursor"},
{ PREF_DRAGN_COPY, "0"},
+38 -73
View File
@@ -1,4 +1,5 @@
/*
* Copyright 2001-2007, Haiku.
* Copyright (c) 2003-4 Kian Duffy <[email protected]>
* Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
@@ -30,27 +31,16 @@
#ifndef TERMCONST_H_INCLUDED
#define TERMCONST_H_INCLUDED
#ifndef NODEBUG
#define MALLOC_DEBUG
#endif
//////////////////////////////////////////////////////////////////////////////
// Application signature (Must same in Muterminal.rsrc)//
//////////////////////////////////////////////////////////////////////////////
#define TERM_SIGNATURE "application/x-vnd.Haiku-Terminal"
#define PREFFILE_MIMETYPE "text/x-terminal-pref"
//////////////////////////////////////////////////////////////////////////////
// Signature of R5's Terminal. Needed for proper drop-in window count support
//////////////////////////////////////////////////////////////////////////////
#define R5_TERM_SIGNATURE "application/x-vnd.Be-SHEL"
//////////////////////////////////////////////////////////////////////////////
// Message constants for menu items.
//////////////////////////////////////////////////////////////////////////////
// Message constants for menu items
// Menu Message.
//
// Menu Message
const uint32 MENU_SWITCH_TERM = 'MSWT';
const uint32 MENU_NEW_TERM = 'MNTE';
const uint32 MENU_PREF_OPEN = 'MPre';
@@ -69,13 +59,11 @@ const uint32 MENU_SHOW_COLOR = 'Mcol';
const uint32 M_GET_DEVICE_NUM = 'Mgdn';
// Message Runner.
// Message Runner
const uint32 MSGRUN_CURSOR = 'Rcur';
const uint32 MSGRUN_WINDOW = 'Rwin';
// Preference Message.
//
// Preference Message
const ulong PSET__COLS = 'pcol';
const ulong PSET__ROWS = 'prow';
const ulong PSET__HFONT = 'phfn';
@@ -95,52 +83,43 @@ const uint32 ONETHREETWOTWENTYFIVE = 'hunv';
const uint32 FULLSCREEN = 'fscr';
const uint32 MSG_FONT_CHANGED = 'fntc';
const uint32 SAVE_AS_DEFAULT = 'sadf';
////////////////////////////////////////////////////////////////////////////
// Preference Read/Write Keys
////////////////////////////////////////////////////////////////////////////
const char * const PREF_HALF_FONT_FAMILY = "Half Font Famly";
const char * const PREF_HALF_FONT_STYLE = "Half Font Style";
const char * const PREF_HALF_FONT_SIZE = "Half Font Size";
const char* const PREF_HALF_FONT_FAMILY = "Half Font Famly";
const char* const PREF_HALF_FONT_STYLE = "Half Font Style";
const char* const PREF_HALF_FONT_SIZE = "Half Font Size";
const char * const PREF_FULL_FONT_FAMILY = "Full Font Famly";
const char * const PREF_FULL_FONT_STYLE = "Full Font Style";
const char * const PREF_FULL_FONT_SIZE = "Full Font Size";
const char* const PREF_FULL_FONT_FAMILY = "Full Font Famly";
const char* const PREF_FULL_FONT_STYLE = "Full Font Style";
const char* const PREF_FULL_FONT_SIZE = "Full Font Size";
const char * const PREF_TEXT_FORE_COLOR = "Text Foreground Color";
const char * const PREF_TEXT_BACK_COLOR = "Text Background Color";
const char * const PREF_SELECT_FORE_COLOR = "Selection Foreground Color";
const char * const PREF_SELECT_BACK_COLOR = "Selection Background Color";
const char * const PREF_CURSOR_FORE_COLOR = "Cursor Foreground Color";
const char * const PREF_CURSOR_BACK_COLOR = "Cursor Background Color";
const char* const PREF_TEXT_FORE_COLOR = "Text Foreground Color";
const char* const PREF_TEXT_BACK_COLOR = "Text Background Color";
const char* const PREF_SELECT_FORE_COLOR = "Selection Foreground Color";
const char* const PREF_SELECT_BACK_COLOR = "Selection Background Color";
const char* const PREF_CURSOR_FORE_COLOR = "Cursor Foreground Color";
const char* const PREF_CURSOR_BACK_COLOR = "Cursor Background Color";
const char * const PREF_IM_FORE_COLOR = "IM Foreground Color";
const char * const PREF_IM_BACK_COLOR = "IM Background Color";
const char * const PREF_IM_SELECT_COLOR = "IM Selection Color";
const char * const PREF_DRAGN_COPY = "Drag'n Copy";
const char* const PREF_IM_FORE_COLOR = "IM Foreground Color";
const char* const PREF_IM_BACK_COLOR = "IM Background Color";
const char* const PREF_IM_SELECT_COLOR = "IM Selection Color";
const char* const PREF_DRAGN_COPY = "Drag'n Copy";
const char * const PREF_HISTORY_SIZE = "Histry Size";
const char * const PREF_CURSOR_BLINKING = "Cursor Blinking rate";
const char* const PREF_HISTORY_SIZE = "Histry Size";
const char* const PREF_CURSOR_BLINKING = "Cursor Blinking rate";
const char * const PREF_IM_AWARE = "Input Method Aware";
const char * const PREF_MOUSE_IMAGE = "Cursor Image";
const char* const PREF_IM_AWARE = "Input Method Aware";
const char* const PREF_MOUSE_IMAGE = "Cursor Image";
const char * const PREF_SELECT_MBUTTON = "Select Region Buttion";
const char * const PREF_SUBMENU_MBUTTON = "Submenu Mouse Button";
const char * const PREF_PASTE_MBUTTON = "Paste Mouse Button";
const char* const PREF_COLS = "Cols";
const char* const PREF_ROWS = "Rows";
const char* const PREF_SHELL = "Shell";
const char * const PREF_COLS = "Cols";
const char * const PREF_ROWS = "Rows";
const char * const PREF_SHELL = "Shell";
const char* const PREF_TEXT_ENCODING = "Text encoding";
const char* const PREF_GUI_LANGUAGE = "Language";
const char * const PREF_TEXT_ENCODING = "Text encoding";
const char * const PREF_GUI_LANGUAGE = "Language";
////////////////////////////////////////////////////////////////////////////
// Color type
////////////////////////////////////////////////////////////////////////////
enum {
TEXT_FOREGROUND_COLOR,
TEXT_BACKGROUND_COLOR,
@@ -148,26 +127,21 @@ enum {
SELECTION_BACKGROUND_COLOR
};
////////////////////////////////////////////////////////////////////////////
// Preference Folder and setting path
////////////////////////////////////////////////////////////////////////////
const int32 DEFAULT = -1;
////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////
/* Font Width */
// Font Width
const int HALF_WIDTH = 1;
const int FULL_WIDTH = 2;
/* Scroll direction flag */
// Scroll direction flag
enum{
SCRUP,
SCRDOWN
};
/* Insert mode flag */
// Insert mode flag
#define MODE_OVER 0
#define MODE_INSERT 1
@@ -179,15 +153,12 @@ const float VIEW_OFFSET = 3;
fFontWidth * (fCurPos.x + 1) - 1, \
fFontHeight * fCurPos.y + fTop + fCursorHeight - 1)
////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////
/* Define TermBuffer internal code */
// Define TermBuffer internal code
#define NO_CHAR 0x00
#define A_CHAR 0x01
#define IN_STRING 0xFF
/* TermBuffer extended attribute */
// TermBuffer extended attribute
#define A_WIDTH 0x8000
#define BOLD 0x4000
#define UNDERLINE 0x2000
@@ -216,20 +187,14 @@ const float VIEW_OFFSET = 3;
#define FORECOLORED(x) ((x) << 3)
#define BACKCOLORED(x) ((x) << 0)
////////////////////////////////////////////////////////////////////////////
// TypeDefs
////////////////////////////////////////////////////////////////////////////
typedef unsigned short ushort;
typedef struct
{
typedef struct {
int x1;
int y1;
int x2;
int y2;
}
sDrawRect;
} sDrawRect;
#endif //TERMCONST_H_INCLUDED
#endif // TERMCONST_H_INCLUDED
+35 -98
View File
@@ -10,6 +10,20 @@
*/
#include "TermView.h"
#include "TermWindow.h"
#include "TermApp.h"
#include "TermParse.h"
#include "TermBuffer.h"
#include "CodeConv.h"
#include "VTkeymap.h"
#include "TermConst.h"
#include "PrefHandler.h"
#include "MenuUtil.h"
#include "PrefView.h"
#include "spawn.h"
#include <Autolock.h>
#include <Beep.h>
#include <Clipboard.h>
@@ -29,19 +43,6 @@
#include <new>
#include "TermView.h"
#include "TermWindow.h"
#include "TermApp.h"
#include "TermParse.h"
#include "TermBuffer.h"
#include "CodeConv.h"
#include "VTkeymap.h"
#include "TermConst.h"
#include "PrefHandler.h"
#include "MenuUtil.h"
#include "PrefView.h"
#include "spawn.h"
using std::nothrow;
// defined VTKeyTbl.c
@@ -93,9 +94,6 @@ TermView::TermView(BRect frame, CodeConv *inCodeConv, int fd)
fScrBot(fTermRows - 1),
fScrBufSize(gTermPref->getInt32(PREF_HISTORY_SIZE)),
fScrRegionSet(0),
fPopMenu(NULL),
fPopEncoding(NULL),
fPopSize(NULL),
fSelected(false),
fMouseTracking(false),
fViewThread(-1),
@@ -105,20 +103,19 @@ TermView::TermView(BRect frame, CodeConv *inCodeConv, int fd)
fDrawRect_p(0),
fIMflag(false)
{
// Cursor reset.
// Reset cursor
fCurPos.Set(0, 0);
fCurStack.Set(0, 0);
fPreviousMousePoint.Set(0, 0);
fSelStart.Set(-1, -1);
fSelEnd.Set(-1, -1);
SetMouseButton();
SetMouseCursor();
SetTermFont(be_plain_font, be_plain_font);
//SetIMAware(gTermPref->getInt32(PREF_IM_AWARE));
InitViewThread();
_InitViewThread();
}
@@ -166,16 +163,6 @@ TermView::SetTermSize(int rows, int cols, bool resize)
}
//! Set mouse button assignments
void
TermView::SetMouseButton()
{
mSelectButton = SetupMouseButton(gTermPref->getString(PREF_SELECT_MBUTTON));
mSubMenuButton = SetupMouseButton(gTermPref->getString(PREF_SUBMENU_MBUTTON));
mPasteMenuButton = SetupMouseButton(gTermPref->getString(PREF_PASTE_MBUTTON));
}
//! Sets the mouse cursor image
void
TermView::SetMouseCursor()
@@ -744,7 +731,7 @@ TermView::ScrollAtCursor()
thread_id
TermView::InitViewThread()
TermView::_InitViewThread()
{
// spwan Draw Engine thread.
if (fViewThread < 0) {
@@ -1735,91 +1722,50 @@ TermView::WritePTY(const uchar *text, int numBytes)
}
//! Make encoding pop up menu (make copy of window's one.)
void
TermView::SetupPop(void)
{
fPopMenu = new BPopUpMenu("");
MakeEncodingMenu(fPopMenu, gNowCoding, true);
fPopMenu->SetTargetForItems(Window());
}
// convert button name to number.
int32
TermView::SetupMouseButton(const char *bname)
{
if (!strcmp(bname, "Disable"))
return 0;
if (!strcmp(bname, "Button 1"))
return B_PRIMARY_MOUSE_BUTTON;
if (!strcmp(bname, "Button 2"))
return B_SECONDARY_MOUSE_BUTTON;
if (!strcmp(bname, "Button 3"))
return B_TERTIARY_MOUSE_BUTTON;
return 0; //Disable
}
void
TermView::MouseDown(BPoint where)
{
int32 buttons = 0, clicks = 0;
int32 mod;
BPoint inPoint;
ssize_t num_bytes;
int32 buttons;
Window()->CurrentMessage()->FindInt32("buttons", &buttons);
// paste button
if (buttons == mPasteMenuButton) {
if ((buttons & (B_SECONDARY_MOUSE_BUTTON | B_TERTIARY_MOUSE_BUTTON)) != 0) {
if (fSelected) {
// If selected region, copy text from region.
BString copyStr("");
fTextBuffer->GetStringFromRegion(copyStr);
num_bytes = copyStr.Length();
WritePTY((uchar *)copyStr.String(), num_bytes);
// copy text from region
BString copy;
fTextBuffer->GetStringFromRegion(copy);
WritePTY((uchar *)copy.String(), copy.Length());
} else {
// If don't selected, copy text from clipboard.
// copy text from clipboard.
DoPaste();
}
return;
}
// Select Region
if (buttons == mSelectButton) {
if (buttons == B_PRIMARY_MOUSE_BUTTON) {
int32 mod, clicks;
Window()->CurrentMessage()->FindInt32("modifiers", &mod);
Window()->CurrentMessage()->FindInt32("clicks", &clicks);
if (fSelected) {
CurPos inPos, stPos, edPos;
if (fSelStart < fSelEnd) {
stPos = fSelStart;
edPos = fSelEnd;
} else {
stPos = fSelEnd;
edPos = fSelStart;
}
inPos = BPointToCurPos(where);
// If mouse pointer is avove selected Region, start Drag'n Copy.
if (inPos > stPos && inPos < edPos) {
if (mod & B_CONTROL_KEY || gTermPref->getInt32(PREF_DRAGN_COPY)) {
BPoint p;
uint32 bt;
do {
GetMouse(&p, &bt);
if (bt == 0) {
@@ -1861,7 +1807,7 @@ TermView::MouseDown(BPoint where)
}
// If mouse has a lot of movement, disable double/triple click.
inPoint = fPreviousMousePoint - where;
BPoint inPoint = fPreviousMousePoint - where;
if (abs((int)inPoint.x) > 16 || abs((int)inPoint.y) > 16)
clicks = 1;
@@ -1894,16 +1840,7 @@ TermView::MouseDown(BPoint where)
}
return;
}
// Sub menu(coding popup menu)
if (buttons == mSubMenuButton){
ConvertToScreen(&where);
SetupPop();
fPopMenu->Go(where, true);
delete fPopMenu;
return;
}
BView::MouseDown(where);
}
+239 -311
View File
@@ -1,4 +1,5 @@
/*
* Copyright 2001-2007, Haiku.
* Copyright (c) 2003-4 Kian Duffy <myob@users.sourceforge.net>
* Parts Copyright (C) 1998,99 Kazuho Okui and Takashi Murai.
*
@@ -27,16 +28,17 @@
* THE SOFTWARE.
*
*/
#ifndef TERMVIEW_H
#define TERMVIEW_H
#include "CurPos.h"
#include "TermConst.h"
#include "TermWindow.h"
#include <View.h>
#include <String.h>
#include <MessageRunner.h>
#include "TermConst.h"
#include "TermWindow.h"
#include "CurPos.h"
/* Cursor Blinking flag */
#define CUROFF 0
@@ -47,44 +49,45 @@
#define RECT_BUF_SIZE 32
const unsigned char M_ADD_CURSOR [] = {
16, // Size
1, // Color depth
0, // Hot spot y
1, // Hot spot x
// Cursor image
0x70, 0x00,
0x48, 0x00,
0x48, 0x00,
0x27, 0xc0,
0x24, 0xb8,
0x12, 0x54,
0x10, 0x02,
0x78, 0x02,
0x98, 0x02,
0x84, 0x02,
0x60, 0x02,
0x18, 0x12,
0x04, 0x10,
0x02, 0x7c,
0x00, 0x10,
0x00, 0x10,
// Mask image
0x70, 0x00,
0x78, 0x00,
0x78, 0x00,
0x3f, 0xc0,
0x3f, 0xf8,
0x1f, 0xfc,
0x1f, 0xfe,
0x7f, 0xfe,
0xff, 0xfe,
0xff, 0xfe,
0x7f, 0xfe,
0x1f, 0xfe,
0x07, 0xfc,
0x03, 0xfc,
0x00, 0x10,
0x00, 0x10,
16, // Size
1, // Color depth
0, // Hot spot y
1, // Hot spot x
// Cursor image
0x70, 0x00,
0x48, 0x00,
0x48, 0x00,
0x27, 0xc0,
0x24, 0xb8,
0x12, 0x54,
0x10, 0x02,
0x78, 0x02,
0x98, 0x02,
0x84, 0x02,
0x60, 0x02,
0x18, 0x12,
0x04, 0x10,
0x02, 0x7c,
0x00, 0x10,
0x00, 0x10,
// Mask image
0x70, 0x00,
0x78, 0x00,
0x78, 0x00,
0x3f, 0xc0,
0x3f, 0xf8,
0x1f, 0xfc,
0x1f, 0xfe,
0x7f, 0xfe,
0xff, 0xfe,
0xff, 0xfe,
0x7f, 0xfe,
0x1f, 0xfe,
0x07, 0xfc,
0x03, 0xfc,
0x00, 0x10,
0x00, 0x10,
};
class TermBuffer;
@@ -93,323 +96,248 @@ class BPopUpMenu;
class BScrollBar;
class BString;
class TermView : public BView
{
public:
//
// Constructor, Destructor, and Initializer.
//
TermView (BRect frame, CodeConv *inCodeConv, int fd);
~TermView ();
class TermView : public BView {
public:
TermView(BRect frame, CodeConv *inCodeConv, int fd);
~TermView();
//
// Initializer, Set function
//
void SetTermFont(const BFont *halfFont, const BFont *fullFont);
void GetFontSize (int *width, int *height);
BRect SetTermSize (int rows, int cols, bool flag);
void SetTermColor (void);
void SetMouseButton (void);
void SetMouseCursor (void);
// void SetIMAware (bool);
void SetScrollBar (BScrollBar *scrbar);
BScrollBar *ScrollBar () const { return fScrollBar; };
void SetTermFont(const BFont *halfFont, const BFont *fullFont);
void GetFontSize(int *width, int *height);
BRect SetTermSize(int rows, int cols, bool flag);
void SetTermColor();
void SetMouseCursor();
// void SetIMAware (bool);
void SetScrollBar(BScrollBar *scrbar);
BScrollBar *ScrollBar() const { return fScrollBar; };
//
// Output Charactor.
//
void PutChar (uchar *string, ushort attr, int width);
void PutCR (void);
void PutLF (void);
void PutNL (int num);
void SetInsertMode (int flag);
void InsertSpace (int num);
int TermDraw (const CurPos &start, const CurPos &end);
int TermDrawRegion (CurPos start, CurPos end);
int TermDrawSelectedRegion (CurPos start, CurPos end);
// Output Charactor
void PutChar(uchar *string, ushort attr, int width);
void PutCR(void);
void PutLF(void);
void PutNL(int num);
void SetInsertMode(int flag);
void InsertSpace(int num);
//
// Delete Charactor.
//
void EraseBelow (void);
void DeleteChar (int num);
void DeleteColumns (void);
void DeleteLine (int num);
//
// Get and Set Cursor position.
//
void SetCurPos (int x, int y);
void SetCurX (int x);
void SetCurY (int y);
void GetCurPos (CurPos *inCurPos);
int GetCurX (void);
int GetCurY (void);
int TermDraw(const CurPos &start, const CurPos &end);
int TermDrawRegion(CurPos start, CurPos end);
int TermDrawSelectedRegion(CurPos start, CurPos end);
void SaveCursor (void);
void RestoreCursor (void);
//
// Move Cursor
//
void MoveCurRight (int num);
void MoveCurLeft (int num);
void MoveCurUp (int num);
void MoveCurDown (int num);
// Delete Charactor
void EraseBelow();
void DeleteChar(int num);
void DeleteColumns();
void DeleteLine(int num);
//
// Cursor setting.
//
void DrawCursor (void);
void BlinkCursor (void);
void SetCurDraw (bool flag);
void SetCurBlinking (bool flag);
// Get and Set Cursor position
void SetCurPos(int x, int y);
void SetCurX(int x);
void SetCurY(int y);
//
// Scroll region.
//
void ScrollRegion (int top, int bot, int dir, int num);
void SetScrollRegion (int top, int bot);
void ScrollAtCursor (void);
void GetCurPos(CurPos *inCurPos);
int GetCurX();
int GetCurY();
//
// Other.
//
void UpdateSIGWINCH();
void DeviceStatusReport (int);
void UpdateLine (void);
void ScrollScreen (void);
void ScrollScreenDraw (void);
void GetFrameSize (float *width, float *height);
void GetFontInfo (int *, int*);
bool Find (const BString &str, bool forwardSearch, bool matchCase, bool matchWord);
void GetSelection (BString &str);
void SaveCursor();
void RestoreCursor();
/*
* PRIVATE MEMBER.
*/
// Move Cursor
void MoveCurRight(int num);
void MoveCurLeft(int num);
void MoveCurUp(int num);
void MoveCurDown(int num);
private:
/*
* static Functions (Thread functions).
*/
// Cursor setting
void DrawCursor();
void BlinkCursor();
void SetCurDraw(bool flag);
void SetCurBlinking(bool flag);
static int32 ViewThread (void *);
static int32 MouseTracking (void *);
// Scroll region
void ScrollRegion(int top, int bot, int dir, int num);
void SetScrollRegion(int top, int bot);
void ScrollAtCursor();
/*
* Hook Functions.
*/
void AttachedToWindow (void);
void Draw (BRect updateRect);
void WindowActivated (bool active);
void KeyDown (const char*, int32);
void MouseDown (BPoint where);
void MouseMoved (BPoint, uint32, const BMessage *);
void FrameResized(float width, float height);
void MessageReceived(BMessage* message);
// Other
void UpdateSIGWINCH();
void DeviceStatusReport(int);
void UpdateLine();
void ScrollScreen();
void ScrollScreenDraw();
void GetFrameSize(float *width, float *height);
void GetFontInfo(int *, int*);
bool Find(const BString &str, bool forwardSearch, bool matchCase, bool matchWord);
void GetSelection(BString &str);
/*
* Private Member Functions.
*/
protected:
virtual void AttachedToWindow(void);
virtual void Draw(BRect updateRect);
virtual void WindowActivated(bool active);
virtual void KeyDown(const char*, int32);
virtual void MouseDown(BPoint where);
virtual void MouseMoved(BPoint, uint32, const BMessage *);
thread_id InitViewThread (void);
virtual void FrameResized(float width, float height);
virtual void MessageReceived(BMessage* message);
inline void DrawLines (int , int, ushort, uchar *, int, int, int, BView *);
private:
static int32 ViewThread(void *);
static int32 MouseTracking(void *);
void DoPrint(BRect updateRect);
thread_id _InitViewThread(void);
void DrawLines(int , int, ushort, uchar *, int, int, int, BView *);
void DoPrint(BRect updateRect);
void ResizeScrBarRange (void);
void DoFileDrop(entry_ref &ref);
void ResizeScrBarRange (void);
void DoFileDrop(entry_ref &ref);
// edit menu function.
void DoCopy (void);
void DoPaste (void);
void DoSelectAll (void);
void DoClearAll (void);
// edit menu function.
void DoCopy();
void DoPaste();
void DoSelectAll();
void DoClearAll();
int SubstMetaChar (const char *p, char *q);
void WritePTY (const uchar *text, int num_byteses);
// Comunicate Input Method
// void DoIMStart (BMessage* message);
// void DoIMStop (BMessage* message);
// void DoIMChange (BMessage* message);
// void DoIMLocation (BMessage* message);
// void DoIMConfirm (void);
void ConfirmString (const char *, int32);
int32 GetCharFromUTF8String (const char *, char *);
int32 GetWidthFromUTF8String (const char *);
// mouse operation
void SetupPop (void);
int32 SetupMouseButton (const char *bname);
int SubstMetaChar (const char *p, char *q);
void WritePTY (const uchar *text, int num_byteses);
// Mouse select
void Select (CurPos start, CurPos end);
void AddSelectRegion (CurPos);
void ResizeSelectRegion (CurPos);
// Comunicate Input Method
// void DoIMStart (BMessage* message);
// void DoIMStop (BMessage* message);
// void DoIMChange (BMessage* message);
// void DoIMLocation (BMessage* message);
// void DoIMConfirm (void);
void ConfirmString (const char *, int32);
int32 GetCharFromUTF8String (const char *, char *);
int32 GetWidthFromUTF8String (const char *);
void DeSelect(void);
// mouse operation
int32 SetupMouseButton(const char *bname);
// select word function
void SelectWord (BPoint where, int mod);
void SelectLine (BPoint where, int mod);
// Mouse select
void Select(CurPos start, CurPos end);
void AddSelectRegion(CurPos);
void ResizeSelectRegion(CurPos);
// point and text offset conversion.
CurPos BPointToCurPos (const BPoint &p);
BPoint CurPosToBPoint (const CurPos &pos);
void DeSelect();
bool CheckSelectedRegion (const CurPos &pos);
// select word function
void SelectWord(BPoint where, int mod);
void SelectLine(BPoint where, int mod);
inline void SendDataToDrawEngine (int, int, int, int);
/*
* DATA Member.
*/
// point and text offset conversion.
CurPos BPointToCurPos(const BPoint &p);
BPoint CurPosToBPoint(const CurPos &pos);
int fTerminalFd;
//
// Font and Width.
//
BFont fHalfFont;
BFont fFullFont;
bool CheckSelectedRegion(const CurPos &pos);
inline void SendDataToDrawEngine(int, int, int, int);
int fFontWidth;
int fFontHeight;
int fTerminalFd;
int fFontAscent;
struct escapement_delta fEscapement;
//
// Flags.
//
// Font and Width
BFont fHalfFont;
BFont fFullFont;
int fFontWidth;
int fFontHeight;
int fFontAscent;
struct escapement_delta fEscapement;
// Update flag (Set on PutChar).
bool fUpdateFlag;
// Flags
// Terminal insertmode flag (use PutChar).
bool fInsertModeFlag;
// Update flag (Set on PutChar).
bool fUpdateFlag;
// Scroll count, range.
int fScrollUpCount;
int fScrollBarRange;
// Terminal insertmode flag (use PutChar).
bool fInsertModeFlag;
// Frame Resized flag.
bool fFrameResized;
// Cursor Blinking, draw flag.
bool fCursorDrawFlag;
bool fCursorStatus;
bool fCursorBlinkingFlag;
bool fCursorRedrawFlag;
int fCursorHeight;
// Scroll count, range.
int fScrollUpCount;
int fScrollBarRange;
// terminal text attribute flag.
bool fInverseFlag;
bool fBoldFlag;
bool fUnderlineFlag;
//
// Cursor position.
//
CurPos fCurPos;
CurPos fCurStack;
// Frame Resized flag.
bool fFrameResized;
int fBufferStartPos;
// Cursor Blinking, draw flag.
bool fCursorDrawFlag;
bool fCursorStatus;
bool fCursorBlinkingFlag;
bool fCursorRedrawFlag;
//
// Terminal rows and columns.
//
int fTermRows;
int fTermColumns;
int fCursorHeight;
//
// Terminal view pointer.
//
int fTop;
// terminal text attribute flag.
bool fInverseFlag;
bool fBoldFlag;
bool fUnderlineFlag;
//
// Object pointer.
//
TermBuffer *fTextBuffer;
CodeConv *fCodeConv;
BScrollBar *fScrollBar;
//
// Offscreen Bitmap and View.
//
// Cursor position.
CurPos fCurPos;
CurPos fCurStack;
BRect fSrcRect;
BRect fDstRect;
//
// Color and Attribute.
//
int fBufferStartPos;
// text fore and back color
rgb_color fTextForeColor, fTextBackColor;
// Terminal rows and columns.
int fTermRows;
int fTermColumns;
// cursor fore and back color
rgb_color fCursorForeColor, fCursorBackColor;
// Terminal view pointer.
int fTop;
// selected region color
rgb_color fSelectForeColor, fSelectBackColor;
uchar fTermAttr;
// Object pointer.
//
// Scroll Region
//
int fScrTop;
int fScrBot;
int fScrBufSize;
bool fScrRegionSet;
TermBuffer *fTextBuffer;
CodeConv *fCodeConv;
BScrollBar *fScrollBar;
BPopUpMenu *fPopMenu;
BMenu *fPopEncoding;
BMenu *fPopSize;
// mouse
int32 mSelectButton;
int32 mSubMenuButton;
int32 mPasteMenuButton;
// Offscreen Bitmap and View.
bool fMouseImage;
BRect fSrcRect;
BRect fDstRect;
BPoint fPreviousMousePoint;
// Color and Attribute.
// view selection
CurPos fSelStart;
CurPos fSelEnd;
bool fSelected;
bool fMouseTracking;
// thread ID / flags.
thread_id fViewThread;
thread_id fMouseThread;
bool fQuitting;
rgb_color fTextForeColor, fTextBackColor;
rgb_color fCursorForeColor, fCursorBackColor;
rgb_color fSelectForeColor, fSelectBackColor;
uchar fTermAttr;
// DrawEngine parameter.
sem_id fDrawRectSem;
sDrawRect fDrawRectBuffer[RECT_BUF_SIZE];
int fDrawRect_p;
// Scroll Region
int fScrTop;
int fScrBot;
int fScrBufSize;
bool fScrRegionSet;
// Input Method parameter.
int fIMViewPtr;
CurPos fIMStartPos;
CurPos fIMEndPos;
BString fIMString;
bool fIMflag;
BMessenger fIMMessenger;
// mouse
int32 mSelectButton;
int32 mSubMenuButton;
int32 mPasteMenuButton;
int32 fImCodeState;
bool fMouseImage;
BPoint fPreviousMousePoint;
// view selection
CurPos fSelStart;
CurPos fSelEnd;
bool fSelected;
bool fMouseTracking;
// thread ID / flags.
thread_id fViewThread;
thread_id fMouseThread;
bool fQuitting;
// DrawEngine parameter.
sem_id fDrawRectSem;
sDrawRect fDrawRectBuffer[RECT_BUF_SIZE];
int fDrawRect_p;
// Input Method parameter.
int fIMViewPtr;
CurPos fIMStartPos;
CurPos fIMEndPos;
BString fIMString;
bool fIMflag;
BMessenger fIMMessenger;
int32 fImCodeState;
};