Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


I've resolved the conflicts, than (in a second patch) removed the commented
code lines, as András suggested.

Uray M. János

2012/8/6 Tor Lillqvist <tml@iki.fi>

Hmm, the patch doesn't apply for me?

patching file basctl/inc/basidesh.hrc
patching file basctl/source/basicide/baside2.cxx
Hunk #1 succeeded at 49 (offset -1 lines).
Hunk #2 FAILED at 1413.
Hunk #3 FAILED at 1484.
2 out of 3 hunks FAILED -- saving rejects to file
basctl/source/basicide/baside2.cxx.rej
patching file basctl/source/basicide/baside2.hxx
Hunk #2 FAILED at 427.
1 out of 4 hunks FAILED -- saving rejects to file
basctl/source/basicide/baside2.hxx.rej
patching file basctl/source/basicide/baside2b.cxx
Hunk #1 succeeded at 47 (offset -1 lines).
Hunk #2 succeeded at 1518 (offset -6 lines).

etc.

--tml

From 49c688c1c6c20bfbec02e4d24c6d2e1c49a05691 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?"Uray=20M.=20J=C3=A1nos"?= <uray.janos@gmail.com>
Date: Mon, 6 Aug 2012 14:28:28 +0200
Subject: [PATCH 1/2] Basic IDE Object Catalog improvements

Change-Id: I4c3bbf721428e93cdfa8f062f37c5911faba0fa4
---
 basctl/inc/basidesh.hrc             |    3 -
 basctl/source/basicide/baside2.cxx  |  274 +++++++++++++++++++----------------
 basctl/source/basicide/baside2.hxx  |   29 ++--
 basctl/source/basicide/baside2b.cxx |    5 +-
 basctl/source/basicide/basides1.cxx |   16 ++-
 basctl/source/basicide/basides2.cxx |    7 -
 basctl/source/basicide/basidesh.cxx |   46 +------
 basctl/source/basicide/basobj3.cxx  |   10 +-
 basctl/source/basicide/iderdll.cxx  |    2 +-
 basctl/source/basicide/iderdll2.hxx |   13 --
 basctl/source/basicide/objdlg.cxx   |  254 +++++++++-----------------------
 basctl/source/basicide/objdlg.hrc   |   15 +-
 basctl/source/basicide/objdlg.hxx   |   57 +++-----
 basctl/source/basicide/objdlg.src   |   85 +++++-------
 basctl/source/inc/basidesh.hxx      |    6 -
 15 files changed, 316 insertions(+), 506 deletions(-)

diff --git a/basctl/inc/basidesh.hrc b/basctl/inc/basidesh.hrc
index 0e47056..b8fa629 100644
--- a/basctl/inc/basidesh.hrc
+++ b/basctl/inc/basidesh.hrc
@@ -21,9 +21,6 @@
 
 #include <svx/svxids.hrc>
 
-// Width of Object Catalog pane in pixels
-#define OBJCAT_PANE_WIDTH 240
-
 // Resource-ID's...
 #ifndef _SVX_NOIDERESIDS
 
diff --git a/basctl/source/basicide/baside2.cxx b/basctl/source/basicide/baside2.cxx
index 1eab598..3c37860 100644
--- a/basctl/source/basicide/baside2.cxx
+++ b/basctl/source/basicide/baside2.cxx
@@ -49,9 +49,6 @@
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 
-#define SPLIT_MARGIN    5
-#define SPLIT_HEIGHT    2
-
 #define LMARGPRN        1700
 #define RMARGPRN         900
 #define TMARGPRN        2000
@@ -1402,23 +1399,25 @@ sal_Bool ModulWindow::IsPasteAllowed()
 }
 
 ModulWindowLayout::ModulWindowLayout( Window* pParent ) :
-    Window( pParent, WB_CLIPCHILDREN ),
-    aVSplitter( this, WinBits( WB_VSCROLL ) ),
-    aHSplitter( this, WinBits( WB_HSCROLL ) ),
-    aWatchWindow( this ),
-    aStackWindow( this ),
-    aObjectCatalog( this ),
-    bVSplitted(false),
-    bHSplitted(false),
+    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))
 {
     SetBackground(GetSettings().GetStyleSettings().GetWindowColor());
 
-    aVSplitter.SetSplitHdl( LINK( this, ModulWindowLayout, SplitHdl ) );
-    aHSplitter.SetSplitHdl( LINK( this, ModulWindowLayout, SplitHdl ) );
-    aVSplitter.Show();
-    aHSplitter.Show();
+    aLeftSplit.Show();
+    aBottomSplit.Show();
+    aVertSplit.Show();
+    aLeftSplit.SetSplitHdl( LINK(this, ModulWindowLayout, SplitHdl) );
+    aBottomSplit.SetSplitHdl( LINK(this, ModulWindowLayout, SplitHdl) );
+    aVertSplit.SetSplitHdl( LINK(this, ModulWindowLayout, SplitHdl) );
 
     aWatchWindow.Show();
     aStackWindow.Show();
@@ -1473,158 +1472,179 @@ void ModulWindowLayout::Paint( const Rectangle& )
 
 void ModulWindowLayout::ArrangeWindows()
 {
-    Size aSz = GetOutputSizePixel();
+    static long const nSplitThickness = 2;
+    static float const
+        fDefaultLeftSplit = 0.2,
+        fDefaultBottomSplit = 0.75,
+        fDefaultVertSplit = 0.67;
 
-    // test whether the splitter is in a valid area...
-    long nMinPos = SPLIT_MARGIN;
-    long nMaxPos = aSz.Height() - SPLIT_MARGIN;
+    Size const aSize = GetOutputSizePixel();
+    long const nWidth = aSize.Width(), nHeight = aSize.Height();
+    if (!nWidth || !nHeight) // empty size
+        return;
 
-    long nVSplitPos = aVSplitter.GetSplitPosPixel();
-    long nHSplitPos = aHSplitter.GetSplitPosPixel();
-    if ( !bVSplitted )
+    // When ArrangeWindows() is called first,
+    // the initial positions of the splitter lines are set.
+    if (bFirstArrange)
     {
-        nVSplitPos = aSz.Height() * 3 / 4;
-        aVSplitter.SetSplitPosPixel( nVSplitPos );
+        aLeftSplit.SetSplitPosPixel(aSize.Width()  * fDefaultLeftSplit);
+        aBottomSplit.SetSplitPosPixel(aSize.Height() * fDefaultBottomSplit);
+        aVertSplit.SetSplitPosPixel(aSize.Width()  * fDefaultVertSplit);
+        bFirstArrange = false;
     }
-    if ( !bHSplitted )
+
+    // 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)
     {
-        nHSplitPos = aSz.Width() * 2 / 3;
-        aHSplitter.SetSplitPosPixel( nHSplitPos );
+        aLeftSplit.SetDragRectPixel(Rectangle(Point(0, 0), Size(nWidth, nBottom)));
+        aLeftSplit.SetPosPixel(Point(nLeftSplitPos, 0));
+        aLeftSplit.SetSizePixel(Size(nSplitThickness, nBottom));
+        aLeftSplit.Show();
     }
-    if ( ( nVSplitPos < nMinPos ) || ( nVSplitPos > nMaxPos ) )
-        nVSplitPos = ( nVSplitPos < nMinPos ) ? 0 : ( aSz.Height() - SPLIT_HEIGHT );
-
-    if ( m_pModulWindow )
+    else
+        aLeftSplit.Hide();
+    // bottom splitting line
+    if (bWatchWin || bStackWin)
     {
-        DBG_CHKOBJ( m_pModulWindow, ModulWindow, 0 );
-        bool const bObjCat = aObjectCatalog.IsVisible();
+        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(bObjCat ? OBJCAT_PANE_WIDTH : 0, 0),
-            Size(bObjCat ? aSz.Width() - OBJCAT_PANE_WIDTH : aSz.Width(), nVSplitPos + 1)
+            Point(nLeft, 0),
+            Size(nWidth - nLeft, nBottom)
         );
     }
-
-    aVSplitter.SetDragRectPixel( Rectangle( Point( 0, 0 ), Size( aSz.Width(), aSz.Height() ) ) );
-    aVSplitter.SetPosPixel( Point( 0, nVSplitPos ) );
-    aVSplitter.SetSizePixel( Size( aSz.Width(), SPLIT_HEIGHT ) );
-
-    aHSplitter.SetDragRectPixel( Rectangle( Point( 0, nVSplitPos+SPLIT_HEIGHT ), Size( 
aSz.Width(), aSz.Height() - nVSplitPos - SPLIT_HEIGHT ) ) );
-    aHSplitter.SetPosPixel( Point( nHSplitPos, nVSplitPos ) );
-    aHSplitter.SetSizePixel( Size( SPLIT_HEIGHT, aSz.Height() - nVSplitPos ) );
-
-    Size aWWSz;
-    Point aWWPos( 0, nVSplitPos+SPLIT_HEIGHT );
-    aWWSz.Width() = nHSplitPos;
-    aWWSz.Height() = aSz.Height() - aWWPos.Y();
-    if ( !aWatchWindow.IsFloatingMode() )
-        aWatchWindow.SetPosSizePixel( aWWPos, aWWSz );
-
-    Size aSWSz;
-    Point aSWPos( nHSplitPos+SPLIT_HEIGHT, nVSplitPos+SPLIT_HEIGHT );
-    aSWSz.Width() = aSz.Width() - aSWPos.X();
-    aSWSz.Height() = aSz.Height() - aSWPos.Y();
-    if ( !aStackWindow.IsFloatingMode() )
-        aStackWindow.SetPosSizePixel( aSWPos, aSWSz );
-
-    if ( !aObjectCatalog.IsFloatingMode() )
+    // object catalog (left)
+    if (bObjCat)
     {
-        Size aOCSz( OBJCAT_PANE_WIDTH, aSz.Height() - aSWSz.Height() - 3 );
-        Point aOCPos( 0, 0 );
-        aObjectCatalog.SetPosSizePixel( aOCPos, aOCSz );
+        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()));
     }
-
-    if ( aStackWindow.IsFloatingMode() && aWatchWindow.IsFloatingMode() )
-        aHSplitter.Hide();
-    else
-        aHSplitter.Show();
-
-    long nHDoubleClickSplitPosX = aSz.Width()-aHSplitter.GetSizePixel().Width();
-    if ( aHSplitter.GetSplitPosPixel() < nHDoubleClickSplitPosX )
-        aHSplitter.SetLastSplitPosPixel( nHDoubleClickSplitPosX );
-
-
-    long nHDoubleClickSplitPosY = aSz.Height()-aVSplitter.GetSizePixel().Height();
-    if ( aVSplitter.GetSplitPosPixel() < nHDoubleClickSplitPosY )
-        aVSplitter.SetLastSplitPosPixel( nHDoubleClickSplitPosY );
 }
 
 IMPL_LINK( ModulWindowLayout, SplitHdl, Splitter *, pSplitter )
 {
-    if ( pSplitter == &aVSplitter )
-        bVSplitted = true;
-    else
-        bHSplitted = true;
-
+    // 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;
 }
 
-sal_Bool ModulWindowLayout::IsToBeDocked( DockingWindow* pDockingWindow, const Point& rPos, 
Rectangle& rRect )
-{
-    // test whether dock or child:
-    // TRUE:    Floating
-    // FALSE:   Child
-    Point aPosInMe = ScreenToOutputPixel( rPos );
-    Size aSz = GetOutputSizePixel();
-    if ( ( aPosInMe.X() > 0 ) && ( aPosInMe.X() < aSz.Width() ) &&
-         ( aPosInMe.Y() > 0 ) && ( aPosInMe.Y() < aSz.Height() ) )
+//
+// IsToBeDocked() -- test whether dock or child:
+// true:  Floating
+// false: Child
+//
+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 nVSplitPos = aVSplitter.GetSplitPosPixel();
-        long nHSplitPos = aHSplitter.GetSplitPosPixel();
-        if ( pDockingWindow == &aWatchWindow )
+        long const nLeftSplit = aLeftSplit.GetSplitPosPixel();
+        long const nBottomSplit = aBottomSplit.GetSplitPosPixel();
+        long const nVertSplit = aVertSplit.GetSplitPosPixel();
+        if (pDockingWindow == &aObjectCatalog)
         {
-            if ( ( aPosInMe.Y() > nVSplitPos ) && ( aPosInMe.X() < nHSplitPos ) )
+            if (aPos.Y() < nBottomSplit && aPos.X() < nLeftSplit)
             {
-                rRect.SetSize( Size( nHSplitPos, aSz.Height() - nVSplitPos ) );
-                rRect.SetPos( OutputToScreenPixel( Point( 0, nVSplitPos ) ) );
-                return sal_True;
+                rRect = Rectangle(
+                    OutputToScreenPixel(Point(0, 0)),
+                    Size(nLeftSplit, nBottomSplit)
+                );
+                return true;
             }
         }
-        if ( pDockingWindow == &aStackWindow )
+        else if (pDockingWindow == &aWatchWindow)
         {
-            if ( ( aPosInMe.Y() > nVSplitPos ) && ( aPosInMe.X() > nHSplitPos ) )
+            if (aPos.Y() > nBottomSplit && aPos.X() < nVertSplit)
             {
-                rRect.SetSize( Size( aSz.Width() - nHSplitPos, aSz.Height() - nVSplitPos ) );
-                rRect.SetPos( OutputToScreenPixel( Point( nHSplitPos, nVSplitPos ) ) );
-                return sal_True;
+                rRect = Rectangle(
+                    OutputToScreenPixel(Point(0, nBottomSplit)),
+                    Size(nVertSplit, nHeight - nBottomSplit)
+                );
+                return true;
             }
         }
-        if ( pDockingWindow == &aObjectCatalog )
+        else if (pDockingWindow == &aStackWindow)
         {
-            if ( ( aPosInMe.Y() > nVSplitPos ) && ( aPosInMe.X() > nHSplitPos ) )
+            if (aPos.Y() > nBottomSplit && aPos.X() > nVertSplit)
             {
-                rRect.SetSize( Size( aSz.Width() - nHSplitPos, aSz.Height() - nVSplitPos ) );
-                rRect.SetPos( OutputToScreenPixel( Point( nHSplitPos, nVSplitPos ) ) );
-                return sal_True;
+                rRect = Rectangle(
+                    OutputToScreenPixel(Point(nVertSplit, nBottomSplit)),
+                    Size(nWidth - nVertSplit, nHeight - nBottomSplit)
+                );
+                return true;
             }
         }
     }
-    return sal_False;
+    return false;
 }
 
-void ModulWindowLayout::DockaWindow( DockingWindow* pDockingWindow )
+void ModulWindowLayout::DockaWindow (DockingWindow*)
 {
-    if ( pDockingWindow == &aWatchWindow )
-    {
-        ArrangeWindows();
-    }
-    else if ( pDockingWindow == &aStackWindow )
-    {
-        ArrangeWindows();
-    }
-    else if ( pDockingWindow == &aObjectCatalog )
-    {
-        ArrangeWindows();
-    }
-#if OSL_DEBUG_LEVEL > 0
-    else
-        OSL_FAIL( "Wer will sich denn hier andocken ?" );
-#endif
+    ArrangeWindows();
 }
 
-void ModulWindowLayout::SetModulWindow( ModulWindow* pModWin )
+void ModulWindowLayout::SetModulWindow (ModulWindow* pModulWindow)
 {
-    m_pModulWindow = pModWin;
+    m_pModulWindow = pModulWindow;
     ArrangeWindows();
 }
 
diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx
index 24d2f46..3446fe5 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -17,8 +17,8 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#ifndef _BASIDE2_HXX
-#define _BASIDE2_HXX
+#ifndef BASCTL_BASIDE2_HXX
+#define BASCTL_BASIDE2_HXX
 
 #include <svheader.hxx>
 
@@ -427,18 +427,18 @@ public:
 class ModulWindowLayout: public Window, public utl::ConfigurationListener
 {
 private:
+    // is ArrangeWindows() called first in this object?
+    bool bFirstArrange;
 
-    Splitter        aVSplitter;
-    Splitter        aHSplitter;
+    // splitter lines
+    Splitter aLeftSplit, aBottomSplit, aVertSplit;
 
-    WatchWindow     aWatchWindow;
-    StackWindow     aStackWindow;
-    ObjectCatalog   aObjectCatalog;
+    // dockable windows
+    ObjectCatalog aObjectCatalog;
+    WatchWindow aWatchWindow;
+    StackWindow aStackWindow;
 
-    bool            bVSplitted;
-    bool            bHSplitted;
-
-    ModulWindow * m_pModulWindow;
+    ModulWindow* m_pModulWindow;
 
     Color m_aSyntaxColors[TT_KEYWORDS + 1];
     svtools::ColorConfig m_aColorConfig;
@@ -464,14 +464,14 @@ public:
                     ~ModulWindowLayout();
 
     void            DockaWindow( DockingWindow* pDockingWin );
-    sal_Bool            IsToBeDocked( DockingWindow* pDockingWin, const Point& rPos, Rectangle& 
rRect );
+    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; }
+    ObjectCatalog&  GetObjectCatalog()  { return aObjectCatalog; }
 
     Image getImage(sal_uInt16 nId) const;
 
@@ -479,8 +479,9 @@ public:
     { return m_aSyntaxColors[eType]; }
 
     void ToggleObjectCatalog ();
+    bool HasObjectCatalog () const { return aObjectCatalog.IsVisible(); }
 };
 
-#endif  // _BASIDE2_HXX
+#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 c3223c6..adb3fc8 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -47,8 +47,11 @@
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 
+namespace
+{
 long nVirtToolBoxHeight;    // inited in WatchWindow, used in Stackwindow
 long nHeaderBarHeight;
+} // namespace
 
 #define SCROLL_LINE     12
 #define SCROLL_PAGE     60
@@ -1515,7 +1518,7 @@ StackWindow::StackWindow( Window* pParent ) :
     aTreeListBox( this, WB_BORDER | WB_3DLOOK | WB_HSCROLL | WB_TABSTOP ),
     aStackStr( IDEResId( RID_STR_STACK ) )
 {
-       aTreeListBox.SetHelpId(HID_BASICIDE_STACKWINDOW_LIST);
+    aTreeListBox.SetHelpId(HID_BASICIDE_STACKWINDOW_LIST);
     aTreeListBox.SetAccessibleName(String( IDEResId(RID_STR_STACKNAME)));
     aTreeListBox.SetPosPixel( Point( DWBORDER, nVirtToolBoxHeight ) );
     aTreeListBox.SetHighlightRange();
diff --git a/basctl/source/basicide/basides1.cxx b/basctl/source/basicide/basides1.cxx
index d62d81e..e29f68d 100644
--- a/basctl/source/basicide/basides1.cxx
+++ b/basctl/source/basicide/basides1.cxx
@@ -442,6 +442,9 @@ void BasicIDEShell::ExecuteGlobal( SfxRequest& rReq )
 
         case SID_BASICIDE_OBJCAT:
             pModulLayout->ToggleObjectCatalog();
+            // refresh the button state
+            if (SfxBindings* pBindings = BasicIDE::GetBindingsPtr())
+                pBindings->Invalidate(nSlot);
             break;
 
         case SID_BASICIDE_NAMECHANGEDONTAB:
@@ -883,9 +886,14 @@ void BasicIDEShell::GetState(SfxItemSet &rSet)
                     rSet.Put(SfxVisibilityItem(nWh, sal_False));
                 }
                 else
-                    rSet.Put(SfxVisibilityItem(nWh, sal_True));
+                {
+                    if (nWh == SID_BASICIDE_OBJCAT)
+                        rSet.Put(SfxBoolItem(nWh, pModulLayout && 
pModulLayout->HasObjectCatalog()));
+                    else
+                        rSet.Put(SfxVisibilityItem(nWh, sal_True));
+                }
+                break;
             }
-            break;
             case SID_BASICIDE_SHOWSBX:
             case SID_BASICIDE_CREATEMACRO:
             case SID_BASICIDE_EDITMACRO:
@@ -1424,8 +1432,6 @@ void BasicIDEShell::Activate( sal_Bool bMDI )
     {
         if( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) )
             ((DialogWindow*)pCurWin)->UpdateBrowser();
-
-        ShowObjectDialog( true, false );
     }
 }
 
@@ -1456,8 +1462,6 @@ void BasicIDEShell::Deactivate( sal_Bool bMDI )
                 break;
             }
         }
-
-        ShowObjectDialog( false, false );
     }
 }
 
diff --git a/basctl/source/basicide/basides2.cxx b/basctl/source/basicide/basides2.cxx
index 5ff0a81..95c5525 100644
--- a/basctl/source/basicide/basides2.cxx
+++ b/basctl/source/basicide/basides2.cxx
@@ -45,13 +45,6 @@ using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 namespace css = ::com::sun::star;
 
-IMPL_LINK_NOARG_INLINE_START(BasicIDEShell, ObjectDialogCancelHdl)
-{
-    ShowObjectDialog( false, true );
-    return 0;
-}
-IMPL_LINK_NOARG_INLINE_END(BasicIDEShell, ObjectDialogCancelHdl)
-
 Reference< view::XRenderable > BasicIDEShell::GetRenderable()
 {
     return Reference< view::XRenderable >( new basicide::BasicRenderable( pCurWin ) );
diff --git a/basctl/source/basicide/basidesh.cxx b/basctl/source/basicide/basidesh.cxx
index 7a99290..7368073 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -190,7 +190,6 @@ void BasicIDEShell::Init()
 
     pCurWin = 0;
     m_aCurDocument = ScriptDocument::getApplicationScriptDocument();
-    pObjectCatalog = 0;
     bCreatingWindow = false;
 
     pTabBar = new BasicIDETabBar( &GetViewFrame()->GetWindow() );
@@ -238,7 +237,6 @@ BasicIDEShell::~BasicIDEShell()
 
     aIDEWindowTable.clear();
     delete pTabBar;
-    delete pObjectCatalog;
     DestroyModulWindowLayout();
 
         ContainerListenerImpl* pListener = static_cast< ContainerListenerImpl* >( 
m_xLibListener.get() );
@@ -531,46 +529,6 @@ void BasicIDEShell::ArrangeTabBar()
 
 
 
-void BasicIDEShell::ShowObjectDialog( bool bShow, bool bCreateOrDestroy )
-{
-    if ( bShow )
-    {
-        if ( !pObjectCatalog && bCreateOrDestroy )
-        {
-            pObjectCatalog = new ObjectCatalog( &GetViewFrame()->GetWindow() );
-            // position is memorized in BasicIDEData and adjusted by the Dlg
-            if ( pObjectCatalog )
-            {
-                pObjectCatalog->SetCancelHdl( LINK( this, BasicIDEShell, ObjectDialogCancelHdl ) );
-                pObjectCatalog->SetCurrentEntry(pCurWin);
-            }
-        }
-
-        // the very last changes...
-        if ( pCurWin )
-            pCurWin->StoreData();
-
-        if ( pObjectCatalog )
-        {
-            pObjectCatalog->UpdateEntries();
-            pObjectCatalog->Show();
-        }
-    }
-    else if ( pObjectCatalog )
-    {
-        pObjectCatalog->Hide();
-        if ( bCreateOrDestroy )
-        {
-            // pObjectCatalog to NULL before the delete because of OS/2-focus-problem
-            ObjectCatalog* pTemp = pObjectCatalog;
-            pObjectCatalog = 0;
-            delete pTemp;
-        }
-    }
-}
-
-
-
 void BasicIDEShell::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId&,
                                         const SfxHint& rHint, const TypeId& )
 {
@@ -583,8 +541,8 @@ void BasicIDEShell::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId&,
                 case SFX_HINT_DYING:
                 {
                     EndListening( rBC, sal_True /* log off all */ );
-                    if ( pObjectCatalog )
-                        pObjectCatalog->UpdateEntries();
+                    //if ( pObjectCatalog )
+                        //pObjectCatalog->UpdateEntries();
                 }
                 break;
             }
diff --git a/basctl/source/basicide/basobj3.cxx b/basctl/source/basicide/basobj3.cxx
index bc95693..3e56708 100644
--- a/basctl/source/basicide/basobj3.cxx
+++ b/basctl/source/basicide/basobj3.cxx
@@ -306,11 +306,11 @@ void MarkDocumentModified( const ScriptDocument& rDocument )
         pBindings->Update( SID_SAVEDOC );
     }
 
-    // Objectcatalog updaten...
-    BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
-    ObjectCatalog* pObjCatalog = pIDEShell ? pIDEShell->GetObjectCatalog() : 0;
-    if ( pObjCatalog )
-        pObjCatalog->UpdateEntries();
+    //// Objectcatalog updaten...
+    //BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
+    //ObjectCatalog* pObjCatalog = pIDEShell ? pIDEShell->GetObjectCatalog() : 0;
+    //if ( pObjCatalog )
+        //pObjCatalog->UpdateEntries();
 }
 
 //----------------------------------------------------------------------------
diff --git a/basctl/source/basicide/iderdll.cxx b/basctl/source/basicide/iderdll.cxx
index bea3841..357a3dd 100644
--- a/basctl/source/basicide/iderdll.cxx
+++ b/basctl/source/basicide/iderdll.cxx
@@ -151,7 +151,7 @@ BasicIDEData* BasicIDEDLL::GetExtraData()
     return m_pExtraData;
 }
 
-BasicIDEData::BasicIDEData() : aObjCatPos( INVPOSITION, INVPOSITION )
+BasicIDEData::BasicIDEData()
 {
     nBasicDialogCount = 0;
     bChoosingMacro = false;
diff --git a/basctl/source/basicide/iderdll2.hxx b/basctl/source/basicide/iderdll2.hxx
index d2bcaa7..1ed344c 100644
--- a/basctl/source/basicide/iderdll2.hxx
+++ b/basctl/source/basicide/iderdll2.hxx
@@ -40,9 +40,6 @@ private:
 
     BasicEntryDescriptor    m_aLastEntryDesc;
 
-    Point           aObjCatPos;
-    Size            aObjCatSize;
-
     String          aAddLibPath;
     String          aAddLibFilter;
 
@@ -73,16 +70,6 @@ public:
     SvxSearchItem&          GetSearchItem() const;
     void                    SetSearchItem( const SvxSearchItem& rItem );
 
-    void                    SetObjectCatalogPos( const Point& rPnt )
-                                { aObjCatPos = rPnt; }
-    const Point&            GetObjectCatalogPos() const
-                                { return aObjCatPos; }
-
-    void                    SetObjectCatalogSize( const Size& rSize )
-                                { aObjCatSize = rSize; }
-    const Size&             GetObjectCatalogSize() const
-                                { return aObjCatSize; }
-
     const String&           GetAddLibPath() const   { return aAddLibPath; }
     void                    SetAddLibPath( const String& rPath ) { aAddLibPath = rPath; }
 
diff --git a/basctl/source/basicide/objdlg.cxx b/basctl/source/basicide/objdlg.cxx
index 36cac99..00fc82c 100644
--- a/basctl/source/basicide/objdlg.cxx
+++ b/basctl/source/basicide/objdlg.cxx
@@ -24,6 +24,7 @@
 #include "iderdll.hxx"
 #include "iderdll2.hxx"
 #include "objdlg.hxx"
+#include <helpid.hrc>
 
 #include <sfx2/app.hxx>
 #include <sfx2/dispatch.hxx>
@@ -33,224 +34,107 @@
 #include <vcl/msgbox.hxx>
 #include <vcl/taskpanelist.hxx>
 
-ObjectCatalog::ObjectCatalog( Window * pParent )
-    :BasicDockingWindow( pParent, IDEResId( RID_BASICIDE_OBJCAT ) )
-    ,aMacroTreeList( this, IDEResId( RID_TLB_MACROS ) )
-    ,aToolBox(this, IDEResId(RID_TB_TOOLBOX))
-    ,aMacroDescr( this, IDEResId( RID_FT_MACRODESCR ) )
+ObjectCatalog::ObjectCatalog (Window* pParent) :
+    BasicDockingWindow(pParent),
+    aTitle(this),
+    aTree(this, IDEResId(RID_TLB_MACROS))
 {
-    FreeResource();
+    SetHelpId("basctl:FloatingWindow:RID_BASICIDE_OBJCAT");
+    SetText(String(IDEResId(RID_BASICIDE_OBJCAT)));
 
-    aToolBox.SetOutStyle( TOOLBOX_STYLE_FLAT );
-    aToolBox.SetSizePixel( aToolBox.CalcWindowSizePixel() );
-    aToolBox.SetSelectHdl( LINK( this, ObjectCatalog, ToolBoxHdl ) );
+    // title
+    aTitle.SetText(String(IDEResId(RID_BASICIDE_OBJCAT)));
+    aTitle.SetStyle(WB_CENTER);
 
-    aMacroTreeList.SetStyle( WB_BORDER | WB_TABSTOP |
-                             WB_HASLINES | WB_HASLINESATROOT |
-                             WB_HASBUTTONS | WB_HASBUTTONSATROOT |
-                             WB_HSCROLL );
+    // tree list
+    aTree.Hide();
+    aTree.SetStyle(
+        WB_BORDER | WB_TABSTOP | WB_HSCROLL |
+        WB_HASLINES | WB_HASLINESATROOT |
+        WB_HASBUTTONS | WB_HASBUTTONSATROOT
+    );
+    aTree.SetAccessibleName(String(IDEResId(RID_STR_TLB_MACROS)));
+    aTree.SetHelpId(HID_BASICIDE_OBJECTCAT);
+    aTree.ScanAllEntries();
+    aTree.GrabFocus();
 
-    aMacroTreeList.SetSelectHdl( LINK( this, ObjectCatalog, TreeListHighlightHdl ) );
-    aMacroTreeList.SetAccessibleName(String(IDEResId(RID_STR_TLB_MACROS)));
-    aMacroTreeList.ScanAllEntries();
-    aMacroTreeList.GrabFocus();
-
-    CheckButtons();
-
-    Point aPos = BasicIDEGlobals::GetExtraData()->GetObjectCatalogPos();
-    Size aSize = BasicIDEGlobals::GetExtraData()->GetObjectCatalogSize();
-    if ( aPos.X() == INVPOSITION )
     {
         // centered after AppWin:
-        Window* pWin = GetParent();
-        aPos = pWin->OutputToScreenPixel( Point( 0, 0 ) );
-        Size aAppWinSz = pWin->GetSizePixel();
-        Size aDlgWinSz = GetSizePixel();
-        aPos.X() += aAppWinSz.Width() / 2;
-        aPos.X() -= aDlgWinSz.Width() / 2;
-        aPos.Y() += aAppWinSz.Height() / 2;
-        aPos.Y() -= aDlgWinSz.Height() / 2;
+        Window const& rParent = *GetParent();
+        Point aPos = rParent.OutputToScreenPixel(Point(0, 0));
+        Size const aParentSize = rParent.GetSizePixel();
+        Size const aSize = GetSizePixel();
+        aPos.X() += (aParentSize.Width() - aSize.Width()) / 2;
+        aPos.Y() += (aParentSize.Height() - aSize.Height()) / 2;
+        SetPosPixel(aPos);
     }
-    SetPosPixel( aPos );
-    if ( aSize.Width() )
-        SetOutputSizePixel( aSize );
-
-    Resize();   // so that the resize-handler arranges the controls
 
     // make object catalog keyboard accessible
-    pParent->GetSystemWindow()->GetTaskPaneList()->AddWindow( this );
-}
-
-ObjectCatalog::~ObjectCatalog()
-{
-    GetParent()->GetSystemWindow()->GetTaskPaneList()->RemoveWindow( this );
+    GetParent()->GetSystemWindow()->GetTaskPaneList()->AddWindow(this);
 }
 
-void ObjectCatalog::Paint( const Rectangle& )
+ObjectCatalog::~ObjectCatalog ()
 {
-    String sOC = GetText();
-    long nPos = GetSizePixel().Width()/2-GetTextWidth(sOC)/2;
-    DrawText( Point( nPos, 10 ), String( sOC ) );
+    GetParent()->GetSystemWindow()->GetTaskPaneList()->RemoveWindow(this);
 }
 
-void ObjectCatalog::Move()
+// Resize() -- called by Window
+void ObjectCatalog::Resize ()
 {
-    BasicIDEGlobals::GetExtraData()->SetObjectCatalogPos( GetPosPixel() );
+    // arranging the controls
+    ArrangeWindows();
 }
 
-sal_Bool ObjectCatalog::Close()
+// ToggleFloatingMode() -- called by DockingWindow when IsFloatingMode() changes
+void ObjectCatalog::ToggleFloatingMode ()
 {
-    aCancelHdl.Call( this );
-    return sal_True;
+    // base class version
+    BasicDockingWindow::ToggleFloatingMode();
+    // rearranging the controls (title)
+    ArrangeWindows();
 }
 
-void ObjectCatalog::Resize()
+// ArrangeWindows() -- arranges the controls to the size of the ObjectCatalog
+void ObjectCatalog::ArrangeWindows ()
 {
-    Size aOutSz = GetOutputSizePixel();
-    BasicIDEGlobals::GetExtraData()->SetObjectCatalogSize( aOutSz );
+    Size const aSize = GetOutputSizePixel();
+    bool const bFloating = IsFloatingMode();
 
-    Point aTreePos = aMacroTreeList.GetPosPixel();
-    Size aDescrSz = aMacroDescr.GetSizePixel();
-
-    Size aTreeSz;
-    long nCtrlWidth = aOutSz.Width() - 2*aTreePos.X();
-    aTreeSz.Width() = nCtrlWidth;
-    aTreeSz.Height() = aOutSz.Height() - aTreePos.Y() -
-                        2*aTreePos.X() - aDescrSz.Height();
-
-    if ( aTreeSz.Height() > 0 )
+    // title
+    // (showing only if no title bar)
+    if (bFloating)
+        aTitle.Hide();
+    else
     {
-        aMacroTreeList.SetSizePixel( aTreeSz );
-
-        Point aDescrPos( aTreePos.X(), aTreePos.Y()+aTreeSz.Height()+aTreePos.X() );
-
-        aMacroDescr.SetPosSizePixel( aDescrPos, Size( nCtrlWidth, aDescrSz.Height() ) );
-
-        String aDesc = aMacroDescr.GetText();
-        aMacroDescr.SetText(String());
-        aMacroDescr.SetText(aDesc);
+        Size aTitleSize = LogicToPixel(Size(3, 10), MAP_APPFONT);
+        aTitleSize.Width() = aSize.Width() - 2*aTitleSize.Width();
+        aTitle.SetPosPixel(LogicToPixel(Point(3, 3), MAP_APPFONT));
+        aTitle.SetSizePixel(aTitleSize);
+        aTitle.Show();
     }
 
-    // the buttons above always stay unmodified
-}
-
-IMPL_LINK( ObjectCatalog, ToolBoxHdl, ToolBox*, pToolBox )
-{
-    sal_uInt16 nCurItem = pToolBox->GetCurItemId();
-    switch ( nCurItem )
+    // tree
+    Point const aTreePos = LogicToPixel(Point(3, bFloating ? 3 : 16), MAP_APPFONT);
+    long const nMargin = aTreePos.X();
+    Size const aTreeSize(
+        aSize.Width() - 2*nMargin,
+        aSize.Height() - aTreePos.Y() - nMargin
+    );
+    if (aTreeSize.Height() > 0)
     {
-        case TBITEM_SHOW:
-        {
-            SfxAllItemSet aArgs( SFX_APP()->GetPool() );
-            SfxRequest aRequest( SID_BASICIDE_APPEAR, SFX_CALLMODE_SYNCHRON, aArgs );
-            SFX_APP()->ExecuteSlot( aRequest );
-
-            SvLBoxEntry* pCurEntry = aMacroTreeList.GetCurEntry();
-            DBG_ASSERT( pCurEntry, "Entry?!" );
-            BasicEntryDescriptor aDesc( aMacroTreeList.GetEntryDescriptor( pCurEntry ) );
-            BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
-            SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
-            SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL;
-            if ( aDesc.GetType() == OBJ_TYPE_MODULE ||
-                 aDesc.GetType() == OBJ_TYPE_DIALOG ||
-                 aDesc.GetType() == OBJ_TYPE_METHOD )
-            {
-                if( pDispatcher )
-                {
-                    SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDesc.GetDocument(), 
aDesc.GetLibName(), aDesc.GetName(),
-                                      aDesc.GetMethodName(), aMacroTreeList.ConvertType( 
aDesc.GetType() ) );
-                    pDispatcher->Execute( SID_BASICIDE_SHOWSBX,
-                                          SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L );
-                }
-            }
-            else
-            {
-                ErrorBox( this, WB_OK, String( IDEResId( RID_STR_OBJNOTFOUND ) ) ).Execute();
-                aMacroTreeList.GetModel()->Remove( pCurEntry );
-                CheckButtons();
-            }
-        }
-        break;
+        aTree.SetPosSizePixel(aTreePos, aTreeSize);
+        aTree.Show();
     }
-
-    return 0;
-}
-
-
-
-void ObjectCatalog::CheckButtons()
-{
-    SvLBoxEntry* pCurEntry = aMacroTreeList.GetCurEntry();
-    BasicEntryType eType = pCurEntry ? ((BasicEntry*)pCurEntry->GetUserData())->GetType() : 
OBJ_TYPE_UNKNOWN;
-    if ( eType == OBJ_TYPE_DIALOG || eType == OBJ_TYPE_MODULE || eType == OBJ_TYPE_METHOD )
-        aToolBox.EnableItem( TBITEM_SHOW, sal_True );
     else
-        aToolBox.EnableItem( TBITEM_SHOW, sal_False );
-}
-
-
-
-IMPL_LINK_INLINE_START( ObjectCatalog, TreeListHighlightHdl, SvTreeListBox *, pBox )
-{
-    if ( pBox->IsSelected( pBox->GetHdlEntry() ) )
-        UpdateFields();
-    return 0;
-}
-IMPL_LINK_INLINE_END( ObjectCatalog, TreeListHighlightHdl, SvTreeListBox *, pBox )
-
-
-void ObjectCatalog::UpdateFields()
-{
-    SvLBoxEntry* pCurEntry = aMacroTreeList.GetCurEntry();
-    if ( pCurEntry )
-    {
-        CheckButtons();
-        aMacroDescr.SetText( String() );
-        SbxVariable* pVar = aMacroTreeList.FindVariable( pCurEntry );
-        if ( pVar )
-        {
-            SbxInfoRef xInfo = pVar->GetInfo();
-            if ( xInfo.Is() )
-                aMacroDescr.SetText( xInfo->GetComment() );
-        }
-    }
-}
-
-
-void ObjectCatalog::UpdateEntries()
-{
-    aMacroTreeList.UpdateEntries();
+        aTree.Hide();
 }
 
 void ObjectCatalog::SetCurrentEntry (IDEBaseWindow* pCurWin)
 {
-    BasicEntryDescriptor aDesc;
+    BasicEntryDescriptor aDescriptor;
     if (pCurWin)
-        aDesc = pCurWin->CreateEntryDescriptor();
-    aMacroTreeList.SetCurrentEntry(aDesc);
-}
-
-ObjectCatalogToolBox_Impl::ObjectCatalogToolBox_Impl(
-    Window * pParent, ResId const & rResId)
-    : ToolBox(pParent, rResId)
-    , m_aImagesNormal(GetImageList())
-{
-    setImages();
-}
-
-// virtual
-void ObjectCatalogToolBox_Impl::DataChanged(DataChangedEvent const & rDCEvt)
-{
-    ToolBox::DataChanged(rDCEvt);
-    if ((rDCEvt.GetType() == DATACHANGED_SETTINGS
-         || rDCEvt.GetType() == DATACHANGED_DISPLAY)
-        && (rDCEvt.GetFlags() & SETTINGS_STYLE) != 0)
-        setImages();
-}
-
-void ObjectCatalogToolBox_Impl::setImages()
-{
-    SetImageList(m_aImagesNormal);
+        aDescriptor = pCurWin->CreateEntryDescriptor();
+    aTree.SetCurrentEntry(aDescriptor);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/objdlg.hrc b/basctl/source/basicide/objdlg.hrc
index 0e794b2..7a4e7b9 100644
--- a/basctl/source/basicide/objdlg.hrc
+++ b/basctl/source/basicide/objdlg.hrc
@@ -15,18 +15,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 _OBJDLG_HRC
-#define _OBJDLG_HRC
+#ifndef BASCTL_OBJDLG_HRC
+#define BASCTL_OBJDLG_HRC
 
 #include <svl/solar.hrc>
 
 #define RID_BASICIDE_OBJCAT     ( RID_BASICIDE_START + 70 )
-#define RID_FT_MACRODESCR   8
-#define RID_TLB_MACROS     10
-#define RID_TB_TOOLBOX     11
+#define RID_TLB_MACROS          ( RID_BASICIDE_START + 72 )
+//#define RID_FT_TITLE            ( RID_BASICIDE_START + 73 )
+//#define RID_FT_MACRODESCR       ( RID_BASICIDE_START + 74 )
+//#define RID_TB_TOOLBOX     11
 
-#define TBITEM_SHOW     1
+//#define TBITEM_SHOW     1
 
 #define RID_STR_TLB_MACROS      ( RID_BASICIDE_START + 71 )
 
-#endif // _OBJDLG_HXX
+#endif // BASCTL_OBJDLG_HRR
diff --git a/basctl/source/basicide/objdlg.hxx b/basctl/source/basicide/objdlg.hxx
index f82ae0e..91a4b77 100644
--- a/basctl/source/basicide/objdlg.hxx
+++ b/basctl/source/basicide/objdlg.hxx
@@ -17,57 +17,42 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#ifndef _OBJDLG_HXX
-#define _OBJDLG_HXX
+#ifndef BASCTL_OBJDLG_HXX
+#define BASCTL_OBJDLG_HXX
 
 #include <svheader.hxx>
 #include <vcl/floatwin.hxx>
 #include <vcl/toolbox.hxx>
 #include <vcl/fixed.hxx>
-#include "vcl/image.hxx"
+#include <vcl/image.hxx>
 
 #include <bastype2.hxx>
 
-class ObjectCatalogToolBox_Impl: public ToolBox
+//
+// ObjectCatalog -- a docking window that contains the currently loaded macros
+// in a tree structure.
+//
+class ObjectCatalog : public BasicDockingWindow
 {
 public:
-    ObjectCatalogToolBox_Impl(Window * pParent, ResId const & rResId);
+    ObjectCatalog (Window* pParent);
+    virtual ~ObjectCatalog ();
+public:
+    void UpdateEntries () { aTree.UpdateEntries(); }
+    void SetCurrentEntry (IDEBaseWindow* pCurWin);
 
 private:
-    virtual void DataChanged(DataChangedEvent const & rDCEvt);
-
-    void setImages();
+    // title: "Object Catalog"
+    FixedText aTitle;
+    // the tree-list of the objects
+    BasicTreeListBox aTree;
 
-    ImageList m_aImagesNormal;
-};
-
-class ObjectCatalog : public BasicDockingWindow
-{
 private:
-    BasicTreeListBox   aMacroTreeList;
-    ObjectCatalogToolBox_Impl aToolBox;
-    FixedText           aMacroDescr;
-    Link                aCancelHdl;
-
-protected:
-    DECL_LINK( ToolBoxHdl, ToolBox* );
-    void                CheckButtons();
-    DECL_LINK( TreeListHighlightHdl, SvTreeListBox * );
-    void                UpdateFields();
-    virtual void        Move();
-    virtual sal_Bool        Close();
-    virtual void        Resize();
-    virtual void    Paint( const Rectangle& rRect );
-
-public:
-    ObjectCatalog( Window * pParent );
-    virtual ~ObjectCatalog();
-
-    void                UpdateEntries();
-    void                SetCurrentEntry (IDEBaseWindow* pCurWin);
-    void                SetCancelHdl( const Link& rLink ) { aCancelHdl = rLink; }
+    virtual void Resize (); // Window
+    virtual void ToggleFloatingMode (); // DockingWindow
+    void ArrangeWindows ();
 };
 
-#endif  //_OBJDLG_HXX
+#endif // BASCTL_OBJDLG_HXX
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/objdlg.src b/basctl/source/basicide/objdlg.src
index 6d4688f..cb0d58f 100644
--- a/basctl/source/basicide/objdlg.src
+++ b/basctl/source/basicide/objdlg.src
@@ -19,61 +19,44 @@
 #include <objdlg.hrc>
 #include <helpid.hrc>
 
-#define MASKCOLOR   MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; };
-
-DockingWindow RID_BASICIDE_OBJCAT
-{
-    HelpID = "basctl:FloatingWindow:RID_BASICIDE_OBJCAT";
-    OutputSize = TRUE ;
-    SVLook = TRUE ;
-    Size = MAP_APPFONT ( 191 , 179 ) ;
-    Text [ en-US ] = "Object Catalog" ;
-    Closeable = TRUE ;
-    Moveable = TRUE ;
-    Sizeable = TRUE ;
-    Zoomable = TRUE ;
-    Hide = TRUE ;
-    ClipChildren = TRUE ;
-    Border = TRUE ;
+//DockingWindow RID_BASICIDE_OBJCAT
+//{
+    //HelpID = "basctl:FloatingWindow:RID_BASICIDE_OBJCAT";
+    //OutputSize = TRUE ;
+    //SVLook = TRUE ;
+    //Size = MAP_APPFONT ( 191 , 179 ) ;
+    //Closeable = TRUE ;
+    //Moveable = TRUE ;
+    //Sizeable = TRUE ;
+    //Zoomable = TRUE ;
+    //Hide = TRUE ;
+    //ClipChildren = TRUE ;
+    //Border = TRUE ;
     Control RID_TLB_MACROS
     {
-        HelpId = HID_BASICIDE_OBJECTCAT ;
-        Border = TRUE ;
-        Pos = MAP_APPFONT ( 3 , 24 ) ;
-        Size = MAP_APPFONT ( 185 , 126 ) ;
+        //HelpId = HID_BASICIDE_OBJECTCAT ;
+        //Border = TRUE ;
+        //Pos = MAP_APPFONT ( 3 , 16 ) ;
+        //Size = MAP_APPFONT ( 185 , 126 ) ;
         TabStop = TRUE ;
     };
-    ToolBox RID_TB_TOOLBOX
-    {
-        HelpId = HID_BASICIDE_OBJECTS ;
-        SVLook = TRUE ;
-        Align = BOXALIGN_TOP ;
-        Pos = MAP_APPFONT ( 4 , 6 ) ;
-        ItemImageList = ImageList
-        {
-            Prefix = "im";
-            MASKCOLOR
-            IdList =
-            {
-                TBITEM_SHOW ;
-            };
-        };
-        ItemList =
-        {
-            ToolBoxItem
-            {
-                Identifier = TBITEM_SHOW ;
-                HelpId = HID_BASICIDE_OBJCAT_SHOW ;
-                Text [ en-US ] = "Show" ;
-            };
-        };
-    };
-    FixedText RID_FT_MACRODESCR
-    {
-        WordBreak = TRUE ;
-        Pos = MAP_APPFONT ( 3 , 156 ) ;
-        Size = MAP_APPFONT ( 185 , 18 ) ;
-    };
+    //FixedText RID_FT_TITLE
+    //{
+        //Pos = MAP_APPFONT(3, 3);
+        //Size = MAP_APPFONT(185, 10);
+        //Text [ en-US ] = "Object Catalog" ;
+    //};
+    //FixedText RID_FT_MACRODESCR
+    //{
+        //WordBreak = TRUE ;
+        //Pos = MAP_APPFONT ( 3 , 156 ) ;
+        //Size = MAP_APPFONT ( 185 , 18 ) ;
+    //};
+//};
+
+String RID_BASICIDE_OBJCAT
+{
+    Text [en-US] = "Object Catalog";
 };
 
 String RID_STR_TLB_MACROS
diff --git a/basctl/source/inc/basidesh.hxx b/basctl/source/inc/basidesh.hxx
index 579365a..7f94225 100644
--- a/basctl/source/inc/basidesh.hxx
+++ b/basctl/source/inc/basidesh.hxx
@@ -40,7 +40,6 @@ class ModulWindow;
 class ModulWindowLayout;
 class DialogWindow;
 class SdrView;
-class ObjectCatalog;
 class BasicIDETabBar;
 class TabBar;
 class IDEBaseWindow;
@@ -69,8 +68,6 @@ 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 );
 
-    ObjectCatalog*      pObjectCatalog;
-
     IDEWindowTable      aIDEWindowTable;
     sal_uInt16              nCurKey;
     IDEBaseWindow*      pCurWin;
@@ -98,7 +95,6 @@ friend class ContainerListenerImpl;
     void                CheckWindows();
     void                RemoveWindows( const ScriptDocument& rDocument, const ::rtl::OUString& 
rLibName, bool bDestroy );
     void                UpdateWindows();
-    void                ShowObjectDialog( bool bShow, bool bCreateOrDestroy );
     void                InvalidateBasicIDESlots();
     void                StoreAllWindowData( bool bPersistent = true );
     void                SetMDITitle();
@@ -109,7 +105,6 @@ friend class ContainerListenerImpl;
     void                ImplStartListening( StarBASIC* pBasic );
 
     DECL_LINK( TabBarHdl, TabBar* );
-    DECL_LINK(ObjectDialogCancelHdl, void *);
     DECL_LINK( TabBarSplitHdl, TabBar * );
 #endif
 
@@ -167,7 +162,6 @@ public:
     const ScriptDocument&
                         GetCurDocument() const { return m_aCurDocument; }
     const ::rtl::OUString&       GetCurLibName() const { return m_aCurLibName; }
-    ObjectCatalog*      GetObjectCatalog() const    { return pObjectCatalog; }
     boost::shared_ptr<LocalizationMgr> GetCurLocalizationMgr() const { return 
m_pCurLocalizationMgr; }
 
     ScrollBar&          GetHScrollBar()         { return aHScrollBar; }
-- 
1.7.7

From 47ed5e5d9f54fd842ff549cfc62739490ca61ec7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?"Uray=20M.=20J=C3=A1nos"?= <uray.janos@gmail.com>
Date: Mon, 6 Aug 2012 15:21:36 +0200
Subject: [PATCH 2/2] Basic IDE Object Catalog improvements

Change-Id: I8acb374793c147a62c92021f7dac636869a5ef46
---
 basctl/source/basicide/baside2.cxx  |    6 +++++
 basctl/source/basicide/baside2.hxx  |    1 +
 basctl/source/basicide/basidesh.cxx |    6 +++++
 basctl/source/basicide/basobj3.cxx  |    8 ++----
 basctl/source/basicide/objdlg.hrc   |    8 +------
 basctl/source/basicide/objdlg.src   |   38 +++-------------------------------
 basctl/source/inc/basidesh.hxx      |    2 +
 7 files changed, 23 insertions(+), 46 deletions(-)

diff --git a/basctl/source/basicide/baside2.cxx b/basctl/source/basicide/baside2.cxx
index 3c37860..4b0384c 100644
--- a/basctl/source/basicide/baside2.cxx
+++ b/basctl/source/basicide/baside2.cxx
@@ -1753,4 +1753,10 @@ void ModulWindowLayout::ToggleObjectCatalog ()
     ArrangeWindows();
 }
 
+// Updates the Object Catalog window.
+void ModulWindowLayout::UpdateObjectCatalog ()
+{
+    aObjectCatalog.UpdateEntries();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx
index 3446fe5..7c6e57b 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -480,6 +480,7 @@ public:
 
     void ToggleObjectCatalog ();
     bool HasObjectCatalog () const { return aObjectCatalog.IsVisible(); }
+    void UpdateObjectCatalog ();
 };
 
 #endif // BASCTL_BASIDE2_HXX
diff --git a/basctl/source/basicide/basidesh.cxx b/basctl/source/basicide/basidesh.cxx
index 7368073..b9a6e6d 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -982,4 +982,10 @@ void BasicIDEShell::ImplStartListening( StarBASIC* pBasic )
     StartListening( pBasic->GetBroadcaster(), sal_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/basobj3.cxx b/basctl/source/basicide/basobj3.cxx
index 3e56708..b04dffe 100644
--- a/basctl/source/basicide/basobj3.cxx
+++ b/basctl/source/basicide/basobj3.cxx
@@ -306,11 +306,9 @@ void MarkDocumentModified( const ScriptDocument& rDocument )
         pBindings->Update( SID_SAVEDOC );
     }
 
-    //// Objectcatalog updaten...
-    //BasicIDEShell* pIDEShell = BasicIDEGlobals::GetShell();
-    //ObjectCatalog* pObjCatalog = pIDEShell ? pIDEShell->GetObjectCatalog() : 0;
-    //if ( pObjCatalog )
-        //pObjCatalog->UpdateEntries();
+    // updating the Object Catalog
+    if (BasicIDEShell* pIdeShell = BasicIDEGlobals::GetShell())
+        pIdeShell->UpdateObjectCatalog();
 }
 
 //----------------------------------------------------------------------------
diff --git a/basctl/source/basicide/objdlg.hrc b/basctl/source/basicide/objdlg.hrc
index 7a4e7b9..8e725ba 100644
--- a/basctl/source/basicide/objdlg.hrc
+++ b/basctl/source/basicide/objdlg.hrc
@@ -21,13 +21,7 @@
 #include <svl/solar.hrc>
 
 #define RID_BASICIDE_OBJCAT     ( RID_BASICIDE_START + 70 )
-#define RID_TLB_MACROS          ( RID_BASICIDE_START + 72 )
-//#define RID_FT_TITLE            ( RID_BASICIDE_START + 73 )
-//#define RID_FT_MACRODESCR       ( RID_BASICIDE_START + 74 )
-//#define RID_TB_TOOLBOX     11
-
-//#define TBITEM_SHOW     1
-
 #define RID_STR_TLB_MACROS      ( RID_BASICIDE_START + 71 )
+#define RID_TLB_MACROS          ( RID_BASICIDE_START + 72 )
 
 #endif // BASCTL_OBJDLG_HRR
diff --git a/basctl/source/basicide/objdlg.src b/basctl/source/basicide/objdlg.src
index cb0d58f..b08a6b9 100644
--- a/basctl/source/basicide/objdlg.src
+++ b/basctl/source/basicide/objdlg.src
@@ -19,40 +19,10 @@
 #include <objdlg.hrc>
 #include <helpid.hrc>
 
-//DockingWindow RID_BASICIDE_OBJCAT
-//{
-    //HelpID = "basctl:FloatingWindow:RID_BASICIDE_OBJCAT";
-    //OutputSize = TRUE ;
-    //SVLook = TRUE ;
-    //Size = MAP_APPFONT ( 191 , 179 ) ;
-    //Closeable = TRUE ;
-    //Moveable = TRUE ;
-    //Sizeable = TRUE ;
-    //Zoomable = TRUE ;
-    //Hide = TRUE ;
-    //ClipChildren = TRUE ;
-    //Border = TRUE ;
-    Control RID_TLB_MACROS
-    {
-        //HelpId = HID_BASICIDE_OBJECTCAT ;
-        //Border = TRUE ;
-        //Pos = MAP_APPFONT ( 3 , 16 ) ;
-        //Size = MAP_APPFONT ( 185 , 126 ) ;
-        TabStop = TRUE ;
-    };
-    //FixedText RID_FT_TITLE
-    //{
-        //Pos = MAP_APPFONT(3, 3);
-        //Size = MAP_APPFONT(185, 10);
-        //Text [ en-US ] = "Object Catalog" ;
-    //};
-    //FixedText RID_FT_MACRODESCR
-    //{
-        //WordBreak = TRUE ;
-        //Pos = MAP_APPFONT ( 3 , 156 ) ;
-        //Size = MAP_APPFONT ( 185 , 18 ) ;
-    //};
-//};
+Control RID_TLB_MACROS
+{
+    TabStop = TRUE ;
+};
 
 String RID_BASICIDE_OBJCAT
 {
diff --git a/basctl/source/inc/basidesh.hxx b/basctl/source/inc/basidesh.hxx
index 7f94225..ed2b120 100644
--- a/basctl/source/inc/basidesh.hxx
+++ b/basctl/source/inc/basidesh.hxx
@@ -215,6 +215,8 @@ public:
                         GetCurrentDocument() const;
     bool SourceLinesDisplayed();
 
+    void UpdateObjectCatalog ();
+
 };
 
 #endif // _BASIDESH_HXX
-- 
1.7.7


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.