lots'o' wxpython modules files
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3345 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
903
utils/wxPython/modules/lseditor/tdefs.h
Normal file
903
utils/wxPython/modules/lseditor/tdefs.h
Normal file
@@ -0,0 +1,903 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: No names yet.
|
||||
// Purpose: Contrib. demo
|
||||
// Author: Aleksandras Gluchovas
|
||||
// Modified by:
|
||||
// Created: 03/04/1999
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Aleskandars Gluchovas
|
||||
// Licence: GNU General Public License
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; either version 2 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef __TDEFS_G__
|
||||
#define __TDEFS_G__
|
||||
|
||||
// should be compiled with wxSTL-v.1.2 (or higher)
|
||||
|
||||
#include "wxstldefs.h"
|
||||
|
||||
#if defined( wxUSE_TEMPLATE_STL )
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#else
|
||||
#include "wxstlvec.h"
|
||||
#include "wxstllst.h"
|
||||
#endif
|
||||
|
||||
#include "wx/window.h"
|
||||
#include "wx/scrolbar.h"
|
||||
|
||||
#include "sourcepainter.h"
|
||||
|
||||
#define NPOS ((size_t)(-1))
|
||||
|
||||
class wxTextEditorModel;
|
||||
class wxTextEditorView;
|
||||
|
||||
/*
|
||||
* class represents column-row position in the source text,
|
||||
* may refere to the column past the end-of-line,
|
||||
* but should not point past the last-line in the text
|
||||
*/
|
||||
|
||||
class TPosition
|
||||
{
|
||||
public:
|
||||
size_t mRow;
|
||||
size_t mCol;
|
||||
|
||||
inline TPosition() : mRow(0), mCol(0) {}
|
||||
|
||||
inline TPosition( size_t row, size_t col )
|
||||
|
||||
: mRow( row ), mCol( col ) {}
|
||||
|
||||
inline bool operator>( const TPosition& rhs ) const
|
||||
{
|
||||
if ( mRow == rhs.mRow ) return mCol > rhs.mCol;
|
||||
else
|
||||
return mRow > rhs.mRow;
|
||||
}
|
||||
|
||||
inline bool operator<( const TPosition& rhs ) const
|
||||
{
|
||||
if ( mRow == rhs.mRow ) return mCol < rhs.mCol;
|
||||
else
|
||||
return mRow < rhs.mRow;
|
||||
}
|
||||
};
|
||||
|
||||
class TRange
|
||||
{
|
||||
public:
|
||||
TPosition mFrom;
|
||||
TPosition mTill;
|
||||
|
||||
TRange() {}
|
||||
TRange( const TPosition& from, const TPosition& till )
|
||||
: mFrom( from ), mTill( till )
|
||||
{}
|
||||
};
|
||||
|
||||
inline bool operator==( const TPosition& lhs, const TPosition& rhs )
|
||||
{
|
||||
return lhs.mRow == rhs.mRow && lhs.mCol == rhs.mCol;
|
||||
}
|
||||
|
||||
// FOR NOW:: bigger ones...
|
||||
|
||||
#define MAX_BLOCK_LEN (1024*164)
|
||||
#define BALANCED_BLOCK_LEN (1024*152)
|
||||
#define FILLED_BLOCK_LEN (1024*148)
|
||||
|
||||
// FOR NOW::
|
||||
#define T_ASSERT( x ) if ( !(x) ) throw;
|
||||
|
||||
// to speed up debug v. :
|
||||
|
||||
#define is_eol_char( ch ) ( ch == (char)10 )
|
||||
#define is_DOS_eol_char( ch ) ( ch == (char)13 )
|
||||
|
||||
// the target-platfrom eol-marking is selected when
|
||||
// new text document is created or auto-detection
|
||||
// failed to determine the text-format (e.g. no EOLs found at all)
|
||||
|
||||
#if defined(__WINDOWS__) || defined(__WXMSW__)
|
||||
|
||||
#define IS_UNIX_TEXT_BY_DEFAULT FALSE
|
||||
#else
|
||||
#define IS_UNIX_TEXT_BY_DEFAULT TRUE
|
||||
#endif
|
||||
|
||||
//inline bool is_eol_char( char ch ) { return ch == 10 && ch == 13 ; }
|
||||
|
||||
/*
|
||||
* Class contains single fragment of the source text, which
|
||||
* may grow or shrink in the process of editing. Blocks always
|
||||
* start at the begining of the line and end at eol, i.e. lines
|
||||
* are not broken among blocks
|
||||
*/
|
||||
|
||||
class TBlock
|
||||
{
|
||||
public:
|
||||
char mBuf[MAX_BLOCK_LEN];
|
||||
size_t mTextLen;
|
||||
size_t mRowCount;
|
||||
|
||||
TBlock() : mTextLen(0), mRowCount(0) { mBuf[0] = '\0'; }
|
||||
|
||||
void RecalcBlockProperties();
|
||||
|
||||
bool operator==( const TBlock& blk ) const { return this == &blk; }
|
||||
|
||||
bool operator!=( const TBlock& blk ) const { return this != &blk; }
|
||||
|
||||
bool operator<( const TBlock& blk ) const { return TRUE; }
|
||||
|
||||
bool operator>( const TBlock& blk ) const { return FALSE; }
|
||||
};
|
||||
|
||||
/*
|
||||
* captures info about mutable command
|
||||
*/
|
||||
|
||||
class TCommand
|
||||
{
|
||||
public:
|
||||
|
||||
TCommand() : mType(-1) {}
|
||||
TCommand( int type ) : mType( type ) {}
|
||||
~TCommand() {}
|
||||
|
||||
int mType;
|
||||
char* mData;
|
||||
size_t mDataLen;
|
||||
|
||||
TRange mRange;
|
||||
|
||||
// positions of cursor before and after executions of this command
|
||||
TPosition mPrePos;
|
||||
TPosition mPostPos;
|
||||
|
||||
};
|
||||
|
||||
enum TEXT_EDITOR_COMMAND
|
||||
{
|
||||
TCMD_INSERT,
|
||||
TCMD_DELETE
|
||||
};
|
||||
|
||||
enum TEXT_CHANGE_TYPE
|
||||
{
|
||||
CT_MODIFIED,
|
||||
CT_DELETED,
|
||||
CT_INSERTED
|
||||
};
|
||||
|
||||
class wxTextEditorView;
|
||||
|
||||
// STL-list is used for managing blocks, since it's alg. collects
|
||||
// removed elements into a free-list, from which they
|
||||
// can be reclaimed later, that way heap-fragmentation may be reduced
|
||||
|
||||
#if defined( wxUSE_TEMPLATE_STL )
|
||||
typedef list<TBlock> TBlockListT;
|
||||
typedef vector<TCommand*> TCommandListT;
|
||||
typedef vector<wxTextEditorView*> TextViewListT;
|
||||
#else
|
||||
typedef WXSTL_LIST( TBlock ) TBlockListT;
|
||||
|
||||
typedef TCommand* TCommandPtrT;
|
||||
typedef WXSTL_VECTOR_SHALLOW_COPY( TCommandPtrT ) TCommandListT;
|
||||
|
||||
typedef wxTextEditorView* TextViewPtrT;
|
||||
typedef WXSTL_VECTOR_SHALLOW_COPY( TextViewPtrT ) TextViewListT;
|
||||
#endif
|
||||
|
||||
typedef TBlockListT::iterator TBlockIteratorT;
|
||||
|
||||
|
||||
/*
|
||||
* class shields the higher-level operations from direct access
|
||||
* to blocks of fragmented in-memory buffers
|
||||
*/
|
||||
|
||||
class TTextIterator
|
||||
{
|
||||
public:
|
||||
TBlockIteratorT mBlockIter;
|
||||
TBlockIteratorT mEndOfListIter;
|
||||
TPosition mPos;
|
||||
|
||||
size_t mActualRow;
|
||||
size_t mFirstRowInBlock;
|
||||
|
||||
char* mpCurRowStart;
|
||||
bool mIsEof;
|
||||
|
||||
public:
|
||||
TTextIterator();
|
||||
|
||||
char GetChar();
|
||||
bool IsEol();
|
||||
bool IsEof();
|
||||
bool IsLastLine();
|
||||
int GetDistFromEol();
|
||||
|
||||
void NextChar();
|
||||
void PreviousChar();
|
||||
void NextWord();
|
||||
void PreviousWord();
|
||||
void ToEndOfLine();
|
||||
void ToStartOfLine();
|
||||
|
||||
bool IsInLastBlock();
|
||||
|
||||
// accesors
|
||||
|
||||
size_t GetLineLen();
|
||||
TPosition GetPosition();
|
||||
|
||||
char* GetClosestPos();
|
||||
char* GotoClosestPos();
|
||||
|
||||
inline char* GetBlockStart() { return (*mBlockIter).mBuf; }
|
||||
inline char* GetBlockEnd() { return (*mBlockIter).mBuf + (*mBlockIter).mTextLen; }
|
||||
|
||||
bool DetectUnixText();
|
||||
|
||||
// adjust this member to add specific separators,
|
||||
// the default value is : ",.()[]\t\\+-*/|=<>:;\t\n~?!%"
|
||||
|
||||
static string mSeparators;
|
||||
|
||||
static bool IsSeparator( char ch );
|
||||
};
|
||||
|
||||
class wxTextEditorModel;
|
||||
|
||||
class TTextChangeListenerBase
|
||||
{
|
||||
public:
|
||||
virtual void OnTextChanged( wxTextEditorModel* pModel, size_t atRow, size_t nRows, TEXT_CHANGE_TYPE ct ) = 0;
|
||||
};
|
||||
|
||||
class TCppJavaHighlightListener : public TTextChangeListenerBase
|
||||
{
|
||||
protected:
|
||||
wxTextEditorModel* mpModel; // is set up temporarely
|
||||
|
||||
enum { IN_COMMENT_STATE, OUT_OF_COMMENT_STATE };
|
||||
|
||||
public:
|
||||
virtual void OnTextChanged( wxTextEditorModel* pModel, size_t atRow, size_t nRows, TEXT_CHANGE_TYPE ct );
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Base class for user-defined "bookmarks" within the source-text, bookmarks
|
||||
* are automatically repositioned or deleted as the text is edited. Class
|
||||
* can be subclassed to add pin-specific data (e.g. breakpoint information)
|
||||
*/
|
||||
|
||||
class TPinBase
|
||||
{
|
||||
public:
|
||||
int mTypeCode;
|
||||
size_t mRow;
|
||||
|
||||
public:
|
||||
TPinBase()
|
||||
: mTypeCode(-1), mRow(NPOS) {}
|
||||
|
||||
TPinBase( int typeCode, size_t row )
|
||||
: mTypeCode( typeCode ), mRow( row ) {}
|
||||
|
||||
size_t GetRow() { return mRow; }
|
||||
int GetTypeCode() { return mTypeCode; }
|
||||
|
||||
virtual ~TPinBase() {}
|
||||
};
|
||||
|
||||
// "recommened" type-code ranges for custom pins
|
||||
|
||||
#define HIHGLIGHTING_PINS_TC_STARRT 50
|
||||
#define OTHER_PINS_TC_START 100
|
||||
|
||||
inline bool operator<( const TPinBase& lhs, TPinBase& rhs )
|
||||
|
||||
{ return lhs.mRow < rhs.mRow; }
|
||||
|
||||
#if defined( wxUSE_TEMPLATE_STL )
|
||||
|
||||
typedef vector<TPinBase*> PinListT;
|
||||
typedef vector<TTextChangeListenerBase*> ChangeListenerListT;
|
||||
#else
|
||||
typedef TPinBase* TPinBasePtrT;
|
||||
typedef WXSTL_VECTOR_SHALLOW_COPY( TPinBasePtrT ) PinListT;
|
||||
|
||||
typedef TTextChangeListenerBase* TTextChangeListenerBasePtrT;
|
||||
typedef WXSTL_VECTOR_SHALLOW_COPY( TTextChangeListenerBasePtrT ) ChangeListenerListT;
|
||||
#endif
|
||||
|
||||
/* OLD STUFF::
|
||||
|
||||
struct TPinBaseCompareFunctor
|
||||
{
|
||||
inline int operator()(const TPinBasePtrT* x, const TPinBasePtrT*& y ) const
|
||||
{
|
||||
return x->mLine < y->mLine;
|
||||
}
|
||||
};
|
||||
|
||||
typedef WXSTL_MULTIMAP( TPinBasePtrT, TPinBasePtrT, TPinBaseCompareFunctor ) PinMapT;
|
||||
typedef PinMapT::iterator PinIteratorT;
|
||||
*/
|
||||
|
||||
/*
|
||||
* Class manages access and manpulation of in-memory text. Can
|
||||
* be accessed by multiple views, only one of which can be active
|
||||
* at a time.
|
||||
*/
|
||||
|
||||
class wxTextEditorModel
|
||||
{
|
||||
protected:
|
||||
TBlockListT mBlocks;
|
||||
|
||||
TCommandListT mCommands;
|
||||
size_t mCurCommand;
|
||||
|
||||
TextViewListT mViews;
|
||||
wxTextEditorView* mpActiveView;
|
||||
|
||||
PinListT mPins;
|
||||
bool mIsUnixText;
|
||||
|
||||
ChangeListenerListT mChangeListeners;
|
||||
|
||||
public:
|
||||
/*** public properties ***/
|
||||
|
||||
bool mTextChanged;
|
||||
size_t mChangedFromRow;
|
||||
size_t mChangedTillRow;
|
||||
|
||||
bool mWasChanged; // TRUE, if any content has been changed
|
||||
|
||||
TPosition mCursorPos;
|
||||
|
||||
TPosition mPrevSelectionStart;
|
||||
TPosition mPrevSelectionEnd;
|
||||
TPosition mPrevCursorPos;
|
||||
|
||||
TPosition mSelectionStart;
|
||||
TPosition mSelectionEnd;
|
||||
size_t mRowsPerPage;
|
||||
|
||||
bool mIsReadOnly; // default: FALSE
|
||||
bool mIsModified;
|
||||
bool mInsertMode; // default: TRUE
|
||||
bool mAutoIndentMode; // default: TRUE
|
||||
bool mSmartIndentMode; // default: TRUE
|
||||
|
||||
bool mIsSelectionEditMode; // default: TRUE
|
||||
size_t mTabSize; // default: 4
|
||||
|
||||
StrListT mSearchExprList;
|
||||
string mLastFindExpr;
|
||||
|
||||
bool mCheckPointDestroyed;
|
||||
size_t mCheckPointCmdNo;
|
||||
|
||||
protected:
|
||||
|
||||
size_t GetLineCountInRange( char* from, char* till );
|
||||
|
||||
// two lowest-level operations
|
||||
void DoInsertText ( const TPosition& pos, char* text, size_t len, TRange& actualRange );
|
||||
void DoDeleteRange( const TPosition& from, const TPosition& till, TRange& actualRange );
|
||||
|
||||
void DoExecuteNewCommand( TCommand& cmd );
|
||||
|
||||
void DoReexecuteCommand( TCommand& cmd );
|
||||
void DoUnexecuteCommand( TCommand& cmd );
|
||||
|
||||
|
||||
void ExecuteCommand( TCommand* pCmd );
|
||||
|
||||
// to methods enabling grouping of undo-able commands
|
||||
bool CanPrependCommand( TCommand* pCmd );
|
||||
void PrependCommand( TCommand* pCmd );
|
||||
|
||||
void SetPostPos( const TPosition& pos );
|
||||
|
||||
void UndoImpl();
|
||||
void RedoImpl();
|
||||
|
||||
void StartBatch();
|
||||
void FinishBatch();
|
||||
|
||||
void CheckSelection();
|
||||
void TrackSelection();
|
||||
|
||||
void NotifyView();
|
||||
void NotifyAllViews();
|
||||
|
||||
void NotifyTextChanged( size_t atRow, size_t nRows, TEXT_CHANGE_TYPE ct );
|
||||
void NotifyTextChanged( TPosition from, TPosition till, TEXT_CHANGE_TYPE ct );
|
||||
|
||||
void ArrangePositions( TPosition& upper, TPosition& lower );
|
||||
void ArrangePositions( size_t& upper, size_t& lower );
|
||||
|
||||
void MergeChange( size_t fromRow, size_t nRows );
|
||||
|
||||
void PrepreForCommand();
|
||||
|
||||
size_t TextToScrColumn( const TPosition& pos );
|
||||
size_t ScrToTextColumn( TPosition pos );
|
||||
|
||||
void DoMoveCursor( int rows, int cols );
|
||||
|
||||
public:
|
||||
wxTextEditorModel();
|
||||
virtual ~wxTextEditorModel();
|
||||
|
||||
// utilities
|
||||
|
||||
char* AllocCharacters( size_t n );
|
||||
char* AllocCharacters( size_t n, const char* srcBuf );
|
||||
void FreeCharacters( char* buf );
|
||||
|
||||
void DeleteSelection();
|
||||
TTextIterator CreateIterator( const TPosition& pos );
|
||||
|
||||
void DeleteRange( const TPosition& from, const TPosition& till );
|
||||
void InsertText( const TPosition& pos, const char* text, size_t len );
|
||||
void GetTextFromRange( const TPosition& from, const TPosition& till, char** text, size_t& textLen );
|
||||
void LoadTextFromFile( const wxString& fname );
|
||||
void SaveTextToFile( const wxString& fname );
|
||||
void ResetSelection();
|
||||
void ClearUndoBuffer();
|
||||
|
||||
|
||||
void DeleteAllText();
|
||||
void GetAllText( char** text, size_t& textLen );
|
||||
|
||||
void SetSelectionEditMode( bool editIsOn );
|
||||
|
||||
/*** user-level commands ***/
|
||||
|
||||
// mutable (undoable) commands
|
||||
|
||||
void OnInsertChar( char ch );
|
||||
void OnDelete();
|
||||
void OnDeleteBack();
|
||||
void OnDeleteLine();
|
||||
|
||||
void OnShiftSelectionIndent( bool left );
|
||||
|
||||
// clipboard functions
|
||||
|
||||
void OnCopy();
|
||||
void OnPaste();
|
||||
void OnCut();
|
||||
bool CanCopy();
|
||||
bool CanPaste();
|
||||
|
||||
// undo-redo
|
||||
|
||||
bool CanUndo();
|
||||
bool CanRedo();
|
||||
void OnUndo();
|
||||
void OnRedo();
|
||||
|
||||
// imutable commands
|
||||
|
||||
void OnMoveLeft();
|
||||
void OnMoveRight();
|
||||
void OnMoveUp();
|
||||
void OnMoveDown();
|
||||
|
||||
void OnWordLeft();
|
||||
void OnWordRight();
|
||||
|
||||
void OnMoveToPosition( const TPosition& pos );
|
||||
|
||||
void OnEndOfLine();
|
||||
void OnStartOfLine();
|
||||
void OnPageUp();
|
||||
void OnPageDown();
|
||||
void OnSlideUp();
|
||||
void OnSlideDown();
|
||||
void OnStartOfText();
|
||||
void OnEndOfText();
|
||||
|
||||
void OnSelectWord();
|
||||
void OnSelectAll();
|
||||
|
||||
// bookmarks
|
||||
|
||||
void OnToggleBookmark();
|
||||
void OnNextBookmark();
|
||||
void OnPreviousBookmark();
|
||||
|
||||
// search
|
||||
|
||||
bool OnFind();
|
||||
bool OnFindNext();
|
||||
bool OnFindPrevious();
|
||||
void OnGotoLine( int line, int col );
|
||||
void OnGotoLine();
|
||||
|
||||
// status
|
||||
|
||||
bool IsReadOnly();
|
||||
bool IsModified();
|
||||
bool IsInsertMode();
|
||||
|
||||
// check-pointin
|
||||
|
||||
void SetCheckpoint();
|
||||
bool CheckpointModified();
|
||||
|
||||
// accessors
|
||||
|
||||
TPosition GetStartOfSelection();
|
||||
TPosition GetEndOfSelection();
|
||||
TPosition GetCursor();
|
||||
|
||||
size_t GetTotalRowCount();
|
||||
bool SelectionIsEmpty();
|
||||
bool IsLastLine( const TPosition& pos );
|
||||
|
||||
bool IsUnixText() { return mIsUnixText; }
|
||||
|
||||
void GetSelection( char** text, size_t& textLen );
|
||||
|
||||
void SetStartOfSelection( const TPosition& pos );
|
||||
void SetEndOfSelection( const TPosition& pos );
|
||||
void SetCursor( const TPosition& pos );
|
||||
|
||||
void AddView( wxTextEditorView* pView );
|
||||
void RemoveView( wxTextEditorView* pView );
|
||||
void SetActiveView( wxTextEditorView* pView );
|
||||
wxTextEditorView* GetActiveView();
|
||||
|
||||
void SetRowsPerPage( size_t n );
|
||||
|
||||
void AddPin( TPinBase* pPin );
|
||||
PinListT& GetPins();
|
||||
|
||||
// returns NPOS, if non
|
||||
size_t FindFirstPinInRange( size_t fromRow, size_t tillRow );
|
||||
size_t FindNextPinFrom( size_t fromRow );
|
||||
size_t FindPreviousPinFrom( size_t fromRow );
|
||||
|
||||
size_t GetPinNoAt( size_t row, int pinTypeCode );
|
||||
TPinBase* GetPinAt( size_t row, int pinTypeCode );
|
||||
void RemovePinAt( size_t row, int pinTypeCode );
|
||||
|
||||
void AddChangeListener( TTextChangeListenerBase* pListener );
|
||||
};
|
||||
|
||||
class TCursorTimer;
|
||||
class wxTextEditorView;
|
||||
|
||||
class TPinPainterBase : public wxObject
|
||||
{
|
||||
public:
|
||||
int mPinTypeCode;
|
||||
|
||||
public:
|
||||
TPinPainterBase( int pinTc ) : mPinTypeCode( pinTc ) {}
|
||||
TPinPainterBase() : mPinTypeCode( -1 ) {}
|
||||
|
||||
inline int GetPinTypeCode() { return mPinTypeCode; }
|
||||
|
||||
virtual void DrawPin( TPinBase* pPin, wxTextEditorView& view, wxDC& dc,
|
||||
const wxPoint& pos, const wxSize& dim ) = 0;
|
||||
};
|
||||
|
||||
/*
|
||||
* a couple very common ping objects/painters
|
||||
*/
|
||||
|
||||
#define BOOKMARK_PIN_TC (OTHER_PINS_TC_START)
|
||||
#define BRKPOINT_PIN_TC (BOOKMARK_PIN_TC + 1)
|
||||
|
||||
class TBookmarkPainter : public TPinPainterBase
|
||||
{
|
||||
protected:
|
||||
wxBrush mBkBrush;
|
||||
|
||||
public:
|
||||
TBookmarkPainter();
|
||||
|
||||
virtual void DrawPin( TPinBase* pPin, wxTextEditorView& view, wxDC& dc,
|
||||
const wxPoint& pos, const wxSize& dim );
|
||||
};
|
||||
|
||||
class TBookmarkPin : public TPinBase
|
||||
{
|
||||
public:
|
||||
TBookmarkPin( size_t row )
|
||||
: TPinBase( BOOKMARK_PIN_TC, row )
|
||||
{}
|
||||
|
||||
static int GetPinTypeCode() { return BOOKMARK_PIN_TC; }
|
||||
};
|
||||
|
||||
class TBreakpointPainter : public TPinPainterBase
|
||||
{
|
||||
protected:
|
||||
wxBrush mBkBrush;
|
||||
|
||||
public:
|
||||
TBreakpointPainter();
|
||||
|
||||
virtual void DrawPin( TPinBase* pPin, wxTextEditorView& view, wxDC& dc,
|
||||
const wxPoint& pos, const wxSize& dim );
|
||||
};
|
||||
|
||||
class TBreakpointPin : public TPinBase
|
||||
{
|
||||
public:
|
||||
TBreakpointPin( size_t row )
|
||||
: TPinBase( BRKPOINT_PIN_TC, row )
|
||||
{}
|
||||
|
||||
static int GetPinTypeCode() { return BRKPOINT_PIN_TC; }
|
||||
};
|
||||
|
||||
|
||||
#if defined( wxUSE_TEMPLATE_STL )
|
||||
typedef vector<TPinPainterBase*> PinPainterListT;
|
||||
#else
|
||||
typedef TPinPainterBase* TPinPainterBasePtrT;
|
||||
typedef WXSTL_VECTOR_SHALLOW_COPY( TPinPainterBasePtrT ) PinPainterListT;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Class displays graphical view of data contained in wxTextModel
|
||||
*/
|
||||
|
||||
class wxTextEditorView : public wxScrolledWindow
|
||||
{
|
||||
protected:
|
||||
|
||||
wxTextEditorModel* mpModel;
|
||||
TPosition mSelectionStart;
|
||||
TPosition mSelectionEnd;
|
||||
TPosition mCursorPos;
|
||||
|
||||
TPosition mLastViewStart;
|
||||
size_t mLastRowsTotal;
|
||||
|
||||
size_t mRowsPerPage;
|
||||
size_t mColsPerPage;
|
||||
|
||||
static char* mpLineBuffer;
|
||||
static size_t mpLineBufferLen;
|
||||
|
||||
bool mFullRefreshPending;
|
||||
bool mAdjustScrollPending;
|
||||
|
||||
wxFont mFont;
|
||||
|
||||
bool mScrollingOn; // default: TRUE
|
||||
bool mCursorOn; // default: TRUE;
|
||||
|
||||
bool mLTMode; // line-tracking mode
|
||||
// (when the whole line is coloured,
|
||||
// instead of showing blinking cursor position)
|
||||
|
||||
wxColour mLTColour; // fill-colour for LT-mode
|
||||
|
||||
bool mDragStarted;
|
||||
char* mpDraggedText;
|
||||
|
||||
bool mOwnsModel;
|
||||
|
||||
wxString mFragment; // reused heap-buffer
|
||||
// for coloured fragments
|
||||
SourcePainter* mpPainter;
|
||||
PinPainterListT mPinPainters;
|
||||
TTextIterator mCashedIter;
|
||||
|
||||
static TCursorTimer* mpTimer;
|
||||
|
||||
public: /*** public properties ***/
|
||||
|
||||
int mLeftMargin; // default: 20
|
||||
int mRightMargin; // default: 0
|
||||
int mTopMargin; // default: 0
|
||||
int mBottomMargin; // default: 0
|
||||
int mMaxColumns; // default: 500
|
||||
|
||||
TPosition mPagePos;
|
||||
|
||||
// color-scheme properties
|
||||
|
||||
wxColour mNormalTextCol;
|
||||
wxColour mIndentifierTextCol;
|
||||
wxColour mReservedWordTextCol;
|
||||
wxColour mCommentTextCol;
|
||||
|
||||
wxColour mNormalBkCol;
|
||||
wxColour mSelectionFgCol;
|
||||
wxColour mSelectionBkCol;
|
||||
|
||||
wxBrush mNormalBkBrush;
|
||||
wxBrush mSelectedBkBrush;
|
||||
|
||||
// accessed by timer
|
||||
|
||||
TPosition mCursorScrPos;
|
||||
wxSize mCharDim;
|
||||
|
||||
protected:
|
||||
|
||||
char* GetLineBuffer( size_t len );
|
||||
|
||||
virtual void PaintDecorations( size_t fromRow, size_t tillRow, wxDC& dc, TTextIterator& iter );
|
||||
virtual void PaintRows( size_t fromRow, size_t tillRow, wxDC& dc );
|
||||
|
||||
void ObtainFontProperties();
|
||||
|
||||
bool IsActiveView();
|
||||
void SetTextDefaults();
|
||||
void RecalcPagingInfo();
|
||||
|
||||
TPinPainterBase* FindPainterForPin( TPinBase& pin );
|
||||
|
||||
public:
|
||||
wxTextEditorView( wxWindow* parent, wxWindowID id = -1,
|
||||
wxTextEditorModel* pModel = NULL,
|
||||
int wndStyle = wxSUNKEN_BORDER,
|
||||
bool ownsModel = TRUE );
|
||||
~wxTextEditorView();
|
||||
|
||||
/*** setup methods ***/
|
||||
|
||||
void SetModel( wxTextEditorModel* pModel );
|
||||
|
||||
// sets custom syntax-higlighting implementation
|
||||
void SetSourcePainter( SourcePainter* pPainter );
|
||||
void AddPinPainter( TPinPainterBase* pPainter );
|
||||
|
||||
void SetDefaultFont( const wxFont& font );
|
||||
wxFont& GetDefaultFont();
|
||||
|
||||
wxSize GetCharacterSize() { return mCharDim; }
|
||||
|
||||
size_t GetRowsPerPage() { return mRowsPerPage; }
|
||||
void SetRowsPerPage( size_t n );
|
||||
void SetMaxColumns( size_t n );
|
||||
|
||||
void SetLineTrackingMode( bool on, const wxColour& col = wxColour(255,255,0) );
|
||||
|
||||
void EnableCursor( bool enable );
|
||||
void EnableScrollbars( bool enable );
|
||||
|
||||
void SetColours( const wxColour& normalBkCol,
|
||||
const wxColour& selectedBkCol,
|
||||
const wxColour& selectedTextCol );
|
||||
|
||||
void SetHeighlightingColours( const wxColour& normalTextCol,
|
||||
const wxColour& identifierTextCol,
|
||||
const wxColour& reservedWordTextCol,
|
||||
const wxColour& commentTextCol );
|
||||
|
||||
void SetMargins( int top, int left, int bottom, int right );
|
||||
|
||||
// notifications from editor-model:
|
||||
|
||||
void OnModelChanged();
|
||||
void ScrollView( int rows, int cols );
|
||||
|
||||
// accessors
|
||||
|
||||
void Activate();
|
||||
void Deactivate();
|
||||
|
||||
// event handlers
|
||||
|
||||
#if (( wxVERSION_NUMBER < 2100 ) || (( wxVERSION_NUMBER == 2100 ) && (wxBETA_NUMBER <= 4)))
|
||||
void OnScroll( wxScrollEvent& event );
|
||||
#else
|
||||
void OnScroll( wxScrollWinEvent& event );
|
||||
#endif
|
||||
void OnPaint ( wxPaintEvent& event );
|
||||
void OnSize ( wxSizeEvent& event );
|
||||
void OnEraseBackground( wxEraseEvent& event );
|
||||
|
||||
void OnLButtonDown( wxMouseEvent& event );
|
||||
void OnLButtonUp ( wxMouseEvent& event );
|
||||
void OnMotion ( wxMouseEvent& event );
|
||||
void OnDblClick ( wxMouseEvent& event );
|
||||
|
||||
void OnSetFocus( wxFocusEvent& event );
|
||||
void OnKillFocus( wxFocusEvent& event );
|
||||
|
||||
// requests editor to keep cursor blinking, even when
|
||||
// the window has lost it's focus
|
||||
|
||||
void HoldCursor( bool hold );
|
||||
|
||||
// FOR NOW:: hard-coded key-bindings
|
||||
|
||||
void OnChar( wxKeyEvent& event );
|
||||
void OnKeyDown( wxKeyEvent& event );
|
||||
|
||||
// utilities
|
||||
|
||||
virtual void SyncViewPortPosition();
|
||||
virtual void SyncScrollbars();
|
||||
virtual void PositionCursor();
|
||||
|
||||
void TextPosToScreenPos( const TPosition& txtPos, TPosition& scrPos );
|
||||
void ScreenPosToTextPos( const TPosition& scrPos, TPosition& txtPos );
|
||||
void ScreenPosToPixels ( const TPosition& scrPos, int& x, int& y );
|
||||
void PixelsToScrPos ( int x, int y, int& scrRow, int& scrCol );
|
||||
void PixelsToTextPos ( int x, int y, TPosition& textPos );
|
||||
|
||||
bool IsClipboardCmd( wxKeyEvent& key );
|
||||
|
||||
TPosition GetPagePos() { return mPagePos; }
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
// TODO:: mutex class should be used to avoid race on updates
|
||||
|
||||
class TCursorTimer : public wxTimer
|
||||
{
|
||||
protected:
|
||||
wxTextEditorView* mpView;
|
||||
volatile bool mIsLocked;
|
||||
volatile bool mIsShown;
|
||||
volatile bool mStarted;
|
||||
wxBrush mBrush;
|
||||
bool mMissOneTick;
|
||||
|
||||
int mBlinkInterval; // default: 500mills
|
||||
protected:
|
||||
|
||||
void DrawCursor();
|
||||
|
||||
public:
|
||||
|
||||
TCursorTimer();
|
||||
|
||||
virtual void Notify();
|
||||
|
||||
void SetView( wxTextEditorView* pView );
|
||||
wxTextEditorView* GetView();
|
||||
void HideCursor( bool forceHide = FALSE );
|
||||
void ShowCursor( bool forceShow = FALSE );
|
||||
|
||||
void SetIsShown( bool isShown );
|
||||
void Lock();
|
||||
void Unlock();
|
||||
};
|
||||
|
||||
#endif // __TDEFS_G__
|
Reference in New Issue
Block a user