[ooo-build-commit] .: patches/dev300

Jan Holesovsky kendy at kemper.freedesktop.org
Wed May 5 05:30:08 PDT 2010


 patches/dev300/apply                                  |    3 
 patches/dev300/toolbar-decorations-fix-new-table.diff |  643 ++++++++++++++++++
 2 files changed, 646 insertions(+)

New commits:
commit 3b5d8aa7d707cf2a00388a0b794c6a92d6423817
Author: Jan Holesovsky <kendy at suse.cz>
Date:   Wed May 5 14:28:45 2010 +0200

    'New Table' toolbar widget rework.
    
    * patches/dev300/apply:
    * patches/dev300/toolbar-decorations-fix-new-table.diff: New.

diff --git a/patches/dev300/apply b/patches/dev300/apply
index d85e18f..d21bd80 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -3852,6 +3852,9 @@ SectionOwner => cbosdo
 
 toolbar-decorations-fix.diff
 
+# 'New table' toolbar widget rework
+toolbar-decorations-fix-new-table.diff, jholesov
+
 [ BorderTypes]
 SectionOwner => cbosdo
 
diff --git a/patches/dev300/toolbar-decorations-fix-new-table.diff b/patches/dev300/toolbar-decorations-fix-new-table.diff
new file mode 100644
index 0000000..1e02b7f
--- /dev/null
+++ b/patches/dev300/toolbar-decorations-fix-new-table.diff
@@ -0,0 +1,643 @@
+diff --git svx/source/tbxctrls/layctrl.cxx svx/source/tbxctrls/layctrl.cxx
+index 27b8bfd..956a768 100644
+--- svx/source/tbxctrls/layctrl.cxx
++++ svx/source/tbxctrls/layctrl.cxx
+@@ -32,9 +32,7 @@
+ 
+ #include <string> // HACK: prevent conflict between STLPORT and Workshop headers
+ #include <vcl/toolbox.hxx>
+-#ifndef _SV_BUTTON_HXX //autogen
+ #include <vcl/button.hxx>
+-#endif
+ #include <svtools/intitem.hxx>
+ #include <sfx2/dispatch.hxx>
+ #include <sfx2/app.hxx>
+@@ -56,27 +54,36 @@ SFX_IMPL_TOOLBOX_CONTROL(SvxColumnsToolBoxControl,SfxUInt16Item);
+ 
+ // class TableWindow -----------------------------------------------------
+ 
++const long TABLE_CELL_WIDTH  = 15;
++const long TABLE_CELL_HEIGHT = 15;
++
++const long TABLE_CELLS_HORIZ = 10;
++const long TABLE_CELLS_VERT  = 15;
++
++const long TABLE_POS_X = 2;
++const long TABLE_POS_Y = 18;
++
++const long TABLE_WIDTH  = TABLE_POS_X + TABLE_CELLS_HORIZ*TABLE_CELL_WIDTH;
++const long TABLE_HEIGHT = TABLE_POS_Y + TABLE_CELLS_VERT*TABLE_CELL_HEIGHT;
++
+ class TableWindow : public SfxPopupWindow
+ {
+ private:
++    FixedText*          aTitleTxt;
++    PushButton*         aTableButton;
+     ::Color			    aLineColor;
+-    ::Color			    aHighlightLineColor;
+     ::Color			    aFillColor;
+     ::Color			    aHighlightFillColor;
++    ::Color			    aBackgroundColor;
+     long                nCol;
+     long                nLine;
+-    long                nWidth;
+-    long                nHeight;
+-    long                nMX;
+-    long                nMY;
+-    long                nTextHeight;
+     BOOL                bInitialKeyInput;
+     BOOL                m_bMod1;
+     ToolBox&            rTbx;
+     Reference< XFrame > mxFrame;
+     rtl::OUString       maCommand;
+ 
+-    void UpdateSize_Impl( long nNewCol, long nNewLine);
++    DECL_LINK( SelectHdl, void * );
+ 
+ public:
+                             TableWindow( USHORT                     nSlotId,
+@@ -87,20 +94,31 @@ public:
+ 
+     void                    KeyInput( const KeyEvent& rKEvt );
+     virtual void            MouseMove( const MouseEvent& rMEvt );
+-    virtual void			MouseButtonDown( const MouseEvent& rMEvt );
+     virtual void			MouseButtonUp( const MouseEvent& rMEvt );
+     virtual void    		Paint( const Rectangle& );
+-    virtual void    		PopupModeEnd();
+     virtual SfxPopupWindow*	Clone() const;
+ 
+-    USHORT          		GetColCount() const { return (USHORT)nCol; }
+-    USHORT          		GetLineCount() const { return (USHORT)nLine; }
++private:
++    void    				Update( long nNewCol, long nNewLine );
++    void    				TableDialog( const Sequence< PropertyValue >& rArgs );
++    void    				CloseAndCreateTable( bool bSucess );
++    void    				CloseAndShowTableDialog();
+ };
+ 
+ // -----------------------------------------------------------------------
+ 
++IMPL_LINK( TableWindow, SelectHdl, void *, EMPTYARG )
++{
++    CloseAndShowTableDialog();
++    return NULL;
++}
++
++// -----------------------------------------------------------------------
++
+ TableWindow::TableWindow( USHORT nSlotId, const rtl::OUString& rCmd, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) :
+     SfxPopupWindow( nSlotId, rFrame, WB_SYSTEMWINDOW ),
++    nCol( 0 ),
++    nLine( 0 ),
+     bInitialKeyInput(TRUE),
+     m_bMod1(FALSE),
+     rTbx(rParentTbx),
+@@ -109,33 +127,45 @@ TableWindow::TableWindow( USHORT nSlotId, const rtl::OUString& rCmd, ToolBox& rP
+ {
+     const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
+     svtools::ColorConfig aColorConfig;
+-    aLineColor = ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
+-    aHighlightLineColor = rStyles.GetHighlightTextColor();
++
++    aLineColor = rStyles.GetShadowColor();
+     aFillColor = rStyles.GetWindowColor();
+     aHighlightFillColor = rStyles.GetHighlightColor();
++    aBackgroundColor = GetSettings().GetStyleSettings().GetFaceColor();
+ 
+-    nTextHeight = GetTextHeight()+1;
+-    SetBackground();
++    SetBackground( aBackgroundColor );
+     Font aFont = GetFont();
+-    aFont.SetColor( aLineColor );
+-    aFont.SetFillColor( aFillColor );
++    aFont.SetColor( ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor )  );
++    aFont.SetFillColor( aBackgroundColor );
+     aFont.SetTransparent( FALSE );
+     SetFont( aFont );
+ 
+-    nCol    = 0;
+-    nLine   = 0;
+-    nWidth  = 5;
+-    nHeight = 5;
+-
+-    Size aLogicSize = LogicToPixel( Size( 55, 35 ), MapMode( MAP_10TH_MM ) );
+-    nMX = aLogicSize.Width();
+-    nMY = aLogicSize.Height();
+-    SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) );
++    aTitleTxt = new FixedText( this );
++    aTitleTxt->SetPosPixel( Point( 2, 2 ) );
++    aTitleTxt->SetSizePixel( Size( 106, 15 ) );
++    aTitleTxt->SetText( String( SVX_RESSTR( RID_SVXSTR_TABLE ) ) );
++    aFont = aTitleTxt->GetFont();
++    aFont.SetWeight( WEIGHT_BOLD );
++    aTitleTxt->SetFont( aFont );
++    aTitleTxt->SetBackground( GetBackground() );
++    aTitleTxt->Show();
++
++    aTableButton = new PushButton( this );
++    aTableButton->SetPosPixel( Point( TABLE_POS_X + TABLE_CELL_WIDTH, TABLE_HEIGHT + 5 ) );
++    aTableButton->SetSizePixel( Size( TABLE_WIDTH - TABLE_POS_X - 2*TABLE_CELL_WIDTH, 24 ) );
++    aTableButton->SetText( String( SVX_RESSTR( RID_SVXSTR_MORE ) ) );
++    aTableButton->SetClickHdl( LINK( this, TableWindow, SelectHdl ) );
++    aTableButton->Show();
++
++    SetOutputSizePixel( Size( TABLE_WIDTH + 3, TABLE_HEIGHT + 33 ) );
+ }
++
+ // -----------------------------------------------------------------------
++
+ TableWindow::~TableWindow()
+ {
+ }
++
+ // -----------------------------------------------------------------------
+ 
+ SfxPopupWindow* TableWindow::Clone() const
+@@ -151,164 +181,64 @@ void TableWindow::MouseMove( const MouseEvent& rMEvt )
+     Point aPos = rMEvt.GetPosPixel();
+     Point aMousePos( aPos );
+ 
+-    if ( rMEvt.IsEnterWindow() )
+-        CaptureMouse();
+-    else if ( aMousePos.X() < 0 || aMousePos.Y() < 0 )
+-    {
+-        nCol = 0;
+-        nLine = 0;
+-        ReleaseMouse();
+-        Invalidate();
+-        return;
+-    }
+-
+-    long    nNewCol = 0;
+-    long    nNewLine = 0;
+-
+-    if ( aPos.X() > 0 )
+-        nNewCol = aPos.X() / nMX + 1;
+-    if ( aPos.Y() > 0 )
+-        nNewLine = aPos.Y() / nMY + 1;
+-
+-    if ( nNewCol > 500 )
+-        nNewCol = 500;
+-    if ( nNewLine > 1000 )
+-        nNewLine = 1000;
+-
+-    UpdateSize_Impl( nNewCol, nNewLine);
++    long nNewCol = ( aMousePos.X() - TABLE_POS_X + TABLE_CELL_WIDTH ) / TABLE_CELL_WIDTH;
++    long nNewLine = ( aMousePos.Y() - TABLE_POS_Y + TABLE_CELL_HEIGHT ) / TABLE_CELL_HEIGHT;
+ 
++    Update( nNewCol, nNewLine );
+ }
+-/* -----------------------------15.05.2002 17:14------------------------------
+-
+- ---------------------------------------------------------------------------*/
+-void TableWindow::UpdateSize_Impl( long nNewCol, long nNewLine)
+-{
+-    Size  aWinSize = GetOutputSizePixel();
+-    Point aWinPos = GetPosPixel();
+-    Point aMaxPos = OutputToScreenPixel( GetDesktopRectPixel().BottomRight() );
+-    if ( (nWidth <= nNewCol) || (nHeight < nNewLine) )
+-    {
+-        long    nOff = 0;
+-
+-        if ( nWidth <= nNewCol )
+-        {
+-            nWidth = nNewCol;
+-            nWidth++;
+-        }
+-        if ( nHeight <= nNewLine )
+-        {
+-            nHeight = nNewLine;
+-            nOff = 1;
+-        }
+-        while ( nWidth > 0 &&
+-                (short)(aWinPos.X()+(nMX*nWidth-1)) >= aMaxPos.X()-3 )
+-            nWidth--;
+-
+-        while ( nHeight > 0 &&
+-                (short)(aWinPos.Y()+(nMY*nHeight-1+nTextHeight)) >=
+-                aMaxPos.Y()-3 )
+-            nHeight--;
+-
+-        if ( nNewCol > nWidth )
+-            nNewCol = nWidth;
+-
+-        if ( nNewLine > nHeight )
+-            nNewLine = nHeight;
+-
+-        Size    _aWinSize = GetOutputSizePixel();
+-        Invalidate( Rectangle( 0, _aWinSize.Height()-nTextHeight+2-nOff,
+-                               _aWinSize.Width(), _aWinSize.Height() ) );
+-        SetOutputSizePixel( Size( nMX*nWidth-1, nMY*nHeight-1+nTextHeight ) );
+-    }
+-    long    nMinCol = 0;
+-    long    nMaxCol = 0;
+-    long    nMinLine = 0;
+-    long    nMaxLine = 0;
+-    if ( nNewCol < nCol )
+-    {
+-        nMinCol = nNewCol;
+-        nMaxCol = nCol;
+-    }
+-    else
+-    {
+-        nMinCol = nCol;
+-        nMaxCol = nNewCol;
+-    }
+-    if ( nNewLine < nLine )
+-    {
+-        nMinLine = nNewLine;
+-        nMaxLine = nLine;
+-    }
+-    else
+-    {
+-        nMinLine = nLine;
+-        nMaxLine = nNewLine;
+-    }
+-
+-    if ( (nNewCol != nCol) || (nNewLine != nLine) )
+-    {
+-        Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2,
+-                               aWinSize.Width(), aWinSize.Height() ) );
+ 
+-        if ( nNewCol != nCol )
+-        {
+-            Invalidate( Rectangle( nMinCol*nMX-1, 0, nMaxCol*nMX+1, nMaxLine*nMY ) );
+-            nCol  = nNewCol;
+-        }
+-        if ( nNewLine != nLine )
+-        {
+-            Invalidate( Rectangle( 0, nMinLine*nMY-2, nMaxCol*nMX, nMaxLine*nMY+1 ) );
+-            nLine = nNewLine;
+-        }
+-    }
+-    Update();
+-}
+-/* -----------------------------15.05.2002 14:22------------------------------
++// -----------------------------------------------------------------------
+ 
+- ---------------------------------------------------------------------------*/
+ void TableWindow::KeyInput( const KeyEvent& rKEvt )
+ {
+-    BOOL bHandled = FALSE;
++    bool bHandled = false;
+     USHORT nModifier = rKEvt.GetKeyCode().GetModifier();
+     USHORT nKey = rKEvt.GetKeyCode().GetCode();
+-    if(!nModifier)
++    if ( !nModifier )
+     {
+-        if( KEY_UP == nKey || KEY_DOWN == nKey ||
+-            KEY_LEFT == nKey || KEY_RIGHT == nKey ||
+-            KEY_ESCAPE == nKey ||KEY_RETURN == nKey )
++        bHandled = true;
++        long nNewCol = nCol;
++        long nNewLine = nLine;
++        switch(nKey)
+         {
+-            bHandled = TRUE;
+-            long nNewCol = nCol;
+-            long nNewLine = nLine;
+-            switch(nKey)
+-            {
+-                case KEY_UP :
+-                    if(nNewLine > 1)
+-                    {
+-                        nNewLine--;
+-                        break;
+-                    }
+-                //no break;
+-                case KEY_ESCAPE:
+-                    EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL);
++            case KEY_UP:
++                if ( nNewLine > 1 )
++                    nNewLine--;
++                else
++                    CloseAndCreateTable( false );
+                 break;
+-                case KEY_DOWN :
++            case KEY_DOWN:
++                if ( nNewLine < TABLE_CELLS_VERT )
+                     nNewLine++;
++                else
++                    CloseAndShowTableDialog();
+                 break;
+-                case KEY_LEFT :
+-
+-                    if(nNewCol)
+-                        nNewCol--;
++            case KEY_LEFT:
++                if ( nNewCol > 1 )
++                    nNewCol--;
++                else
++                    CloseAndCreateTable( false );
+                 break;
+-                case KEY_RIGHT :
++            case KEY_RIGHT:
++                if ( nNewCol < TABLE_CELLS_HORIZ )
+                     nNewCol++;
++                else
++                    CloseAndShowTableDialog();
+                 break;
+-                case KEY_RETURN :
+-                    if(IsMouseCaptured())
+-                        ReleaseMouse();
+-                    EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
++            case KEY_ESCAPE:
++                CloseAndCreateTable( false );
+                 break;
+-            }
++            case KEY_RETURN:
++                CloseAndCreateTable( true );
++                break;
++            case KEY_TAB:
++                CloseAndShowTableDialog();
++                break;
++            default:
++                bHandled = false;
++        }
++        if ( bHandled )
++        {
+             //make sure that a table can initially be created
+             if(bInitialKeyInput)
+             {
+@@ -318,27 +248,17 @@ void TableWindow::KeyInput( const KeyEvent& rKEvt )
+                 if(!nNewCol)
+                     nNewCol = 1;
+             }
+-            UpdateSize_Impl( nNewCol, nNewLine);
++            Update( nNewCol, nNewLine );
+         }
+     }
+     else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey)
+     {
+         m_bMod1 = TRUE;
+-        if(IsMouseCaptured())
+-            ReleaseMouse();
+-        EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
++        CloseAndCreateTable( true );
+     }
+ 
+     if(!bHandled)
+         SfxPopupWindow::KeyInput(rKEvt);
+-
+-}
+-// -----------------------------------------------------------------------
+-
+-void TableWindow::MouseButtonDown( const MouseEvent& rMEvt )
+-{
+-    SfxPopupWindow::MouseButtonDown( rMEvt );
+-    CaptureMouse();
+ }
+ 
+ // -----------------------------------------------------------------------
+@@ -346,56 +266,45 @@ void TableWindow::MouseButtonDown( const MouseEvent& rMEvt )
+ void TableWindow::MouseButtonUp( const MouseEvent& rMEvt )
+ {
+     SfxPopupWindow::MouseButtonUp( rMEvt );
+-    ReleaseMouse();
+-
+-    if ( IsInPopupMode() )
+-        EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
++    CloseAndCreateTable( true );
+ }
+ 
+ // -----------------------------------------------------------------------
+ 
+ void TableWindow::Paint( const Rectangle& )
+ {
+-    long    i;
+-    long    nStart;
+-    Size    aSize = GetOutputSizePixel();
++    const long nSelectionWidth = TABLE_POS_X + nCol*TABLE_CELL_WIDTH;
++    const long nSelectionHeight = TABLE_POS_Y + nLine*TABLE_CELL_HEIGHT;
+ 
+-    SetLineColor();
+-    SetFillColor( aHighlightFillColor );
+-    DrawRect( Rectangle( 0, 0, nCol*nMX-1, nLine*nMY-1 ) );
+-    SetFillColor( aFillColor );
+-    DrawRect( Rectangle( nCol*nMX-1, 0,
+-                         aSize.Width(), aSize.Height()-nTextHeight+1 ) );
+-    DrawRect( Rectangle( 0, nLine*nMY-1,
+-                         aSize.Width(), aSize.Height()-nTextHeight+1 ) );
+-
+-    SetLineColor( aHighlightLineColor );
+-    for ( i = 1; i < nCol; i++ )
+-        DrawLine( Point( i*nMX-1, 0 ), Point( i*nMX-1, nLine*nMY-1 ) );
+-    for ( i = 1; i < nLine; i++ )
+-        DrawLine( Point( 0, i*nMY-1 ), Point( nCol*nMX-1, i*nMY-1 ) );
++    // the non-selected parts of the table
+     SetLineColor( aLineColor );
+-    for ( i = 1; i <= nWidth; i++ )
+-    {
+-        if ( i < nCol )
+-            nStart = nLine*nMY-1;
+-        else
+-            nStart = 0;
+-        DrawLine( Point( i*nMX-1, nStart ), Point( i*nMX-1, nHeight*nMY-1 ) );
+-    }
+-    for ( i = 1; i <= nHeight; i++ )
++    SetFillColor( aFillColor );
++    DrawRect( Rectangle( nSelectionWidth, TABLE_POS_Y, TABLE_WIDTH, nSelectionHeight ) );
++    DrawRect( Rectangle( TABLE_POS_X, nSelectionHeight, nSelectionWidth, TABLE_HEIGHT ) );
++    DrawRect( Rectangle( nSelectionWidth, nSelectionHeight, TABLE_WIDTH, TABLE_HEIGHT ) );
++
++    // the selection
++    if ( nCol > 0 && nLine > 0 )
+     {
+-        if ( i < nLine )
+-            nStart = nCol*nMX-1;
+-        else
+-            nStart = 0;
+-        DrawLine( Point( nStart, i*nMY-1 ), Point( nWidth*nMX-1, i*nMY-1 ) );
++        SetFillColor( aHighlightFillColor );
++        DrawRect( Rectangle( TABLE_POS_X, TABLE_POS_Y,
++                    nSelectionWidth, nSelectionHeight ) );
+     }
+ 
+-    SetLineColor();
+-    String aText;
++    // lines inside of the table
++    SetLineColor( aLineColor );
++    for ( long i = 1; i < TABLE_CELLS_VERT; ++i )
++        DrawLine( Point( TABLE_POS_X, TABLE_POS_Y + i*TABLE_CELL_HEIGHT ),
++                  Point( TABLE_WIDTH, TABLE_POS_Y + i*TABLE_CELL_HEIGHT ) );
++
++    for ( long i = 1; i < TABLE_CELLS_HORIZ; ++i )
++        DrawLine( Point( TABLE_POS_X + i*TABLE_CELL_WIDTH, TABLE_POS_Y ),
++                  Point( TABLE_POS_X + i*TABLE_CELL_WIDTH, TABLE_HEIGHT ) );
++
++    // the text near the mouse cursor telling the table dimensions
+     if ( nCol && nLine )
+     {
++        String aText;
+         aText += String::CreateFromInt32( nCol );
+         aText.AppendAscii( " x " );
+         aText += String::CreateFromInt32( nLine );
+@@ -405,61 +314,107 @@ void TableWindow::Paint( const Rectangle& )
+             aText += String(SVX_RESSTR(RID_SVXSTR_PAGES));
+         }
+ 
++        Size aSize = GetOutputSizePixel();
++        Size aTextSize( GetTextWidth( aText ), GetTextHeight() );
++
++        long nTextX = nSelectionWidth + TABLE_CELL_WIDTH;
++        long nTextY = nSelectionHeight + TABLE_CELL_HEIGHT;
++        const long nTipBorder = 2;
++
++        if ( aTextSize.Width() + TABLE_POS_X + TABLE_CELL_WIDTH + 2*nTipBorder < nSelectionWidth )
++            nTextX = nSelectionWidth - TABLE_CELL_WIDTH - aTextSize.Width();
++
++        if ( aTextSize.Height() + TABLE_POS_Y + TABLE_CELL_HEIGHT + 2*nTipBorder < nSelectionHeight )
++            nTextY = nSelectionHeight - TABLE_CELL_HEIGHT - aTextSize.Height();
++
++        SetLineColor( aLineColor );
++        SetFillColor( aBackgroundColor );
++        DrawRect( Rectangle ( nTextX - 2*nTipBorder, nTextY - 2*nTipBorder,
++                    nTextX + aTextSize.Width() + nTipBorder, nTextY + aTextSize.Height() + nTipBorder ) );
++
++        // #i95350# force RTL output
++        if ( IsRTLEnabled() )
++            aText.Insert( 0x202D, 0 );
++
++        DrawText( Point( nTextX, nTextY ), aText );
+     }
+-    else
+-        aText = Button::GetStandardText( BUTTON_CANCEL );
+-    Size aTextSize( GetTextWidth( aText ), GetTextHeight() );
++}
+ 
+-    Rectangle aClearRect( 0, aSize.Height()-nTextHeight+2, (aSize.Width()), aSize.Height() );
+-    DrawRect( aClearRect );
++// -----------------------------------------------------------------------
++
++void TableWindow::Update( long nNewCol, long nNewLine )
++{
++    if ( nNewCol < 0 || nNewCol > TABLE_CELLS_HORIZ )
++        nNewCol = 0;
+ 
+-    // #i95350# force RTL output
+-    if( IsRTLEnabled() && 	nCol && nLine )
+-        aText.Insert(0x202D, 0);
+-    DrawText( Point( (aSize.Width() - aTextSize.Width()) / 2, aSize.Height() - nTextHeight + 2 ), aText );
++    if ( nNewLine < 0 || nNewLine > TABLE_CELLS_VERT )
++        nNewLine = 0;
+ 
+-    SetLineColor( aLineColor );
+-    SetFillColor();
+-    DrawRect( Rectangle( Point(0,0), aSize ) );
++    if ( nNewCol != nCol || nNewLine != nLine )
++    {
++        nCol = nNewCol;
++        nLine = nNewLine;
++        Invalidate( Rectangle( TABLE_POS_X, TABLE_POS_Y, TABLE_WIDTH, TABLE_HEIGHT ) );
++    }
+ }
+ 
+ // -----------------------------------------------------------------------
+ 
+-void TableWindow::PopupModeEnd()
++void TableWindow::TableDialog( const Sequence< PropertyValue >& rArgs )
+ {
+-    if ( !IsPopupModeCanceled() && nCol && nLine )
++    Window* pParent = rTbx.GetParent();
++    USHORT nId = GetId();
++    pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast<void*>(nId));
++
++    Reference< XDispatchProvider > xDispatchProvider( mxFrame, UNO_QUERY );
++    if ( xDispatchProvider.is() )
+     {
+-        Window* pParent = rTbx.GetParent();
+-        USHORT nId = GetId();
+-        pParent->UserEvent(SVX_EVENT_COLUM_WINDOW_EXECUTE, reinterpret_cast<void*>(nId));
++        com::sun::star::util::URL aTargetURL;
++        Reference < XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance(
++                    rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )),
++                UNO_QUERY );
++        aTargetURL.Complete = maCommand;
++        xTrans->parseStrict( aTargetURL );
++
++        Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
++        if ( xDispatch.is() )
++            xDispatch->dispatch( aTargetURL, rArgs );
++    }
++}
+ 
+-        Reference< XDispatchProvider > xDispatchProvider( mxFrame, UNO_QUERY );
+-        if ( xDispatchProvider.is() )
+-        {
+-            com::sun::star::util::URL aTargetURL;
+-            Reference < XURLTransformer > xTrans( ::comphelper::getProcessServiceFactory()->createInstance(
+-                                                    rtl::OUString::createFromAscii("com.sun.star.util.URLTransformer" )),
+-                                                  UNO_QUERY );
+-            aTargetURL.Complete = maCommand;
+-            xTrans->parseStrict( aTargetURL );
+-            Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aTargetURL, rtl::OUString(), 0 );
+-            if ( xDispatch.is() )
+-            {
+-                Sequence< PropertyValue > aArgs( 2 );
+-                aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" ));
+-                aArgs[0].Value = makeAny( sal_Int16( nCol ));
+-                aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Rows" ));
+-                aArgs[1].Value = makeAny( sal_Int16( nLine ));
++// -----------------------------------------------------------------------
+ 
+-                xDispatch->dispatch( aTargetURL, aArgs );
+-            }
+-        }
++void TableWindow::CloseAndCreateTable( bool bCreate )
++{
++    if ( !GetDockingManager()->IsInPopupMode( this ) )
++        return;
++
++    if ( bCreate && nCol && nLine )
++    {
++        Sequence< PropertyValue > aArgs( 2 );
++        aArgs[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Columns" ));
++        aArgs[0].Value = makeAny( sal_Int16( nCol ));
++        aArgs[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Rows" ));
++        aArgs[1].Value = makeAny( sal_Int16( nLine ));
++
++        TableDialog( aArgs );
+     }
+-    else if ( IsPopupModeCanceled() )
+-        ReleaseMouse();
+-    SfxPopupWindow::PopupModeEnd();
++    
++    GetDockingManager()->EndPopupMode( this );
++    doLazyDelete();
+ }
+ 
++// -----------------------------------------------------------------------
++
++void TableWindow::CloseAndShowTableDialog()
++{
++    // close the toolbar tool
++    CloseAndCreateTable( false );
++
++    // and open the table dialog instead
++    TableDialog( Sequence< PropertyValue >() );
++}
++    
+ // class ColumnsWindow ---------------------------------------------------
+ 
+ class ColumnsWindow : public SfxPopupWindow
+@@ -735,7 +690,8 @@ void ColumnsWindow::Paint( const Rectangle& )
+     if ( nCol )
+         aText = String( String::CreateFromInt32(nCol) );
+     else
+-        aText = Button::GetStandardText( BUTTON_CANCEL );
++        aText = Button::GetStandardText( BUTTON_CANCEL ).EraseAllChars( '~' );
++
+     Size aTextSize(GetTextWidth( aText ), GetTextHeight());
+     DrawText( Point( ( aSize.Width() - aTextSize.Width() ) / 2, aSize.Height() - nTextHeight + 2 ), aText );
+ 
+@@ -803,8 +759,8 @@ SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow()
+     {
+         ToolBox& rTbx = GetToolBox();
+         TableWindow* pWin = new TableWindow( GetSlotId(), m_aCommandURL, rTbx, m_xFrame );
+-        pWin->StartPopupMode( &rTbx, FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE );
+-        SetPopupWindow( pWin );
++        pWin->EnableDocking(true);
++        pWin->GetDockingManager()->StartPopupMode(&GetToolBox(),pWin);
+         return pWin;
+     }
+     return 0;


More information about the ooo-build-commit mailing list