git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3345 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			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;  
 | 
						|
}
 |