2000-09-18 16:07:07 +00:00
|
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
|
|
|
|
* $RCSfile: edit.cxx,v $
|
|
|
|
|
*
|
2001-06-19 10:56:13 +00:00
|
|
|
|
* $Revision: 1.9 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2001-06-19 10:56:13 +00:00
|
|
|
|
* last change: $Author: tl $ $Date: 2001-06-19 11:56:13 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
|
|
|
|
* The Contents of this file are made available subject to the terms of
|
|
|
|
|
* either of the following licenses
|
|
|
|
|
*
|
|
|
|
|
* - GNU Lesser General Public License Version 2.1
|
|
|
|
|
* - Sun Industry Standards Source License Version 1.1
|
|
|
|
|
*
|
|
|
|
|
* Sun Microsystems Inc., October, 2000
|
|
|
|
|
*
|
|
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
|
* =============================================
|
|
|
|
|
* Copyright 2000 by Sun Microsystems, Inc.
|
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
|
|
|
*
|
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
|
|
|
*
|
|
|
|
|
* This library 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
|
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
|
* MA 02111-1307 USA
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* Sun Industry Standards Source License Version 1.1
|
|
|
|
|
* =================================================
|
|
|
|
|
* The contents of this file are subject to the Sun Industry Standards
|
|
|
|
|
* Source License Version 1.1 (the "License"); You may not use this file
|
|
|
|
|
* except in compliance with the License. You may obtain a copy of the
|
|
|
|
|
* License at http://www.openoffice.org/license.html.
|
|
|
|
|
*
|
|
|
|
|
* Software provided under this License is provided on an "AS IS" basis,
|
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
|
|
|
|
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
|
|
|
|
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
|
|
|
|
* See the License for the specific provisions governing your rights and
|
|
|
|
|
* obligations concerning the Software.
|
|
|
|
|
*
|
|
|
|
|
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
|
|
|
|
*
|
|
|
|
|
* Copyright: 2000 by Sun Microsystems, Inc.
|
|
|
|
|
*
|
|
|
|
|
* All Rights Reserved.
|
|
|
|
|
*
|
|
|
|
|
* Contributor(s): _______________________________________
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
|
#pragma hdrstop
|
|
|
|
|
|
|
|
|
|
#include "starmath.hrc"
|
|
|
|
|
#define ITEMID_FONT 1
|
|
|
|
|
#define ITEMID_FONTHEIGHT 2
|
|
|
|
|
#define ITEMID_LRSPACE 3
|
|
|
|
|
#define ITEMID_WEIGHT 4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef _SV_MENU_HXX //autogen
|
|
|
|
|
#include <vcl/menu.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _MyEDITVIEW_HXX //autogen
|
|
|
|
|
#include <svx/editview.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _MyEDITENG_HXX //autogen
|
|
|
|
|
#include <svx/editeng.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _EDITSTAT_HXX //autogen
|
|
|
|
|
#include <svx/editstat.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _EEITEM_HXX //autogen
|
|
|
|
|
#include <svx/eeitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXDISPATCH_HXX //autogen
|
|
|
|
|
#include <sfx2/dispatch.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXINTITEM_HXX //autogen
|
|
|
|
|
#include <svtools/intitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXITEMPOOL_HXX //autogen
|
|
|
|
|
#include <svtools/itempool.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXSTRITEM_HXX //autogen
|
|
|
|
|
#include <svtools/stritem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SVX_FHGTITEM_HXX //autogen
|
|
|
|
|
#include <svx/fhgtitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SVX_WGHTITEM_HXX //autogen
|
|
|
|
|
#include <svx/wghtitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SVX_LRSPITEM_HXX //autogen
|
|
|
|
|
#include <svx/lrspitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXITEMSET_HXX //autogen
|
|
|
|
|
#include <svtools/itemset.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SVX_FONTITEM_HXX //autogen
|
|
|
|
|
#include <svx/fontitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "edit.hxx"
|
|
|
|
|
#include "view.hxx"
|
|
|
|
|
#include "document.hxx"
|
|
|
|
|
#include "config.hxx"
|
|
|
|
|
|
|
|
|
|
#define SCROLL_LINE 24
|
|
|
|
|
|
|
|
|
|
#define MINWIDTH 200
|
|
|
|
|
#define MINHEIGHT 200
|
|
|
|
|
#define MINSPLIT 40
|
|
|
|
|
#define SPLITTERWIDTH 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmGetLeftSelectionPart(const ESelection aSel,
|
|
|
|
|
USHORT &nPara, USHORT &nPos)
|
|
|
|
|
// returns paragraph number and position of the selections left part
|
|
|
|
|
{
|
|
|
|
|
// compare start and end of selection and use the one that comes first
|
|
|
|
|
if ( aSel.nStartPara < aSel.nEndPara
|
|
|
|
|
|| aSel.nStartPara == aSel.nEndPara && aSel.nStartPos < aSel.nEndPos)
|
|
|
|
|
{ nPara = aSel.nStartPara;
|
|
|
|
|
nPos = aSel.nStartPos;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{ nPara = aSel.nEndPara;
|
|
|
|
|
nPos = aSel.nEndPos;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
SmEditWindow::SmEditWindow( Window* pParent ) :
|
|
|
|
|
Window (pParent),
|
|
|
|
|
pEditView (0),
|
|
|
|
|
pHScrollBar (0),
|
|
|
|
|
pVScrollBar (0),
|
|
|
|
|
pScrollBox (0)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
SetHelpId(HID_SMA_COMMAND_WIN_EDIT);
|
|
|
|
|
EnableDrop();
|
|
|
|
|
SetMapMode(MAP_PIXEL);
|
|
|
|
|
|
|
|
|
|
SetBackground( GetSettings().GetStyleSettings().GetWindowColor() );
|
|
|
|
|
|
|
|
|
|
aModifyTimer.SetTimeoutHdl(LINK(this, SmEditWindow, ModifyTimerHdl));
|
|
|
|
|
aModifyTimer.SetTimeout(2000);
|
|
|
|
|
aModifyTimer.Start();
|
|
|
|
|
|
|
|
|
|
aCursorMoveTimer.SetTimeoutHdl(LINK(this, SmEditWindow, CursorMoveTimerHdl));
|
|
|
|
|
aCursorMoveTimer.SetTimeout(500);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SmEditWindow::~SmEditWindow()
|
|
|
|
|
{
|
|
|
|
|
aCursorMoveTimer.Stop();
|
|
|
|
|
aModifyTimer.Stop();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
|
2001-06-19 10:56:13 +00:00
|
|
|
|
if (pEditView)
|
|
|
|
|
{
|
|
|
|
|
EditEngine *pEditEngine = pEditView->GetEditEngine();
|
|
|
|
|
if (pEditEngine)
|
|
|
|
|
{
|
|
|
|
|
pEditEngine->SetStatusEventHdl( Link() );
|
|
|
|
|
pEditEngine->RemoveView( pEditView );
|
|
|
|
|
}
|
|
|
|
|
}
|
2001-03-08 08:25:55 +00:00
|
|
|
|
delete pEditView;
|
|
|
|
|
delete pHScrollBar;
|
|
|
|
|
delete pVScrollBar;
|
|
|
|
|
delete pScrollBox;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
SmDocShell * SmEditWindow::GetDoc()
|
2001-03-08 08:25:55 +00:00
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
SmViewShell *pView = SmGetActiveView();
|
|
|
|
|
return pView ? pView->GetDoc() : 0;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine * SmEditWindow::GetEditEngine()
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
EditEngine *pEditEng = 0;
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditEng = pEditView->GetEditEngine();
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SmDocShell *pDoc = GetDoc();
|
|
|
|
|
if (pDoc)
|
|
|
|
|
pEditEng = &pDoc->GetEditEngine();
|
|
|
|
|
}
|
|
|
|
|
return pEditEng;
|
2001-06-01 09:34:48 +00:00
|
|
|
|
}
|
2000-12-08 17:09:12 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
SfxItemPool * SmEditWindow::GetEditEngineItemPool()
|
|
|
|
|
{
|
|
|
|
|
SmDocShell *pDoc = GetDoc();
|
|
|
|
|
return pDoc ? &pDoc->GetEditEngineItemPool() : 0;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
void SmEditWindow::DataChanged( const DataChangedEvent& )
|
|
|
|
|
{
|
|
|
|
|
SetBackground( GetSettings().GetStyleSettings().GetWindowColor() );
|
2001-03-08 08:25:55 +00:00
|
|
|
|
|
|
|
|
|
SetPointFont( GetSettings().GetStyleSettings().GetAppFont() );
|
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
SmDocShell *pDoc = GetDoc();
|
|
|
|
|
EditEngine *pEditEngine = pDoc ? &pDoc->GetEditEngine() : 0;
|
|
|
|
|
SfxItemPool *pEditEngineItemPool = pDoc ? &pDoc->GetEditEngineItemPool() : 0;
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (pEditEngine && pEditEngineItemPool)
|
|
|
|
|
{
|
|
|
|
|
Font aFont = GetFont();
|
|
|
|
|
pEditEngine->SetDefTab( USHORT( GetTextWidth( C2S("XXXX") ) ) );
|
|
|
|
|
|
|
|
|
|
long nFntHeight = aFont.GetSize().Height();
|
|
|
|
|
|
|
|
|
|
pEditEngineItemPool->SetPoolDefaultItem(
|
|
|
|
|
SvxFontItem( aFont.GetFamily(), aFont.GetName(),
|
|
|
|
|
aFont.GetStyleName(), aFont.GetPitch(), aFont.GetCharSet(),
|
|
|
|
|
EE_CHAR_FONTINFO ) );
|
|
|
|
|
pEditEngineItemPool->SetPoolDefaultItem(
|
|
|
|
|
SvxFontHeightItem( nFntHeight, 100, EE_CHAR_FONTHEIGHT ) );
|
|
|
|
|
pEditEngineItemPool->SetPoolDefaultItem(
|
|
|
|
|
SvxFontHeightItem( nFntHeight, 100, EE_CHAR_FONTHEIGHT_CJK ) );
|
|
|
|
|
pEditEngineItemPool->SetPoolDefaultItem(
|
|
|
|
|
SvxFontHeightItem( nFntHeight, 100, EE_CHAR_FONTHEIGHT_CTL ) );
|
|
|
|
|
|
|
|
|
|
// forces new settings to be used
|
|
|
|
|
pEditEngine->Clear(); //#77957 incorrect font size
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
AdjustScrollBars();
|
|
|
|
|
Resize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IMPL_LINK( SmEditWindow, ModifyTimerHdl, Timer *, pTimer )
|
|
|
|
|
{
|
|
|
|
|
SmModule *pp = SM_MOD1();
|
|
|
|
|
if (pp->GetConfig()->IsAutoRedraw())
|
|
|
|
|
Flush();
|
|
|
|
|
aModifyTimer.Start();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IMPL_LINK(SmEditWindow, CursorMoveTimerHdl, Timer *, pTimer)
|
|
|
|
|
// every once in a while check cursor position (selection) of edit
|
|
|
|
|
// window and if it has changed (try to) set the formula-cursor
|
|
|
|
|
// according to that.
|
|
|
|
|
{
|
|
|
|
|
ESelection aNewSelection (GetSelection());
|
|
|
|
|
|
|
|
|
|
if (!aNewSelection.IsEqual(aOldSelection))
|
|
|
|
|
{ SmViewShell *pView = SmGetActiveView();
|
|
|
|
|
|
|
|
|
|
if (pView)
|
|
|
|
|
{
|
|
|
|
|
// get row and column to look for
|
|
|
|
|
USHORT nRow, nCol;
|
|
|
|
|
SmGetLeftSelectionPart(aNewSelection, nRow, nCol);
|
|
|
|
|
nRow++;
|
|
|
|
|
nCol++;
|
|
|
|
|
|
|
|
|
|
pView->GetGraphicWindow().SetCursorPos(nRow, nCol);
|
|
|
|
|
|
|
|
|
|
aOldSelection = aNewSelection;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Resize()
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (!pEditView)
|
|
|
|
|
CreateEditView();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
if (pEditView)
|
|
|
|
|
{
|
|
|
|
|
pEditView->SetOutputArea(AdjustScrollBars());
|
|
|
|
|
pEditView->ShowCursor();
|
|
|
|
|
|
2001-06-15 07:59:52 +00:00
|
|
|
|
DBG_ASSERT( pEditView->GetEditEngine(), "EditEngine missing" );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
const long nMaxVisAreaStart = pEditView->GetEditEngine()->GetTextHeight() -
|
|
|
|
|
pEditView->GetOutputArea().GetHeight();
|
|
|
|
|
if (pEditView->GetVisArea().Top() > nMaxVisAreaStart)
|
|
|
|
|
{
|
|
|
|
|
Rectangle aVisArea(pEditView->GetVisArea() );
|
|
|
|
|
aVisArea.Top() = (nMaxVisAreaStart > 0 ) ? nMaxVisAreaStart : 0;
|
|
|
|
|
aVisArea.SetSize(pEditView->GetOutputArea().GetSize());
|
|
|
|
|
pEditView->SetVisArea(aVisArea);
|
|
|
|
|
pEditView->ShowCursor();
|
|
|
|
|
}
|
|
|
|
|
InitScrollBars();
|
|
|
|
|
}
|
|
|
|
|
Invalidate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::MouseButtonUp(const MouseEvent &rEvt)
|
|
|
|
|
{
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->MouseButtonUp(rEvt);
|
|
|
|
|
else
|
|
|
|
|
Window::MouseButtonUp (rEvt);
|
|
|
|
|
|
|
|
|
|
// ggf FormulaCursor neu positionieren
|
|
|
|
|
CursorMoveTimerHdl(&aCursorMoveTimer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::MouseButtonDown(const MouseEvent &rEvt)
|
|
|
|
|
{
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->MouseButtonDown(rEvt);
|
|
|
|
|
else
|
|
|
|
|
Window::MouseButtonDown (rEvt);
|
|
|
|
|
|
|
|
|
|
GrabFocus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Command(const CommandEvent& rCEvt)
|
|
|
|
|
{
|
|
|
|
|
if (rCEvt.GetCommand() == COMMAND_CONTEXTMENU)
|
|
|
|
|
{
|
|
|
|
|
GetParent()->ToTop();
|
|
|
|
|
|
|
|
|
|
PopupMenu* pPopupMenu = new PopupMenu(SmResId(RID_COMMANDMENU));
|
|
|
|
|
pPopupMenu->SetSelectHdl(LINK(this, SmEditWindow, MenuSelectHdl));
|
|
|
|
|
|
|
|
|
|
pPopupMenu->Execute( this, OutputToScreenPixel(
|
|
|
|
|
rCEvt.GetMousePosPixel() ) );
|
|
|
|
|
delete pPopupMenu;
|
|
|
|
|
}
|
|
|
|
|
else if (pEditView)
|
|
|
|
|
pEditView->Command( rCEvt );
|
|
|
|
|
else
|
|
|
|
|
Window::Command (rCEvt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IMPL_LINK_INLINE_START( SmEditWindow, MenuSelectHdl, Menu *, pMenu )
|
|
|
|
|
{
|
|
|
|
|
SmViewShell *pViewSh = SmGetActiveView();
|
|
|
|
|
if (pViewSh)
|
|
|
|
|
pViewSh->GetViewFrame()->GetDispatcher()->Execute(
|
|
|
|
|
SID_INSERTCOMMAND, SFX_CALLMODE_STANDARD,
|
|
|
|
|
new SfxInt16Item(SID_INSERTCOMMAND, pMenu->GetCurItemId()), 0L);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
IMPL_LINK_INLINE_END( SmEditWindow, MenuSelectHdl, Menu *, pMenu )
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::KeyInput(const KeyEvent& rKEvt)
|
|
|
|
|
{
|
|
|
|
|
if (rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE)
|
|
|
|
|
{
|
|
|
|
|
BOOL bCallBase = TRUE;
|
|
|
|
|
SfxViewShell* pViewShell = SfxViewShell::Current();
|
|
|
|
|
if ( pViewShell && pViewShell->ISA(SmViewShell) )
|
|
|
|
|
{
|
|
|
|
|
SmDocShell* pDocSh = (SmDocShell*) pViewShell->GetViewFrame()->GetObjectShell();
|
|
|
|
|
if (pDocSh)
|
|
|
|
|
{
|
|
|
|
|
/* fuert zum (sofortigen) Zerstoeren von this! */
|
|
|
|
|
pDocSh->DoInPlaceActivate( FALSE );
|
|
|
|
|
bCallBase = FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( bCallBase )
|
|
|
|
|
Window::KeyInput( rKEvt );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2001-05-30 12:11:05 +00:00
|
|
|
|
SmViewShell *pView = SmGetActiveView();
|
|
|
|
|
SmDocShell *pDocShell = pView ? pView->GetDoc() : 0;
|
|
|
|
|
if (pDocShell)
|
|
|
|
|
pDocShell->SetModified( TRUE );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
// Timer neu starten, um den Handler (auch bei l<>ngeren Eingaben)
|
|
|
|
|
// m<>glichst nur einmal am Ende aufzurufen.
|
|
|
|
|
aCursorMoveTimer.Start();
|
|
|
|
|
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing (NULL pointer)" );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if ( !pEditView->PostKeyEvent(rKEvt) )
|
|
|
|
|
{
|
|
|
|
|
if ( !SfxViewShell::Current()->KeyInput(rKEvt) )
|
|
|
|
|
{
|
|
|
|
|
/* fuert bei F1 (Hilfe) zum Zerstoeren von this! */
|
|
|
|
|
Flush();
|
|
|
|
|
if ( aModifyTimer.IsActive() )
|
|
|
|
|
aModifyTimer.Stop();
|
|
|
|
|
Window::KeyInput(rKEvt);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//SFX hat evtl. Slot an der View gecallt und dabei (wg. Hack
|
|
|
|
|
//im SFX) den Focus auf die View gesetzt
|
|
|
|
|
SfxViewShell* pVShell = SfxViewShell::Current();
|
|
|
|
|
if ( pVShell && pVShell->ISA(SmViewShell) &&
|
|
|
|
|
((SmViewShell*)pVShell)->GetGraphicWindow().HasFocus() )
|
|
|
|
|
{
|
|
|
|
|
GrabFocus();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
aModifyTimer.Start();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Paint(const Rectangle& rRect)
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (!pEditView)
|
|
|
|
|
CreateEditView();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pEditView->Paint(rRect);
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
void SmEditWindow::CreateEditView()
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditEngine, "EditEngine missing" );
|
|
|
|
|
if (!pEditView && pEditEngine)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
pEditView = new EditView( pEditEngine, this );
|
|
|
|
|
pEditEngine->InsertView( pEditView );
|
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
if (!pVScrollBar)
|
|
|
|
|
pVScrollBar = new ScrollBar(this, WinBits(WB_VSCROLL));
|
|
|
|
|
if (!pHScrollBar)
|
|
|
|
|
pHScrollBar = new ScrollBar(this, WinBits(WB_HSCROLL));
|
|
|
|
|
if (!pScrollBox)
|
|
|
|
|
pScrollBox = new ScrollBarBox(this);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pVScrollBar->SetScrollHdl(LINK(this, SmEditWindow, ScrollHdl));
|
|
|
|
|
pHScrollBar->SetScrollHdl(LINK(this, SmEditWindow, ScrollHdl));
|
|
|
|
|
|
|
|
|
|
pEditView->SetOutputArea(AdjustScrollBars());
|
|
|
|
|
|
|
|
|
|
ESelection eSelection;
|
|
|
|
|
|
|
|
|
|
pEditView->SetSelection(eSelection);
|
|
|
|
|
Update();
|
|
|
|
|
pEditView->ShowCursor(TRUE, TRUE);
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
pEditEngine->SetStatusEventHdl( LINK(this, SmEditWindow, EditStatusHdl) );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SetPointer(pEditView->GetPointer());
|
|
|
|
|
|
|
|
|
|
SetScrollBarRanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
IMPL_LINK( SmEditWindow, EditStatusHdl, EditStatus *, pStat )
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
if (!pEditView)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return 1;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SetScrollBarRanges();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IMPL_LINK_INLINE_START( SmEditWindow, ScrollHdl, ScrollBar *, pScrollBar )
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT(pEditView, "EditView missing");
|
|
|
|
|
if (pEditView)
|
|
|
|
|
{
|
|
|
|
|
pEditView->SetVisArea(Rectangle(Point(pHScrollBar->GetThumbPos(),
|
|
|
|
|
pVScrollBar->GetThumbPos()),
|
|
|
|
|
pEditView->GetVisArea().GetSize()));
|
|
|
|
|
pEditView->Invalidate();
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
IMPL_LINK_INLINE_END( SmEditWindow, ScrollHdl, ScrollBar *, pScrollBar )
|
|
|
|
|
|
|
|
|
|
Rectangle SmEditWindow::AdjustScrollBars()
|
|
|
|
|
{
|
|
|
|
|
const Size aOut( GetOutputSizePixel() );
|
|
|
|
|
Point aPoint;
|
|
|
|
|
Rectangle aRect( aPoint, aOut );
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (pVScrollBar && pHScrollBar && pScrollBox)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
const long nTmp = GetSettings().GetStyleSettings().GetScrollBarSize();
|
|
|
|
|
Point aPt( aRect.TopRight() ); aPt.X() -= nTmp -1L;
|
|
|
|
|
pVScrollBar->SetPosSizePixel( aPt, Size(nTmp, aOut.Height() - nTmp));
|
|
|
|
|
|
|
|
|
|
aPt = aRect.BottomLeft(); aPt.Y() -= nTmp - 1L;
|
|
|
|
|
pHScrollBar->SetPosSizePixel( aPt, Size(aOut.Width() - nTmp, nTmp));
|
|
|
|
|
|
|
|
|
|
aPt.X() = pHScrollBar->GetSizePixel().Width();
|
|
|
|
|
aPt.Y() = pVScrollBar->GetSizePixel().Height();
|
|
|
|
|
pScrollBox->SetPosSizePixel(aPt, Size(nTmp, nTmp ));
|
|
|
|
|
|
|
|
|
|
aRect.Right() = aPt.X() - 2;
|
|
|
|
|
aRect.Bottom() = aPt.Y() - 2;
|
|
|
|
|
}
|
|
|
|
|
return aRect;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::SetScrollBarRanges()
|
|
|
|
|
{
|
|
|
|
|
// Extra-Methode, nicht InitScrollBars, da auch fuer EditEngine-Events.
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (pVScrollBar && pHScrollBar && pEditEngine && pEditView)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
long nTmp = pEditEngine->GetTextHeight();
|
|
|
|
|
pVScrollBar->SetRange(Range(0, nTmp));
|
|
|
|
|
pVScrollBar->SetThumbPos(pEditView->GetVisArea().Top());
|
|
|
|
|
|
|
|
|
|
nTmp = pEditEngine->GetPaperSize().Width();
|
|
|
|
|
pHScrollBar->SetRange(Range(0,nTmp));
|
|
|
|
|
pHScrollBar->SetThumbPos(pEditView->GetVisArea().Left());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::InitScrollBars()
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
if (pVScrollBar && pHScrollBar && pScrollBox && pEditView)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
const Size aOut( pEditView->GetOutputArea().GetSize() );
|
|
|
|
|
pVScrollBar->SetVisibleSize(aOut.Height());
|
|
|
|
|
pVScrollBar->SetPageSize(aOut.Height() * 8 / 10);
|
|
|
|
|
pVScrollBar->SetLineSize(aOut.Height() * 2 / 10);
|
|
|
|
|
|
|
|
|
|
pHScrollBar->SetVisibleSize(aOut.Width());
|
|
|
|
|
pHScrollBar->SetPageSize(aOut.Width() * 8 / 10);
|
|
|
|
|
pHScrollBar->SetLineSize(SCROLL_LINE );
|
|
|
|
|
|
|
|
|
|
SetScrollBarRanges();
|
|
|
|
|
|
|
|
|
|
pVScrollBar->Show();
|
|
|
|
|
pHScrollBar->Show();
|
|
|
|
|
pScrollBox->Show();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
XubString SmEditWindow::GetText()
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
String aText;
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditEngine, "EditEngine missing" );
|
|
|
|
|
if (pEditEngine)
|
|
|
|
|
aText = pEditEngine->GetText( LINEEND_LF );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return aText;
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
void SmEditWindow::SetText(const XubString& rText)
|
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditEngine, "EditEngine missing" );
|
|
|
|
|
if (pEditEngine && !pEditEngine->IsModified())
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (!pEditView)
|
|
|
|
|
CreateEditView();
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
ESelection eSelection = pEditView->GetSelection();
|
|
|
|
|
|
|
|
|
|
pEditEngine->SetText(rText);
|
|
|
|
|
pEditEngine->ClearModifyFlag();
|
|
|
|
|
|
|
|
|
|
//! Hier die Timer neu zu starten verhindert, dass die Handler f<>r andere
|
|
|
|
|
//! (im Augenblick nicht mehr aktive) Math Tasks aufgerufen werden.
|
|
|
|
|
aModifyTimer.Start();
|
|
|
|
|
aCursorMoveTimer.Start();
|
|
|
|
|
|
|
|
|
|
pEditView->SetSelection(eSelection);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-08 08:25:55 +00:00
|
|
|
|
|
|
|
|
|
void SmEditWindow::GetFocus()
|
|
|
|
|
{
|
|
|
|
|
Window::GetFocus();
|
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->SetSelection( aActiveSelection );
|
|
|
|
|
if (pEditEngine)
|
|
|
|
|
pEditEngine->SetStatusEventHdl( LINK(this, SmEditWindow, EditStatusHdl) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::LoseFocus()
|
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (pEditView)
|
|
|
|
|
aActiveSelection = pEditView->GetSelection();
|
|
|
|
|
if (pEditEngine)
|
|
|
|
|
pEditEngine->SetStatusEventHdl( Link() );
|
|
|
|
|
|
|
|
|
|
Window::LoseFocus();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
BOOL SmEditWindow::IsAllSelected() const
|
|
|
|
|
{
|
2001-06-15 07:59:52 +00:00
|
|
|
|
BOOL bRes = FALSE;
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = ((SmEditWindow *) this)->GetEditEngine();
|
2001-06-15 07:59:52 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "NULL pointer" );
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditEngine, "NULL pointer" );
|
2001-06-15 07:59:52 +00:00
|
|
|
|
if (pEditEngine && pEditView)
|
2001-03-08 08:25:55 +00:00
|
|
|
|
{
|
2001-06-15 07:59:52 +00:00
|
|
|
|
ESelection eSelection( pEditView->GetSelection() );
|
|
|
|
|
INT32 nParaCnt = pEditEngine->GetParagraphCount();
|
|
|
|
|
if (!(nParaCnt - 1))
|
|
|
|
|
{
|
|
|
|
|
String Text( pEditEngine->GetText( LINEEND_LF ) );
|
|
|
|
|
bRes = !eSelection.nStartPos && (eSelection.nEndPos == Text.Len () - 1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bRes = !eSelection.nStartPara && (eSelection.nEndPara == nParaCnt - 1);
|
|
|
|
|
}
|
2001-03-08 08:25:55 +00:00
|
|
|
|
}
|
2001-06-15 07:59:52 +00:00
|
|
|
|
return bRes;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::SelectAll()
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "NULL pointer" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
{
|
|
|
|
|
// 0xFFFF as last two parameters refers to the end of the text
|
|
|
|
|
pEditView->SetSelection( ESelection( 0, 0, 0xFFFF, 0xFFFF ) );
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::InsertCommand(USHORT Command)
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
{
|
|
|
|
|
//Anfang der Selektion merken und hinterher den Cursor daraufsetzen. Nur so
|
|
|
|
|
//macht das SelNextMark() Sinn.
|
|
|
|
|
ESelection aSelection = pEditView->GetSelection();
|
|
|
|
|
aSelection.nEndPos = aSelection.nStartPos;
|
|
|
|
|
aSelection.nEndPara = aSelection.nStartPara;
|
|
|
|
|
|
|
|
|
|
DBG_ASSERT( pEditView, "NULL pointer" );
|
|
|
|
|
String aText = String(SmResId(Command));
|
|
|
|
|
pEditView->InsertText(aText);
|
|
|
|
|
|
|
|
|
|
if (HasMark(aText))
|
|
|
|
|
{ // set selection to next mark
|
|
|
|
|
pEditView->SetSelection(aSelection);
|
|
|
|
|
SelNextMark();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{ // set selection after inserted text
|
|
|
|
|
aSelection.nStartPos =
|
|
|
|
|
aSelection.nEndPos += aText.Len();
|
|
|
|
|
pEditView->SetSelection(aSelection);
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-06-19 10:56:13 +00:00
|
|
|
|
GrabFocus();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::MarkError(const Point &rPos)
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
{
|
|
|
|
|
const int Col = rPos.X();
|
|
|
|
|
const int Row = rPos.Y() - 1;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-06-19 10:56:13 +00:00
|
|
|
|
pEditView->SetSelection(ESelection (Row, Col - 1, Row, Col));
|
|
|
|
|
GrabFocus();
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::SelNextMark()
|
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-06-15 07:59:52 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "NULL pointer" );
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditEngine, "NULL pointer" );
|
2001-06-15 07:59:52 +00:00
|
|
|
|
if (pEditEngine && pEditView)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-06-15 07:59:52 +00:00
|
|
|
|
ESelection eSelection = pEditView->GetSelection();
|
|
|
|
|
USHORT Pos = eSelection.nEndPos;
|
|
|
|
|
String aMark (C2S("<?>"));
|
|
|
|
|
String aText;
|
|
|
|
|
USHORT nCounts = pEditEngine->GetParagraphCount();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-06-15 07:59:52 +00:00
|
|
|
|
while (eSelection.nEndPara < nCounts)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-06-15 07:59:52 +00:00
|
|
|
|
aText = pEditEngine->GetText( eSelection.nEndPara );
|
|
|
|
|
Pos = aText.Search(aMark, Pos);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-06-15 07:59:52 +00:00
|
|
|
|
if (Pos != STRING_NOTFOUND)
|
|
|
|
|
{
|
|
|
|
|
pEditView->SetSelection(ESelection (eSelection.nEndPara, Pos, eSelection.nEndPara, Pos + 3));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Pos = 0;
|
|
|
|
|
eSelection.nEndPara++;
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::SelPrevMark()
|
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditEngine, "NULL pointer" );
|
2001-06-15 07:59:52 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "NULL pointer" );
|
|
|
|
|
if (pEditEngine && pEditView)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-06-15 07:59:52 +00:00
|
|
|
|
ESelection eSelection = pEditView->GetSelection();
|
|
|
|
|
USHORT Pos = STRING_NOTFOUND;
|
|
|
|
|
xub_StrLen Max = eSelection.nStartPos;
|
|
|
|
|
String Text( pEditEngine->GetText( eSelection.nStartPara ) );
|
|
|
|
|
String aMark (C2S("<?>"));
|
|
|
|
|
USHORT nCounts = pEditEngine->GetParagraphCount();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-06-15 07:59:52 +00:00
|
|
|
|
do
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-06-15 07:59:52 +00:00
|
|
|
|
USHORT Fnd = Text.Search(aMark, 0);
|
|
|
|
|
|
|
|
|
|
while ((Fnd < Max) && (Fnd != STRING_NOTFOUND))
|
|
|
|
|
{
|
|
|
|
|
Pos = Fnd;
|
|
|
|
|
Fnd = Text.Search(aMark, Fnd + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Pos == STRING_NOTFOUND)
|
|
|
|
|
{
|
|
|
|
|
eSelection.nStartPara--;
|
|
|
|
|
Text = pEditEngine->GetText( eSelection.nStartPara );
|
|
|
|
|
Max = Text.Len();
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
2001-06-15 07:59:52 +00:00
|
|
|
|
while ((eSelection.nStartPara < nCounts) &&
|
|
|
|
|
(Pos == STRING_NOTFOUND));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-06-15 07:59:52 +00:00
|
|
|
|
if (Pos != STRING_NOTFOUND)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-06-15 07:59:52 +00:00
|
|
|
|
pEditView->SetSelection(ESelection (eSelection.nStartPara, Pos, eSelection.nStartPara, Pos + 3));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SmEditWindow::HasMark(const String& rText) const
|
|
|
|
|
// returns true iff 'rText' contains a mark
|
|
|
|
|
{
|
|
|
|
|
return rText.SearchAscii("<?>", 0) != STRING_NOTFOUND;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::MouseMove(const MouseEvent &rEvt)
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->MouseMove(rEvt);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SmEditWindow::Drop(const DropEvent& rEvt)
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
return pEditView ? pEditView->Drop( rEvt ) : FALSE;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SmEditWindow::QueryDrop(DropEvent& rEvt)
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
return pEditView ? pEditView->QueryDrop( rEvt ) : FALSE;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ESelection SmEditWindow::GetSelection() const
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "NULL pointer" );
|
|
|
|
|
ESelection eSel;
|
|
|
|
|
if (pEditView)
|
|
|
|
|
eSel = pEditView->GetSelection();
|
|
|
|
|
return eSel;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::SetSelection(const ESelection &rSel)
|
|
|
|
|
{
|
2001-03-08 08:25:55 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "NULL pointer" );
|
2001-06-19 10:56:13 +00:00
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->SetSelection(rSel);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SmEditWindow::IsEmpty() const
|
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = ((SmEditWindow *) this)->GetEditEngine();
|
2001-06-15 07:59:52 +00:00
|
|
|
|
return pEditEngine ? pEditEngine->GetTextLen() == 0 : FALSE;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SmEditWindow::IsSelected() const
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
return pEditView ? pEditView->HasSelection() : FALSE;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Cut()
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->Cut();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Copy()
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->Copy();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Paste()
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->Paste();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Delete()
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->DeleteSelected();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::InsertText(const String& Text)
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
DBG_ASSERT( pEditView, "EditView missing" );
|
|
|
|
|
if (pEditView)
|
|
|
|
|
pEditView->InsertText(Text);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmEditWindow::Flush()
|
|
|
|
|
{
|
2001-06-01 09:34:48 +00:00
|
|
|
|
EditEngine *pEditEngine = GetEditEngine();
|
2001-03-08 08:25:55 +00:00
|
|
|
|
if (pEditEngine && pEditEngine->IsModified())
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
pEditEngine->ClearModifyFlag();
|
|
|
|
|
SmViewShell *pViewSh = SmGetActiveView();
|
|
|
|
|
if (pViewSh)
|
|
|
|
|
pViewSh->GetViewFrame()->GetDispatcher()->Execute(
|
|
|
|
|
SID_TEXT, SFX_CALLMODE_STANDARD,
|
|
|
|
|
new SfxStringItem(SID_TEXT, GetText()), 0L);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (aCursorMoveTimer.IsActive())
|
|
|
|
|
{
|
|
|
|
|
aCursorMoveTimer.Stop();
|
|
|
|
|
// ggf noch die (neue) FormulaCursor Position setzen
|
|
|
|
|
CursorMoveTimerHdl(&aCursorMoveTimer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2001-06-01 09:34:48 +00:00
|
|
|
|
void SmEditWindow::DeleteEditView( SmViewShell &rView )
|
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
if (pEditView)
|
2001-06-01 09:34:48 +00:00
|
|
|
|
{
|
2001-06-19 10:56:13 +00:00
|
|
|
|
EditEngine *pEditEngine = pEditView->GetEditEngine();
|
|
|
|
|
if (pEditEngine)
|
|
|
|
|
{
|
|
|
|
|
pEditEngine->SetStatusEventHdl( Link() );
|
|
|
|
|
pEditEngine->RemoveView( pEditView );
|
|
|
|
|
}
|
|
|
|
|
delete pEditView;
|
|
|
|
|
pEditView = 0;
|
2001-06-01 09:34:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|