345 lines
6.6 KiB
C++
345 lines
6.6 KiB
C++
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Name: lseditorpl.cpp
|
||
|
// Purpose: Language-sensative editor plugin for wxStudio
|
||
|
// Copyright: (c) Aleksandars Gluchovas
|
||
|
// Modified by:
|
||
|
// Created: 11/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
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
// For compilers that support precompilation, includes "wx/wx.h".
|
||
|
#include "wx/wxprec.h"
|
||
|
|
||
|
#ifdef __BORLANDC__
|
||
|
#pragma hdrstop
|
||
|
#endif
|
||
|
|
||
|
#ifndef WX_PRECOMP
|
||
|
#include "wx/wx.h"
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#include "lseditorpl.h"
|
||
|
#include "tdefs.h"
|
||
|
|
||
|
/***** Impelmentation for class wxsLSEditorPlugin *****/
|
||
|
|
||
|
wxsLSEditorPlugin::wxsLSEditorPlugin()
|
||
|
|
||
|
: mpModel( NULL ),
|
||
|
mpView( NULL )
|
||
|
{}
|
||
|
|
||
|
wxsLSEditorPlugin::~wxsLSEditorPlugin()
|
||
|
{
|
||
|
// view is destroyed by wxWindows along
|
||
|
// with it's owned model
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::Create( wxWindow* parent, wxWindowID id )
|
||
|
{
|
||
|
mpModel = new wxTextEditorModel();
|
||
|
|
||
|
mpView = new wxTextEditorView( parent, id, mpModel );
|
||
|
|
||
|
mpModel->AddView( mpView );
|
||
|
mpView->Activate();
|
||
|
|
||
|
mpView->AddPinPainter( new TBreakpointPainter() );
|
||
|
|
||
|
mpView->SyncScrollbars();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnOpen( const string& fname )
|
||
|
{
|
||
|
mpModel->LoadTextFromFile( fname );
|
||
|
|
||
|
SetFileName( fname );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnSave( const string& fname )
|
||
|
{
|
||
|
mpModel->SaveTextToFile( fname );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnCopy()
|
||
|
{
|
||
|
mpModel->OnCopy();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnCut()
|
||
|
{
|
||
|
mpModel->OnCut();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnPaste()
|
||
|
{
|
||
|
mpModel->OnPaste();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnDelete()
|
||
|
{
|
||
|
mpModel->OnDelete();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnUndo()
|
||
|
{
|
||
|
mpModel->OnUndo();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnRedo()
|
||
|
{
|
||
|
mpModel->OnRedo();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::SelectAll()
|
||
|
{
|
||
|
mpModel->OnSelectAll();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnGotoLine()
|
||
|
{
|
||
|
mpModel->OnGotoLine();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnGotoLine( int lineNo, int column )
|
||
|
{
|
||
|
mpModel->ResetSelection();
|
||
|
mpModel->OnGotoLine( lineNo, column );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnProperties()
|
||
|
{
|
||
|
// not impl.
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnFind()
|
||
|
{
|
||
|
mpModel->OnFind();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnFindNext()
|
||
|
{
|
||
|
mpModel->OnFindNext();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnFindPrevious()
|
||
|
{
|
||
|
mpModel->OnFindPrevious();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnReplace()
|
||
|
{
|
||
|
// not impl.
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnToggleBookmark()
|
||
|
{
|
||
|
mpModel->OnToggleBookmark();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnNextBookmark()
|
||
|
{
|
||
|
mpModel->OnNextBookmark();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnPreviousBookmark()
|
||
|
{
|
||
|
mpModel->OnPreviousBookmark();
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::OnShowBookmarks()
|
||
|
{
|
||
|
// not impl.
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::SetCheckpoint()
|
||
|
{
|
||
|
mpModel->SetCheckpoint();
|
||
|
}
|
||
|
|
||
|
bool wxsLSEditorPlugin::CheckpointModified()
|
||
|
{
|
||
|
return mpModel->CheckpointModified();
|
||
|
}
|
||
|
|
||
|
// UI-updates
|
||
|
|
||
|
bool wxsLSEditorPlugin::CanCopy()
|
||
|
{
|
||
|
return mpModel->CanCopy();
|
||
|
}
|
||
|
|
||
|
bool wxsLSEditorPlugin::CanCut()
|
||
|
{
|
||
|
return mpModel->CanCopy();
|
||
|
}
|
||
|
|
||
|
bool wxsLSEditorPlugin::CanPaste()
|
||
|
{
|
||
|
return mpModel->CanPaste();
|
||
|
}
|
||
|
|
||
|
bool wxsLSEditorPlugin::CanUndo()
|
||
|
{
|
||
|
return mpModel->CanUndo();
|
||
|
}
|
||
|
|
||
|
bool wxsLSEditorPlugin::CanRedo()
|
||
|
{
|
||
|
return mpModel->CanRedo();
|
||
|
}
|
||
|
|
||
|
// accesed by framework
|
||
|
|
||
|
bool wxsLSEditorPlugin::IsModified()
|
||
|
{
|
||
|
return mpModel->IsModified();
|
||
|
}
|
||
|
|
||
|
wxWindow* wxsLSEditorPlugin::GetWindow()
|
||
|
{
|
||
|
return mpView;
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::GetAllText( char** ppBuf, size_t* length )
|
||
|
{
|
||
|
mpModel->GetAllText( ppBuf, *length );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::SetFileName( const string& fname )
|
||
|
{
|
||
|
mFileName = fname;
|
||
|
|
||
|
if ( mpView )
|
||
|
|
||
|
mpView->SetName( fname );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::HoldCursor( bool hold )
|
||
|
{
|
||
|
mpView->HoldCursor( hold );
|
||
|
}
|
||
|
|
||
|
string wxsLSEditorPlugin::FindWordAtCursor()
|
||
|
{
|
||
|
mpModel->OnSelectWord();
|
||
|
|
||
|
char* buf = NULL; size_t len = 0;
|
||
|
|
||
|
mpModel->GetSelection( &buf, len );
|
||
|
|
||
|
if ( buf )
|
||
|
{
|
||
|
string word = string( buf, 0, len );
|
||
|
delete [] buf;
|
||
|
return word;
|
||
|
}
|
||
|
else
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::GetCursorPos( int* line, int* column )
|
||
|
{
|
||
|
TPosition pos = mpModel->GetCursor();
|
||
|
|
||
|
*line = (int)pos.mRow;
|
||
|
*column = (int)pos.mCol;
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::SetCursorPos( int line, int column )
|
||
|
{
|
||
|
mpModel->OnGotoLine( line, column );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::GetPagePos( int* line, int* column )
|
||
|
{
|
||
|
TPosition pos = mpView->GetPagePos();
|
||
|
|
||
|
*line = pos.mRow;
|
||
|
*column = pos.mCol;
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::GetText( int fromLine, int fromColumn,
|
||
|
int tillLine, int tillColumn,
|
||
|
char** ppBuf, size_t* length )
|
||
|
{
|
||
|
mpModel->GetTextFromRange( TPosition( fromLine, fromColumn ),
|
||
|
TPosition( tillLine, tillColumn ),
|
||
|
ppBuf, *length );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::InsertText( int line, int column,
|
||
|
char* text, size_t lenght )
|
||
|
{
|
||
|
mpModel->InsertText( TPosition( line, column ),
|
||
|
text, lenght );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::DeleteText( int fromLine, int fromColumn,
|
||
|
int tillLine, int tillColumn )
|
||
|
{
|
||
|
mpModel->DeleteRange( TPosition( fromLine, fromColumn ),
|
||
|
TPosition( tillLine, tillColumn ) );
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::PositionToXY( int line, int column, int* x, int* y )
|
||
|
{
|
||
|
TPosition scrPos;
|
||
|
|
||
|
mpView->TextPosToScreenPos( TPosition( line, column ), scrPos );
|
||
|
mpView->ScreenPosToPixels( scrPos, *x, *y );
|
||
|
|
||
|
*y += mpView->mCharDim.y; // lower-right corner
|
||
|
}
|
||
|
|
||
|
void wxsLSEditorPlugin::GetSelectionRange( int* fromLine, int* fromColumn,
|
||
|
int* tillLine, int* tillColumn )
|
||
|
{
|
||
|
TPosition start = mpModel->GetStartOfSelection();
|
||
|
TPosition end = mpModel->GetEndOfSelection();
|
||
|
|
||
|
*fromLine = (int)start.mRow;
|
||
|
*fromColumn = (int)start.mCol;
|
||
|
*tillLine = (int)end.mRow;
|
||
|
*tillColumn = (int)end.mCol;
|
||
|
}
|
||
|
|
||
|
wxSize wxsLSEditorPlugin::GetCharacterSize()
|
||
|
{
|
||
|
return mpView->GetCharacterSize();
|
||
|
}
|
||
|
|
||
|
bool wxsLSEditorPlugin::IsUnixText()
|
||
|
{
|
||
|
return mpModel->IsUnixText();
|
||
|
}
|
||
|
|
||
|
wxTextEditorModel& wxsLSEditorPlugin::GetModel()
|
||
|
{
|
||
|
return *mpModel;
|
||
|
}
|
||
|
|
||
|
wxTextEditorView& wxsLSEditorPlugin::GetView()
|
||
|
{
|
||
|
return *mpView;
|
||
|
}
|