wxWidgets/utils/wxPython/modules/lseditor/lseditorpl.cpp

345 lines
6.6 KiB
C++
Raw Normal View History

/////////////////////////////////////////////////////////////////////////////
// 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;
}