summaryrefslogtreecommitdiff
path: root/basctl
diff options
context:
space:
mode:
authorUray M. János <uray.janos@gmail.com>2012-08-17 07:29:20 +0200
committerNoel Power <noel.power@suse.com>2012-08-17 13:10:15 +0100
commit44861f2435a0c487d4fb5b196f7e4fe7f9569396 (patch)
tree2220c769287bdea3a82c6feb6b3ea09db81b6038 /basctl
parent87a723da66a16293b1611e08991fbf6925144448 (diff)
Object Catalog in Dialog Editor
Change-Id: Ia74faa1452a4200c28fbd7c63130700df0a70b24 Object Catalog in Dialog Editor Change-Id: I97f2e0497b0e87cf630bba16dd98f9f7d0bb86e7
Diffstat (limited to 'basctl')
-rw-r--r--basctl/Library_basctl.mk1
-rw-r--r--basctl/source/accessibility/accessibledialogcontrolshape.cxx2
-rw-r--r--basctl/source/accessibility/accessibledialogwindow.cxx2
-rw-r--r--basctl/source/basicide/baside2.cxx620
-rw-r--r--basctl/source/basicide/baside2.hxx177
-rw-r--r--basctl/source/basicide/baside2b.cxx342
-rw-r--r--basctl/source/basicide/baside3.cxx114
-rw-r--r--basctl/source/basicide/basides1.cxx456
-rw-r--r--basctl/source/basicide/basides2.cxx62
-rw-r--r--basctl/source/basicide/basides3.cxx34
-rw-r--r--basctl/source/basicide/basidesh.cxx80
-rw-r--r--basctl/source/basicide/basobj2.cxx9
-rw-r--r--basctl/source/basicide/basobj3.cxx20
-rw-r--r--basctl/source/basicide/bastype2.hxx14
-rw-r--r--basctl/source/basicide/bastypes.cxx248
-rw-r--r--basctl/source/basicide/layout.cxx362
-rw-r--r--basctl/source/basicide/layout.hxx125
-rw-r--r--basctl/source/basicide/linenumberwindow.cxx6
-rw-r--r--basctl/source/basicide/linenumberwindow.hxx9
-rw-r--r--basctl/source/basicide/localizationmgr.cxx20
-rw-r--r--basctl/source/basicide/objdlg.cxx8
-rw-r--r--basctl/source/basicide/objdlg.hxx8
-rw-r--r--basctl/source/inc/accessibledialogcontrolshape.hxx9
-rw-r--r--basctl/source/inc/accessibledialogwindow.hxx9
-rw-r--r--basctl/source/inc/baside3.hxx54
-rw-r--r--basctl/source/inc/basidesh.hxx65
-rw-r--r--basctl/source/inc/bastypes.hxx101
27 files changed, 1738 insertions, 1219 deletions
diff --git a/basctl/Library_basctl.mk b/basctl/Library_basctl.mk
index c2d23f6dd3de..3e7db4cd7da8 100644
--- a/basctl/Library_basctl.mk
+++ b/basctl/Library_basctl.mk
@@ -88,6 +88,7 @@ $(eval $(call gb_Library_add_exception_objects,basctl,\
basctl/source/basicide/docsignature \
basctl/source/basicide/documentenumeration \
basctl/source/basicide/iderdll \
+ basctl/source/basicide/layout \
basctl/source/basicide/linenumberwindow \
basctl/source/basicide/localizationmgr \
basctl/source/basicide/macrodlg \
diff --git a/basctl/source/accessibility/accessibledialogcontrolshape.cxx b/basctl/source/accessibility/accessibledialogcontrolshape.cxx
index 4b8f05d8304c..ccfd4af7247b 100644
--- a/basctl/source/accessibility/accessibledialogcontrolshape.cxx
+++ b/basctl/source/accessibility/accessibledialogcontrolshape.cxx
@@ -45,7 +45,7 @@ using namespace ::comphelper;
// class AccessibleDialogControlShape
// -----------------------------------------------------------------------------
-AccessibleDialogControlShape::AccessibleDialogControlShape( DialogWindow* pDialogWindow, DlgEdObj* pDlgEdObj )
+AccessibleDialogControlShape::AccessibleDialogControlShape (basctl::DialogWindow* pDialogWindow, DlgEdObj* pDlgEdObj)
:AccessibleExtendedComponentHelper_BASE( new VCLExternalSolarLock() )
,m_pDialogWindow( pDialogWindow )
,m_pDlgEdObj( pDlgEdObj )
diff --git a/basctl/source/accessibility/accessibledialogwindow.cxx b/basctl/source/accessibility/accessibledialogwindow.cxx
index 4621e7e52f4a..a36c5b2b221e 100644
--- a/basctl/source/accessibility/accessibledialogwindow.cxx
+++ b/basctl/source/accessibility/accessibledialogwindow.cxx
@@ -105,7 +105,7 @@ bool AccessibleDialogWindow::ChildDescriptor::operator<( const ChildDescriptor&
// class AccessibleDialogWindow
// -----------------------------------------------------------------------------
-AccessibleDialogWindow::AccessibleDialogWindow( DialogWindow* pDialogWindow )
+AccessibleDialogWindow::AccessibleDialogWindow (basctl::DialogWindow* pDialogWindow)
:AccessibleExtendedComponentHelper_BASE( new VCLExternalSolarLock() )
,m_pDialogWindow( pDialogWindow )
{
diff --git a/basctl/source/basicide/baside2.cxx b/basctl/source/basicide/baside2.cxx
index 3d2bfd842455..fbda06a1648f 100644
--- a/basctl/source/basicide/baside2.cxx
+++ b/basctl/source/basicide/baside2.cxx
@@ -22,7 +22,10 @@
#include "iderdll.hxx"
#include "iderdll2.hxx"
#include "objdlg.hxx"
+#include "moduldlg.hxx"
+#include "docsignature.hxx"
+#include "helpid.hrc"
#include "baside2.hrc"
#include <basic/basmgr.hxx>
@@ -41,13 +44,15 @@
#include <sfx2/request.hxx>
#include <svl/aeitem.hxx>
#include <svl/srchitem.hxx>
+#include <svl/visitem.hxx>
#include <svl/whiter.hxx>
#include <vcl/xtextedt.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <vcl/msgbox.hxx>
+#include <cassert>
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
+namespace basctl
+{
#define LMARGPRN 1700
#define RMARGPRN 900
@@ -74,6 +79,9 @@ DBG_NAME( ModulWindow )
TYPEINIT1( ModulWindow , IDEBaseWindow );
+namespace
+{
+
void lcl_PrintHeader( Printer* pPrinter, sal_uInt16 nPages, sal_uInt16 nCurPage, const ::rtl::OUString& rTitle, bool bOutput )
{
short nLeftMargin = LMARGPRN;
@@ -160,17 +168,31 @@ void lcl_ConvertTabsToSpaces( String& rLine )
}
}
-ModulWindow::ModulWindow( ModulWindowLayout* pParent, const ScriptDocument& rDocument, ::rtl::OUString aLibName,
- ::rtl::OUString aName, ::rtl::OUString& aModule )
- :IDEBaseWindow( pParent, rDocument, aLibName, aName )
- ,aXEditorWindow( this )
- ,m_aModule( aModule )
+// until we have some configuration lets just keep
+// persist this value for the process lifetime
+bool bSourceLinesEnabled = false;
+
+} // namespace
+
+
+//
+// ModulWindow
+// ===========
+//
+
+ModulWindow::ModulWindow (
+ ModulWindowLayout* pParent,
+ ScriptDocument const& rDocument,
+ rtl::OUString aLibName, rtl::OUString aName, rtl::OUString& aModule
+) :
+ IDEBaseWindow(pParent, rDocument, aLibName, aName),
+ rLayout(*pParent),
+ nValid(VALIDWINDOW),
+ aXEditorWindow(this),
+ m_aModule(aModule)
{
DBG_CTOR( ModulWindow, 0 );
- nValid = VALIDWINDOW;
- pLayout = pParent;
aXEditorWindow.Show();
-
SetBackground();
}
@@ -514,8 +536,13 @@ bool ModulWindow::SaveBasicSource()
return bDone;
}
+} // namespace basctl
+
bool implImportDialog( Window* pWin, const ::rtl::OUString& rCurPath, const ScriptDocument& rDocument, const ::rtl::OUString& aLibName );
+namespace basctl
+{
+
bool ModulWindow::ImportDialog()
{
const ScriptDocument& rDocument = GetDocument();
@@ -664,7 +691,7 @@ long ModulWindow::BasicErrorHdl( StarBASIC * pBasic )
aErrorTextPrefixBuf.append(IDE_RESSTR(RID_STR_RUNTIMEERROR));
aErrorTextPrefixBuf.append(StarBASIC::GetVBErrorCode(pBasic->GetErrorCode()));
aErrorTextPrefixBuf.append(' ');
- pLayout->GetStackWindow().UpdateCalls();
+ rLayout.UpdateDebug();
}
::rtl::OUString aErrorTextPrefix(aErrorTextPrefixBuf.makeStringAndClear());
// if other basic, the IDE should try to display the correct module
@@ -712,8 +739,7 @@ long ModulWindow::BasicBreakHdl( StarBASIC* pBasic )
GetEditView()->SetSelection( TextSelection( TextPaM( nErrorLine, 0 ), TextPaM( nErrorLine, 0 ) ) );
aXEditorWindow.GetBrkWindow().SetMarkerPos( nErrorLine );
- pLayout->GetWatchWindow().UpdateWatches();
- pLayout->GetStackWindow().UpdateCalls();
+ rLayout.UpdateDebug();
aStatus.bIsInReschedule = true;
aStatus.bIsRunning = true;
@@ -755,24 +781,13 @@ void ModulWindow::BasicAddWatch()
if ( bAdd )
{
TextSelection aSel = GetEditView()->GetSelection();
- if ( aSel.GetStart().GetPara() == aSel.GetEnd().GetPara() )
- {
- aWatchStr = GetEditView()->GetSelected();
- pLayout->GetWatchWindow().AddWatch( aWatchStr );
- pLayout->GetWatchWindow().UpdateWatches();
- }
+ if ( aSel.GetStart().GetPara() == aSel.GetEnd().GetPara() ) // single line selection
+ rLayout.BasicAddWatch(GetEditView()->GetSelected());
}
}
-void ModulWindow::BasicRemoveWatch()
-{
- DBG_CHKTHIS( ModulWindow, 0 );
- pLayout->GetWatchWindow().RemoveSelectedWatch();
-}
-
-
void ModulWindow::EditMacro( const String& rMacroName )
{
DBG_CHKTHIS( ModulWindow, 0 );
@@ -941,12 +956,11 @@ sal_Int32 ModulWindow::FormatAndPrint( Printer* pPrinter, sal_Int32 nPrintPage )
}
-void ModulWindow::ExecuteCommand( SfxRequest& rReq )
+void ModulWindow::ExecuteCommand (SfxRequest& rReq)
{
DBG_CHKTHIS( ModulWindow, 0 );
AssertValidEditEngine();
- sal_uInt16 nSlot = rReq.GetSlot();
- switch ( nSlot )
+ switch (rReq.GetSlot())
{
case SID_DELETE:
{
@@ -1024,7 +1038,7 @@ void ModulWindow::ExecuteCommand( SfxRequest& rReq )
break;
case SID_BASICIDE_REMOVEWATCH:
{
- BasicRemoveWatch();
+ rLayout.BasicRemoveWatch();
}
break;
case SID_CUT:
@@ -1032,8 +1046,7 @@ void ModulWindow::ExecuteCommand( SfxRequest& rReq )
if ( !IsReadOnly() )
{
GetEditView()->Cut();
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
+ if (SfxBindings* pBindings = BasicIDE::GetBindingsPtr())
pBindings->Invalidate( SID_DOC_MODIFIED );
}
}
@@ -1048,8 +1061,7 @@ void ModulWindow::ExecuteCommand( SfxRequest& rReq )
if ( !IsReadOnly() )
{
GetEditView()->Paste();
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
+ if (SfxBindings* pBindings = BasicIDE::GetBindingsPtr())
pBindings->Invalidate( SID_DOC_MODIFIED );
}
}
@@ -1059,6 +1071,52 @@ void ModulWindow::ExecuteCommand( SfxRequest& rReq )
GetBreakPointWindow().Invalidate();
}
break;
+ case SID_SHOWLINES:
+ {
+ SFX_REQUEST_ARG(rReq, pItem, SfxBoolItem, rReq.GetSlot(), false);
+ bSourceLinesEnabled = pItem && pItem->GetValue();
+ aXEditorWindow.SetLineNumberDisplay(bSourceLinesEnabled);
+ }
+ break;
+ case SID_BASICIDE_DELETECURRENT:
+ {
+ if (QueryDelModule(m_aName, this))
+ if (m_aDocument.removeModule(m_aLibName, m_aName))
+ BasicIDE::MarkDocumentModified(m_aDocument);
+ }
+ break;
+ case FID_SEARCH_OFF:
+ GrabFocus();
+ break;
+ case SID_GOTOLINE:
+ {
+ GotoLineDialog aGotoDlg(this);
+ if (aGotoDlg.Execute())
+ if (sal_Int32 const nLine = aGotoDlg.GetLineNumber())
+ {
+ TextSelection const aSel(TextPaM(nLine - 1, 0), TextPaM(nLine - 1, 0));
+ GetEditView()->SetSelection(aSel);
+ }
+ break;
+ }
+ }
+}
+
+void ModulWindow::ExecuteGlobal (SfxRequest& rReq)
+{
+ switch (rReq.GetSlot())
+ {
+ case SID_SIGNATURE:
+ {
+ basctl::DocumentSignature aSignature(m_aDocument);
+ if (aSignature.supportsSignatures())
+ {
+ aSignature.signScriptingContent();
+ if (SfxBindings* pBindings = BasicIDE::GetBindingsPtr())
+ pBindings->Invalidate(SID_SIGNATURE);
+ }
+ }
+ break;
}
}
@@ -1124,6 +1182,11 @@ void ModulWindow::GetState( SfxItemSet &rSet )
}
}
break;
+ case SID_SHOWLINES:
+ {
+ rSet.Put(SfxBoolItem(nWh, bSourceLinesEnabled));
+ break;
+ }
}
}
}
@@ -1191,25 +1254,30 @@ void ModulWindow::ShowCursor( bool bOn )
}
-Window* ModulWindow::GetLayoutWindow()
-{
- return pLayout;
-}
-
void ModulWindow::AssertValidEditEngine()
{
if ( !GetEditEngine() )
GetEditorWindow().CreateEditEngine();
}
+void ModulWindow::Activating ()
+{
+ aXEditorWindow.SetLineNumberDisplay(bSourceLinesEnabled);
+ Show();
+}
+
void ModulWindow::Deactivating()
{
+ Hide();
if ( GetEditView() )
GetEditView()->EraseVirtualDevice();
}
sal_uInt16 ModulWindow::StartSearchAndReplace( const SvxSearchItem& rSearchItem, bool bFromStart )
{
+ if (IsSuspended())
+ return 0;
+
// one could also relinquish syntaxhighlighting/formatting instead of the stupid replace-everything...
AssertValidEditEngine();
ExtTextView* pView = GetEditView();
@@ -1354,11 +1422,6 @@ void ModulWindow::SetLineNumberDisplay(bool b)
aXEditorWindow.SetLineNumberDisplay(b);
}
-void ModulWindow::SetObjectCatalogDisplay(bool b)
-{
- aXEditorWindow.SetObjectCatalogDisplay(b);
-}
-
bool ModulWindow::IsPasteAllowed()
{
bool bPaste = false;
@@ -1383,374 +1446,207 @@ bool ModulWindow::IsPasteAllowed()
return bPaste;
}
-ModulWindowLayout::ModulWindowLayout( Window* pParent ) :
- Window(pParent, WB_CLIPCHILDREN),
- bFirstArrange(true),
- aLeftSplit(this, WB_HSCROLL),
- aBottomSplit(this, WB_VSCROLL),
- aVertSplit(this, WB_HSCROLL),
- aObjectCatalog(this),
- aWatchWindow(this),
- aStackWindow(this),
- m_pModulWindow(0),
- m_aImagesNormal(IDEResId(RID_IMGLST_LAYOUT))
+void ModulWindow::OnNewDocument ()
+{
+ aXEditorWindow.SetLineNumberDisplay(bSourceLinesEnabled);
+}
+
+char const* ModulWindow::GetHid () const
+{
+ return HID_BASICIDE_MODULWINDOW;
+}
+BasicIDEType ModulWindow::GetType () const
{
- SetBackground(GetSettings().GetStyleSettings().GetWindowColor());
+ return BASICIDE_TYPE_MODULE;
+}
- Color splitterColor(GetSettings().GetStyleSettings().GetShadowColor());
+bool ModulWindow::HasActiveEditor () const
+{
+ return !IsSuspended();
+}
- aLeftSplit.SetLineColor(splitterColor);
- aLeftSplit.SetFillColor(splitterColor);
- aBottomSplit.SetLineColor(splitterColor);
- aBottomSplit.SetFillColor(splitterColor);
- aVertSplit.SetLineColor(splitterColor);
- aVertSplit.SetFillColor(splitterColor);
- aLeftSplit.Show();
- aBottomSplit.Show();
- aVertSplit.Show();
- aLeftSplit.SetSplitHdl( LINK(this, ModulWindowLayout, SplitHdl) );
- aBottomSplit.SetSplitHdl( LINK(this, ModulWindowLayout, SplitHdl) );
- aVertSplit.SetSplitHdl( LINK(this, ModulWindowLayout, SplitHdl) );
+void ModulWindow::UpdateModule ()
+{
+ rtl::OUString const aModule = getTextEngineText(GetEditEngine());
- aWatchWindow.Show();
- aStackWindow.Show();
- aObjectCatalog.Show();
-
- Color aColor(GetSettings().GetStyleSettings().GetFieldTextColor());
- m_aSyntaxColors[TT_UNKNOWN] = aColor;
- m_aSyntaxColors[TT_WHITESPACE] = aColor;
- m_aSyntaxColors[TT_EOL] = aColor;
- m_aColorConfig.AddListener(this);
- m_aSyntaxColors[TT_IDENTIFIER]
- = Color(m_aColorConfig.GetColorValue(svtools::BASICIDENTIFIER).nColor);
- m_aSyntaxColors[TT_NUMBER]
- = Color(m_aColorConfig.GetColorValue(svtools::BASICNUMBER).nColor);
- m_aSyntaxColors[TT_STRING]
- = Color(m_aColorConfig.GetColorValue(svtools::BASICSTRING).nColor);
- m_aSyntaxColors[TT_COMMENT]
- = Color(m_aColorConfig.GetColorValue(svtools::BASICCOMMENT).nColor);
- m_aSyntaxColors[TT_ERROR]
- = Color(m_aColorConfig.GetColorValue(svtools::BASICERROR).nColor);
- m_aSyntaxColors[TT_OPERATOR]
- = Color(m_aColorConfig.GetColorValue(svtools::BASICOPERATOR).nColor);
- m_aSyntaxColors[TT_KEYWORDS]
- = Color(m_aColorConfig.GetColorValue(svtools::BASICKEYWORD).nColor);
-
- Font aFont( GetFont() );
- Size aSz( aFont.GetSize() );
- aSz.Height() *= 3;
- aSz.Height() /= 2;
- aFont.SetSize( aSz );
- aFont.SetWeight( WEIGHT_BOLD );
- aFont.SetColor(GetSettings().GetStyleSettings().GetWindowTextColor());
- SetFont( aFont );
+ // update module in basic
+ assert(xModule);
+
+ // update module in module window
+ SetModule(aModule);
+
+ // update module in library
+ OSL_VERIFY(m_aDocument.updateModule(m_aLibName, m_aName, aModule));
+
+ GetEditEngine()->SetModified(false);
+ BasicIDE::MarkDocumentModified(m_aDocument);
}
-ModulWindowLayout::~ModulWindowLayout()
+
+//
+// ModulWindowLayout
+// =================
+//
+
+ModulWindowLayout::ModulWindowLayout (Window* pParent, ObjectCatalog& rObjectCatalog_) :
+ Layout(pParent),
+ pChild(0),
+ aWatchWindow(this),
+ aStackWindow(this),
+ rObjectCatalog(rObjectCatalog_)
+{ }
+
+void ModulWindowLayout::UpdateDebug (bool bBasicStopped)
{
- m_aColorConfig.RemoveListener(this);
+ aWatchWindow.UpdateWatches(bBasicStopped);
+ aStackWindow.UpdateCalls();
}
-void ModulWindowLayout::Resize()
+void ModulWindowLayout::Paint (Rectangle const&)
{
- // ScrollBars, etc. happens in BasicIDEShell:Adjust...
- ArrangeWindows();
+ DrawText(Point(), String(IDEResId(RID_STR_NOMODULE)));
}
-void ModulWindowLayout::Paint( const Rectangle& )
+// virtual
+void ModulWindowLayout::DataChanged (DataChangedEvent const& rDCEvt)
{
- DrawText( Point(), String( IDEResId( RID_STR_NOMODULE ) ) );
+ Layout::DataChanged(rDCEvt);
+ if (rDCEvt.GetType() == DATACHANGED_SETTINGS && (rDCEvt.GetFlags() & SETTINGS_STYLE))
+ aSyntaxColors.SettingsChanged();
}
-void ModulWindowLayout::ArrangeWindows()
+void ModulWindowLayout::Activating (IDEBaseWindow& rChild)
{
- static long const nSplitThickness = 2;
- static double const
- fDefaultLeftSplit = 0.2,
- fDefaultBottomSplit = 0.75,
- fDefaultVertSplit = 0.67;
+ assert(dynamic_cast<ModulWindow*>(&rChild));
+ pChild = &static_cast<ModulWindow&>(rChild);
+ aWatchWindow.Show();
+ aStackWindow.Show();
+ rObjectCatalog.Show();
+ rObjectCatalog.SetLayoutWindow(this);
+ rObjectCatalog.UpdateEntries();
+ Layout::Activating(rChild);
+ aSyntaxColors.SetActiveEditor(&pChild->GetEditorWindow());
+}
- Size const aSize = GetOutputSizePixel();
- long const nWidth = aSize.Width(), nHeight = aSize.Height();
- if (!nWidth || !nHeight) // empty size
- return;
+void ModulWindowLayout::Deactivating ()
+{
+ aSyntaxColors.SetActiveEditor(0);
+ Layout::Deactivating();
+ aWatchWindow.Hide();
+ aStackWindow.Hide();
+ rObjectCatalog.Hide();
+ pChild = 0;
+}
- // When ArrangeWindows() is called first,
- // the initial positions of the splitter lines are set.
- if (bFirstArrange)
+void ModulWindowLayout::GetState (SfxItemSet &rSet, unsigned nWhich)
+{
+ switch (nWhich)
{
- aLeftSplit.SetSplitPosPixel(aSize.Width() * fDefaultLeftSplit);
- aBottomSplit.SetSplitPosPixel(aSize.Height() * fDefaultBottomSplit);
- aVertSplit.SetSplitPosPixel(aSize.Width() * fDefaultVertSplit);
- bFirstArrange = false;
+ case SID_BASICIDE_CHOOSEMACRO:
+ rSet.Put(SfxVisibilityItem(nWhich, true));
+ break;
}
+}
- // resizing windows to the splitting lines
- long const nLeftSplitPos = aLeftSplit.GetSplitPosPixel();
- long const nBottomSplitPos = aBottomSplit.GetSplitPosPixel();
- long const nVertSplitPos = aVertSplit.GetSplitPosPixel();
- // which window is docked?
- bool const bObjCat = !aObjectCatalog.IsFloatingMode() && aObjectCatalog.IsVisible();
- bool const bWatchWin = !aWatchWindow.IsFloatingMode() && aWatchWindow.IsVisible();
- bool const bStackWin = !aStackWindow.IsFloatingMode() && aStackWindow.IsVisible();
- long const nBottom = bStackWin || bWatchWin ? nBottomSplitPos : nHeight;
- // left splitting line
- if (bObjCat)
- {
- aLeftSplit.SetDragRectPixel(Rectangle(Point(0, 0), Size(nWidth, nBottom)));
- aLeftSplit.SetPosPixel(Point(nLeftSplitPos, 0));
- aLeftSplit.SetSizePixel(Size(nSplitThickness, nBottom));
- aLeftSplit.Show();
- }
- else
- aLeftSplit.Hide();
- // bottom splitting line
- if (bWatchWin || bStackWin)
- {
- aBottomSplit.SetDragRectPixel(Rectangle(Point(0, 0), aSize));
- aBottomSplit.SetPosPixel(Point(0, nBottomSplitPos));
- aBottomSplit.SetSizePixel(Size(nWidth, nSplitThickness));
- aBottomSplit.Show();
- }
- else
- aBottomSplit.Hide();
- // vertical (bottom) splitting line
- if (bWatchWin || bStackWin)
- {
- Point const aPos(nVertSplitPos, nBottomSplitPos + nSplitThickness);
- aVertSplit.SetDragRectPixel(Rectangle(Point(0, aPos.Y()), Size(nWidth, nHeight - aPos.Y())));
- aVertSplit.SetPosSizePixel(aPos, Size(nSplitThickness, nHeight - aPos.Y()));
- aVertSplit.Show();
- }
- else
- aVertSplit.Hide();
- // editor window
- if (m_pModulWindow)
- {
- DBG_CHKOBJ(m_pModulWindow, ModulWindow, 0);
- long const nLeft = bObjCat ? nLeftSplitPos + nSplitThickness : 0;
- m_pModulWindow->SetPosSizePixel(
- Point(nLeft, 0),
- Size(nWidth - nLeft, nBottom)
- );
- }
- // object catalog (left)
- if (bObjCat)
- {
- aObjectCatalog.SetPosPixel(Point(0, 0));
- aObjectCatalog.SetSizePixel(Size(nLeftSplitPos, nBottom));
- }
- // watch (bottom left)
- if (bWatchWin)
- {
- Point const aPos(0, nBottomSplitPos + nSplitThickness);
- aWatchWindow.SetPosPixel(aPos);
- aWatchWindow.SetSizePixel(Size(nVertSplitPos, nHeight - aPos.Y()));
- }
- // call stack (bottom right)
- if (bStackWin)
- {
- Point const aPos(nVertSplitPos + nSplitThickness, nBottomSplitPos + nSplitThickness);
- aStackWindow.SetPosPixel(aPos);
- aStackWindow.SetSizePixel(Size(nWidth - aPos.X(), nHeight - aPos.Y()));
- }
+void ModulWindowLayout::BasicAddWatch (String const& rWatchStr)
+{
+ aWatchWindow.AddWatch(rWatchStr);
}
-IMPL_LINK( ModulWindowLayout, SplitHdl, Splitter *, pSplitter )
-{
- // The split line cannot be closer to the edges than nMargin pixels.
- static long const nMargin = 16;
- // Checking margins:
- if (long const nSize = pSplitter->IsHorizontal() ?
- GetOutputSizePixel().Width() :
- GetOutputSizePixel().Height()
- ) {
- long const nPos = pSplitter->GetSplitPosPixel();
- if (nPos < nMargin)
- pSplitter->SetSplitPosPixel(nMargin);
- if (nPos > nSize - nMargin)
- pSplitter->SetSplitPosPixel(nSize - nMargin);
- }
- ArrangeWindows();
- return 0;
+void ModulWindowLayout::BasicRemoveWatch ()
+{
+ DBG_CHKTHIS( ModulWindow, 0 );
+ aWatchWindow.RemoveSelectedWatch();
}
+void ModulWindowLayout::OnFirstSize (int const nWidth, int const nHeight)
+{
+ AddToLeft(&rObjectCatalog, Size(nWidth * 0.20, nHeight * 0.75));
+ AddToBottom(&aWatchWindow, Size(nWidth * 0.67, nHeight * 0.25));
+ AddToBottom(&aStackWindow, Size(nWidth * 0.33, nHeight * 0.25));
+}
+
+
//
-// IsToBeDocked() -- test whether dock or child:
-// true: Floating
-// false: Child
+// SyntaxColors
+// ============
//
-bool ModulWindowLayout::IsToBeDocked (
- DockingWindow* pDockingWindow, Point const& rPos, Rectangle& rRect
-) {
- Point const aPos = ScreenToOutputPixel(rPos);
- Size const aSize = GetOutputSizePixel();
- long const nWidth = aSize.Width(), nHeight = aSize.Height();
-
- if (aPos.X() > 0 && aPos.X() < nWidth && aPos.Y() > 0 && aPos.Y() < nHeight)
- {
- long const nLeftSplit = aLeftSplit.GetSplitPosPixel();
- long const nBottomSplit = aBottomSplit.GetSplitPosPixel();
- long const nVertSplit = aVertSplit.GetSplitPosPixel();
- if (pDockingWindow == &aObjectCatalog)
- {
- if (aPos.Y() < nBottomSplit && aPos.X() < nLeftSplit)
- {
- rRect = Rectangle(
- OutputToScreenPixel(Point(0, 0)),
- Size(nLeftSplit, nBottomSplit)
- );
- return true;
- }
- }
- else if (pDockingWindow == &aWatchWindow)
- {
- if (aPos.Y() > nBottomSplit && aPos.X() < nVertSplit)
- {
- rRect = Rectangle(
- OutputToScreenPixel(Point(0, nBottomSplit)),
- Size(nVertSplit, nHeight - nBottomSplit)
- );
- return true;
- }
- }
- else if (pDockingWindow == &aStackWindow)
- {
- if (aPos.Y() > nBottomSplit && aPos.X() > nVertSplit)
- {
- rRect = Rectangle(
- OutputToScreenPixel(Point(nVertSplit, nBottomSplit)),
- Size(nWidth - nVertSplit, nHeight - nBottomSplit)
- );
- return true;
- }
- }
- }
- return false;
-}
-void ModulWindowLayout::DockaWindow (DockingWindow*)
+ModulWindowLayout::SyntaxColors::SyntaxColors () :
+ pEditor(0)
{
- ArrangeWindows();
+ aConfig.AddListener(this);
+
+ aColors[TT_UNKNOWN] =
+ aColors[TT_WHITESPACE] =
+ aColors[TT_EOL] =
+ Application::GetSettings().GetStyleSettings().GetFieldTextColor();
+
+ NewConfig(true);
}
-void ModulWindowLayout::SetModulWindow (ModulWindow* pModulWindow)
+ModulWindowLayout::SyntaxColors::~SyntaxColors ()
{
- m_pModulWindow = pModulWindow;
- ArrangeWindows();
+ aConfig.RemoveListener(this);
}
-// virtual
-void ModulWindowLayout::DataChanged(DataChangedEvent const & rDCEvt)
+void ModulWindowLayout::SyntaxColors::SettingsChanged ()
{
- Window::DataChanged(rDCEvt);
- if (rDCEvt.GetType() == DATACHANGED_SETTINGS
- && (rDCEvt.GetFlags() & SETTINGS_STYLE) != 0)
+ Color const aColor = Application::GetSettings().GetStyleSettings().GetFieldTextColor();
+ if (aColor != aColors[TT_UNKNOWN])
{
- bool bInvalidate = false;
- Color aColor(GetSettings().GetStyleSettings().GetWindowColor());
- if (aColor
- != rDCEvt.GetOldSettings()->GetStyleSettings().GetWindowColor())
- {
- SetBackground(Wallpaper(aColor));
- bInvalidate = true;
- }
- aColor = GetSettings().GetStyleSettings().GetWindowTextColor();
- if (aColor != rDCEvt.GetOldSettings()->
- GetStyleSettings().GetWindowTextColor())
- {
- Font aFont(GetFont());
- aFont.SetColor(aColor);
- SetFont(aFont);
- bInvalidate = true;
- }
- if (bInvalidate)
- Invalidate();
- aColor = GetSettings().GetStyleSettings().GetFieldTextColor();
- if (aColor != m_aSyntaxColors[TT_UNKNOWN])
- {
- m_aSyntaxColors[TT_UNKNOWN] = aColor;
- m_aSyntaxColors[TT_WHITESPACE] = aColor;
- m_aSyntaxColors[TT_EOL] = aColor;
- updateSyntaxHighlighting();
- }
+ aColors[TT_UNKNOWN] =
+ aColors[TT_WHITESPACE] =
+ aColors[TT_EOL] =
+ aColor;
+ if (pEditor)
+ pEditor->UpdateSyntaxHighlighting();
}
}
// virtual
-void ModulWindowLayout::ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 )
+void ModulWindowLayout::SyntaxColors::ConfigurationChanged (utl::ConfigurationBroadcaster*, sal_uInt32)
{
- {
- Color aColor(m_aColorConfig.GetColorValue(svtools::BASICIDENTIFIER).
- nColor);
- bool bChanged = aColor != m_aSyntaxColors[TT_IDENTIFIER];
- m_aSyntaxColors[TT_IDENTIFIER] = aColor;
- aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICNUMBER).nColor);
- if (bChanged || aColor != m_aSyntaxColors[TT_NUMBER])
- bChanged = true;
- m_aSyntaxColors[TT_NUMBER] = aColor;
- aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICSTRING).nColor);
- if (bChanged || aColor != m_aSyntaxColors[TT_STRING])
- bChanged = true;
- m_aSyntaxColors[TT_STRING] = aColor;
- aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICCOMMENT).
- nColor);
- if (bChanged || aColor != m_aSyntaxColors[TT_COMMENT])
- bChanged = true;
- m_aSyntaxColors[TT_COMMENT] = aColor;
- aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICERROR).nColor);
- if (bChanged || aColor != m_aSyntaxColors[TT_ERROR])
- bChanged = true;
- m_aSyntaxColors[TT_ERROR] = aColor;
- aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICOPERATOR).
- nColor);
- if (bChanged || aColor != m_aSyntaxColors[TT_OPERATOR])
- bChanged = true;
- m_aSyntaxColors[TT_OPERATOR] = aColor;
- aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICKEYWORD).
- nColor);
- if (bChanged || aColor != m_aSyntaxColors[TT_KEYWORDS])
- bChanged = true;
- m_aSyntaxColors[TT_KEYWORDS] = aColor;
- if (bChanged)
- updateSyntaxHighlighting();
- }
+ NewConfig(false);
}
-void ModulWindowLayout::updateSyntaxHighlighting()
+// when a new configuration has to be set
+void ModulWindowLayout::SyntaxColors::NewConfig (bool bFirst)
{
- if (m_pModulWindow != 0)
+ static struct
{
- EditorWindow & rEditor = m_pModulWindow->GetEditorWindow();
- sal_uLong nCount = rEditor.GetEditEngine()->GetParagraphCount();
- for (sal_uLong i = 0; i < nCount; ++i)
- rEditor.DoDelayedSyntaxHighlight(i);
+ TokenTypes eTokenType;
+ svtools::ColorConfigEntry eEntry;
}
+ const vIds[] =
+ {
+ { TT_IDENTIFIER, svtools::BASICIDENTIFIER },
+ { TT_NUMBER, svtools::BASICNUMBER },
+ { TT_STRING, svtools::BASICSTRING },
+ { TT_COMMENT, svtools::BASICCOMMENT },
+ { TT_ERROR, svtools::BASICERROR },
+ { TT_OPERATOR, svtools::BASICOPERATOR },
+ { TT_KEYWORDS, svtools::BASICKEYWORD },
+ };
+
+ bool bChanged = false;
+ for (unsigned i = 0; i != sizeof vIds / sizeof vIds[0]; ++i)
+ {
+ Color const aColor = aConfig.GetColorValue(vIds[i].eEntry).nColor;
+ Color& rMyColor = aColors[vIds[i].eTokenType];
+ if (bFirst || aColor != rMyColor)
+ {
+ rMyColor = aColor;
+ bChanged = true;
+ }
+ }
+ if (bChanged && !bFirst && pEditor)
+ pEditor->UpdateSyntaxHighlighting();
}
-Image ModulWindowLayout::getImage(sal_uInt16 nId) const
-{
- return m_aImagesNormal.GetImage(nId);
-}
-
-// shows or hides the Object Catalog window (depending on its state)
-void ModulWindowLayout::ToggleObjectCatalog ()
-{
- // show or hide?
- bool const bShow = !aObjectCatalog.IsVisible();
- bShow ? aObjectCatalog.Show() : aObjectCatalog.Hide();
- if (m_pModulWindow)
- m_pModulWindow->SetObjectCatalogDisplay(bShow);
- // refreshing
- ArrangeWindows();
-}
-// Updates the Object Catalog window.
-void ModulWindowLayout::UpdateObjectCatalog ()
-{
- aObjectCatalog.UpdateEntries();
-}
+} // namespace basctl
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx
index e3aeeedb5277..e1e639244357 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -20,12 +20,13 @@
#ifndef BASCTL_BASIDE2_HXX
#define BASCTL_BASIDE2_HXX
-#include <svheader.hxx>
-
+#include "layout.hxx"
#include <bastypes.hxx>
#include <bastype3.hxx>
#include <basidesh.hxx>
+#include <svheader.hxx>
+
class ExtTextEngine;
class ExtTextView;
class SvxSearchItem;
@@ -40,22 +41,25 @@ class SvxSearchItem;
#include <svtools/colorcfg.hxx>
#include <sfx2/progress.hxx>
-#include <svtools/syntaxhighlight.hxx>
#include <unotools/options.hxx>
#include "breakpoint.hxx"
#include "linenumberwindow.hxx"
-#include "objdlg.hxx"
#include <set>
-DBG_NAMEEX( ModulWindow )
-
#define MARKER_NOMARKER 0xFFFF
namespace com { namespace sun { namespace star { namespace beans {
class XMultiPropertySet;
} } } }
+namespace basctl
+{
+
+class ObjectCatalog;
+
+DBG_NAMEEX( ModulWindow )
+
// #108672 Helper functions to get/set text in TextEngine
// using the stream interface (get/setText() only supports
// tools Strings limited to 64K).
@@ -90,10 +94,10 @@ class EditorWindow : public Window, public SfxListener
{
private:
class ChangesListener;
- friend class ChangesListener;
ExtTextView* pEditView;
ExtTextEngine* pEditEngine;
+ ModulWindow& rModulWindow;
rtl::Reference< ChangesListener > listener_;
osl::Mutex mutex_;
@@ -107,7 +111,6 @@ private:
SyntaxLineSet aSyntaxLineTable;
DECL_LINK(SyntaxTimerHdl, void *);
ProgressInfo* pProgress;
- ModulWindow* pModulWindow;
virtual void DataChanged(DataChangedEvent const & rDCEvt);
@@ -141,7 +144,7 @@ protected:
bool ImpCanModify();
public:
- EditorWindow( Window* pParent );
+ EditorWindow (Window* pParent, ModulWindow*);
~EditorWindow();
ExtTextEngine* GetEditEngine() const { return pEditEngine; }
@@ -157,23 +160,23 @@ public:
void CreateEditEngine();
void SetScrollBarRanges();
void InitScrollBars();
- void SetModulWindow( ModulWindow* pWin )
- { pModulWindow = pWin; }
void ForceSyntaxTimeout();
bool SetSourceInBasic();
bool CanModify() { return ImpCanModify(); }
+
+ void UpdateSyntaxHighlighting ();
};
class BreakPointWindow : public Window
{
private:
+ ModulWindow& rModulWindow;
long nCurYOffset;
- sal_uInt16 nMarkerPos;
+ sal_uInt16 nMarkerPos;
BreakPointList aBreakPointList;
- ModulWindow* pModulWindow;
bool bErrorMarker;
virtual void DataChanged(DataChangedEvent const & rDCEvt);
@@ -191,12 +194,9 @@ protected:
bool SyncYOffset();
public:
- BreakPointWindow( Window* pParent );
+ BreakPointWindow (Window* pParent, ModulWindow*);
~BreakPointWindow();
- void SetModulWindow( ModulWindow* pWin )
- { pModulWindow = pWin; }
-
void SetMarkerPos( sal_uInt16 nLine, bool bErrorMarker = false );
void DoScroll( long nHorzScroll, long nVertScroll );
@@ -249,7 +249,7 @@ protected:
public:
- WatchWindow( Window* pParent );
+ WatchWindow (Layout* pParent);
~WatchWindow();
void AddWatch( const String& rVName );
@@ -271,7 +271,7 @@ protected:
virtual void Paint( const Rectangle& rRect );
public:
- StackWindow( Window* pParent );
+ StackWindow (Layout* pParent);
~StackWindow();
void UpdateCalls();
@@ -285,8 +285,6 @@ private:
LineNumberWindow aLineNumberWindow;
EditorWindow aEdtWindow;
ScrollBar aEWVScrollBar;
- bool bLineNumberDisplay;
- bool bObjectCatalogDisplay;
virtual void DataChanged(DataChangedEvent const & rDCEvt);
@@ -303,32 +301,25 @@ public:
ScrollBar& GetEWVScrollBar() { return aEWVScrollBar; }
void SetLineNumberDisplay(bool b);
- void SetObjectCatalogDisplay(bool b);
};
class ModulWindow: public IDEBaseWindow
{
- friend class BasicIDEShell;
-
private:
+ ModulWindowLayout& rLayout;
StarBASICRef xBasic;
short nValid;
ComplexEditorWindow aXEditorWindow;
BasicStatus aStatus;
SbModuleRef xModule;
- ModulWindowLayout* pLayout;
::rtl::OUString aCurPath;
::rtl::OUString m_aModule;
- long BasicErrorHdl( StarBASIC* pBasic );
- long BasicBreakHdl( StarBASIC* pBasic );
-
void CheckCompileBasic();
bool BasicExecute();
void GoOnTop();
- void AssertValidEditEngine();
sal_Int32 FormatAndPrint( Printer* pPrinter, sal_Int32 nPage = -1 );
SbModuleRef XModule();
@@ -336,7 +327,6 @@ protected:
virtual void Resize();
virtual void GetFocus();
virtual void Paint( const Rectangle& );
- virtual void Deactivating();
virtual void DoInit();
virtual void DoScroll( ScrollBar* pCurScrollBar );
@@ -347,7 +337,8 @@ public:
~ModulWindow();
- virtual void ExecuteCommand( SfxRequest& rReq );
+ virtual void ExecuteCommand (SfxRequest& rReq);
+ virtual void ExecuteGlobal (SfxRequest& rReq);
virtual void GetState( SfxItemSet& );
virtual void StoreData();
virtual void UpdateData();
@@ -363,7 +354,6 @@ public:
virtual bool IsReadOnly();
void SetLineNumberDisplay(bool);
- void SetObjectCatalogDisplay(bool);
StarBASIC* GetBasic() { XModule(); return xBasic; }
@@ -384,6 +374,10 @@ public:
void BasicAddWatch();
void BasicRemoveWatch();
+ long BasicErrorHdl( StarBASIC* pBasic );
+ long BasicBreakHdl( StarBASIC* pBasic );
+ void AssertValidEditEngine();
+
bool LoadBasic();
bool SaveBasicSource();
bool ImportDialog();
@@ -401,9 +395,7 @@ public:
void ShowCursor( bool bOn );
virtual sal_uInt16 GetSearchOptions();
- sal_uInt16 StartSearchAndReplace( const SvxSearchItem& rSearchItem, bool bFromStart = false );
-
- virtual Window* GetLayoutWindow();
+ virtual sal_uInt16 StartSearchAndReplace (SvxSearchItem const&, bool bFromStart = false);
EditorWindow& GetEditorWindow() { return aXEditorWindow.GetEdtWindow(); }
BreakPointWindow& GetBreakPointWindow() { return aXEditorWindow.GetBrkWindow(); }
@@ -412,7 +404,7 @@ public:
ExtTextEngine* GetEditEngine() { return GetEditorWindow().GetEditEngine(); }
ExtTextView* GetEditView() { return GetEditorWindow().GetEditView(); }
BreakPointList& GetBreakPoints() { return GetBreakPointWindow().GetBreakPoints(); }
- ModulWindowLayout* GetLayout() const { return pLayout; }
+ ModulWindowLayout& GetLayout () { return rLayout; }
virtual void BasicStarted();
virtual void BasicStopped();
@@ -422,67 +414,78 @@ public:
const ::rtl::OUString& GetModule() const { return m_aModule; }
void SetModule( const ::rtl::OUString& aModule ) { m_aModule = aModule; }
+
+ virtual void Activating ();
+ virtual void Deactivating ();
+
+ virtual void OnNewDocument ();
+ virtual char const* GetHid () const;
+ virtual BasicIDEType GetType () const;
+ virtual bool HasActiveEditor () const;
+
+ void UpdateModule ();
};
-class ModulWindowLayout: public Window, public utl::ConfigurationListener
+class ModulWindowLayout: public Layout
{
-private:
- // is ArrangeWindows() called first in this object?
- bool bFirstArrange;
+public:
+ ModulWindowLayout (Window* pParent, ObjectCatalog&);
+public:
+ // Layout:
+ virtual void Activating (IDEBaseWindow&);
+ virtual void Deactivating ();
+ virtual void GetState (SfxItemSet&, unsigned nWhich);
+ virtual void UpdateDebug (bool bBasicStopped = false);
+public:
+ void BasicAddWatch (String const&);
+ void BasicRemoveWatch ();
+ Color GetSyntaxColor (TokenTypes eType) const { return aSyntaxColors.GetColor(eType); }
- // splitter lines
- Splitter aLeftSplit, aBottomSplit, aVertSplit;
+protected:
+ // Window:
+ virtual void Paint (const Rectangle& rRect);
+ // Layout:
+ virtual void OnFirstSize (int nWidth, int nHeight);
+private:
+ // main child window
+ ModulWindow* pChild;
// dockable windows
- ObjectCatalog aObjectCatalog;
WatchWindow aWatchWindow;
StackWindow aStackWindow;
-
- 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 );
- 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; }
- ObjectCatalog& GetObjectCatalog() { return aObjectCatalog; }
-
- Image getImage(sal_uInt16 nId) const;
-
- inline Color const & getSyntaxColor(TokenTypes eType) const
- { return m_aSyntaxColors[eType]; }
-
- void ToggleObjectCatalog ();
- bool HasObjectCatalog () const { return aObjectCatalog.IsVisible(); }
- void UpdateObjectCatalog ();
+ ObjectCatalog& rObjectCatalog;
+private:
+ virtual void DataChanged (DataChangedEvent const& rDCEvt);
+private:
+ // SyntaxColors -- stores Basic syntax highlighting colors
+ class SyntaxColors : public utl::ConfigurationListener
+ {
+ public:
+ SyntaxColors ();
+ ~SyntaxColors ();
+ public:
+ void SetActiveEditor (EditorWindow* pEditor_) { pEditor = pEditor_; }
+ void SettingsChanged ();
+ public:
+ Color GetColor (TokenTypes eType) const { return aColors[eType]; }
+
+ private:
+ virtual void ConfigurationChanged (utl::ConfigurationBroadcaster*, sal_uInt32);
+ void NewConfig (bool bFirst);
+
+ private:
+ // the color values (the indexes are TokenTypes, see svtools/syntaxhighlight.hxx)
+ Color aColors[TT_KEYWORDS + 1];
+ // the configuration
+ svtools::ColorConfig aConfig;
+ // the active editor
+ EditorWindow* pEditor;
+
+ } aSyntaxColors;
};
+} // namespace basctl
+
#endif // BASCTL_BASIDE2_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx
index dd6337e6601b..a784d4dba7c5 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -41,9 +41,13 @@
#include <vcl/xtextedt.hxx>
#include <vcl/txtattr.hxx>
#include <svtools/textwindowpeer.hxx>
+#include <svtools/syntaxhighlight.hxx>
#include <vcl/taskpanelist.hxx>
#include <vcl/help.hxx>
+namespace basctl
+{
+
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
@@ -62,6 +66,12 @@ SbxVariable* IsSbxVariable (SbxBase* pBase)
return 0;
}
+Image GetImage (unsigned nId)
+{
+ static ImageList const aImagesNormal(IDEResId(RID_IMGLST_LAYOUT));
+ return aImagesNormal.GetImage(nId);
+}
+
} // namespace
#define SCROLL_LINE 12
@@ -99,7 +109,7 @@ void setTextEngineText( ExtTextEngine* pEngine, const ::rtl::OUString aStr )
pEngine->Read( aMemStream );
}
-void lcl_DrawIDEWindowFrame( DockingWindow* pWin )
+void lcl_DrawIDEWindowFrame( BasicDockingWindow* pWin )
{
if ( pWin->IsFloatingMode() )
return;
@@ -147,6 +157,12 @@ void lcl_SeparateNameAndIndex( const String& rVName, String& rVar, String& rInde
}
}
+
+//
+// EditorWindow
+// ============
+//
+
class EditorWindow::ChangesListener:
public cppu::WeakImplHelper1< beans::XPropertiesChangeListener >
{
@@ -172,25 +188,21 @@ private:
EditorWindow & editor_;
};
-EditorWindow::EditorWindow( Window* pParent ) :
- Window( pParent, WB_BORDER )
-{
- bDoSyntaxHighlight = true;
- bDelayHighlight = true;
- pModulWindow = 0;
- pEditView = 0;
- pEditEngine = 0;
- bHighlightning = false;
- pProgress = 0;
- nCurTextWidth = 0;
- SetBackground(
- Wallpaper(GetSettings().GetStyleSettings().GetFieldColor()));
+EditorWindow::EditorWindow (Window* pParent, ModulWindow* pModulWindow) :
+ Window(pParent, WB_BORDER),
+ pEditView(0),
+ pEditEngine(0),
+ rModulWindow(*pModulWindow),
+ nCurTextWidth(0),
+ pProgress(0),
+ bHighlightning(false),
+ bDoSyntaxHighlight(true),
+ bDelayHighlight(true)
+{
+ SetBackground(Wallpaper(GetSettings().GetStyleSettings().GetFieldColor()));
SetPointer( Pointer( POINTER_TEXT ) );
-
SetHelpId( HID_BASICIDE_EDITORWINDOW );
- // Using "this" in ctor is a little fishy, but should work here at least as
- // long as there are no derivations:
listener_ = new ChangesListener(*this);
Reference< beans::XMultiPropertySet > n(
officecfg::Office::Common::Font::SourceViewFont::get(),
@@ -206,7 +218,6 @@ EditorWindow::EditorWindow( Window* pParent ) :
}
-
EditorWindow::~EditorWindow()
{
Reference< beans::XMultiPropertySet > n;
@@ -364,8 +375,8 @@ void EditorWindow::Resize()
aStartDocPos.Y() = nMaxVisAreaStart;
pEditView->SetStartDocPos( aStartDocPos );
pEditView->ShowCursor();
- pModulWindow->GetBreakPointWindow().GetCurYOffset() = aStartDocPos.Y();
- pModulWindow->GetLineNumberWindow().GetCurYOffset() = aStartDocPos.Y();
+ rModulWindow.GetBreakPointWindow().GetCurYOffset() = aStartDocPos.Y();
+ rModulWindow.GetLineNumberWindow().GetCurYOffset() = aStartDocPos.Y();
}
InitScrollBars();
if ( nVisY != pEditView->GetStartDocPos().Y() )
@@ -410,7 +421,7 @@ void EditorWindow::Command( const CommandEvent& rCEvt )
( rCEvt.GetCommand() == COMMAND_STARTAUTOSCROLL ) ||
( rCEvt.GetCommand() == COMMAND_AUTOSCROLL ) )
{
- HandleScrollCommand( rCEvt, pModulWindow->GetHScrollBar(), &pModulWindow->GetEditVScrollBar() );
+ HandleScrollCommand( rCEvt, rModulWindow.GetHScrollBar(), &rModulWindow.GetEditVScrollBar() );
}
}
}
@@ -424,7 +435,7 @@ bool EditorWindow::ImpCanModify()
// Remove markers in the modules in Notify at Basic::Stoped
if ( QueryBox( 0, WB_OK_CANCEL, String( IDEResId( RID_STR_WILLSTOPPRG ) ) ).Execute() == RET_OK )
{
- pModulWindow->GetBasicStatus().bIsRunning = false;
+ rModulWindow.GetBasicStatus().bIsRunning = false;
BasicIDE::StopBasic();
}
else
@@ -439,11 +450,11 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt )
return;
#if OSL_DEBUG_LEVEL > 1
- Range aRange = pModulWindow->GetHScrollBar()->GetRange(); (void)aRange;
- long nVisSz = pModulWindow->GetHScrollBar()->GetVisibleSize(); (void)nVisSz;
- long nPapSz = pModulWindow->GetHScrollBar()->GetPageSize(); (void)nPapSz;
- long nLinSz = pModulWindow->GetHScrollBar()->GetLineSize(); (void)nLinSz;
- long nThumb = pModulWindow->GetHScrollBar()->GetThumbPos(); (void)nThumb;
+ Range aRange = rModulWindow.GetHScrollBar()->GetRange(); (void)aRange;
+ long nVisSz = rModulWindow.GetHScrollBar()->GetVisibleSize(); (void)nVisSz;
+ long nPapSz = rModulWindow.GetHScrollBar()->GetPageSize(); (void)nPapSz;
+ long nLinSz = rModulWindow.GetHScrollBar()->GetLineSize(); (void)nLinSz;
+ long nThumb = rModulWindow.GetHScrollBar()->GetThumbPos(); (void)nThumb;
#endif
bool const bWasModified = pEditEngine->IsModified();
// see if there is an accelerator to be processed first
@@ -521,31 +532,14 @@ bool EditorWindow::SetSourceInBasic()
{
if ( !StarBASIC::IsRunning() ) // Not at runtime!
{
- ::rtl::OUString aModule = getTextEngineText( pEditEngine );
-
- // update module in basic
-#ifdef DBG_UTIL
- SbModule* pModule = pModulWindow->GetSbModule();
-#endif
- DBG_ASSERT(pModule, "EditorWindow::SetSourceInBasic: No Module found!");
-
- // update module in module window
- pModulWindow->SetModule( aModule );
-
- // update module in library
- ScriptDocument aDocument( pModulWindow->GetDocument() );
- String aLibName = pModulWindow->GetLibName();
- String aName = pModulWindow->GetName();
- OSL_VERIFY( aDocument.updateModule( aLibName, aName, aModule ) );
-
- pEditEngine->SetModified(false);
- BasicIDE::MarkDocumentModified( aDocument );
+ rModulWindow.UpdateModule();
bChanged = true;
}
}
return bChanged;
}
+} // namespace basctl
// Returns the position of the last character of any of the following
// EOL char combinations: CR, CR/LF, LF, return -1 if no EOL is found
@@ -566,6 +560,9 @@ sal_Int32 searchEOL( const ::rtl::OUString& rStr, sal_Int32 fromIndex )
}
+namespace basctl
+{
+
void EditorWindow::CreateEditEngine()
{
if ( pEditEngine )
@@ -586,7 +583,7 @@ void EditorWindow::CreateEditEngine()
bool bWasDoSyntaxHighlight = bDoSyntaxHighlight;
bDoSyntaxHighlight = false; // too slow for large texts...
- ::rtl::OUString aOUSource( pModulWindow->GetModule() );
+ rtl::OUString aOUSource(rModulWindow.GetModule());
sal_Int32 nLines = 0;
sal_Int32 nIndex = -1;
do
@@ -604,15 +601,10 @@ void EditorWindow::CreateEditEngine()
pEditView->SetStartDocPos( Point( 0, 0 ) );
pEditView->SetSelection( TextSelection() );
- pModulWindow->GetBreakPointWindow().GetCurYOffset() = 0;
- pModulWindow->GetLineNumberWindow().GetCurYOffset() = 0;
+ rModulWindow.GetBreakPointWindow().GetCurYOffset() = 0;
+ rModulWindow.GetLineNumberWindow().GetCurYOffset() = 0;
pEditEngine->SetUpdateMode(true);
- Update(); // has only been invalidated at UpdateMode = true
-
- pModulWindow->GetLayout()->GetWatchWindow().Update();
- pModulWindow->GetLayout()->GetStackWindow().Update();
- pModulWindow->GetBreakPointWindow().Update();
- pModulWindow->GetLineNumberWindow().Update();
+ rModulWindow.Update(); // has only been invalidated at UpdateMode = true
pEditView->ShowCursor( true, true );
@@ -638,19 +630,19 @@ void EditorWindow::CreateEditEngine()
if ( pBindings )
pBindings->Invalidate( SID_BASICIDE_STAT_POS );
- DBG_ASSERT( pModulWindow->GetBreakPointWindow().GetCurYOffset() == 0, "CreateEditEngine: Brechpunkte verschoben?" );
+ DBG_ASSERT( rModulWindow.GetBreakPointWindow().GetCurYOffset() == 0, "CreateEditEngine: Brechpunkte verschoben?" );
// set readonly mode for readonly libraries
- ScriptDocument aDocument( pModulWindow->GetDocument() );
- ::rtl::OUString aOULibName( pModulWindow->GetLibName() );
+ ScriptDocument aDocument(rModulWindow.GetDocument());
+ rtl::OUString aOULibName(rModulWindow.GetLibName());
Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
if ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) )
{
- pModulWindow->SetReadOnly(true);
+ rModulWindow.SetReadOnly(true);
}
if ( aDocument.isDocument() && aDocument.isReadOnly() )
- pModulWindow->SetReadOnly(true);
+ rModulWindow.SetReadOnly(true);
}
// virtual
@@ -688,13 +680,13 @@ void EditorWindow::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
TextHint const& rTextHint = *pTextHint;
if( rTextHint.GetId() == TEXT_HINT_VIEWSCROLLED )
{
- if ( pModulWindow->GetHScrollBar() )
- pModulWindow->GetHScrollBar()->SetThumbPos( pEditView->GetStartDocPos().X() );
- pModulWindow->GetEditVScrollBar().SetThumbPos( pEditView->GetStartDocPos().Y() );
- pModulWindow->GetBreakPointWindow().DoScroll
- ( 0, pModulWindow->GetBreakPointWindow().GetCurYOffset() - pEditView->GetStartDocPos().Y() );
- pModulWindow->GetLineNumberWindow().DoScroll
- ( 0, pModulWindow->GetLineNumberWindow().GetCurYOffset() - pEditView->GetStartDocPos().Y() );
+ if ( rModulWindow.GetHScrollBar() )
+ rModulWindow.GetHScrollBar()->SetThumbPos( pEditView->GetStartDocPos().X() );
+ rModulWindow.GetEditVScrollBar().SetThumbPos( pEditView->GetStartDocPos().Y() );
+ rModulWindow.GetBreakPointWindow().DoScroll
+ ( 0, rModulWindow.GetBreakPointWindow().GetCurYOffset() - pEditView->GetStartDocPos().Y() );
+ rModulWindow.GetLineNumberWindow().DoScroll
+ ( 0, rModulWindow.GetLineNumberWindow().GetCurYOffset() - pEditView->GetStartDocPos().Y() );
}
else if( rTextHint.GetId() == TEXT_HINT_TEXTHEIGHTCHANGED )
{
@@ -705,21 +697,21 @@ void EditorWindow::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
if ( nTextHeight < nOutHeight )
pEditView->Scroll( 0, pEditView->GetStartDocPos().Y() );
- pModulWindow->GetLineNumberWindow().Invalidate();
+ rModulWindow.GetLineNumberWindow().Invalidate();
}
SetScrollBarRanges();
}
else if( rTextHint.GetId() == TEXT_HINT_TEXTFORMATTED )
{
- if ( pModulWindow->GetHScrollBar() )
+ if ( rModulWindow.GetHScrollBar() )
{
sal_uLong nWidth = pEditEngine->CalcTextWidth();
if ( (long)nWidth != nCurTextWidth )
{
nCurTextWidth = nWidth;
- pModulWindow->GetHScrollBar()->SetRange( Range( 0, (long)nCurTextWidth-1) );
- pModulWindow->GetHScrollBar()->SetThumbPos( pEditView->GetStartDocPos().X() );
+ rModulWindow.GetHScrollBar()->SetRange( Range( 0, (long)nCurTextWidth-1) );
+ rModulWindow.GetHScrollBar()->SetThumbPos( pEditView->GetStartDocPos().X() );
}
}
long nPrevTextWidth = nCurTextWidth;
@@ -749,10 +741,10 @@ void EditorWindow::SetScrollBarRanges()
if ( !pEditEngine )
return;
- if ( pModulWindow->GetHScrollBar() )
- pModulWindow->GetHScrollBar()->SetRange( Range( 0, nCurTextWidth-1 ) );
+ if ( rModulWindow.GetHScrollBar() )
+ rModulWindow.GetHScrollBar()->SetRange( Range( 0, nCurTextWidth-1 ) );
- pModulWindow->GetEditVScrollBar().SetRange( Range( 0, pEditEngine->GetTextHeight()-1 ) );
+ rModulWindow.GetEditVScrollBar().SetRange( Range( 0, pEditEngine->GetTextHeight()-1 ) );
}
void EditorWindow::InitScrollBars()
@@ -762,19 +754,19 @@ void EditorWindow::InitScrollBars()
SetScrollBarRanges();
Size aOutSz( GetOutputSizePixel() );
- pModulWindow->GetEditVScrollBar().SetVisibleSize( aOutSz.Height() );
- pModulWindow->GetEditVScrollBar().SetPageSize( aOutSz.Height() * 8 / 10 );
- pModulWindow->GetEditVScrollBar().SetLineSize( GetTextHeight() );
- pModulWindow->GetEditVScrollBar().SetThumbPos( pEditView->GetStartDocPos().Y() );
- pModulWindow->GetEditVScrollBar().Show();
+ rModulWindow.GetEditVScrollBar().SetVisibleSize( aOutSz.Height() );
+ rModulWindow.GetEditVScrollBar().SetPageSize( aOutSz.Height() * 8 / 10 );
+ rModulWindow.GetEditVScrollBar().SetLineSize( GetTextHeight() );
+ rModulWindow.GetEditVScrollBar().SetThumbPos( pEditView->GetStartDocPos().Y() );
+ rModulWindow.GetEditVScrollBar().Show();
- if ( pModulWindow->GetHScrollBar() )
+ if ( rModulWindow.GetHScrollBar() )
{
- pModulWindow->GetHScrollBar()->SetVisibleSize( aOutSz.Width() );
- pModulWindow->GetHScrollBar()->SetPageSize( aOutSz.Width() * 8 / 10 );
- pModulWindow->GetHScrollBar()->SetLineSize( GetTextWidth( rtl::OUString('x') ) );
- pModulWindow->GetHScrollBar()->SetThumbPos( pEditView->GetStartDocPos().X() );
- pModulWindow->GetHScrollBar()->Show();
+ rModulWindow.GetHScrollBar()->SetVisibleSize( aOutSz.Width() );
+ rModulWindow.GetHScrollBar()->SetPageSize( aOutSz.Width() * 8 / 10 );
+ rModulWindow.GetHScrollBar()->SetLineSize( GetTextWidth( rtl::OUString('x') ) );
+ rModulWindow.GetHScrollBar()->SetThumbPos( pEditView->GetStartDocPos().X() );
+ rModulWindow.GetHScrollBar()->Show();
}
}
@@ -799,14 +791,21 @@ void EditorWindow::ImpDoHighlight( sal_uLong nLine )
for ( size_t i = 0; i < aPortions.size(); i++ )
{
HighlightPortion& r = aPortions[i];
- const Color& rColor = dynamic_cast<ModulWindowLayout*>(pModulWindow->GetLayoutWindow())->getSyntaxColor(r.tokenType);
- pEditEngine->SetAttrib( TextAttribFontColor( rColor ), nLine, r.nBegin, r.nEnd, true );
+ Color const aColor = rModulWindow.GetLayout().GetSyntaxColor(r.tokenType);
+ pEditEngine->SetAttrib( TextAttribFontColor(aColor), nLine, r.nBegin, r.nEnd, true );
}
pEditEngine->SetModified( bWasModified );
}
}
+void EditorWindow::UpdateSyntaxHighlighting ()
+{
+ unsigned nCount = pEditEngine->GetParagraphCount();
+ for (unsigned i = 0; i < nCount; ++i)
+ DoDelayedSyntaxHighlight(i);
+}
+
void EditorWindow::ImplSetFont()
{
rtl::OUString sFontName(
@@ -817,18 +816,14 @@ void EditorWindow::ImplSetFont()
Font aTmpFont( OutputDevice::GetDefaultFont( DEFAULTFONT_FIXED, Application::GetSettings().GetUILanguage(), 0 , this ) );
sFontName = aTmpFont.GetName();
}
- Size aFontSize(
- 0, officecfg::Office::Common::Font::SourceViewFont::FontHeight::get() );
+ Size aFontSize(0, officecfg::Office::Common::Font::SourceViewFont::FontHeight::get());
Font aFont( sFontName, aFontSize );
aFont.SetColor( GetSettings().GetStyleSettings().GetFieldTextColor() );
SetPointFont( aFont );
aFont = GetFont();
- if ( pModulWindow )
- {
- pModulWindow->GetBreakPointWindow().SetFont( aFont );
- pModulWindow->GetLineNumberWindow().SetFont( aFont );
- }
+ rModulWindow.GetBreakPointWindow().SetFont( aFont );
+ rModulWindow.GetLineNumberWindow().SetFont( aFont );
if ( pEditEngine )
{
@@ -904,26 +899,26 @@ void EditorWindow::ParagraphInsertedDeleted( sal_uLong nPara, bool bInserted )
if ( !bInserted && ( nPara == TEXT_PARA_ALL ) )
{
- pModulWindow->GetBreakPoints().reset();
- pModulWindow->GetBreakPointWindow().Invalidate();
- pModulWindow->GetLineNumberWindow().Invalidate();
+ rModulWindow.GetBreakPoints().reset();
+ rModulWindow.GetBreakPointWindow().Invalidate();
+ rModulWindow.GetLineNumberWindow().Invalidate();
aHighlighter.initialize( HIGHLIGHT_BASIC );
}
else
{
- pModulWindow->GetBreakPoints().AdjustBreakPoints( (sal_uInt16)nPara+1, bInserted );
+ rModulWindow.GetBreakPoints().AdjustBreakPoints( (sal_uInt16)nPara+1, bInserted );
long nLineHeight = GetTextHeight();
- Size aSz = pModulWindow->GetBreakPointWindow().GetOutputSize();
+ Size aSz = rModulWindow.GetBreakPointWindow().GetOutputSize();
Rectangle aInvRec( Point( 0, 0 ), aSz );
- long nY = nPara*nLineHeight - pModulWindow->GetBreakPointWindow().GetCurYOffset();
+ long nY = nPara*nLineHeight - rModulWindow.GetBreakPointWindow().GetCurYOffset();
aInvRec.Top() = nY;
- pModulWindow->GetBreakPointWindow().Invalidate( aInvRec );
+ rModulWindow.GetBreakPointWindow().Invalidate( aInvRec );
- Size aLnSz(pModulWindow->GetLineNumberWindow().GetWidth(),
+ Size aLnSz(rModulWindow.GetLineNumberWindow().GetWidth(),
GetOutputSizePixel().Height() - 2 * DWBORDER);
- pModulWindow->GetLineNumberWindow().SetPosSizePixel(Point(DWBORDER + 19, DWBORDER), aLnSz);
- pModulWindow->GetLineNumberWindow().Invalidate();
+ rModulWindow.GetLineNumberWindow().SetPosSizePixel(Point(DWBORDER + 19, DWBORDER), aLnSz);
+ rModulWindow.GetLineNumberWindow().Invalidate();
if ( bDoSyntaxHighlight )
{
@@ -951,22 +946,21 @@ void EditorWindow::ForceSyntaxTimeout()
}
+//
+// BreakPointWindow
+// ================
+//
-BreakPointWindow::BreakPointWindow( Window* pParent ) :
- Window( pParent, WB_BORDER )
+BreakPointWindow::BreakPointWindow (Window* pParent, ModulWindow* pModulWindow) :
+ Window(pParent, WB_BORDER),
+ rModulWindow(*pModulWindow),
+ nCurYOffset(0), // memorize nCurYOffset and not take it from EditEngine
+ nMarkerPos(MARKER_NOMARKER)
{
- pModulWindow = 0;
- nCurYOffset = 0;
setBackgroundColor(GetSettings().GetStyleSettings().GetFieldColor());
- nMarkerPos = MARKER_NOMARKER;
-
- // memorize nCurYOffset and not take it from EditEngine
-
- SetHelpId( HID_BASICIDE_BREAKPOINTWINDOW );
+ SetHelpId(HID_BASICIDE_BREAKPOINTWINDOW);
}
-
-
BreakPointWindow::~BreakPointWindow()
{
}
@@ -985,27 +979,24 @@ void BreakPointWindow::Paint( const Rectangle& )
if ( SyncYOffset() )
return;
- Size aOutSz( GetOutputSize() );
- long nLineHeight = GetTextHeight();
-
- ModulWindowLayout* pModulWindowLayout = dynamic_cast<ModulWindowLayout*>(pModulWindow->GetLayoutWindow());
+ Size const aOutSz = GetOutputSize();
+ long const nLineHeight = GetTextHeight();
- Image aBrk1(pModulWindowLayout->getImage(IMGID_BRKENABLED));
- Image aBrk0(pModulWindowLayout->getImage(IMGID_BRKDISABLED));
- Size aBmpSz( aBrk1.GetSizePixel() );
- aBmpSz = PixelToLogic( aBmpSz );
- Point aBmpOff( 0, 0 );
- aBmpOff.X() = ( aOutSz.Width() - aBmpSz.Width() ) / 2;
- aBmpOff.Y() = ( nLineHeight - aBmpSz.Height() ) / 2;
+ Image const aBrk[2] = { GetImage(IMGID_BRKDISABLED), GetImage(IMGID_BRKENABLED) };
+ Size const aBmpSz = PixelToLogic(aBrk[1].GetSizePixel());
+ Point const aBmpOff(
+ (aOutSz.Width() - aBmpSz.Width()) / 2,
+ (nLineHeight - aBmpSz.Height()) / 2
+ );
- for ( size_t i = 0, n = GetBreakPoints().size(); i < n ; ++i )
+ for (size_t i = 0, n = GetBreakPoints().size(); i < n; ++i)
{
- BreakPoint* pBrk = GetBreakPoints().at( i );
- size_t nLine = pBrk->nLine-1;
- size_t nY = nLine*nLineHeight - nCurYOffset;
- DrawImage( Point( 0, nY ) + aBmpOff, pBrk->bEnabled ? aBrk1 : aBrk0 );
+ BreakPoint& rBrk = *GetBreakPoints().at(i);
+ size_t const nLine = rBrk.nLine - 1;
+ size_t const nY = nLine*nLineHeight - nCurYOffset;
+ DrawImage(Point(0, nY) + aBmpOff, aBrk[rBrk.bEnabled]);
}
- ShowMarker( true );
+ ShowMarker(true);
}
@@ -1034,11 +1025,10 @@ void BreakPointWindow::ShowMarker( bool bShow )
if ( nMarkerPos == MARKER_NOMARKER )
return;
- Size aOutSz( GetOutputSize() );
- long nLineHeight = GetTextHeight();
+ Size const aOutSz = GetOutputSize();
+ long const nLineHeight = GetTextHeight();
- ModulWindowLayout* pModulWindowLayout = dynamic_cast<ModulWindowLayout*>(pModulWindow->GetLayoutWindow());
- Image aMarker(pModulWindowLayout->getImage(bErrorMarker ? IMGID_ERRORMARKER : IMGID_STEPMARKER));
+ Image aMarker = GetImage(bErrorMarker ? IMGID_ERRORMARKER : IMGID_STEPMARKER);
Size aMarkerSz( aMarker.GetSizePixel() );
aMarkerSz = PixelToLogic( aMarkerSz );
@@ -1082,7 +1072,7 @@ void BreakPointWindow::MouseButtonDown( const MouseEvent& rMEvt )
long nLineHeight = GetTextHeight();
long nYPos = aMousePos.Y() + nCurYOffset;
long nLine = nYPos / nLineHeight + 1;
- pModulWindow->ToggleBreakPoint( (sal_uLong)nLine );
+ rModulWindow.ToggleBreakPoint( (sal_uLong)nLine );
Invalidate();
}
}
@@ -1106,7 +1096,7 @@ void BreakPointWindow::Command( const CommandEvent& rCEvt )
case RID_ACTIV:
{
pBrk->bEnabled = !pBrk->bEnabled;
- pModulWindow->UpdateBreakPoint( *pBrk );
+ rModulWindow.UpdateBreakPoint( *pBrk );
Invalidate();
}
break;
@@ -1139,7 +1129,7 @@ void BreakPointWindow::Command( const CommandEvent& rCEvt )
bool BreakPointWindow::SyncYOffset()
{
- TextView* pView = pModulWindow->GetEditView();
+ TextView* pView = rModulWindow.GetEditView();
if ( pView )
{
long nViewYOffset = pView->GetStartDocPos().Y();
@@ -1176,12 +1166,20 @@ void BreakPointWindow::setBackgroundColor(Color aColor)
}
-const sal_uInt16 ITEM_ID_VARIABLE = 1;
-const sal_uInt16 ITEM_ID_VALUE = 2;
-const sal_uInt16 ITEM_ID_TYPE = 3;
+//
+// WatchWindow
+// ===========
+//
-WatchWindow::WatchWindow( Window* pParent ) :
- BasicDockingWindow( pParent ),
+namespace
+{
+ const sal_uInt16 ITEM_ID_VARIABLE = 1;
+ const sal_uInt16 ITEM_ID_VALUE = 2;
+ const sal_uInt16 ITEM_ID_TYPE = 3;
+}
+
+WatchWindow::WatchWindow (Layout* pParent) :
+ BasicDockingWindow(pParent),
aWatchStr( IDEResId( RID_STR_REMOVEWATCH ) ),
aXEdit( this, IDEResId( RID_EDT_WATCHEDIT ) ),
aRemoveWatchButton( this, IDEResId( RID_IMGBTN_REMOVEWATCH ) ),
@@ -1406,6 +1404,8 @@ void WatchWindow::AddWatch( const String& rVName )
aTreeListBox.Select(pNewEntry, true);
aTreeListBox.MakeVisible(pNewEntry);
aRemoveWatchButton.Enable();
+
+ UpdateWatches();
}
bool WatchWindow::RemoveSelectedWatch()
@@ -1503,7 +1503,6 @@ IMPL_LINK( WatchWindow, EditAccHdl, Accelerator *, pAcc )
{
AddWatch( aCurText );
aXEdit.SetSelection( Selection( 0, 0xFFFF ) );
- UpdateWatches();
}
}
break;
@@ -1523,8 +1522,13 @@ void WatchWindow::UpdateWatches( bool bBasicStopped )
}
-StackWindow::StackWindow( Window* pParent ) :
- BasicDockingWindow( pParent ),
+//
+// StackWindow
+// ===========
+//
+
+StackWindow::StackWindow (Layout* pParent) :
+ BasicDockingWindow(pParent),
aTreeListBox( this, WB_BORDER | WB_3DLOOK | WB_HSCROLL | WB_TABSTOP ),
aStackStr( IDEResId( RID_STR_STACK ) )
{
@@ -1642,17 +1646,19 @@ void StackWindow::UpdateCalls()
aTreeListBox.SetUpdateMode(true);
}
+
+//
+// ComplexEditorWindow
+// ===================
+//
+
ComplexEditorWindow::ComplexEditorWindow( ModulWindow* pParent ) :
Window( pParent, WB_3DLOOK | WB_CLIPCHILDREN ),
- aBrkWindow( this ),
- aLineNumberWindow( this, pParent ),
- aEdtWindow( this ),
- aEWVScrollBar( this, WB_VSCROLL | WB_DRAG ),
- bLineNumberDisplay(false),
- bObjectCatalogDisplay(true)
-{
- aEdtWindow.SetModulWindow( pParent );
- aBrkWindow.SetModulWindow( pParent );
+ aBrkWindow(this, pParent),
+ aLineNumberWindow(this, pParent),
+ aEdtWindow(this, pParent),
+ aEWVScrollBar( this, WB_VSCROLL | WB_DRAG )
+{
aEdtWindow.Show();
aBrkWindow.Show();
@@ -1675,7 +1681,7 @@ void ComplexEditorWindow::Resize()
Size aLnSz(aLineNumberWindow.GetWidth(), aSz.Height());
- if(bLineNumberDisplay)
+ if (aLineNumberWindow.IsVisible())
{
aBrkWindow.SetPosSizePixel( Point( DWBORDER, DWBORDER ), aBrkSz );
aLineNumberWindow.SetPosSizePixel(Point(DWBORDER + aBrkSz.Width() - 1, DWBORDER), aLnSz);
@@ -1726,18 +1732,7 @@ void ComplexEditorWindow::DataChanged(DataChangedEvent const & rDCEvt)
void ComplexEditorWindow::SetLineNumberDisplay(bool b)
{
- bLineNumberDisplay = b;
- Resize();
-
- if(b)
- aLineNumberWindow.Show();
- else
- aLineNumberWindow.Hide();
-}
-
-void ComplexEditorWindow::SetObjectCatalogDisplay(bool b)
-{
- bObjectCatalogDisplay = b;
+ aLineNumberWindow.Show(b);
Resize();
}
@@ -1758,6 +1753,12 @@ EditorWindow::GetComponentInterface(sal_Bool bCreate)
return xPeer;
}
+
+//
+// WatchTreeListBox
+// ================
+//
+
WatchTreeListBox::WatchTreeListBox( Window* pParent, WinBits nWinBits )
: SvHeaderTabListBox( pParent, nWinBits )
{}
@@ -2251,4 +2252,7 @@ void WatchTreeListBox::UpdateWatches( bool bBasicStopped )
setBasicWatchMode( false );
}
+
+} // namespace basctl
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/baside3.cxx b/basctl/source/basicide/baside3.cxx
index adf4581e9ecd..951b5beffb17 100644
--- a/basctl/source/basicide/baside3.cxx
+++ b/basctl/source/basicide/baside3.cxx
@@ -32,6 +32,7 @@
#include "idetemp.hxx"
#include "localizationmgr.hxx"
#include "propbrw.hxx"
+#include "objdlg.hxx"
#include <basic/basmgr.hxx>
#include <com/sun/star/resource/StringResourceWithLocation.hpp>
@@ -46,6 +47,7 @@
#include <sfx2/dispatch.hxx>
#include <sfx2/request.hxx>
#include <svl/aeitem.hxx>
+#include <svl/visitem.hxx>
#include <svl/whiter.hxx>
#include <tools/diagnose_ex.h>
#include <tools/urlobj.hxx>
@@ -59,6 +61,9 @@ using namespace ::com::sun::star::io;
using namespace ::com::sun::star::resource;
using namespace ::com::sun::star::ui::dialogs;
+namespace basctl
+{
+
#if defined(UNX)
#define FILTERMASK_ALL "*"
#else
@@ -69,10 +74,15 @@ DBG_NAME( DialogWindow )
TYPEINIT1( DialogWindow, IDEBaseWindow );
-DialogWindow::DialogWindow( Window* pParent, const ScriptDocument& rDocument, ::rtl::OUString aLibName, ::rtl::OUString aName,
- const com::sun::star::uno::Reference< com::sun::star::container::XNameContainer >& xDialogModel )
- :IDEBaseWindow( pParent, rDocument, aLibName, aName )
- ,pUndoMgr(NULL)
+DialogWindow::DialogWindow (
+ DialogWindowLayout* pParent,
+ ScriptDocument const& rDocument,
+ rtl::OUString aLibName, rtl::OUString aName,
+ com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> const& xDialogModel
+) :
+ IDEBaseWindow(pParent, rDocument, aLibName, aName),
+ rLayout(*pParent),
+ pUndoMgr(0)
{
InitSettings( true, true, true );
@@ -395,12 +405,19 @@ void DialogWindow::GetState( SfxItemSet& rSet )
rSet.DisableItem( nWh );
}
break;
+ case SID_SHOWLINES:
+ {
+ // if this is not a module window hide the
+ // setting, doesn't make sense for example if the
+ // dialog editor is open
+ rSet.DisableItem(nWh);
+ rSet.Put(SfxVisibilityItem(nWh, false));
+ break;
+ }
}
}
}
-
-
void DialogWindow::ExecuteCommand( SfxRequest& rReq )
{
switch ( rReq.GetSlot() )
@@ -647,6 +664,17 @@ void DialogWindow::ExecuteCommand( SfxRequest& rReq )
case SID_IMPORT_DIALOG:
ImportDialog();
break;
+
+ case SID_BASICIDE_DELETECURRENT:
+ if (QueryDelDialog(m_aName, this))
+ {
+ if (BasicIDE::RemoveDialog(m_aDocument, m_aLibName, m_aName))
+ {
+ BasicIDE::MarkDocumentModified(m_aDocument);
+ BasicIDEGlobals::GetShell()->RemoveWindow(this, true);
+ }
+ }
+ break;
}
rReq.Done();
@@ -865,6 +893,9 @@ bool DialogWindow::SaveDialog()
return bDone;
}
+} // namespace basctl
+
+
extern bool localesAreEqual( const ::com::sun::star::lang::Locale& rLocaleLeft,
const ::com::sun::star::lang::Locale& rLocaleRight );
@@ -952,6 +983,7 @@ LanguageMismatchQueryBox::LanguageMismatchQueryBox( Window* pParent,
SetImage( QueryBox::GetStandardImage() );
}
+
bool implImportDialog( Window* pWin, const ::rtl::OUString& rCurPath, const ScriptDocument& rDocument, const ::rtl::OUString& aLibName )
{
bool bDone = false;
@@ -1239,7 +1271,7 @@ bool implImportDialog( Window* pWin, const ::rtl::OUString& rCurPath, const Scri
bool bSuccess = rDocument.insertDialog( aLibName, aNewDlgName, xISP );
if( bSuccess )
{
- DialogWindow* pNewDlgWin = pIDEShell->CreateDlgWin( rDocument, aLibName, aNewDlgName );
+ basctl::DialogWindow* pNewDlgWin = pIDEShell->CreateDlgWin( rDocument, aLibName, aNewDlgName );
pIDEShell->SetCurWindow( pNewDlgWin, true );
}
@@ -1252,6 +1284,10 @@ bool implImportDialog( Window* pWin, const ::rtl::OUString& rCurPath, const Scri
return bDone;
}
+
+namespace basctl
+{
+
bool DialogWindow::ImportDialog()
{
DBG_CHKTHIS( DialogWindow, 0 );
@@ -1348,10 +1384,18 @@ void DialogWindow::StoreData()
}
}
+void DialogWindow::Activating ()
+{
+ UpdateBrowser();
+ Show();
+}
+
void DialogWindow::Deactivating()
{
+ Hide();
if ( IsModified() )
BasicIDE::MarkDocumentModified( GetDocument() );
+ DisableBrowser();
}
sal_Int32 DialogWindow::countPages( Printer* pPrinter )
@@ -1400,4 +1444,60 @@ void DialogWindow::InitSettings(bool bFont, bool bForeground, bool bBackground)
return (::com::sun::star::accessibility::XAccessible*) new AccessibleDialogWindow( this );
}
+char const* DialogWindow::GetHid () const
+{
+ return HID_BASICIDE_DIALOGWINDOW;
+}
+BasicIDEType DialogWindow::GetType () const
+{
+ return BASICIDE_TYPE_DIALOG;
+}
+
+
+//
+// DialogWindowLayout
+// ==================
+//
+
+DialogWindowLayout::DialogWindowLayout (Window* pParent, ObjectCatalog& rObjectCatalog_) :
+ Layout(pParent),
+ pChild(0),
+ rObjectCatalog(rObjectCatalog_)
+{ }
+
+void DialogWindowLayout::Activating (IDEBaseWindow& rChild)
+{
+ assert(dynamic_cast<DialogWindow*>(&rChild));
+ pChild = &static_cast<DialogWindow&>(rChild);
+ rObjectCatalog.SetLayoutWindow(this);
+ rObjectCatalog.UpdateEntries();
+ rObjectCatalog.Show();
+ Layout::Activating(rChild);
+}
+
+void DialogWindowLayout::Deactivating ()
+{
+ Layout::Deactivating();
+ rObjectCatalog.Hide();
+ pChild = 0;
+}
+
+void DialogWindowLayout::GetState (SfxItemSet& rSet, unsigned nWhich)
+{
+ switch (nWhich)
+ {
+ case SID_BASICIDE_CHOOSEMACRO:
+ rSet.Put(SfxVisibilityItem(nWhich, false));
+ break;
+ }
+}
+
+void DialogWindowLayout::OnFirstSize (int const nWidth, int const nHeight)
+{
+ AddToLeft(&rObjectCatalog, Size(nWidth * 0.2, nHeight));
+}
+
+
+} // namespace basctl
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/basides1.cxx b/basctl/source/basicide/basides1.cxx
index 97447f49566f..841c4bc13f1b 100644
--- a/basctl/source/basicide/basides1.cxx
+++ b/basctl/source/basicide/basides1.cxx
@@ -30,7 +30,6 @@
#include "iderdll2.hxx"
#include "localizationmgr.hxx"
#include "managelang.hxx"
-#include "moduldlg.hxx"
#include <basic/basmgr.hxx>
#include <basic/sbmeth.hxx>
@@ -57,18 +56,10 @@ using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::frame;
-// until we have some configuration lets just keep
-// persist this value for the process lifetime
-bool& lcl_GetSourceLinesEnabledValue()
-{
- static bool bSourceLinesEnabled(false);
- return bSourceLinesEnabled;
-}
-
-bool BasicIDEShell::SourceLinesDisplayed()
-{
- return lcl_GetSourceLinesEnabledValue();
-}
+using basctl::ModulWindow;
+using basctl::ModulWindowLayout;
+using basctl::DialogWindow;
+using basctl::DialogWindowLayout;
void BasicIDEShell::ExecuteCurrent( SfxRequest& rReq )
{
@@ -77,214 +68,135 @@ void BasicIDEShell::ExecuteCurrent( SfxRequest& rReq )
switch ( rReq.GetSlot() )
{
- case SID_SHOWLINES:
- {
- SFX_REQUEST_ARG(rReq, pItem, SfxBoolItem, rReq.GetSlot(), false);
- bool const bValue = pItem && pItem->GetValue();
- lcl_GetSourceLinesEnabledValue() = bValue;
- if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin))
- pMCurWin->SetLineNumberDisplay(bValue);
- }
- break;
-
case SID_BASICIDE_HIDECURPAGE:
{
pCurWin->StoreData();
RemoveWindow( pCurWin, false );
}
break;
- case SID_BASICIDE_DELETECURRENT:
+ case SID_BASICIDE_RENAMECURRENT:
{
- ScriptDocument aDocument( pCurWin->GetDocument() );
- ::rtl::OUString aLibName = pCurWin->GetLibName();
- ::rtl::OUString aName = pCurWin->GetName();
-
- if (dynamic_cast<ModulWindow*>(pCurWin))
+ pTabBar->StartEditMode( pTabBar->GetCurPageId() );
+ }
+ break;
+ case FID_SEARCH_NOW:
+ {
+ if (!pCurWin->HasActiveEditor())
+ break;
+ DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
+ SfxItemSet const& rArgs = *rReq.GetArgs();
+ // unfortunately I don't know the ID:
+ sal_uInt16 nWhich = rArgs.GetWhichByPos( 0 );
+ DBG_ASSERT( nWhich, "Wich fuer SearchItem ?" );
+ SfxPoolItem const& rItem = rArgs.Get(nWhich);
+ DBG_ASSERT(dynamic_cast<SvxSearchItem const*>(&rItem), "no searchitem!");
+ SvxSearchItem const& rSearchItem = static_cast<SvxSearchItem const&>(rItem);
+ // memorize item because of the adjustments...
+ BasicIDEGlobals::GetExtraData()->SetSearchItem(rSearchItem);
+ sal_Int32 nFound = 0;
+ bool bCanceled = false;
+ if (rSearchItem.GetCommand() == SVX_SEARCHCMD_REPLACE_ALL)
{
- if ( QueryDelModule( aName, pCurWin ) )
+ sal_uInt16 nActModWindows = 0;
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
- if ( aDocument.removeModule( aLibName, aName ) )
- {
- BasicIDE::MarkDocumentModified( aDocument );
- }
+ IDEBaseWindow* pWin = it->second;
+ if (pWin->HasActiveEditor())
+ nActModWindows++;
}
- }
- else
- {
- if ( QueryDelDialog( aName, pCurWin ) )
+
+ if ( nActModWindows <= 1 || ( !rSearchItem.GetSelection() && QueryBox( pCurWin, WB_YES_NO|WB_DEF_YES, String(IDEResId(RID_STR_SEARCHALLMODULES)) ).Execute() == RET_YES ) )
{
- if ( BasicIDE::RemoveDialog( aDocument, aLibName, aName ) )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
- RemoveWindow( pCurWin, true );
- BasicIDE::MarkDocumentModified( aDocument );
+ IDEBaseWindow* pWin = it->second;
+ nFound += pWin->StartSearchAndReplace(rSearchItem);
}
}
+ else
+ nFound = pCurWin->StartSearchAndReplace(rSearchItem);
+
+ rtl::OUString aReplStr(IDE_RESSTR(RID_STR_SEARCHREPLACES));
+ aReplStr = aReplStr.replaceAll("XX", rtl::OUString::valueOf(nFound));
+ InfoBox( pCurWin, aReplStr ).Execute();
}
- }
- break;
- case SID_BASICIDE_RENAMECURRENT:
- {
- pTabBar->StartEditMode( pTabBar->GetCurPageId() );
- }
- break;
- case FID_SEARCH_NOW:
- {
- if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin))
+ else
{
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SfxItemSet* pArgs = rReq.GetArgs();
- // unfortunately I don't know the ID:
- sal_uInt16 nWhich = pArgs->GetWhichByPos( 0 );
- DBG_ASSERT( nWhich, "Wich fuer SearchItem ?" );
- const SfxPoolItem& rItem = pArgs->Get( nWhich );
- IDEWindowTable::const_iterator it;
- if (SvxSearchItem const* pSearchItem = dynamic_cast<SvxSearchItem const*>(&rItem))
+ nFound = pCurWin->StartSearchAndReplace(rSearchItem);
+ if ( !nFound && !rSearchItem.GetSelection() )
{
- // memorize item because of the adjustments...
- BasicIDEGlobals::GetExtraData()->SetSearchItem(*pSearchItem);
- sal_Int32 nFound = 0;
- bool bCanceled = false;
- if (pSearchItem->GetCommand() == SVX_SEARCHCMD_REPLACE_ALL)
+ // search other modules...
+ bool bChangeCurWindow = false;
+ WindowTableIt it;
+ for (it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
+ if (it->second == pCurWin)
+ break;
+ if (it != aIDEWindowTable.end())
+ ++it;
+ IDEBaseWindow* pWin = it != aIDEWindowTable.end() ? it->second : 0;
+
+ bool bSearchedFromStart = false;
+ while ( !nFound && !bCanceled && ( pWin || !bSearchedFromStart ) )
{
- sal_uInt16 nActModWindows = 0;
- for( it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ if ( !pWin )
{
- IDEBaseWindow* pWin = it->second;
- if (!pWin->IsSuspended() && dynamic_cast<ModulWindow*>(pWin))
- nActModWindows++;
+ SfxViewFrame* pViewFrame = GetViewFrame();
+ SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow( SID_SEARCH_DLG ) : NULL;
+ Window* pParent = pChildWin ? pChildWin->GetWindow() : NULL;
+ QueryBox aQuery(pParent, WB_YES_NO|WB_DEF_YES, IDE_RESSTR(RID_STR_SEARCHFROMSTART));
+ if ( aQuery.Execute() == RET_YES )
+ {
+ it = aIDEWindowTable.begin();
+ if ( it != aIDEWindowTable.end() )
+ pWin = it->second;
+ bSearchedFromStart = true;
+ }
+ else
+ bCanceled = true;
}
- if ( ( nActModWindows <= 1 ) || ( !pSearchItem->GetSelection() && QueryBox( pCurWin, WB_YES_NO|WB_DEF_YES, String( IDEResId( RID_STR_SEARCHALLMODULES ) ) ).Execute() == RET_YES ) )
+ if (pWin && pWin->HasActiveEditor())
{
- for( it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ if ( pWin != pCurWin )
{
- IDEBaseWindow* pWin = it->second;
- if (!pWin->IsSuspended())
- if (ModulWindow* pMWin = dynamic_cast<ModulWindow*>(pWin))
- nFound += pMWin->StartSearchAndReplace(*pSearchItem);
+ if ( pCurWin )
+ pWin->SetSizePixel( pCurWin->GetSizePixel() );
+ nFound = pWin->StartSearchAndReplace(rSearchItem, true);
+ }
+ if ( nFound )
+ {
+ bChangeCurWindow = true;
+ break;
}
}
- else
- nFound = pMCurWin->StartSearchAndReplace(*pSearchItem);
-
- ::rtl::OUString aReplStr(IDE_RESSTR(RID_STR_SEARCHREPLACES));
- aReplStr = aReplStr.replaceAll("XX", rtl::OUString::valueOf(nFound));
- InfoBox( pCurWin, aReplStr ).Execute();
- }
- else
- {
- nFound = pMCurWin->StartSearchAndReplace(*pSearchItem);
- if ( !nFound && !pSearchItem->GetSelection() )
+ if ( pWin && ( pWin != pCurWin ) )
{
- // search other modules...
- bool bChangeCurWindow = false;
- for( it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
- if ( it->second == pCurWin)
- break;
if ( it != aIDEWindowTable.end() )
++it;
- IDEBaseWindow* pWin = NULL;
- if ( it != aIDEWindowTable.end() )
- pWin = it->second;
-
- bool bSearchedFromStart = false;
- while ( !nFound && !bCanceled && ( pWin || !bSearchedFromStart ) )
- {
- if ( !pWin )
- {
- SfxViewFrame* pViewFrame = GetViewFrame();
- SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow( SID_SEARCH_DLG ) : NULL;
- Window* pParent = pChildWin ? pChildWin->GetWindow() : NULL;
- QueryBox aQuery(pParent, WB_YES_NO|WB_DEF_YES, IDE_RESSTR(RID_STR_SEARCHFROMSTART));
- if ( aQuery.Execute() == RET_YES )
- {
- it = aIDEWindowTable.begin();
- if ( it != aIDEWindowTable.end() )
- pWin = it->second;
- bSearchedFromStart = true;
- }
- else
- bCanceled = true;
- }
-
- if (ModulWindow* pMWin = dynamic_cast<ModulWindow*>(pWin))
- if (!pWin->IsSuspended())
- {
- if ( pWin != pCurWin )
- {
- if ( pCurWin )
- pWin->SetSizePixel( pCurWin->GetSizePixel() );
- nFound = pMWin->StartSearchAndReplace(*pSearchItem, true);
- }
- if ( nFound )
- {
- bChangeCurWindow = true;
- break;
- }
- }
- if ( pWin && ( pWin != pCurWin ) )
- {
- if ( it != aIDEWindowTable.end() )
- ++it;
- if ( it != aIDEWindowTable.end() )
- pWin = it->second;
- else
- pWin = 0;
- }
- else
- pWin = 0;
- }
- if ( !nFound && bSearchedFromStart )
- nFound = pMCurWin->StartSearchAndReplace(*pSearchItem, true);
- if ( bChangeCurWindow )
- SetCurWindow( pWin, true );
+ pWin = it != aIDEWindowTable.end() ? it->second : 0;
}
- if ( !nFound && !bCanceled )
- InfoBox( pCurWin, String( IDEResId( RID_STR_SEARCHNOTFOUND ) ) ).Execute();
+ else
+ pWin = 0;
}
-
- rReq.Done();
+ if ( !nFound && bSearchedFromStart )
+ nFound = pCurWin->StartSearchAndReplace(rSearchItem, true);
+ if ( bChangeCurWindow )
+ SetCurWindow( pWin, true );
}
- else
- DBG_ASSERT(false, "no searchitem!");
+ if ( !nFound && !bCanceled )
+ InfoBox( pCurWin, String(IDEResId(RID_STR_SEARCHNOTFOUND)) ).Execute();
}
- }
- break;
- case FID_SEARCH_OFF:
- {
- if (dynamic_cast<ModulWindow*>(pCurWin))
- pCurWin->GrabFocus();
+
+ rReq.Done();
}
break;
case SID_UNDO:
case SID_REDO:
- {
if ( GetUndoManager() && pCurWin->AllowUndo() )
- {
GetViewFrame()->ExecuteSlot( rReq );
- }
- }
- break;
- case SID_GOTOLINE:
- {
- if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin))
- {
- std::auto_ptr< GotoLineDialog > xGotoDlg( new GotoLineDialog( pCurWin ) );
- if ( xGotoDlg->Execute() )
- {
- rtl::OUString sText = xGotoDlg->GetText();
-
- sal_Int32 nLine = xGotoDlg->GetLineNumber();
-
- if ( nLine )
- pMCurWin->GetEditView()->SetSelection( TextSelection( TextPaM( nLine - 1 , 0 ), TextPaM( nLine - 1, 0 ) ) );
- }
- }
- }
+ break;
default:
- {
pCurWin->ExecuteCommand( rReq );
- }
}
}
@@ -350,22 +262,6 @@ void BasicIDEShell::ExecuteGlobal( SfxRequest& rReq )
}
}
break;
- case SID_SIGNATURE:
- {
- if ( pCurWin )
- {
- ::basctl::DocumentSignature aSignature( pCurWin->GetDocument() );
- if ( aSignature.supportsSignatures() )
- {
- aSignature.signScriptingContent();
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
- pBindings->Invalidate( SID_SIGNATURE );
- }
- }
- }
- break;
-
case SID_BASICIDE_MODULEDLG:
{
if ( rReq.GetArgs() )
@@ -441,10 +337,13 @@ void BasicIDEShell::ExecuteGlobal( SfxRequest& rReq )
break;
case SID_BASICIDE_OBJCAT:
- pModulLayout->ToggleObjectCatalog();
+ // toggling object catalog
+ aObjectCatalog.Show(!aObjectCatalog.IsVisible());
+ if (pLayout)
+ pLayout->ArrangeWindows();
// refresh the button state
if (SfxBindings* pBindings = BasicIDE::GetBindingsPtr())
- pBindings->Invalidate(nSlot);
+ pBindings->Invalidate(SID_BASICIDE_OBJCAT);
break;
case SID_BASICIDE_NAMECHANGEDONTAB:
@@ -519,7 +418,7 @@ void BasicIDEShell::ExecuteGlobal( SfxRequest& rReq )
case SID_BASICIDE_STOREALLMODULESOURCES:
case SID_BASICIDE_UPDATEALLMODULESOURCES:
{
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
IDEBaseWindow* pWin = it->second;
if (!pWin->IsSuspended() && dynamic_cast<ModulWindow*>(pWin))
@@ -793,11 +692,18 @@ void BasicIDEShell::ExecuteGlobal( SfxRequest& rReq )
case SID_BASICIDE_MANAGE_LANG:
{
- ManageLanguageDialog aDlg( GetCurWindow(), GetCurLocalizationMgr() );
+ ManageLanguageDialog aDlg(pCurWin, m_pCurLocalizationMgr);
aDlg.Execute();
rReq.Done();
}
break;
+
+ default:
+ if (pLayout)
+ pLayout->ExecuteGlobal(rReq);
+ if (pCurWin)
+ pCurWin->ExecuteGlobal(rReq);
+ break;
}
}
@@ -808,20 +714,6 @@ void BasicIDEShell::GetState(SfxItemSet &rSet)
{
switch ( nWh )
{
- case SID_SHOWLINES:
- {
- // if this is not a module window hide the
- // setting, doesn't make sense for example if the
- // dialog editor is open
- if(pCurWin && !dynamic_cast<ModulWindow*>(pCurWin))
- {
- rSet.DisableItem( nWh );
- rSet.Put(SfxVisibilityItem(nWh, false));
- }
- else
- rSet.Put( SfxBoolItem( nWh, lcl_GetSourceLinesEnabledValue() ) );
- break;
- }
case SID_DOCINFO:
{
rSet.DisableItem( nWh );
@@ -872,25 +764,12 @@ void BasicIDEShell::GetState(SfxItemSet &rSet)
rSet.DisableItem( nWh );
}
break;
- case SID_BASICIDE_CHOOSEMACRO:
case SID_BASICIDE_OBJCAT:
- {
- // FIXME: hide Object Catalog icon from the toolbar,
- // when window type is not macro editor.
- if(pCurWin && !dynamic_cast<ModulWindow*>(pCurWin))
- {
- rSet.DisableItem( nWh );
- rSet.Put(SfxVisibilityItem(nWh, false));
- }
+ if (pLayout)
+ rSet.Put(SfxBoolItem(nWh, aObjectCatalog.IsVisible()));
else
- {
- if (nWh == SID_BASICIDE_OBJCAT)
- rSet.Put(SfxBoolItem(nWh, pModulLayout && pModulLayout->HasObjectCatalog()));
- else
- rSet.Put(SfxVisibilityItem(nWh, true));
- }
+ rSet.Put(SfxVisibilityItem(nWh, false));
break;
- }
case SID_BASICIDE_SHOWSBX:
case SID_BASICIDE_CREATEMACRO:
case SID_BASICIDE_EDITMACRO:
@@ -1098,6 +977,9 @@ void BasicIDEShell::GetState(SfxItemSet &rSet)
}
break;
}
+ default:
+ if (pLayout)
+ pLayout->GetState(rSet, nWh);
}
}
if ( pCurWin )
@@ -1120,67 +1002,25 @@ sal_Bool BasicIDEShell::HasUIFeature( sal_uInt32 nFeature )
void BasicIDEShell::SetCurWindow( IDEBaseWindow* pNewWin, bool bUpdateTabBar, bool bRememberAsCurrent )
{
- // an EditWindow must be set at Sfx for resizing...
- if ( !pNewWin && ( GetWindow() != pModulLayout ) )
- {
- pModulLayout->Show();
- AdjustPosSizePixel( Point( 0, 0 ), GetViewFrame()->GetWindow().GetOutputSizePixel() );
- SetWindow( pModulLayout );
- EnableScrollbars( false );
- aVScrollBar.Hide();
- }
-
if ( pNewWin != pCurWin )
{
- IDEBaseWindow* pPrevCurWin = pCurWin;
pCurWin = pNewWin;
- if ( pPrevCurWin )
+ if (pLayout)
+ pLayout->Deactivating();
+ if (pCurWin)
{
- pPrevCurWin->Hide();
- pPrevCurWin->Deactivating();
-// pPrevCurWin->GetLayoutWindow()->Hide();
- if (DialogWindow* pDialogWin = dynamic_cast<DialogWindow*>(pPrevCurWin))
- {
- pDialogWin->DisableBrowser();
- }
- else
- {
- pModulLayout->SetModulWindow( NULL );
- }
- }
- if ( pCurWin )
- {
- AdjustPosSizePixel( Point( 0, 0 ), GetViewFrame()->GetWindow().GetOutputSizePixel() );
- if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin))
- {
- pMCurWin->SetLineNumberDisplay(SourceLinesDisplayed());
- GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_MODULWINDOW );
- pModulLayout->SetModulWindow(pMCurWin);
- pModulLayout->Show();
- }
+ if (pCurWin->GetType() == BASICIDE_TYPE_MODULE)
+ pLayout = pModulLayout.get();
else
- {
- pModulLayout->Hide();
- GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_DIALOGWINDOW );
- }
-
- if ( bRememberAsCurrent )
- {
- BasicIDEData* pData = BasicIDEGlobals::GetExtraData();
- if ( pData )
- {
- sal_uInt16 nCurrentType = dynamic_cast<ModulWindow*>(pCurWin) ?
- BASICIDE_TYPE_MODULE : BASICIDE_TYPE_DIALOG;
- LibInfoItem* pLibInfoItem = new LibInfoItem( pCurWin->GetDocument(), pCurWin->GetLibName(), pCurWin->GetName(), nCurrentType );
- pData->GetLibInfos().InsertInfo( pLibInfoItem );
- }
- }
-
- if ( GetViewFrame()->GetWindow().IsVisible() ) // SFX will do it later otherwise
+ pLayout = pDialogLayout.get();
+ AdjustPosSizePixel(Point(0, 0), GetViewFrame()->GetWindow().GetOutputSizePixel());
+ pLayout->Activating(*pCurWin);
+ GetViewFrame()->GetWindow().SetHelpId(pCurWin->GetHid());
+ if (bRememberAsCurrent)
+ pCurWin->InsertLibInfo();
+ if (GetViewFrame()->GetWindow().IsVisible()) // SFX will do it later otherwise
pCurWin->Show();
-
pCurWin->Init();
-
if ( !BasicIDEGlobals::GetExtraData()->ShellInCriticalSection() )
{
Window* pFrameWindow = &GetViewFrame()->GetWindow();
@@ -1190,9 +1030,9 @@ void BasicIDEShell::SetCurWindow( IDEBaseWindow* pNewWin, bool bUpdateTabBar, bo
if ( pFocusWindow ) // Focus in BasicIDE
pNewWin->GrabFocus();
}
- if (DialogWindow* pDCurWin = dynamic_cast<DialogWindow*>(pCurWin))
- pDCurWin->UpdateBrowser();
}
+ else
+ pLayout = 0;
if ( bUpdateTabBar )
{
sal_uLong nKey = GetIDEWindowId( pCurWin );
@@ -1208,16 +1048,16 @@ void BasicIDEShell::SetCurWindow( IDEBaseWindow* pNewWin, bool bUpdateTabBar, bo
if ( pCurWin->GetDocument().isDocument() )
SfxObjectShell::SetCurrentComponent( pCurWin->GetDocument().getDocument() );
}
- else
+ else if (pLayout)
{
- SetWindow( pModulLayout );
+ SetWindow(pLayout);
GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_MODULWINDOW );
- SfxObjectShell::SetCurrentComponent( NULL );
+ SfxObjectShell::SetCurrentComponent(0);
}
- pModulLayout->GetObjectCatalog().SetCurrentEntry(pCurWin);
+ aObjectCatalog.SetCurrentEntry(pCurWin);
SetUndoManager( pCurWin ? pCurWin->GetUndoManager() : 0 );
InvalidateBasicIDESlots();
- EnableScrollbars( pCurWin ? true : false );
+ EnableScrollbars(pCurWin != 0);
if ( m_pCurLocalizationMgr )
m_pCurLocalizationMgr->handleTranslationbar();
@@ -1277,25 +1117,17 @@ IDEBaseWindow* BasicIDEShell::FindApplicationWindow()
return FindWindow( ScriptDocument::getApplicationScriptDocument() );
}
-IDEBaseWindow* BasicIDEShell::FindWindow( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rName, BasicIDEType nType, bool bFindSuspended )
+IDEBaseWindow* BasicIDEShell::FindWindow(
+ ScriptDocument const& rDocument,
+ rtl::OUString const& rLibName, rtl::OUString const& rName,
+ BasicIDEType eType, bool bFindSuspended
+)
{
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
- IDEBaseWindow* pWin = it->second;
- if ( !pWin->IsSuspended() || bFindSuspended )
- {
- if ( rLibName.isEmpty() || rName.isEmpty() || nType == BASICIDE_TYPE_UNKNOWN )
- {
- // return any non-suspended window
- return pWin;
- }
- else if ( pWin->IsDocument( rDocument ) && pWin->GetLibName() == rLibName && pWin->GetName() == rName &&
- ( ( dynamic_cast<ModulWindow*>(pWin) && nType == BASICIDE_TYPE_MODULE ) ||
- ( dynamic_cast<DialogWindow*>(pWin) && nType == BASICIDE_TYPE_DIALOG ) ) )
- {
- return pWin;
- }
- }
+ IDEBaseWindow* const pWin = it->second;
+ if (pWin->Is(rDocument, rLibName, rName, eType, bFindSuspended))
+ return pWin;
}
return 0;
}
@@ -1406,8 +1238,8 @@ void BasicIDEShell::AdjustPosSizePixel( const Point &rPos, const Size &rSize )
pTabBar->SetPosSizePixel( Point( rPos.X(), rPos.Y()+aSz.Height() ), Size( aSz.Width()/2, aScrollBarBoxSz.Height() ) );
}
- if (Window* pEdtWin = pCurWin ? pCurWin->GetLayoutWindow() : pModulLayout)
- pEdtWin->SetPosSizePixel(rPos, dynamic_cast<DialogWindow*>(pCurWin) ? aSz : aOutSz);
+ if (pLayout)
+ pLayout->SetPosSizePixel(rPos, dynamic_cast<DialogWindow*>(pCurWin) ? aSz : aOutSz);
}
Reference< XModel > BasicIDEShell::GetCurrentDocument() const
@@ -1444,7 +1276,7 @@ void BasicIDEShell::Deactivate( sal_Bool bMDI )
// test CanClose to also test during deactivating the BasicIDE whether
// the sourcecode is too large in one of the modules...
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
IDEBaseWindow* pWin = it->second;
if ( /* !pWin->IsSuspended() && */ !pWin->CanClose() )
diff --git a/basctl/source/basicide/basides2.cxx b/basctl/source/basicide/basides2.cxx
index e30ec199da1e..6a1a5b4a064e 100644
--- a/basctl/source/basicide/basides2.cxx
+++ b/basctl/source/basicide/basides2.cxx
@@ -45,6 +45,9 @@ using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
namespace css = ::com::sun::star;
+using basctl::ModulWindow;
+using basctl::ModulWindowLayout;
+
Reference< view::XRenderable > BasicIDEShell::GetRenderable()
{
return Reference< view::XRenderable >( new basicide::BasicRenderable( pCurWin ) );
@@ -142,27 +145,6 @@ void BasicIDEShell::SetMDITitle()
}
}
-void BasicIDEShell::DestroyModulWindowLayout()
-{
- delete pModulLayout;
- pModulLayout = 0;
-}
-
-
-void BasicIDEShell::UpdateModulWindowLayout( bool bBasicStopped )
-{
- if ( pModulLayout )
- {
- pModulLayout->GetStackWindow().UpdateCalls();
- pModulLayout->GetWatchWindow().UpdateWatches( bBasicStopped );
- }
-}
-
-void BasicIDEShell::CreateModulWindowLayout()
-{
- pModulLayout = new ModulWindowLayout( &GetViewFrame()->GetWindow() );
-}
-
ModulWindow* BasicIDEShell::CreateBasWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rModName )
{
bCreatingWindow = true;
@@ -199,7 +181,9 @@ ModulWindow* BasicIDEShell::CreateBasWin( const ScriptDocument& rDocument, const
if( !pWin )
{
// new module window
- pWin = new ModulWindow( pModulLayout, rDocument, aLibName, aModName, aModule );
+ if (!pModulLayout)
+ pModulLayout.reset(new ModulWindowLayout(&GetViewFrame()->GetWindow(), aObjectCatalog));
+ pWin = new ModulWindow(pModulLayout.get(), rDocument, aLibName, aModName, aModule);
nKey = InsertWindowInTable( pWin );
}
else // we've gotten called recursively ( via listener from createModule above ), get outta here
@@ -238,20 +222,15 @@ ModulWindow* BasicIDEShell::CreateBasWin( const ScriptDocument& rDocument, const
return pWin;
}
-ModulWindow* BasicIDEShell::FindBasWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rModName, bool bCreateIfNotExist, bool bFindSuspended )
+ModulWindow* BasicIDEShell::FindBasWin (
+ ScriptDocument const& rDocument,
+ rtl::OUString const& rLibName, rtl::OUString const& rName,
+ bool bCreateIfNotExist, bool bFindSuspended
+)
{
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin();
- it != aIDEWindowTable.end(); ++it )
- {
- IDEBaseWindow* pWin = it->second;
- if (!pWin->IsSuspended() || bFindSuspended)
- if (rLibName.isEmpty() || (pWin->IsDocument(rDocument) && pWin->GetLibName() == rLibName && pWin->GetName() == rModName))
- {
- if (ModulWindow* pModWin = dynamic_cast<ModulWindow*>(pWin))
- return pModWin;
- }
- }
- return bCreateIfNotExist ? CreateBasWin(rDocument, rLibName, rModName) : 0;
+ if (IDEBaseWindow* pWin = FindWindow(rDocument, rLibName, rName, BASICIDE_TYPE_MODULE, bFindSuspended))
+ return static_cast<ModulWindow*>(pWin);
+ return bCreateIfNotExist ? CreateBasWin(rDocument, rLibName, rName) : 0;
}
void BasicIDEShell::Move()
@@ -272,13 +251,12 @@ sal_Int32 getBasicIDEShellCount( void );
// only if basic window above:
void BasicIDEShell::ExecuteBasic( SfxRequest& rReq )
{
- if (!dynamic_cast<ModulWindow*>(pCurWin))
- return;
-
- pCurWin->ExecuteCommand( rReq );
- sal_Int32 nCount = getBasicIDEShellCount();
- if( nCount )
- CheckWindows();
+ if (dynamic_cast<ModulWindow*>(pCurWin))
+ {
+ pCurWin->ExecuteCommand( rReq );
+ if (getBasicIDEShellCount())
+ CheckWindows();
+ }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/basides3.cxx b/basctl/source/basicide/basides3.cxx
index 17bbddbab67c..ed0af7e9ca9a 100644
--- a/basctl/source/basicide/basides3.cxx
+++ b/basctl/source/basicide/basides3.cxx
@@ -41,6 +41,9 @@ using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::io;
+using basctl::DialogWindow;
+using basctl::DialogWindowLayout;
+
DialogWindow* BasicIDEShell::CreateDlgWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rDlgName )
{
bCreatingWindow = true;
@@ -86,7 +89,9 @@ DialogWindow* BasicIDEShell::CreateDlgWin( const ScriptDocument& rDocument, cons
LocalizationMgr::setStringResourceAtDialog( rDocument, rLibName, aDlgName, xDialogModel );
// new dialog window
- pWin = new DialogWindow( &GetViewFrame()->GetWindow(), rDocument, aLibName, aDlgName, xDialogModel );
+ if (!pDialogLayout)
+ pDialogLayout.reset(new DialogWindowLayout(&GetViewFrame()->GetWindow(), aObjectCatalog));
+ pWin = new DialogWindow(pDialogLayout.get(), rDocument, aLibName, aDlgName, xDialogModel);
nKey = InsertWindowInTable( pWin );
}
}
@@ -115,22 +120,20 @@ DialogWindow* BasicIDEShell::CreateDlgWin( const ScriptDocument& rDocument, cons
return pWin;
}
-DialogWindow* BasicIDEShell::FindDlgWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rDlgName, bool bCreateIfNotExist, bool bFindSuspended )
+DialogWindow* BasicIDEShell::FindDlgWin (
+ ScriptDocument const& rDocument,
+ rtl::OUString const& rLibName, rtl::OUString const& rName,
+ bool bCreateIfNotExist, bool bFindSuspended
+)
{
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
- {
- IDEBaseWindow* pWin = it->second;
- if (!pWin->IsSuspended() || bFindSuspended)
- if (rLibName.isEmpty() || (pWin->IsDocument(rDocument) && pWin->GetLibName() == rLibName && pWin->GetName() == rDlgName))
- if (DialogWindow* pDlgWin = dynamic_cast<DialogWindow*>(pWin))
- return pDlgWin;
- }
- return bCreateIfNotExist ? CreateDlgWin(rDocument, rLibName, rDlgName) : 0;
+ if (IDEBaseWindow* pWin = FindWindow(rDocument, rLibName, rName, BASICIDE_TYPE_DIALOG, bFindSuspended))
+ return static_cast<DialogWindow*>(pWin);
+ return bCreateIfNotExist ? CreateDlgWin(rDocument, rLibName, rName) : 0;
}
sal_uInt16 BasicIDEShell::GetIDEWindowId(const IDEBaseWindow* pWin) const
{
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
if ( it->second == pWin )
return it->first;
return 0;
@@ -147,11 +150,8 @@ SdrView* BasicIDEShell::GetCurDlgView() const
// only if dialogue window above:
void BasicIDEShell::ExecuteDialog( SfxRequest& rReq )
{
- if (pCurWin && (dynamic_cast<DialogWindow*>(pCurWin) ||
- (rReq.GetSlot() == SID_IMPORT_DIALOG && dynamic_cast<ModulWindow*>(pCurWin))))
- {
- pCurWin->ExecuteCommand( rReq );
- }
+ if (pCurWin && (dynamic_cast<DialogWindow*>(pCurWin) || rReq.GetSlot() == SID_IMPORT_DIALOG))
+ pCurWin->ExecuteCommand(rReq);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/basidesh.cxx b/basctl/source/basicide/basidesh.cxx
index b271811695f8..c1b7dfe4dee2 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -24,7 +24,8 @@
#include <tools/diagnose_ex.h>
#include <basic/basmgr.hxx>
#include <basidesh.hrc>
-#include <baside2.hxx>
+#include "baside2.hxx"
+#include "baside3.hxx"
#include <basdoc.hxx>
#include <basicbox.hxx>
#include <editeng/sizeitem.hxx>
@@ -68,7 +69,7 @@ class ContainerListenerImpl : public ContainerListenerBASE
BasicIDEShell* mpShell;
public:
- ContainerListenerImpl( BasicIDEShell* pShell ) : mpShell( pShell ) {}
+ ContainerListenerImpl (BasicIDEShell* pShell) : mpShell(pShell) { }
~ContainerListenerImpl()
{
@@ -117,7 +118,7 @@ public:
rtl::OUString sModuleName;
if( mpShell && ( Event.Accessor >>= sModuleName ) )
{
- IDEBaseWindow* pWin = mpShell->FindWindow( mpShell->m_aCurDocument, mpShell->m_aCurLibName, sModuleName, BASICIDE_TYPE_MODULE, true );
+ basctl::ModulWindow* pWin = mpShell->FindBasWin(mpShell->m_aCurDocument, mpShell->m_aCurLibName, sModuleName, false, true);
if( pWin )
mpShell->RemoveWindow( pWin, true, true );
}
@@ -150,13 +151,15 @@ sal_Int32 getBasicIDEShellCount( void )
{ return GnBasicIDEShellCount; }
BasicIDEShell::BasicIDEShell( SfxViewFrame* pFrame_, SfxViewShell* /* pOldShell */ ) :
- SfxViewShell( pFrame_, IDE_VIEWSHELL_FLAGS ),
- m_aCurDocument( ScriptDocument::getApplicationScriptDocument() ),
- aHScrollBar( &GetViewFrame()->GetWindow(), WinBits( WB_HSCROLL | WB_DRAG ) ),
- aVScrollBar( &GetViewFrame()->GetWindow(), WinBits( WB_VSCROLL | WB_DRAG ) ),
- aScrollBarBox( &GetViewFrame()->GetWindow(), WinBits( WB_SIZEABLE ) ),
- m_bAppBasicModified( false ),
- m_aNotifier( *this )
+ SfxViewShell( pFrame_, IDE_VIEWSHELL_FLAGS ),
+ m_aCurDocument( ScriptDocument::getApplicationScriptDocument() ),
+ aHScrollBar( &GetViewFrame()->GetWindow(), WinBits( WB_HSCROLL | WB_DRAG ) ),
+ aVScrollBar( &GetViewFrame()->GetWindow(), WinBits( WB_VSCROLL | WB_DRAG ) ),
+ aScrollBarBox( &GetViewFrame()->GetWindow(), WinBits( WB_SIZEABLE ) ),
+ pLayout(0),
+ aObjectCatalog(&GetViewFrame()->GetWindow()),
+ m_bAppBasicModified( false ),
+ m_aNotifier( *this )
{
m_xLibListener = new ContainerListenerImpl( this );
Init();
@@ -184,9 +187,9 @@ void BasicIDEShell::Init()
LibBoxControl::RegisterControl( SID_BASICIDE_LIBSELECTOR );
LanguageBoxControl::RegisterControl( SID_BASICIDE_CURRENT_LANG );
- CreateModulWindowLayout();
-
- GetViewFrame()->GetWindow().SetBackground();
+ GetViewFrame()->GetWindow().SetBackground(
+ GetViewFrame()->GetWindow().GetSettings().GetStyleSettings().GetWindowColor()
+ );
pCurWin = 0;
m_aCurDocument = ScriptDocument::getApplicationScriptDocument();
@@ -229,7 +232,7 @@ BasicIDEShell::~BasicIDEShell()
SetWindow( 0 );
SetCurWindow( 0 );
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
{
// no store; does already happen when the BasicManagers are destroyed
delete it->second;
@@ -237,12 +240,10 @@ BasicIDEShell::~BasicIDEShell()
aIDEWindowTable.clear();
delete pTabBar;
- DestroyModulWindowLayout();
- ContainerListenerImpl* pListener = static_cast< ContainerListenerImpl* >( m_xLibListener.get() );
- // Destroy all ContainerListeners for Basic Container.
- if ( pListener )
- pListener->removeContainerListener( m_aCurDocument, m_aCurLibName );
+ // Destroy all ContainerListeners for Basic Container.
+ if (ContainerListenerImpl* pListener = static_cast<ContainerListenerImpl*>(m_xLibListener.get()))
+ pListener->removeContainerListener(m_aCurDocument, m_aCurLibName);
BasicIDEGlobals::GetExtraData()->ShellInCriticalSection() = false;
@@ -251,15 +252,15 @@ BasicIDEShell::~BasicIDEShell()
void BasicIDEShell::onDocumentCreated( const ScriptDocument& /*_rDocument*/ )
{
- if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin))
- pMCurWin->SetLineNumberDisplay(SourceLinesDisplayed());
+ if (pCurWin)
+ pCurWin->OnNewDocument();
UpdateWindows();
}
void BasicIDEShell::onDocumentOpened( const ScriptDocument& /*_rDocument*/ )
{
- if (ModulWindow* pMCurWin = dynamic_cast<ModulWindow*>(pCurWin))
- pMCurWin->SetLineNumberDisplay(SourceLinesDisplayed());
+ if (pCurWin)
+ pCurWin->OnNewDocument();
UpdateWindows();
}
@@ -296,7 +297,7 @@ void BasicIDEShell::onDocumentClosed( const ScriptDocument& _rDocument )
std::vector<IDEBaseWindow*> aDeleteVec;
// remove all windows which belong to this document
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
{
IDEBaseWindow* pWin = it->second;
if ( pWin->IsDocument( _rDocument ) )
@@ -344,7 +345,7 @@ void BasicIDEShell::onDocumentTitleChanged( const ScriptDocument& /*_rDocument*/
void BasicIDEShell::onDocumentModeChanged( const ScriptDocument& _rDocument )
{
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
{
IDEBaseWindow* pWin = it->second;
if ( pWin->IsDocument( _rDocument ) && _rDocument.isDocument() )
@@ -354,7 +355,7 @@ void BasicIDEShell::onDocumentModeChanged( const ScriptDocument& _rDocument )
void BasicIDEShell::StoreAllWindowData( bool bPersistent )
{
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
{
IDEBaseWindow* pWin = it->second;
DBG_ASSERT( pWin, "PrepareClose: NULL-Pointer in Table?" );
@@ -396,7 +397,7 @@ sal_uInt16 BasicIDEShell::PrepareClose( sal_Bool bUI, sal_Bool bForBrowsing )
else
{
bool bCanClose = true;
- for (IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); bCanClose && (it != aIDEWindowTable.end()); ++it)
+ for (WindowTableIt it = aIDEWindowTable.begin(); bCanClose && (it != aIDEWindowTable.end()); ++it)
{
IDEBaseWindow* pWin = it->second;
if ( !pWin->CanClose() )
@@ -537,7 +538,7 @@ void BasicIDEShell::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId&,
case SFX_HINT_DYING:
{
EndListening( rBC, true /* log off all */ );
- UpdateObjectCatalog();
+ aObjectCatalog.UpdateEntries();
}
break;
}
@@ -577,7 +578,8 @@ void BasicIDEShell::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId&,
// not only at error/break or explicit stoppage,
// if the update is turned off due to a programming bug
BasicIDE::BasicStopped();
- UpdateModulWindowLayout( true ); // clear...
+ if (pLayout)
+ pLayout->UpdateDebug(true); // clear...
if( m_pCurLocalizationMgr )
m_pCurLocalizationMgr->handleBasicStopped();
}
@@ -586,8 +588,7 @@ void BasicIDEShell::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId&,
m_pCurLocalizationMgr->handleBasicStarted();
}
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin();
- it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
IDEBaseWindow* pWin = it->second;
if ( nHintId == SBX_HINT_BASICSTART )
@@ -607,7 +608,7 @@ void BasicIDEShell::CheckWindows()
{
bool bSetCurWindow = false;
std::vector<IDEBaseWindow*> aDeleteVec;
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
IDEBaseWindow* pWin = it->second;
if ( pWin->GetStatus() & BASWIN_TOBEKILLED )
@@ -631,7 +632,7 @@ void BasicIDEShell::RemoveWindows( const ScriptDocument& rDocument, const ::rtl:
{
bool bChangeCurWindow = pCurWin ? false : true;
std::vector<IDEBaseWindow*> aDeleteVec;
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
IDEBaseWindow* pWin = it->second;
if ( pWin->IsDocument( rDocument ) && pWin->GetLibName() == rLibName )
@@ -658,7 +659,7 @@ void BasicIDEShell::UpdateWindows()
if ( !m_aCurLibName.isEmpty() )
{
std::vector<IDEBaseWindow*> aDeleteVec;
- for( IDEWindowTable::const_iterator it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it )
+ for (WindowTableIt it = aIDEWindowTable.begin(); it != aIDEWindowTable.end(); ++it)
{
IDEBaseWindow* pWin = it->second;
if ( !pWin->IsDocument( m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName )
@@ -739,7 +740,7 @@ void BasicIDEShell::UpdateWindows()
for ( sal_Int32 j = 0 ; j < nModCount ; j++ )
{
::rtl::OUString aModName = pModNames[ j ];
- ModulWindow* pWin = FindBasWin( *doc, aLibName, aModName, false );
+ basctl::ModulWindow* pWin = FindBasWin( *doc, aLibName, aModName, false );
if ( !pWin )
pWin = CreateBasWin( *doc, aLibName, aModName );
if ( !pNextActiveWindow && pLibInfoItem && pLibInfoItem->GetCurrentName() == aModName &&
@@ -770,7 +771,7 @@ void BasicIDEShell::UpdateWindows()
::rtl::OUString aDlgName = pDlgNames[ j ];
// this find only looks for non-suspended windows;
// suspended windows are handled in CreateDlgWin
- DialogWindow* pWin = FindDlgWin( *doc, aLibName, aDlgName, false );
+ basctl::DialogWindow* pWin = FindDlgWin( *doc, aLibName, aDlgName, false );
if ( !pWin )
pWin = CreateDlgWin( *doc, aLibName, aDlgName );
if ( !pNextActiveWindow && pLibInfoItem && pLibInfoItem->GetCurrentName() == aDlgName &&
@@ -842,7 +843,6 @@ void BasicIDEShell::RemoveWindow( IDEBaseWindow* pWindow_, bool bDestroy, bool b
}
else
{
- pWindow_->Hide();
pWindow_->AddStatus( BASWIN_SUSPENDED );
pWindow_->Deactivating();
aIDEWindowTable[ nKey ] = pWindow_; // jump in again
@@ -975,10 +975,4 @@ void BasicIDEShell::ImplStartListening( StarBASIC* pBasic )
StartListening( pBasic->GetBroadcaster(), true /* log on only once */ );
}
-// Updates the "Object Catalog" window.
-void BasicIDEShell::UpdateObjectCatalog ()
-{
- pModulLayout->UpdateObjectCatalog();
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/basobj2.cxx b/basctl/source/basicide/basobj2.cxx
index 01df2eac19c1..ab9d9a085ad1 100644
--- a/basctl/source/basicide/basobj2.cxx
+++ b/basctl/source/basicide/basobj2.cxx
@@ -186,18 +186,15 @@ bool RenameModule( Window* pErrorParent, const ScriptDocument& rDocument, const
if ( !rDocument.renameModule( rLibName, rOldName, rNewName ) )
return false;
- BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
- if ( pIDEShell )
+ if (BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell())
{
- IDEBaseWindow* pWin = pIDEShell->FindWindow( rDocument, rLibName, rNewName, BASICIDE_TYPE_MODULE, true );
- if ( pWin )
+ if (basctl::ModulWindow* pWin = pIDEShell->FindBasWin(rDocument, rLibName, rNewName, false, true))
{
// set new name in window
pWin->SetName( rNewName );
// set new module in module window
- ModulWindow* pModWin = dynamic_cast<ModulWindow*>(pWin);
- pModWin->SetSbModule( (SbModule*)pModWin->GetBasic()->FindModule( rNewName ) );
+ pWin->SetSbModule( (SbModule*)pWin->GetBasic()->FindModule( rNewName ) );
// update tabwriter
sal_uInt16 nId = pIDEShell->GetIDEWindowId( pWin );
diff --git a/basctl/source/basicide/basobj3.cxx b/basctl/source/basicide/basobj3.cxx
index 7325904540c9..731d4021a3cf 100644
--- a/basctl/source/basicide/basobj3.cxx
+++ b/basctl/source/basicide/basobj3.cxx
@@ -189,10 +189,10 @@ bool RenameDialog( Window* pErrorParent, const ScriptDocument& rDocument, const
}
BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
- IDEBaseWindow* pWin = pIDEShell ? pIDEShell->FindWindow( rDocument, rLibName, rOldName, BASICIDE_TYPE_DIALOG, false ) : NULL;
+ basctl::DialogWindow* pWin = pIDEShell ? pIDEShell->FindDlgWin(rDocument, rLibName, rOldName) : 0;
Reference< XNameContainer > xExistingDialog;
if ( pWin )
- xExistingDialog = ((DialogWindow*)pWin)->GetEditor()->GetDialog();
+ xExistingDialog = pWin->GetEditor()->GetDialog();
if ( xExistingDialog.is() )
LocalizationMgr::renameStringResourceIDs( rDocument, rLibName, rNewName, xExistingDialog );
@@ -206,7 +206,7 @@ bool RenameDialog( Window* pErrorParent, const ScriptDocument& rDocument, const
pWin->SetName( rNewName );
// update property browser
- ((DialogWindow*)pWin)->UpdateBrowser();
+ pWin->UpdateBrowser();
// update tabwriter
sal_uInt16 nId = pIDEShell->GetIDEWindowId( pWin );
@@ -229,8 +229,7 @@ bool RemoveDialog( const ScriptDocument& rDocument, const ::rtl::OUString& rLibN
BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
if ( pIDEShell )
{
- DialogWindow* pDlgWin = pIDEShell->FindDlgWin( rDocument, rLibName, rDlgName, false );
- if( pDlgWin )
+ if (basctl::DialogWindow* pDlgWin = pIDEShell->FindDlgWin(rDocument, rLibName, rDlgName))
{
Reference< container::XNameContainer > xDialogModel = pDlgWin->GetDialog();
LocalizationMgr::removeResourceForDialog( rDocument, rLibName, rDlgName, xDialogModel );
@@ -286,9 +285,11 @@ void MarkDocumentModified( const ScriptDocument& rDocument )
// does not have to come from a document...
if ( rDocument.isApplication() )
{
- BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
- if ( pIDEShell )
+ if (BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell())
+ {
pIDEShell->SetAppBasicModified();
+ pIDEShell->UpdateObjectCatalog();
+ }
}
else
{
@@ -302,10 +303,6 @@ void MarkDocumentModified( const ScriptDocument& rDocument )
pBindings->Invalidate( SID_SAVEDOC );
pBindings->Update( SID_SAVEDOC );
}
-
- // updating the Object Catalog
- if (BasicIDEShell* pIdeShell = BasicIDEGlobals::GetShell())
- pIdeShell->UpdateObjectCatalog();
}
//----------------------------------------------------------------------------
@@ -499,6 +496,5 @@ SfxBindings* GetBindingsPtr()
} //namespace BasicIDE
-//----------------------------------------------------------------------------
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/bastype2.hxx b/basctl/source/basicide/bastype2.hxx
index efcaa4f23460..397be358215f 100644
--- a/basctl/source/basicide/bastype2.hxx
+++ b/basctl/source/basicide/bastype2.hxx
@@ -30,7 +30,19 @@
#include <sbxitem.hxx>
#include "basobj.hxx"
-enum BasicEntryType { OBJ_TYPE_UNKNOWN, OBJ_TYPE_DOCUMENT, OBJ_TYPE_LIBRARY, OBJ_TYPE_MODULE, OBJ_TYPE_DIALOG, OBJ_TYPE_METHOD, OBJ_TYPE_DOCUMENT_OBJECTS, OBJ_TYPE_USERFORMS, OBJ_TYPE_NORMAL_MODULES, OBJ_TYPE_CLASS_MODULES };
+enum BasicEntryType
+{
+ OBJ_TYPE_UNKNOWN,
+ OBJ_TYPE_DOCUMENT,
+ OBJ_TYPE_LIBRARY,
+ OBJ_TYPE_MODULE,
+ OBJ_TYPE_DIALOG,
+ OBJ_TYPE_METHOD,
+ OBJ_TYPE_DOCUMENT_OBJECTS,
+ OBJ_TYPE_USERFORMS,
+ OBJ_TYPE_NORMAL_MODULES,
+ OBJ_TYPE_CLASS_MODULES
+};
#define BROWSEMODE_MODULES 0x01
#define BROWSEMODE_SUBS 0x02
diff --git a/basctl/source/basicide/bastypes.cxx b/basctl/source/basicide/bastypes.cxx
index 3aa29e6db930..616f281d62c3 100644
--- a/basctl/source/basicide/bastypes.cxx
+++ b/basctl/source/basicide/bastypes.cxx
@@ -25,6 +25,7 @@
#include "baside3.hxx"
#include "basobj.hxx"
#include "iderdll.hxx"
+#include "iderdll2.hxx"
#include <basic/basmgr.hxx>
#include <com/sun/star/script/ModuleType.hpp>
@@ -40,6 +41,7 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star;
using ::std::vector;
+using basctl::Layout;
DBG_NAME( IDEBaseWindow )
@@ -106,18 +108,11 @@ IMPL_LINK_INLINE_START( IDEBaseWindow, ScrollHdl, ScrollBar *, pCurScrollBar )
IMPL_LINK_INLINE_END( IDEBaseWindow, ScrollHdl, ScrollBar *, pCurScrollBar )
+void IDEBaseWindow::ExecuteCommand (SfxRequest&)
+{ }
-void IDEBaseWindow::ExecuteCommand( SfxRequest& )
-{
- DBG_CHKTHIS( IDEBaseWindow, 0 );
-}
-
-
-
-void IDEBaseWindow::GetState( SfxItemSet& )
-{
- DBG_CHKTHIS( IDEBaseWindow, 0 );
-}
+void IDEBaseWindow::ExecuteGlobal (SfxRequest&)
+{ }
long IDEBaseWindow::Notify( NotifyEvent& rNEvt )
@@ -225,51 +220,143 @@ bool IDEBaseWindow::IsPasteAllowed ()
return false;
}
-Window* IDEBaseWindow::GetLayoutWindow()
-{
- return this;
-}
-
::svl::IUndoManager* IDEBaseWindow::GetUndoManager()
{
return NULL;
}
-void IDEBaseWindow::Deactivating()
+sal_uInt16 IDEBaseWindow::GetSearchOptions()
{
+ return 0;
}
-sal_uInt16 IDEBaseWindow::GetSearchOptions()
+sal_uInt16 IDEBaseWindow::StartSearchAndReplace (SvxSearchItem const&, bool bFromStart)
{
+ static_cast<void>(bFromStart);
return 0;
}
+void IDEBaseWindow::OnNewDocument ()
+{ }
-BasicDockingWindow::BasicDockingWindow( Window* pParent ) :
- DockingWindow( pParent, WB_BORDER | WB_3DLOOK | WB_DOCKABLE | WB_MOVEABLE |
- WB_SIZEABLE | WB_ROLLABLE |
- WB_DOCKABLE | WB_CLIPCHILDREN )
+void IDEBaseWindow::InsertLibInfo () const
{
+ if (BasicIDEData* pData = BasicIDEGlobals::GetExtraData())
+ {
+ pData->GetLibInfos().InsertInfo(
+ new LibInfoItem(m_aDocument, m_aLibName, m_aName, GetType())
+ );
+ }
}
-sal_Bool BasicDockingWindow::Docking( const Point& rPos, Rectangle& rRect )
+bool IDEBaseWindow::Is (
+ ScriptDocument const& rDocument,
+ rtl::OUString const& rLibName, rtl::OUString const& rName,
+ BasicIDEType eType, bool bFindSuspended
+)
+{
+ if (bFindSuspended || !IsSuspended())
+ {
+ // any non-suspended window is ok
+ if (rLibName.isEmpty() || rName.isEmpty() || eType == BASICIDE_TYPE_UNKNOWN)
+ return true;
+ // ok if the parameters match
+ if (m_aDocument == rDocument && m_aLibName == rLibName && m_aName == rName && GetType() == eType)
+ return true;
+ }
+ return false;
+}
+
+bool IDEBaseWindow::HasActiveEditor () const
+{
+ return false;
+}
+
+
+//
+// BasicDockingWindow
+// ==================
+//
+
+// style bits for BasicDockingWindow
+WinBits const BasicDockingWindow::StyleBits =
+ WB_BORDER | WB_3DLOOK | WB_CLIPCHILDREN |
+ WB_MOVEABLE | WB_SIZEABLE | WB_ROLLABLE | WB_DOCKABLE;
+
+BasicDockingWindow::BasicDockingWindow (Window* pParent) :
+ DockingWindow(pParent, StyleBits),
+ pLayout(0),
+ nShowCount(0)
+{ }
+
+BasicDockingWindow::BasicDockingWindow (Layout* pParent) :
+ DockingWindow(pParent, StyleBits),
+ pLayout(pParent),
+ nShowCount(0)
+{ }
+
+// Sets the position and the size of the docking window. This property is saved
+// when the window is floating. Called by Layout.
+void BasicDockingWindow::ResizeIfDocking (Point const& rPos, Size const& rSize)
+{
+ Rectangle const rRect(rPos, rSize);
+ if (rRect != aDockingRect)
+ {
+ // saving the position and the size
+ aDockingRect = rRect;
+ // resizing if actually docking
+ if (!IsFloatingMode())
+ SetPosSizePixel(rPos, rSize);
+ }
+}
+
+// Sets the parent Layout window.
+// The physical parent is set only when the window is docking.
+void BasicDockingWindow::SetLayoutWindow (Layout* pLayout_)
+{
+ pLayout = pLayout_;
+ if (!IsFloatingMode())
+ SetParent(pLayout);
+
+}
+
+// Increases the "show" reference count.
+// The window is shown when the reference count is positive.
+void BasicDockingWindow::Show (bool bShow) // = true
{
- ModulWindowLayout* pLayout = (ModulWindowLayout*)GetParent();
- Rectangle aTmpRec( rRect );
- bool const bDock = !IsDockingPrevented() && pLayout->IsToBeDocked( this, rPos, aTmpRec );
- if ( bDock )
+ if (bShow)
{
- rRect.SetSize( aTmpRec.GetSize() );
+ if (++nShowCount == 1)
+ DockingWindow::Show();
}
- else // adjust old size
+ else
{
- if ( !aFloatingPosAndSize.IsEmpty() )
- rRect.SetSize( aFloatingPosAndSize.GetSize() );
+ if (--nShowCount == 0)
+ DockingWindow::Hide();
}
- return !bDock; // bFloat
}
+// Decreases the "show" reference count.
+// The window is hidden when the reference count reaches zero.
+void BasicDockingWindow::Hide ()
+{
+ Show(false);
+}
+sal_Bool BasicDockingWindow::Docking( const Point& rPos, Rectangle& rRect )
+{
+ if (!IsDockingPrevented() && aDockingRect.IsInside(rPos))
+ {
+ rRect.SetSize(aDockingRect.GetSize());
+ return false; // dock
+ }
+ else // adjust old size
+ {
+ if (!aFloatingRect.IsEmpty())
+ rRect.SetSize(aFloatingRect.GetSize());
+ return true; // float
+ }
+}
void BasicDockingWindow::EndDocking( const Rectangle& rRect, sal_Bool bFloatMode )
{
@@ -278,51 +365,72 @@ void BasicDockingWindow::EndDocking( const Rectangle& rRect, sal_Bool bFloatMode
else
{
SetFloatingMode(false);
- ModulWindowLayout* pLayout = (ModulWindowLayout*)GetParent();
- pLayout->DockaWindow( this );
+ DockThis();
}
}
-
-
void BasicDockingWindow::ToggleFloatingMode()
{
- ModulWindowLayout* pLayout = (ModulWindowLayout*)GetParent();
- if ( IsFloatingMode() )
+ if (IsFloatingMode())
{
- if ( !aFloatingPosAndSize.IsEmpty() )
- SetPosSizePixel( GetParent()->ScreenToOutputPixel( aFloatingPosAndSize.TopLeft() ),
- aFloatingPosAndSize.GetSize() );
+ if (!aFloatingRect.IsEmpty())
+ SetPosSizePixel(
+ GetParent()->ScreenToOutputPixel(aFloatingRect.TopLeft()),
+ aFloatingRect.GetSize()
+ );
}
- pLayout->DockaWindow( this );
+ DockThis();
}
-
-
sal_Bool BasicDockingWindow::PrepareToggleFloatingMode()
{
- if ( IsFloatingMode() )
+ if (IsFloatingMode())
{
// memorize position and size on the desktop...
- aFloatingPosAndSize.SetPos( GetParent()->OutputToScreenPixel( GetPosPixel() ) );
- aFloatingPosAndSize.SetSize( GetSizePixel() );
+ aFloatingRect = Rectangle(
+ GetParent()->OutputToScreenPixel(GetPosPixel()),
+ GetSizePixel()
+ );
}
return true;
}
-
-
void BasicDockingWindow::StartDocking()
{
- if ( IsFloatingMode() )
+ if (IsFloatingMode())
{
- aFloatingPosAndSize.SetPos( GetParent()->OutputToScreenPixel( GetPosPixel() ) );
- aFloatingPosAndSize.SetSize( GetSizePixel() );
+ aFloatingRect = Rectangle(
+ GetParent()->OutputToScreenPixel(GetPosPixel()),
+ GetSizePixel()
+ );
}
}
+void BasicDockingWindow::DockThis ()
+{
+ // resizing when floating -> docking
+ if (!IsFloatingMode())
+ {
+ Point const aPos = aDockingRect.TopLeft();
+ Size const aSize = aDockingRect.GetSize();
+ if (aSize != GetSizePixel() || aPos != GetPosPixel())
+ SetPosSizePixel(aPos, aSize);
+ }
+
+ if (pLayout)
+ {
+ if (!IsFloatingMode() && GetParent() != pLayout)
+ SetParent(pLayout);
+ pLayout->DockaWindow(this);
+ }
+}
+//
+// ExtendedEdit
+// ============
+//
+
ExtendedEdit::ExtendedEdit( Window* pParent, IDEResId nRes ) :
Edit( pParent, nRes )
{
@@ -442,7 +550,7 @@ void BasicIDETabBar::Command( const CommandEvent& rCEvt )
{
IDEWindowTable& aIDEWindowTable = pIDEShell->GetIDEWindowTable();
IDEWindowTable::const_iterator it = aIDEWindowTable.find( GetCurPageId() );
- if (it != aIDEWindowTable.end() && dynamic_cast<ModulWindow*>(it->second))
+ if (it != aIDEWindowTable.end() && dynamic_cast<basctl::ModulWindow*>(it->second))
{
SbModule* pActiveModule = (SbModule*)pBasic->FindModule( it->second->GetName() );
if( pActiveModule && ( pActiveModule->GetModuleType() == script::ModuleType::DOCUMENT ) )
@@ -493,6 +601,23 @@ void BasicIDETabBar::EndRenaming()
}
+namespace
+{
+
+// helper class for sorting TabBar
+struct TabBarSortHelper
+{
+ sal_uInt16 nPageId;
+ String aPageText;
+
+ bool operator < (TabBarSortHelper const& rComp) const
+ {
+ return aPageText.CompareIgnoreCaseToAscii(rComp.aPageText) == COMPARE_LESS;
+ }
+};
+
+} // namespace
+
void BasicIDETabBar::Sort()
{
BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
@@ -513,11 +638,11 @@ void BasicIDETabBar::Sort()
aTabBarSortHelper.aPageText = GetPageText( nId );
IDEBaseWindow* pWin = aIDEWindowTable[ nId ];
- if (dynamic_cast<ModulWindow*>(pWin))
+ if (dynamic_cast<basctl::ModulWindow*>(pWin))
{
aModuleList.push_back( aTabBarSortHelper );
}
- else if (dynamic_cast<DialogWindow*>(pWin))
+ else if (dynamic_cast<basctl::DialogWindow*>(pWin))
{
aDialogList.push_back( aTabBarSortHelper );
}
@@ -628,19 +753,6 @@ LibInfoKey::~LibInfoKey()
{
}
-LibInfoKey::LibInfoKey( const LibInfoKey& rKey )
- :m_aDocument( rKey.m_aDocument )
- ,m_aLibName( rKey.m_aLibName )
-{
-}
-
-LibInfoKey& LibInfoKey::operator=( const LibInfoKey& rKey )
-{
- m_aDocument = rKey.m_aDocument;
- m_aLibName = rKey.m_aLibName;
- return *this;
-}
-
bool LibInfoKey::operator==( const LibInfoKey& rKey ) const
{
bool bRet = false;
diff --git a/basctl/source/basicide/layout.cxx b/basctl/source/basicide/layout.cxx
new file mode 100644
index 000000000000..7fd33d7f5e9b
--- /dev/null
+++ b/basctl/source/basicide/layout.cxx
@@ -0,0 +1,362 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+#include "layout.hxx"
+
+#include "bastypes.hxx"
+
+#include <boost/make_shared.hpp>
+
+namespace basctl
+{
+
+namespace
+{
+// the thickness of the splitting lines
+static int const nSplitThickness = 3;
+} // namespace
+
+// ctor for derived classes
+// pParent: the parent window (BasicIDEShell)
+Layout::Layout (Window* pParent) :
+ Window(pParent, WB_CLIPCHILDREN),
+ pChild(0),
+ bFirstSize(true),
+ aLeftSide(this, SplittedSide::Left),
+ aBottomSide(this, SplittedSide::Bottom)
+{
+ SetBackground(GetSettings().GetStyleSettings().GetWindowColor());
+
+ Font aFont = GetFont();
+ Size aSz = aFont.GetSize();
+ aSz.Height() *= 1.5;
+ aFont.SetSize(aSz);
+ aFont.SetWeight(WEIGHT_BOLD);
+ aFont.SetColor(GetSettings().GetStyleSettings().GetWindowTextColor());
+ SetFont(aFont);
+}
+
+// virtual dtor
+Layout::~Layout()
+{ }
+
+// called by Window when resized
+void Layout::Resize()
+{
+ if (IsVisible())
+ ArrangeWindows();
+}
+
+// ArrangeWindows() -- arranges the child windows
+void Layout::ArrangeWindows ()
+{
+ Size const aSize = GetOutputSizePixel();
+ int const nWidth = aSize.Width(), nHeight = aSize.Height();
+ if (!nWidth || !nHeight) // empty size
+ return;
+ if (bFirstSize)
+ {
+ this->OnFirstSize(nWidth, nHeight); // virtual
+ bFirstSize = false;
+ }
+
+ // sides
+ aBottomSide.ArrangeIn(Rectangle(Point(0, 0), aSize));
+ aLeftSide.ArrangeIn(Rectangle(Point(0, 0), Size(nWidth, nHeight - aBottomSide.GetSize())));
+ // child in the middle
+ pChild->SetPosSizePixel(
+ Point(aLeftSide.GetSize(), 0),
+ Size(nWidth - aLeftSide.GetSize(), nHeight - aBottomSide.GetSize())
+ );
+}
+
+void Layout::DockaWindow (DockingWindow*)
+{
+ ArrangeWindows();
+}
+
+void Layout::Activating (IDEBaseWindow& rIdeWindow)
+{
+ // first activation
+ pChild = &rIdeWindow;
+ ArrangeWindows();
+ Show();
+ pChild->Activating();
+}
+
+void Layout::Deactivating ()
+{
+ if (pChild)
+ pChild->Deactivating();
+ Hide();
+ pChild = 0;
+}
+
+void Layout::ExecuteGlobal (SfxRequest&)
+{ }
+
+void Layout::GetState (SfxItemSet&, unsigned /*nWhich*/)
+{ }
+
+void Layout::UpdateDebug (bool bBasicStopped)
+{
+ static_cast<void>(bBasicStopped);
+}
+
+// virtual
+void Layout::DataChanged (DataChangedEvent const& rDCEvt)
+{
+ Window::DataChanged(rDCEvt);
+ if (rDCEvt.GetType() == DATACHANGED_SETTINGS && (rDCEvt.GetFlags() & SETTINGS_STYLE))
+ {
+ bool bInvalidate = false;
+ Color aColor = GetSettings().GetStyleSettings().GetWindowColor();
+ if (aColor != rDCEvt.GetOldSettings()->GetStyleSettings().GetWindowColor())
+ {
+ SetBackground(Wallpaper(aColor));
+ bInvalidate = true;
+ }
+ aColor = GetSettings().GetStyleSettings().GetWindowTextColor();
+ if (aColor != rDCEvt.GetOldSettings()->GetStyleSettings().GetWindowTextColor())
+ {
+ Font aFont(GetFont());
+ aFont.SetColor(aColor);
+ SetFont(aFont);
+ bInvalidate = true;
+ }
+ if (bInvalidate)
+ Invalidate();
+ }
+}
+
+// virtual
+void Layout::ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 )
+{ }
+
+// This virtual function is called the first time when the Layout has nonzero size.
+// The overrider can initialize the docking windows.
+void Layout::OnFirstSize (int, int)
+{ }
+
+
+//
+// SplittedSide
+// ============
+//
+
+// ctor
+Layout::SplittedSide::SplittedSide (Layout* pParent, Side eSide) :
+ rLayout(*pParent),
+ bFirstArrange(true),
+ bVertical(eSide == Left || eSide == Right),
+ bLower(eSide == Left || eSide == Top),
+ nSize(0),
+ nLastPos(0),
+ aSplitter(pParent, bVertical ? WB_HSCROLL : WB_VSCROLL)
+{
+ InitSplitter(aSplitter);
+}
+
+
+// Add() -- adds a new window to the side (after construction)
+void Layout::SplittedSide::Add (BasicDockingWindow* pWin, Size const& rSize)
+{
+ int const nSize1 = (bVertical ? rSize.Width() : rSize.Height()) + nSplitThickness;
+ int const nSize2 = bVertical ? rSize.Height() : rSize.Width();
+ // nSize
+ if (nSize1 > nSize)
+ nSize = nSize1;
+ // window
+ vWindows.push_back(pWin);
+ // split line
+ if (vWindows.size() > 1)
+ {
+ vSplitters.push_back(boost::make_shared<Splitter>(
+ &rLayout, bVertical ? WB_VSCROLL : WB_HSCROLL
+ ));
+ Splitter& rSplitter = *vSplitters.back();
+ rSplitter.SetSplitPosPixel(nLastPos - nSplitThickness);
+ InitSplitter(rSplitter);
+ }
+ // nLastPos
+ nLastPos += nSize2 + nSplitThickness;
+}
+
+// creating a Point or a Size object
+// The coordinate order depends on bVertical (reversed if true).
+inline Size Layout::SplittedSide::MakeSize (int A, int B) const
+{
+ return bVertical ? Size(B, A) : Size(A, B);
+}
+inline Point Layout::SplittedSide::MakePoint (int A, int B) const
+{
+ return bVertical ? Point(B, A) : Point(A, B);
+}
+
+// IsEmpty() -- are there no windows docked in this strip?
+bool Layout::SplittedSide::IsEmpty () const
+{
+ for (unsigned i = 0; i != vWindows.size(); ++i)
+ if (vWindows[i]->IsVisible() && !vWindows[i]->IsFloatingMode())
+ return false;
+ return true;
+}
+
+// GetSize() -- returns the width or height of the strip (depending on the direction)
+int Layout::SplittedSide::GetSize () const
+{
+ return IsEmpty() ? 0 : nSize;
+}
+
+// Arrange() -- arranges the docking windows
+// rRect: the available space
+void Layout::SplittedSide::ArrangeIn (Rectangle const& rRect)
+{
+ // saving the rectangle
+ aRect = rRect;
+
+ // the length of the side
+ int const nLength = bVertical ? aRect.GetSize().Height() : aRect.GetSize().Width();
+ int const nOtherSize = bVertical ? aRect.GetSize().Width() : aRect.GetSize().Height();
+ // bVertical ? horizontal pozition : vertical pozition
+ int const nPos1 = (bVertical ? aRect.Left() : aRect.Top()) +
+ (bLower ? 0 : nOtherSize - (nSize - nSplitThickness));
+ // bVertical ? vertical position : horizontal position
+ int const nPos2 = bVertical ? aRect.Top() : aRect.Left();
+
+ // main line
+ {
+ // shown if any of the windows is docked
+ if (!IsEmpty())
+ {
+ aSplitter.Show();
+ // split position
+ aSplitter.SetSplitPosPixel((bLower ? nSize : nPos1) - nSplitThickness);
+ // the actual position and size
+ aSplitter.SetPosSizePixel(
+ MakePoint(nPos2, aSplitter.GetSplitPosPixel()),
+ MakeSize(nLength, nSplitThickness)
+ );
+ // dragging rectangle
+ aSplitter.SetDragRectPixel(aRect);
+ }
+ else
+ aSplitter.Hide();
+ }
+
+ // positioning separator lines and windows
+ bool bPrevDocked; // is the previous window docked?
+ int nStartPos = nPos2; // window position in the strip
+ for (unsigned i = 0; i != vWindows.size(); ++i)
+ {
+ // window
+ BasicDockingWindow& rWin = *vWindows[i];
+ bool const bDocked = rWin.IsVisible() && !rWin.IsFloatingMode();
+ // The window is docked between nStartPos and nEndPos along.
+ int const nEndPos = i == vWindows.size() - 1 ?
+ nPos2 + nLength : vSplitters[i]->GetSplitPosPixel();
+ rWin.ResizeIfDocking(
+ MakePoint(nStartPos, nPos1),
+ MakeSize(nEndPos - nStartPos, nSize - nSplitThickness)
+ );
+ // splitting line before the window
+ if (i > 0)
+ {
+ Splitter& rSplit = *vSplitters[i - 1];
+ // If neither of two adjacent windows are docked,
+ // the splitting line is hidden.
+ if (bDocked || bPrevDocked)
+ {
+ rSplit.Show();
+ // the actual pozition and size of the line
+ rSplit.SetPosSizePixel(
+ MakePoint(nStartPos - nSplitThickness, nPos1),
+ MakeSize(nSplitThickness, nSize - nSplitThickness)
+ );
+ // the dragging rectangle
+ rSplit.SetDragRectPixel(Rectangle(
+ MakePoint(bVertical ? aRect.Top() : aRect.Left(), nPos1),
+ MakeSize(nLength, nSize - nSplitThickness)
+ ));
+ }
+ else
+ rSplit.Hide();
+ }
+ // next
+ bPrevDocked = bDocked;
+ nStartPos = nEndPos + nSplitThickness;
+ }
+
+ // first arrange
+ bFirstArrange = false;
+}
+
+IMPL_LINK(Layout::SplittedSide, SplitHdl, Splitter*, pSplitter)
+{
+ // checking margins
+ CheckMarginsFor(pSplitter);
+ // nSize has to be changed?
+ if (pSplitter == &aSplitter)
+ {
+ if (bLower)
+ nSize = pSplitter->GetSplitPosPixel();
+ else
+ nSize = (bVertical ? aRect.Right() : aRect.Bottom()) + 1 - pSplitter->GetSplitPosPixel();
+ }
+ // arranging windows
+ rLayout.ArrangeWindows();
+
+ return 0;
+}
+
+void Layout::SplittedSide::CheckMarginsFor (Splitter* pSplitter)
+{
+ // The splitter line cannot be closer to the edges than nMargin pixels.
+ static int const nMargin = 16;
+ // Checking margins:
+ if (int const nLength = pSplitter->IsHorizontal() ?
+ aRect.GetWidth() : aRect.GetHeight()
+ ) {
+ // bounds
+ int const nLower = (pSplitter->IsHorizontal() ? aRect.Left() : aRect.Top()) + nMargin;
+ int const nUpper = nLower + nLength - 2*nMargin;
+ // split position
+ int const nPos = pSplitter->GetSplitPosPixel();
+ // checking bounds
+ if (nPos < nLower)
+ pSplitter->SetSplitPosPixel(nLower);
+ if (nPos > nUpper)
+ pSplitter->SetSplitPosPixel(nUpper);
+ }
+}
+
+void Layout::SplittedSide::InitSplitter (Splitter& rSplitter)
+{
+ // link
+ rSplitter.SetSplitHdl(LINK(this, SplittedSide, SplitHdl));
+ // color
+ Color aColor = rLayout.GetSettings().GetStyleSettings().GetShadowColor();
+ rSplitter.SetLineColor(aColor);
+ rSplitter.SetFillColor(aColor);
+}
+
+
+} // namespace basctl
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/layout.hxx b/basctl/source/basicide/layout.hxx
new file mode 100644
index 000000000000..eca1b985c547
--- /dev/null
+++ b/basctl/source/basicide/layout.hxx
@@ -0,0 +1,125 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+#ifndef BASCTL_LAYOUT_HXX
+#define BASCTL_LAYOUT_HXX
+
+#include <vcl/window.hxx>
+#include <vcl/split.hxx>
+#include <unotools/options.hxx>
+
+#include <vector>
+#include <boost/shared_ptr.hpp>
+
+class DockingWindow;
+class BasicDockingWindow;
+class IDEBaseWindow;
+class SfxRequest;
+class SfxItemSet;
+
+namespace basctl
+{
+
+//
+// Layout -- the common base of ModulLayout and DialogLayout.
+// Handles the splitting lines and the dockable windows.
+//
+class Layout: public Window, public utl::ConfigurationListener
+{
+public:
+ void DockaWindow (DockingWindow*);
+ void ArrangeWindows ();
+
+ virtual void Activating (IDEBaseWindow&);
+ virtual void Deactivating ();
+ virtual void ExecuteGlobal (SfxRequest&);
+ virtual void GetState (SfxItemSet&, unsigned nWhich);
+ virtual void UpdateDebug (bool bBasicStopped = false);
+
+protected:
+ Layout (Window* pParent);
+ virtual ~Layout ();
+
+ void AddToLeft (BasicDockingWindow* pWin, Size const& rSize) { aLeftSide.Add(pWin, rSize); }
+ void AddToBottom (BasicDockingWindow* pWin, Size const& rSize) { aBottomSide.Add(pWin, rSize); }
+
+protected:
+ // Window:
+ virtual void Resize ();
+ virtual void DataChanged (DataChangedEvent const& rDCEvt);
+ // ConfigurationListener:
+ virtual void ConfigurationChanged (utl::ConfigurationBroadcaster*, sal_uInt32);
+ // new:
+ virtual void OnFirstSize (int nWidth, int nHeight);
+
+private:
+ // the main child window (either ModulWindow or DialogWindow)
+ IDEBaseWindow* pChild;
+
+ // when this window has at first (nonempty) size
+ bool bFirstSize;
+
+ // horizontal or vertical splitted strip
+ class SplittedSide
+ {
+ public:
+ enum Side {Right, Top, Left, Bottom};
+ SplittedSide (Layout*, Side);
+ void Add (BasicDockingWindow*, Size const&);
+ bool IsEmpty () const;
+ int GetSize () const;
+ void ArrangeIn (Rectangle const&);
+
+ private:
+ // the layout window
+ Layout& rLayout;
+ // ArrangeIn() is called at first time?
+ bool bFirstArrange;
+ // horizontal or vertical strip?
+ bool bVertical;
+ // lower (top or left) or higher (bottom or right) strip?
+ bool bLower;
+ // rectangle to move in
+ Rectangle aRect;
+ // size (width or height)
+ int nSize;
+ // last position (between Add()s)
+ int nLastPos;
+ // the main splitting line
+ Splitter aSplitter;
+ // the dockable windows
+ std::vector<BasicDockingWindow*> vWindows;
+ // splitting lines between the docking windows (vWindows.size() - 1)
+ std::vector<boost::shared_ptr<Splitter> > vSplitters;
+
+ private:
+ Point MakePoint (int, int) const;
+ Size MakeSize (int, int) const;
+ private:
+ DECL_LINK(SplitHdl, Splitter*);
+ void CheckMarginsFor (Splitter*);
+ void InitSplitter (Splitter&);
+ } aLeftSide, aBottomSide;
+};
+
+} // namespace basctl
+
+#endif // BASCTL_LAYOUT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/linenumberwindow.cxx b/basctl/source/basicide/linenumberwindow.cxx
index b6d5223f3d8e..40093ed9e41a 100644
--- a/basctl/source/basicide/linenumberwindow.cxx
+++ b/basctl/source/basicide/linenumberwindow.cxx
@@ -32,9 +32,9 @@
#include <vcl/xtextedt.hxx>
#include <vcl/textview.hxx>
-LineNumberWindow::LineNumberWindow( Window* pParent, ModulWindow* pModulWin ) :
- Window( pParent, WB_BORDER ),
- m_pModulWindow(pModulWin),
+LineNumberWindow::LineNumberWindow (Window* pParent, basctl::ModulWindow* pModulWindow) :
+ Window(pParent, WB_BORDER),
+ m_pModulWindow(pModulWindow),
m_nCurYOffset(0)
{
SetBackground(Wallpaper(GetSettings().GetStyleSettings().GetFieldColor()));
diff --git a/basctl/source/basicide/linenumberwindow.hxx b/basctl/source/basicide/linenumberwindow.hxx
index 48c24144a38f..7c8f7171c908 100644
--- a/basctl/source/basicide/linenumberwindow.hxx
+++ b/basctl/source/basicide/linenumberwindow.hxx
@@ -30,12 +30,15 @@
#include <vcl/window.hxx>
-class ModulWindow;
+namespace basctl
+{
+ class ModulWindow;
+}
class LineNumberWindow : public Window
{
private:
- ModulWindow* m_pModulWindow;
+ basctl::ModulWindow* m_pModulWindow;
int m_nWidth;
long m_nCurYOffset;
int m_nBaseWidth;
@@ -45,7 +48,7 @@ protected:
virtual void Paint( const Rectangle& );
public:
- LineNumberWindow( Window* pParent, ModulWindow* pModulWin );
+ LineNumberWindow (Window* pParent, basctl::ModulWindow* pModulWin);
~LineNumberWindow();
void DoScroll( long nHorzScroll, long nVertScroll );
diff --git a/basctl/source/basicide/localizationmgr.cxx b/basctl/source/basicide/localizationmgr.cxx
index ea439314e3e6..8df518bd3f25 100644
--- a/basctl/source/basicide/localizationmgr.cxx
+++ b/basctl/source/basicide/localizationmgr.cxx
@@ -17,12 +17,14 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <basidesh.hxx>
-#include <baside3.hxx>
-#include <basobj.hxx>
-#include <iderdll.hxx>
+#include "localizationmgr.hxx"
+
+#include "basidesh.hxx"
+#include "baside3.hxx"
+#include "basobj.hxx"
+#include "iderdll.hxx"
#include "dlged.hxx"
-#include <localizationmgr.hxx>
+
#include <com/sun/star/resource/XStringResourceSupplier.hpp>
#include <com/sun/star/frame/XLayoutManager.hpp>
#include <sfx2/dispatch.hxx>
@@ -33,6 +35,9 @@ using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::resource;
+using basctl::DialogWindow;
+using basctl::ModulWindow;
+
static ::rtl::OUString aDot( RTL_CONSTASCII_USTRINGPARAM( "." ));
static ::rtl::OUString aEsc( RTL_CONSTASCII_USTRINGPARAM( "&" ));
static ::rtl::OUString aSemi( RTL_CONSTASCII_USTRINGPARAM( ";" ));
@@ -134,10 +139,9 @@ void LocalizationMgr::implEnableDisableResourceForAllLibraryDialogs( HandleResou
for( sal_Int32 i = 0 ; i < nDlgCount ; i++ )
{
String aDlgName = pDlgNames[ i ];
- DialogWindow* pWin = m_pIDEShell->FindDlgWin( m_aDocument, m_aLibName, aDlgName, false );
- if (DialogWindow* pDialogWin = dynamic_cast<DialogWindow*>(pWin))
+ if (DialogWindow* pWin = m_pIDEShell->FindDlgWin(m_aDocument, m_aLibName, aDlgName))
{
- Reference< container::XNameContainer > xDialog = pDialogWin->GetDialog();
+ Reference< container::XNameContainer > xDialog = pWin->GetDialog();
if( xDialog.is() )
{
// Handle dialog itself as control
diff --git a/basctl/source/basicide/objdlg.cxx b/basctl/source/basicide/objdlg.cxx
index 00fc82cef6e1..37800397d278 100644
--- a/basctl/source/basicide/objdlg.cxx
+++ b/basctl/source/basicide/objdlg.cxx
@@ -24,7 +24,7 @@
#include "iderdll.hxx"
#include "iderdll2.hxx"
#include "objdlg.hxx"
-#include <helpid.hrc>
+#include "helpid.hrc"
#include <sfx2/app.hxx>
#include <sfx2/dispatch.hxx>
@@ -34,6 +34,9 @@
#include <vcl/msgbox.hxx>
#include <vcl/taskpanelist.hxx>
+namespace basctl
+{
+
ObjectCatalog::ObjectCatalog (Window* pParent) :
BasicDockingWindow(pParent),
aTitle(this),
@@ -137,4 +140,7 @@ void ObjectCatalog::SetCurrentEntry (IDEBaseWindow* pCurWin)
aTree.SetCurrentEntry(aDescriptor);
}
+
+} // namespace basctl
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/objdlg.hxx b/basctl/source/basicide/objdlg.hxx
index 91a4b7742ffb..d4477212448a 100644
--- a/basctl/source/basicide/objdlg.hxx
+++ b/basctl/source/basicide/objdlg.hxx
@@ -20,13 +20,17 @@
#ifndef BASCTL_OBJDLG_HXX
#define BASCTL_OBJDLG_HXX
+#include "bastype2.hxx"
+#include "bastypes.hxx"
+
#include <svheader.hxx>
#include <vcl/floatwin.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/fixed.hxx>
#include <vcl/image.hxx>
-#include <bastype2.hxx>
+namespace basctl
+{
//
// ObjectCatalog -- a docking window that contains the currently loaded macros
@@ -53,6 +57,8 @@ private:
void ArrangeWindows ();
};
+} // namespace basctl
+
#endif // BASCTL_OBJDLG_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/inc/accessibledialogcontrolshape.hxx b/basctl/source/inc/accessibledialogcontrolshape.hxx
index 0d5e512454a1..eae49f2a9146 100644
--- a/basctl/source/inc/accessibledialogcontrolshape.hxx
+++ b/basctl/source/inc/accessibledialogcontrolshape.hxx
@@ -26,9 +26,12 @@
#include <cppuhelper/implbase3.hxx>
class Window;
-class DialogWindow;
class DlgEdObj;
class VCLExternalSolarLock;
+namespace basctl
+{
+ class DialogWindow;
+}
namespace utl {
class AccessibleStateSetHelper;
@@ -52,7 +55,7 @@ class AccessibleDialogControlShape : public AccessibleExtendedComponentHelper
private:
VCLExternalSolarLock* m_pExternalLock;
- DialogWindow* m_pDialogWindow;
+ basctl::DialogWindow* m_pDialogWindow;
DlgEdObj* m_pDlgEdObj;
bool m_bFocused;
bool m_bSelected;
@@ -83,7 +86,7 @@ protected:
virtual void SAL_CALL disposing();
public:
- AccessibleDialogControlShape( DialogWindow* pDialogWindow, DlgEdObj* pDlgEdObj );
+ AccessibleDialogControlShape (basctl::DialogWindow*, DlgEdObj*);
virtual ~AccessibleDialogControlShape();
// XInterface
diff --git a/basctl/source/inc/accessibledialogwindow.hxx b/basctl/source/inc/accessibledialogwindow.hxx
index e3fd97365641..b763b29b9013 100644
--- a/basctl/source/inc/accessibledialogwindow.hxx
+++ b/basctl/source/inc/accessibledialogwindow.hxx
@@ -27,7 +27,6 @@
#include <svl/lstner.hxx>
#include <tools/link.hxx>
-class DialogWindow;
class DlgEditor;
class DlgEdModel;
class DlgEdObj;
@@ -35,6 +34,10 @@ class VCLExternalSolarLock;
class VclSimpleEvent;
class VclWindowEvent;
+namespace basctl
+{
+ class DialogWindow;
+}
namespace utl {
class AccessibleStateSetHelper;
}
@@ -77,7 +80,7 @@ private:
AccessibleChildren m_aAccessibleChildren;
VCLExternalSolarLock* m_pExternalLock;
- DialogWindow* m_pDialogWindow;
+ basctl::DialogWindow* m_pDialogWindow;
DlgEditor* m_pDlgEditor;
DlgEdModel* m_pDlgEdModel;
@@ -106,7 +109,7 @@ protected:
virtual void SAL_CALL disposing();
public:
- AccessibleDialogWindow( DialogWindow* pDialogWindow );
+ AccessibleDialogWindow (basctl::DialogWindow*);
~AccessibleDialogWindow();
// SfxListener
diff --git a/basctl/source/inc/baside3.hxx b/basctl/source/inc/baside3.hxx
index f2560e38da10..f54e9adeb078 100644
--- a/basctl/source/inc/baside3.hxx
+++ b/basctl/source/inc/baside3.hxx
@@ -17,9 +17,10 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#ifndef _BASIDE3_HXX
-#define _BASIDE3_HXX
+#ifndef BASCTL_BASIDE3_HXX
+#define BASCTL_BASIDE3_HXX
+#include "../basicide/layout.hxx"
#include <bastypes.hxx>
#include <svl/undo.hxx>
#include <vcl/dialog.hxx>
@@ -38,9 +39,16 @@ class DlgEdPage;
class DlgEdView;
class SfxUndoManager;
+namespace basctl
+{
+
+class DialogWindowLayout;
+class ObjectCatalog;
+
class DialogWindow: public IDEBaseWindow
{
private:
+ DialogWindowLayout& rLayout;
DlgEditor* pEditor;
SfxUndoManager* pUndoMgr;
Link aOldNotifyUndoActionHdl;
@@ -65,8 +73,7 @@ protected:
public:
TYPEINFO();
- DialogWindow( Window* pParent, const ScriptDocument& rDocument, ::rtl::OUString aLibName, ::rtl::OUString aName,
- const com::sun::star::uno::Reference< com::sun::star::container::XNameContainer >& xDialogModel );
+ DialogWindow (DialogWindowLayout* pParent, ScriptDocument const& rDocument, rtl::OUString aLibName, rtl::OUString aName, com::sun::star::uno::Reference<com::sun::star::container::XNameContainer> const& xDialogModel);
DialogWindow( DialogWindow* pCurView ); // never implemented
~DialogWindow();
@@ -97,12 +104,45 @@ public:
// return number of pages to be printed
virtual sal_Int32 countPages( Printer* pPrinter );
// print page
- virtual void printPage( sal_Int32 nPage, Printer* pPrinter );
- virtual void Deactivating();
+ virtual void printPage (sal_Int32 nPage, Printer*);
+
+ virtual void Activating ();
+ virtual void Deactivating ();
virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
+
+ virtual char const* GetHid () const;
+ virtual BasicIDEType GetType () const;
+};
+
+//
+// DialogWindowLayout
+//
+class DialogWindowLayout : public Layout
+{
+public:
+ DialogWindowLayout (Window* pParent, ObjectCatalog&);
+public:
+ // Layout:
+ virtual void Activating (IDEBaseWindow&);
+ virtual void Deactivating ();
+ virtual void GetState (SfxItemSet&, unsigned nWhich);
+
+protected:
+ // Layout:
+ virtual void OnFirstSize (int nWidth, int nHeight);
+
+private:
+ // child window
+ DialogWindow* pChild;
+ // dockable windows
+ ObjectCatalog& rObjectCatalog;
+ // TODO property browser
};
-#endif // _BASIDE3_HXX
+
+} // namespace basctl
+
+#endif // BASCTL_BASIDE3_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/inc/basidesh.hxx b/basctl/source/inc/basidesh.hxx
index 70cf66990b43..69862ce27775 100644
--- a/basctl/source/inc/basidesh.hxx
+++ b/basctl/source/inc/basidesh.hxx
@@ -16,17 +16,19 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#ifndef _BASIDESH_HXX
-#define _BASIDESH_HXX
+#ifndef BASCTL_BASIDESH_HXX
+#define BASCTL_BASIDESH_HXX
#include "doceventnotifier.hxx"
#include "sbxitem.hxx"
+#include "../basicide/objdlg.hxx"
#include <com/sun/star/container/XContainerListener.hpp>
#include <sfx2/viewsh.hxx>
#include <svx/ifaceids.hxx>
#include <vcl/scrbar.hxx>
#include <map>
+#include <boost/scoped_ptr.hpp>
class SfxViewFactory;
@@ -36,9 +38,14 @@ const sal_uLong BASICIDE_UI_FEATURE_SHOW_BROWSER = 0x00000001;
//----------------------------------------------------------------------------
-class ModulWindow;
-class ModulWindowLayout;
-class DialogWindow;
+namespace basctl
+{
+ class Layout;
+ class ModulWindow;
+ class ModulWindowLayout;
+ class DialogWindow;
+ class DialogWindowLayout;
+}
class SdrView;
class BasicIDETabBar;
class TabBar;
@@ -59,15 +66,21 @@ namespace BasicIDE
bool RemoveDialog( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rDlgName );
}
-class BasicIDEShell :public SfxViewShell
- ,public ::basctl::DocumentEventListener
+class BasicIDEShell :
+ public SfxViewShell,
+ public basctl::DocumentEventListener
{
-friend class LocalizationMgr;
+ typedef basctl::DialogWindow DialogWindow;
+ typedef basctl::ModulWindow ModulWindow;
+
+ friend class JavaDebuggingListenerImpl;
+ friend class LocalizationMgr;
friend bool implImportDialog( Window* pWin, const ::rtl::OUString& rCurPath, const ScriptDocument& rDocument, const ::rtl::OUString& aLibName );
- friend bool BasicIDE::RemoveDialog( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rDlgName );
+
+ typedef IDEWindowTable::const_iterator WindowTableIt;
IDEWindowTable aIDEWindowTable;
- sal_uInt16 nCurKey;
+ sal_uInt16 nCurKey;
IDEBaseWindow* pCurWin;
ScriptDocument m_aCurDocument;
::rtl::OUString m_aCurLibName;
@@ -79,11 +92,18 @@ friend class LocalizationMgr;
BasicIDETabBar* pTabBar;
bool bTabBarSplitted;
bool bCreatingWindow;
- ModulWindowLayout* pModulLayout;
+ // layout windows
+ boost::scoped_ptr<basctl::ModulWindowLayout> pModulLayout;
+ boost::scoped_ptr<basctl::DialogWindowLayout> pDialogLayout;
+ // the active layout window
+ basctl::Layout* pLayout;
+ // common object catalog window
+ basctl::ObjectCatalog aObjectCatalog;
+
bool m_bAppBasicModified;
::basctl::DocumentEventNotifier
m_aNotifier;
-friend class ContainerListenerImpl;
+ friend class ContainerListenerImpl;
::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener > m_xLibListener;
#if _SOLAR__PRIVATE
@@ -115,13 +135,11 @@ protected:
void SetCurWindow( IDEBaseWindow* pNewWin, bool bUpdateTabBar = false, bool bRememberAsCurrent = true );
void ManageToolbars();
- void RemoveWindow( IDEBaseWindow* pWindow, bool bDestroy, bool bAllowChangeCurWindow = true );
void ArrangeTabBar();
ModulWindow* CreateBasWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rModName );
DialogWindow* CreateDlgWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rDlgName );
- ModulWindow* FindBasWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rModName, bool bCreateIfNotExist, bool bFindSuspended = false );
ModulWindow* ShowActiveModuleWindow( StarBASIC* pBasic );
virtual void SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
@@ -133,10 +151,6 @@ protected:
virtual void Move();
virtual void ShowCursor( bool bOn = true );
- void CreateModulWindowLayout();
- void DestroyModulWindowLayout();
- void UpdateModulWindowLayout( bool bBasicStopped );
-
// DocumentEventListener
virtual void onDocumentCreated( const ScriptDocument& _rDocument );
virtual void onDocumentOpened( const ScriptDocument& _rDocument );
@@ -178,9 +192,9 @@ public:
// virtual sal_uInt16 Print( SfxProgress &rProgress, sal_Bool bIsAPI, PrintDialog *pPrintDialog = 0 );
virtual SfxPrinter* GetPrinter( sal_Bool bCreate );
- virtual sal_uInt16 SetPrinter( SfxPrinter *pNewPrinter, sal_uInt16 nDiffFlags = SFX_PRINTER_ALL, bool bIsAPI=false );
+ virtual sal_uInt16 SetPrinter( SfxPrinter *pNewPrinter, sal_uInt16 nDiffFlags = SFX_PRINTER_ALL, bool bIsAPI=false );
virtual String GetSelectionText( sal_Bool bCompleteWords );
- virtual sal_Bool HasSelection( sal_Bool bText ) const;
+ virtual sal_Bool HasSelection( sal_Bool bText ) const;
void GetState( SfxItemSet& );
void ExecuteGlobal( SfxRequest& rReq );
@@ -193,10 +207,9 @@ public:
long CallBasicErrorHdl( StarBASIC* pBasic );
long CallBasicBreakHdl( StarBASIC* pBasic );
- ModulWindowLayout* GetLayoutWindow() const { return pModulLayout; }
-
IDEBaseWindow* FindWindow( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName = ::rtl::OUString(), const ::rtl::OUString& rName = ::rtl::OUString(), BasicIDEType nType = BASICIDE_TYPE_UNKNOWN, bool bFindSuspended = false );
- DialogWindow* FindDlgWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rDlgName, bool bCreateIfNotExist, bool bFindSuspended = false );
+ DialogWindow* FindDlgWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rName, bool bCreateIfNotExist = false, bool bFindSuspended = false );
+ ModulWindow* FindBasWin( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rModName, bool bCreateIfNotExist = false, bool bFindSuspended = false );
IDEBaseWindow* FindApplicationWindow();
bool NextPage( bool bPrev = false );
@@ -211,12 +224,12 @@ public:
virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >
GetCurrentDocument() const;
- bool SourceLinesDisplayed();
- void UpdateObjectCatalog ();
+ void UpdateObjectCatalog () { aObjectCatalog.UpdateEntries(); }
+ void RemoveWindow (IDEBaseWindow* pWindow, bool bDestroy, bool bAllowChangeCurWindow = true);
};
-#endif // _BASIDESH_HXX
+#endif // BASCTL_BASIDESH_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/inc/bastypes.hxx b/basctl/source/inc/bastypes.hxx
index 90541a5faa78..ca5b49a9066f 100644
--- a/basctl/source/inc/bastypes.hxx
+++ b/basctl/source/inc/bastypes.hxx
@@ -16,11 +16,12 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#ifndef _BASTYPES_HXX
-#define _BASTYPES_HXX
+#ifndef BASCTL_BASTYPES_HXX
+#define BASCTL_BASTYPES_HXX
#include "scriptdocument.hxx"
+#include <sbxitem.hxx>
#include <iderid.hxx>
#include <svtools/tabbar.hxx>
#include <vcl/toolbox.hxx>
@@ -30,6 +31,14 @@
class SbModule;
class SfxItemSet;
class SfxRequest;
+class SvxSearchItem;
+
+namespace basctl
+{
+ class Layout;
+ class ModulWindow;
+ class DialogWindow;
+}
#define LINE_SEP_CR 0x0D
#define LINE_SEP 0x0A
@@ -58,27 +67,37 @@ struct BasicStatus
class BasicDockingWindow : public DockingWindow
{
- Rectangle aFloatingPosAndSize;
+public:
+ BasicDockingWindow (Window* pParent);
+ BasicDockingWindow (basctl::Layout* pParent);
+public:
+ void ResizeIfDocking (Point const&, Size const&);
+ void SetLayoutWindow (basctl::Layout*);
+public:
+ void Show (bool = true);
+ void Hide ();
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();
+ 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 );
-};
+private:
+ // the position and the size of the floating window
+ Rectangle aFloatingRect;
+ // the position and the size of the docking window
+ Rectangle aDockingRect;
+ // the parent layout window (only when docking)
+ basctl::Layout* pLayout;
+ // > 0: shown, <= 0: hidden, ++ by Show() and -- by Hide()
+ int nShowCount;
-// helper class for sorting TabBar
-class TabBarSortHelper
-{
-public:
- sal_uInt16 nPageId;
- String aPageText;
+ static WinBits const StyleBits;
- bool operator<(const TabBarSortHelper& rComp) const { return (aPageText.CompareIgnoreCaseToAscii( rComp.aPageText ) == COMPARE_LESS); }
+private:
+ void DockThis ();
};
class BasicIDETabBar : public TabBar
@@ -113,6 +132,9 @@ namespace svl
class IUndoManager;
}
+//
+// IDEBaseWindow -- the base of both ModulWindow and DialogWindow.
+//
class IDEBaseWindow : public Window
{
private:
@@ -126,6 +148,9 @@ private:
::rtl::OUString m_aLibName;
::rtl::OUString m_aName;
+ friend class basctl::ModulWindow;
+ friend class basctl::DialogWindow;
+
protected:
virtual void DoScroll( ScrollBar* pCurScrollBar );
@@ -136,14 +161,16 @@ public:
void Init();
virtual void DoInit();
- virtual void Deactivating();
+ virtual void Activating () = 0;
+ virtual void Deactivating () = 0;
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 void ExecuteCommand (SfxRequest&);
+ virtual void ExecuteGlobal (SfxRequest&);
+ virtual void GetState (SfxItemSet&) = 0;
virtual long Notify( NotifyEvent& rNEvt );
virtual void StoreData();
@@ -172,18 +199,16 @@ public:
void AddStatus(int n) { nStatus |= n; }
void ClearStatus(int n) { nStatus &= ~n; }
- virtual Window* GetLayoutWindow();
-
virtual ::svl::IUndoManager*
GetUndoManager();
virtual sal_uInt16 GetSearchOptions();
+ virtual sal_uInt16 StartSearchAndReplace (SvxSearchItem const&, bool bFromStart = false);
virtual void BasicStarted();
virtual void BasicStopped();
- bool IsSuspended() const
- { return ( nStatus & BASWIN_SUSPENDED ) ? true : false; }
+ bool IsSuspended() const { return nStatus & BASWIN_SUSPENDED; }
const ScriptDocument&
GetDocument() const { return m_aDocument; }
@@ -193,21 +218,25 @@ public:
void SetLibName( const ::rtl::OUString& aLibName ) { m_aLibName = aLibName; }
const ::rtl::OUString& GetName() const { return m_aName; }
void SetName( const ::rtl::OUString& aName ) { m_aName = aName; }
+
+ virtual void OnNewDocument ();
+ virtual char const* GetHid () const = 0;
+ virtual BasicIDEType GetType () const = 0;
+ void InsertLibInfo () const;
+ bool Is (ScriptDocument const&, rtl::OUString const&, rtl::OUString const&, BasicIDEType, bool bFindSuspended);
+ virtual bool HasActiveEditor () const;
};
class LibInfoKey
{
private:
- ScriptDocument m_aDocument;
+ ScriptDocument m_aDocument;
::rtl::OUString m_aLibName;
public:
LibInfoKey( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName );
~LibInfoKey();
- LibInfoKey( const LibInfoKey& rKey );
- LibInfoKey& operator=( const LibInfoKey& rKey );
-
bool operator==( const LibInfoKey& rKey ) const;
const ScriptDocument&
@@ -218,10 +247,10 @@ public:
class LibInfoItem
{
private:
- ScriptDocument m_aDocument;
+ ScriptDocument m_aDocument;
::rtl::OUString m_aLibName;
::rtl::OUString m_aCurrentName;
- sal_uInt16 m_nCurrentType;
+ sal_uInt16 m_nCurrentType;
public:
LibInfoItem( const ScriptDocument& rDocument, const ::rtl::OUString& rLibName, const ::rtl::OUString& rCurrentName, sal_uInt16 nCurrentType );
@@ -230,11 +259,10 @@ public:
LibInfoItem( const LibInfoItem& rItem );
LibInfoItem& operator=( const LibInfoItem& rItem );
- const ScriptDocument&
- GetDocument() const { return m_aDocument; }
- const ::rtl::OUString& GetLibName() const { return m_aLibName; }
+ const ScriptDocument& GetDocument() const { return m_aDocument; }
+ const ::rtl::OUString& GetLibName() const { return m_aLibName; }
const ::rtl::OUString& GetCurrentName() const { return m_aCurrentName; }
- sal_uInt16 GetCurrentType() const { return m_nCurrentType; }
+ sal_uInt16 GetCurrentType() const { return m_nCurrentType; }
};
class LibInfos
@@ -284,6 +312,7 @@ public:
static void getObjectName( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rLib, const ::rtl::OUString& rModName, ::rtl::OUString& rObjName );
static sal_Int32 getModuleType( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rLib, const ::rtl::OUString& rModName );
};
-#endif // _BASTYPES_HXX
+
+#endif // BASCTL_BASTYPES_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */