blob: 1a0629988dca04849f3d29a66ba5d0edf465162a [file] [log] [blame]
/**************************************************************
*
* 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 _BASTYPES_HXX
#define _BASTYPES_HXX
#include <svheader.hxx>
#include <iderid.hxx>
#include "scriptdocument.hxx"
class ModulWindow;
class SfxRequest;
class SvTreeListBox;
class SvLBoxEntry;
class ScrollBar;
class SbModule;
class BasicManager;
class SfxItemSet;
#include <vcl/dockwin.hxx>
#include <vcl/toolbox.hxx>
#include <basic/sbstar.hxx>
#include <iderid.hxx>
#include <tools/table.hxx>
#include <svtools/tabbar.hxx>
#include <com/sun/star/script/XLibraryContainer.hpp>
#include <hash_map>
#define LINE_SEP_CR 0x0D
#define LINE_SEP 0x0A
// Implementation: baside2b.cxx
sal_Int32 searchEOL( const ::rtl::OUString& rStr, sal_Int32 fromIndex );
// Bedeutung von bToBeKilled:
// Wenn in Reschedule-Schleife, darf ich das Fenster nicht zerstoeren.
// Es muss erst aus der Reschedule-Schleife Fallen, um sich dann
// selbst zu zerstoeren.
// Geht so leider nicht: Destroying Window with living Child!
struct BasicStatus
{
// sal_Bool bCompiled : 1;
sal_Bool bIsRunning : 1;
sal_Bool bError : 1;
sal_Bool bIsInReschedule : 1;
sal_uInt16 nBasicFlags;
BasicStatus() {
bIsRunning = sal_False; bError = sal_False;
nBasicFlags = 0; bIsInReschedule = sal_False; }
};
struct BreakPoint
{
sal_Bool bEnabled;
sal_Bool bTemp;
sal_uLong nLine;
sal_uLong nStopAfter;
sal_uLong nHitCount;
BreakPoint( sal_uLong nL ) { nLine = nL; nStopAfter = 0; nHitCount = 0; bEnabled = sal_True; bTemp = sal_False; }
};
class BasicDockingWindow : public DockingWindow
{
Rectangle aFloatingPosAndSize;
protected:
virtual sal_Bool Docking( const Point& rPos, Rectangle& rRect );
virtual void EndDocking( const Rectangle& rRect, sal_Bool bFloatMode );
virtual void ToggleFloatingMode();
virtual sal_Bool PrepareToggleFloatingMode();
virtual void StartDocking();
public:
BasicDockingWindow( Window* pParent );
};
DECLARE_LIST( BreakPL, BreakPoint* )
class BreakPointList : public BreakPL
{
private:
void operator =(BreakPointList); // not implemented
public:
BreakPointList();
BreakPointList(BreakPointList const & rList);
~BreakPointList();
void reset();
void transfer(BreakPointList & rList);
void InsertSorted( BreakPoint* pBrk );
BreakPoint* FindBreakPoint( sal_uLong nLine );
void AdjustBreakPoints( sal_uLong nLine, sal_Bool bInserted );
void SetBreakPointsInBasic( SbModule* pModule );
void ResetHitCount();
};
// helper class for sorting TabBar
class TabBarSortHelper
{
public:
sal_uInt16 nPageId;
String aPageText;
bool operator<(const TabBarSortHelper& rComp) const { return (aPageText.CompareIgnoreCaseToAscii( rComp.aPageText ) == COMPARE_LESS); }
};
class BasicIDETabBar : public TabBar
{
protected:
virtual void MouseButtonDown( const MouseEvent& rMEvt );
virtual void Command( const CommandEvent& rCEvt );
virtual long AllowRenaming();
virtual void EndRenaming();
public:
BasicIDETabBar( Window* pParent );
void Sort();
};
#define BASWIN_OK 0x00
#define BASWIN_RUNNINGBASIC 0x01
#define BASWIN_TOBEKILLED 0x02
#define BASWIN_SUSPENDED 0x04
#define BASWIN_INRESCHEDULE 0x08
class Printer;
class BasicEntryDescriptor;
namespace svl
{
class IUndoManager;
}
class IDEBaseWindow : public Window
{
private:
ScrollBar* pShellHScrollBar;
ScrollBar* pShellVScrollBar;
DECL_LINK( ScrollHdl, ScrollBar * );
sal_uInt8 nStatus;
ScriptDocument m_aDocument;
String m_aLibName;
String m_aName;
protected:
virtual void DoScroll( ScrollBar* pCurScrollBar );
public:
TYPEINFO();
IDEBaseWindow( Window* pParent, const ScriptDocument& rDocument, String aLibName, String aName );
virtual ~IDEBaseWindow();
void Init();
virtual void DoInit();
virtual void Deactivating();
void GrabScrollBars( ScrollBar* pHScroll, ScrollBar* pVScroll );
ScrollBar* GetHScrollBar() const { return pShellHScrollBar; }
ScrollBar* GetVScrollBar() const { return pShellVScrollBar; }
virtual void ExecuteCommand( SfxRequest& rReq );
virtual void GetState( SfxItemSet& );
virtual long Notify( NotifyEvent& rNEvt );
virtual void StoreData();
virtual void UpdateData();
virtual sal_Bool CanClose();
// return number of pages to be printed
virtual sal_Int32 countPages( Printer* pPrinter ) = 0;
// print page
virtual void printPage( sal_Int32 nPage, Printer* pPrinter ) = 0;
virtual String GetTitle();
String CreateQualifiedName();
virtual BasicEntryDescriptor CreateEntryDescriptor() = 0;
virtual sal_Bool IsModified();
virtual sal_Bool IsPasteAllowed();
virtual sal_Bool AllowUndo();
virtual void SetReadOnly( sal_Bool bReadOnly );
virtual sal_Bool IsReadOnly();
sal_uInt8 GetStatus() { return nStatus; }
void SetStatus( sal_uInt8 n ) { nStatus = n; }
void AddStatus( sal_uInt8 n ) { nStatus = nStatus | n; }
void ClearStatus( sal_uInt8 n ) { nStatus = nStatus & ~n; }
virtual Window* GetLayoutWindow();
virtual ::svl::IUndoManager*
GetUndoManager();
virtual sal_uInt16 GetSearchOptions();
virtual void BasicStarted();
virtual void BasicStopped();
sal_Bool IsSuspended() const
{ return ( nStatus & BASWIN_SUSPENDED ) ? sal_True : sal_False; }
const ScriptDocument&
GetDocument() const { return m_aDocument; }
void SetDocument( const ScriptDocument& rDocument ) { m_aDocument = rDocument; }
bool IsDocument( const ScriptDocument& rDocument ) const { return rDocument == m_aDocument; }
const String& GetLibName() const { return m_aLibName; }
void SetLibName( const String& aLibName ) { m_aLibName = aLibName; }
const String& GetName() const { return m_aName; }
void SetName( const String& aName ) { m_aName = aName; }
};
class LibInfoKey
{
private:
ScriptDocument m_aDocument;
String m_aLibName;
public:
LibInfoKey( const ScriptDocument& rDocument, const String& rLibName );
~LibInfoKey();
LibInfoKey( const LibInfoKey& rKey );
LibInfoKey& operator=( const LibInfoKey& rKey );
bool operator==( const LibInfoKey& rKey ) const;
const ScriptDocument&
GetDocument() const { return m_aDocument; }
const String& GetLibName() const { return m_aLibName; }
};
class LibInfoItem
{
private:
ScriptDocument m_aDocument;
String m_aLibName;
String m_aCurrentName;
sal_uInt16 m_nCurrentType;
public:
LibInfoItem( const ScriptDocument& rDocument, const String& rLibName, const String& rCurrentName, sal_uInt16 nCurrentType );
~LibInfoItem();
LibInfoItem( const LibInfoItem& rItem );
LibInfoItem& operator=( const LibInfoItem& rItem );
const ScriptDocument&
GetDocument() const { return m_aDocument; }
const String& GetLibName() const { return m_aLibName; }
const String& GetCurrentName() const { return m_aCurrentName; }
sal_uInt16 GetCurrentType() const { return m_nCurrentType; }
};
class LibInfos
{
private:
struct LibInfoKeyHash
{
size_t operator()( const LibInfoKey& rKey ) const
{
size_t nHash = (size_t) rKey.GetDocument().hashCode();
nHash += (size_t) ::rtl::OUString( rKey.GetLibName() ).hashCode();
return nHash;
}
};
typedef ::std::hash_map< LibInfoKey, LibInfoItem*, LibInfoKeyHash, ::std::equal_to< LibInfoKey > > LibInfoMap;
LibInfoMap m_aLibInfoMap;
public:
LibInfos();
~LibInfos();
void InsertInfo( LibInfoItem* pItem );
void RemoveInfoFor( const ScriptDocument& _rDocument );
LibInfoItem* GetInfo( const LibInfoKey& rKey );
};
void CutLines( ::rtl::OUString& rStr, sal_Int32 nStartLine, sal_Int32 nLines, sal_Bool bEraseTrailingEmptyLines = sal_False );
String CreateMgrAndLibStr( const String& rMgrName, const String& rLibName );
sal_uLong CalcLineCount( SvStream& rStream );
sal_Bool QueryReplaceMacro( const String& rName, Window* pParent = 0 );
sal_Bool QueryDelMacro( const String& rName, Window* pParent = 0 );
sal_Bool QueryDelDialog( const String& rName, Window* pParent = 0 );
sal_Bool QueryDelModule( const String& rName, Window* pParent = 0 );
sal_Bool QueryDelLib( const String& rName, sal_Bool bRef = sal_False, Window* pParent = 0 );
sal_Bool QueryPassword( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XLibraryContainer >& xLibContainer, const String& rLibName, String& rPassword, sal_Bool bRepeat = sal_False, sal_Bool bNewTitle = sal_False );
class ModuleInfoHelper
{
ModuleInfoHelper();
ModuleInfoHelper(const ModuleInfoHelper&);
ModuleInfoHelper& operator = (const ModuleInfoHelper&);
public:
static void getObjectName( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rLib, const String& rModName, String& rObjName );
static sal_Int32 getModuleType( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rLib, const String& rModName );
};
#endif // _BASTYPES_HXX