diff options
Diffstat (limited to 'basctl/source/basicide/baside2.hxx')
-rw-r--r-- | basctl/source/basicide/baside2.hxx | 476 |
1 files changed, 476 insertions, 0 deletions
diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx new file mode 100644 index 000000000000..6af6c060411a --- /dev/null +++ b/basctl/source/basicide/baside2.hxx @@ -0,0 +1,476 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _BASIDE2_HXX +#define _BASIDE2_HXX + +#include <svheader.hxx> + +#include <bastypes.hxx> +#include <bastype3.hxx> +#include <basidesh.hxx> + +class ExtTextEngine; +class ExtTextView; +class SvxSearchItem; +#include <svtools/svtabbx.hxx> +#include <svtools/headbar.hxx> + +#include <vcl/button.hxx> +#include <basic/sbmod.hxx> +#include <vcl/split.hxx> +#include "svl/lstner.hxx" +#include <svtools/colorcfg.hxx> + +#include <sfx2/progress.hxx> +#include <svtools/syntaxhighlight.hxx> + +DBG_NAMEEX( ModulWindow ) + +#define MARKER_NOMARKER 0xFFFF + +namespace utl +{ + class SourceViewConfig; +} + +// #108672 Helper functions to get/set text in TextEngine +// using the stream interface (get/setText() only supports +// tools Strings limited to 64K). +::rtl::OUString getTextEngineText( ExtTextEngine* pEngine ); +void setTextEngineText( ExtTextEngine* pEngine, const ::rtl::OUString aStr ); + +class ProgressInfo : public SfxProgress +{ +private: + sal_uLong nCurState; + +public: + + inline ProgressInfo( SfxObjectShell* pObjSh, const String& rText, sal_uLong nRange ); + inline void StepProgress(); +}; + +inline ProgressInfo::ProgressInfo( SfxObjectShell* pObjSh, const String& rText, sal_uLong nRange ) + : SfxProgress( pObjSh, rText, nRange ) +{ + nCurState = 0; +} + +inline void ProgressInfo::StepProgress() +{ + SetState( ++nCurState ); +} + + +namespace svt { +class SourceViewConfig; +} + +class EditorWindow : public Window, public SfxListener, public utl::ConfigurationListener +{ +private: + ExtTextView* pEditView; + ExtTextEngine* pEditEngine; + + utl::SourceViewConfig* pSourceViewConfig; + + long nCurTextWidth; + + SyntaxHighlighter aHighlighter; + Timer aSyntaxIdleTimer; + Table aSyntaxLineTable; + DECL_LINK( SyntaxTimerHdl, Timer * ); + ProgressInfo* pProgress; + ModulWindow* pModulWindow; + + virtual void DataChanged(DataChangedEvent const & rDCEvt); + + using Window::Notify; + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + void ImpDoHighlight( sal_uLong nLineOff ); + void ImplSetFont(); + + sal_Bool bHighlightning; + sal_Bool bDoSyntaxHighlight; + sal_Bool bDelayHighlight; + + virtual + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > + GetComponentInterface(sal_Bool bCreate = sal_True); + +protected: + virtual void Paint( const Rectangle& ); + virtual void Resize(); + virtual void KeyInput( const KeyEvent& rKeyEvt ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void Command( const CommandEvent& rCEvt ); + virtual void LoseFocus(); + virtual void RequestHelp( const HelpEvent& rHEvt ); + virtual void ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 ); + + void DoSyntaxHighlight( sal_uLong nPara ); + String GetWordAtCursor(); + sal_Bool ImpCanModify(); + +public: + EditorWindow( Window* pParent ); + ~EditorWindow(); + + ExtTextEngine* GetEditEngine() const { return (ExtTextEngine*)pEditEngine; } + ExtTextView* GetEditView() const { return pEditView; } + ProgressInfo* GetProgress() const { return pProgress; } + + void CreateProgress( const String& rText, sal_uLong nRange ); + void DestroyProgress(); + + void ParagraphInsertedDeleted( sal_uLong nNewPara, sal_Bool bInserted ); + void DoDelayedSyntaxHighlight( sal_uLong nPara ); + + void CreateEditEngine(); + void SetScrollBarRanges(); + void InitScrollBars(); + void SetModulWindow( ModulWindow* pWin ) + { pModulWindow = pWin; } + + void ForceSyntaxTimeout(); + sal_Bool SetSourceInBasic( sal_Bool bQuiet = sal_True ); + + sal_Bool CanModify() { return ImpCanModify(); } +}; + + +class BreakPointWindow : public Window +{ +private: + long nCurYOffset; + sal_uInt16 nMarkerPos; + BreakPointList aBreakPointList; + ModulWindow* pModulWindow; + sal_Bool bErrorMarker; + + virtual void DataChanged(DataChangedEvent const & rDCEvt); + + void setBackgroundColor(Color aColor); + +protected: + virtual void Paint( const Rectangle& ); + virtual void Resize(); + BreakPoint* FindBreakPoint( const Point& rMousePos ); + void ShowMarker( sal_Bool bShow ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void Command( const CommandEvent& rCEvt ); + + sal_Bool SyncYOffset(); + +public: + BreakPointWindow( Window* pParent ); + ~BreakPointWindow(); + + void SetModulWindow( ModulWindow* pWin ) + { pModulWindow = pWin; } + + void SetMarkerPos( sal_uInt16 nLine, sal_Bool bErrorMarker = sal_False ); + + void DoScroll( long nHorzScroll, long nVertScroll ); + long& GetCurYOffset() { return nCurYOffset; } + BreakPointList& GetBreakPoints() { return aBreakPointList; } +}; + + +class WatchTreeListBox : public SvHeaderTabListBox +{ + String aEditingRes; + +protected: + virtual sal_Bool EditingEntry( SvLBoxEntry* pEntry, Selection& rSel ); + virtual sal_Bool EditedEntry( SvLBoxEntry* pEntry, const String& rNewText ); + + sal_Bool ImplBasicEntryEdited( SvLBoxEntry* pEntry, const String& rResult ); + SbxBase* ImplGetSBXForEntry( SvLBoxEntry* pEntry, bool& rbArrayElement ); + +public: + WatchTreeListBox( Window* pParent, WinBits nWinBits ); + ~WatchTreeListBox(); + + void RequestingChilds( SvLBoxEntry * pParent ); + void UpdateWatches( bool bBasicStopped = false ); + + using SvTabListBox::SetTabs; + virtual void SetTabs(); +}; + + + +class WatchWindow : public BasicDockingWindow +{ +private: + String aWatchStr; + ExtendedEdit aXEdit; + ImageButton aRemoveWatchButton; + WatchTreeListBox aTreeListBox; + HeaderBar aHeaderBar; + +protected: + virtual void Resize(); + virtual void Paint( const Rectangle& rRect ); + + DECL_LINK( ButtonHdl, ImageButton * ); + DECL_LINK( TreeListHdl, SvTreeListBox * ); + DECL_LINK( implEndDragHdl, HeaderBar * ); + DECL_LINK( EditAccHdl, Accelerator * ); + + +public: + WatchWindow( Window* pParent ); + ~WatchWindow(); + + void AddWatch( const String& rVName ); + sal_Bool RemoveSelectedWatch(); + void UpdateWatches( bool bBasicStopped = false ); + + WatchTreeListBox& GetWatchTreeListBox() { return aTreeListBox; } +}; + + +class StackWindow : public BasicDockingWindow +{ +private: + SvTreeListBox aTreeListBox; + String aStackStr; + +protected: + virtual void Resize(); + virtual void Paint( const Rectangle& rRect ); + DECL_LINK( ButtonHdl, ImageButton * ); + +public: + StackWindow( Window* pParent ); + ~StackWindow(); + + void UpdateCalls(); +}; + + +class ComplexEditorWindow : public Window +{ +private: + BreakPointWindow aBrkWindow; + EditorWindow aEdtWindow; + ScrollBar aEWVScrollBar; + + virtual void DataChanged(DataChangedEvent const & rDCEvt); + +protected: + virtual void Resize(); + DECL_LINK( ScrollHdl, ScrollBar * ); + +public: + ComplexEditorWindow( ModulWindow* pParent ); + + BreakPointWindow& GetBrkWindow() { return aBrkWindow; } + EditorWindow& GetEdtWindow() { return aEdtWindow; } + ScrollBar& GetEWVScrollBar() { return aEWVScrollBar; } +}; + + +#define SYNTAX_COLOR_MAX 5 + +class ModulWindow: public IDEBaseWindow +{ + friend class BasicIDEShell; + +private: + StarBASICRef xBasic; + short nValid; + ComplexEditorWindow aXEditorWindow; + BasicStatus aStatus; + SbModuleRef xModule; + ModulWindowLayout* pLayout; + String aCurPath; + ::rtl::OUString m_aModule; + + DECL_LINK( BasicErrorHdl, StarBASIC * ); + long BasicBreakHdl( StarBASIC* pBasic ); + + void CheckCompileBasic(); + sal_Bool BasicExecute(); + + void GoOnTop(); + void AssertValidEditEngine(); + + sal_Int32 FormatAndPrint( Printer* pPrinter, sal_Int32 nPage = -1 ); + SbModuleRef XModule(); +protected: + virtual void Resize(); + virtual void GetFocus(); + virtual void Paint( const Rectangle& ); + virtual void Deactivating(); + virtual void DoInit(); + virtual void DoScroll( ScrollBar* pCurScrollBar ); + +public: + TYPEINFO(); + + ModulWindow( ModulWindowLayout* pParent, const ScriptDocument& rDocument, String aLibName, + String aName, ::rtl::OUString& aModule ); + + ~ModulWindow(); + + virtual void ExecuteCommand( SfxRequest& rReq ); + virtual void GetState( SfxItemSet& ); + virtual void StoreData(); + virtual void UpdateData(); + virtual sal_Bool CanClose(); + // return number of pages to be printed + virtual sal_Int32 countPages( Printer* pPrinter ); + // print page + virtual void printPage( sal_Int32 nPage, Printer* pPrinter ); + virtual String GetTitle(); + virtual BasicEntryDescriptor CreateEntryDescriptor(); + virtual sal_Bool AllowUndo(); + virtual void SetReadOnly( sal_Bool bReadOnly ); + virtual sal_Bool IsReadOnly(); + + StarBASIC* GetBasic() { XModule(); return xBasic; } + + SbModule* GetSbModule() { return xModule; } + void SetSbModule( SbModule* pModule ) { xModule = pModule; } + String GetSbModuleName(); + + sal_Bool CompileBasic(); + sal_Bool BasicRun(); + sal_Bool BasicStepOver(); + sal_Bool BasicStepInto(); + sal_Bool BasicStepOut(); + void BasicStop(); + sal_Bool BasicToggleBreakPoint(); + void BasicToggleBreakPointEnabled(); + void ManageBreakPoints(); + void UpdateBreakPoint( const BreakPoint& rBrk ); + void BasicAddWatch(); + void BasicRemoveWatch(); + + sal_Bool LoadBasic(); + sal_Bool SaveBasicSource(); + sal_Bool ImportDialog(); + + void EditMacro( const String& rMacroName ); + + sal_Bool ToggleBreakPoint( sal_uLong nLine ); + + BasicStatus& GetBasicStatus() { return aStatus; } + + virtual sal_Bool IsModified(); + virtual sal_Bool IsPasteAllowed(); + + void FrameWindowMoved(); + void ShowCursor( sal_Bool bOn ); + + virtual sal_uInt16 GetSearchOptions(); + sal_uInt16 StartSearchAndReplace( const SvxSearchItem& rSearchItem, sal_Bool bFromStart = sal_False ); + + virtual Window* GetLayoutWindow(); + + EditorWindow& GetEditorWindow() { return aXEditorWindow.GetEdtWindow(); } + BreakPointWindow& GetBreakPointWindow() { return aXEditorWindow.GetBrkWindow(); } + ScrollBar& GetEditVScrollBar() { return aXEditorWindow.GetEWVScrollBar(); } + ExtTextEngine* GetEditEngine() { return GetEditorWindow().GetEditEngine(); } + ExtTextView* GetEditView() { return GetEditorWindow().GetEditView(); } + BreakPointList& GetBreakPoints() { return GetBreakPointWindow().GetBreakPoints(); } + ModulWindowLayout* GetLayout() const { return pLayout; } + + virtual void BasicStarted(); + virtual void BasicStopped(); + + virtual ::svl::IUndoManager* + GetUndoManager(); + + const ::rtl::OUString& GetModule() const { return m_aModule; } + void SetModule( const ::rtl::OUString& aModule ) { m_aModule = aModule; } +}; + +class ModulWindowLayout: public Window, public utl::ConfigurationListener +{ +private: + + Splitter aVSplitter; + Splitter aHSplitter; + + WatchWindow aWatchWindow; + StackWindow aStackWindow; + + sal_Bool bVSplitted; + sal_Bool bHSplitted; + + ModulWindow * m_pModulWindow; + + Color m_aSyntaxColors[TT_KEYWORDS + 1]; + svtools::ColorConfig m_aColorConfig; + + ImageList m_aImagesNormal; + + virtual void DataChanged(DataChangedEvent const & rDCEvt); + + virtual void ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 ); + + void updateSyntaxHighlighting(); + + DECL_LINK( SplitHdl, Splitter * ); + + void ArrangeWindows(); + +protected: + virtual void Resize(); + virtual void Paint( const Rectangle& rRect ); + +public: + ModulWindowLayout( Window* pParent ); + ~ModulWindowLayout(); + + void DockaWindow( DockingWindow* pDockingWin ); + sal_Bool IsToBeDocked( DockingWindow* pDockingWin, const Point& rPos, Rectangle& rRect ); + + void SetModulWindow( ModulWindow* pModWin ); + ModulWindow* GetModulWindow() const { return m_pModulWindow; } + + WatchWindow& GetWatchWindow() { return aWatchWindow; } + StackWindow& GetStackWindow() { return aStackWindow; } + + Image getImage(sal_uInt16 nId) const; + + inline Color const & getSyntaxColor(TokenTypes eType) const + { return m_aSyntaxColors[eType]; } +}; + +#endif // _BASIDE2_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |