/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _BASIDE2_HXX #define _BASIDE2_HXX #include #include #include #include class ExtTextEngine; class ExtTextView; class SvxSearchItem; #include #include #ifndef _SV_BUTTON_HXX //autogen #include #endif #include #include #include "svl/lstner.hxx" #include #include #include 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 StartProgress( const String& rName, sal_uLong nStates ); // inline void EndProgress(); inline void StepProgress(); }; inline ProgressInfo::ProgressInfo( SfxObjectShell* pObjSh, const String& rText, sal_uLong nRange ) : SfxProgress( pObjSh, rText, nRange ) { nCurState = 0; } // inline void ProgressInfo::StartProgress( const String& rName, sal_uLong nStates ) // { // nCurState = 0; // if ( pStbMgr ) // pStbMgr->StartProgressMode( rName, nStates ); // } // inline void ProgressInfo::EndProgress() // { // if ( pStbMgr ) // pStbMgr->EndProgressMode(); //} 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; bool m_bHighContrastMode; 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 ); // virtual DragDropMode NotifyBeginDrag( SvLBoxEntry* ); // virtual sal_Bool NotifyQueryDrop( SvLBoxEntry* ); // virtual sal_Bool NotifyMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, // SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos ); // virtual sal_Bool NotifyCopying( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, // SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos ); // sal_Bool NotifyCopyingMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, // SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos, sal_Bool bMove ); 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; ImageButton aGotoCallButton; 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(); // virtual void PrintData( Printer* pPrinter ); // 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 ); // void InsertFromObjectCatalog( ObjectCatalog* pObjDlg ); 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; ImageList m_aImagesHighContrast; 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, bool bHighContrastMode) const; inline Color const & getSyntaxColor(TokenTypes eType) const { return m_aSyntaxColors[eType]; } }; #endif // _BASIDE2_HXX