LCOV - code coverage report
Current view: top level - svx/source/tbxctrls - layctrl.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 18 390 4.6 %
Date: 2014-11-03 Functions: 9 45 20.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <string>
      21             : #include <vcl/toolbox.hxx>
      22             : #include <vcl/button.hxx>
      23             : #include <vcl/settings.hxx>
      24             : #include <svl/intitem.hxx>
      25             : #include <sfx2/dispatch.hxx>
      26             : #include <sfx2/app.hxx>
      27             : 
      28             : #include <svx/dialogs.hrc>
      29             : #include "svx/layctrl.hxx"
      30             : #include <svx/dialmgr.hxx>
      31             : #include <comphelper/processfactory.hxx>
      32             : #include <comphelper/string.hxx>
      33             : #include <svtools/colorcfg.hxx>
      34             : #include <com/sun/star/util/URLTransformer.hpp>
      35             : 
      36             : // namespaces
      37             : using namespace ::com::sun::star::uno;
      38             : using namespace ::com::sun::star::beans;
      39             : using namespace ::com::sun::star::util;
      40             : using namespace ::com::sun::star::frame;
      41             : 
      42        1102 : SFX_IMPL_TOOLBOX_CONTROL(SvxTableToolBoxControl,SfxUInt16Item);
      43         264 : SFX_IMPL_TOOLBOX_CONTROL(SvxColumnsToolBoxControl,SfxUInt16Item);
      44             : 
      45             : class TableWindow : public SfxPopupWindow
      46             : {
      47             : private:
      48             :     PushButton          aTableButton;
      49             :     ::Color             aLineColor;
      50             :     ::Color             aFillColor;
      51             :     ::Color             aHighlightFillColor;
      52             :     ::Color             aBackgroundColor;
      53             :     long                nCol;
      54             :     long                nLine;
      55             :     bool                bInitialKeyInput;
      56             :     bool                m_bMod1;
      57             :     ToolBox&            rTbx;
      58             :     Reference< XFrame > mxFrame;
      59             :     OUString       maCommand;
      60             : 
      61             :     static const long TABLE_CELLS_HORIZ;
      62             :     static const long TABLE_CELLS_VERT;
      63             : 
      64             :     long mnTableCellWidth;
      65             :     long mnTableCellHeight;
      66             : 
      67             :     long mnTablePosX;
      68             :     long mnTablePosY;
      69             : 
      70             :     long mnTableWidth;
      71             :     long mnTableHeight;
      72             : 
      73             :     DECL_LINK( SelectHdl, void * );
      74             : 
      75             : public:
      76             :                             TableWindow( sal_uInt16                 nSlotId,
      77             :                                          const OUString&            rCmd,
      78             :                                          const OUString&            rText,
      79             :                                          ToolBox&                   rParentTbx,
      80             :                                          const Reference< XFrame >& rFrame );
      81             :                             virtual ~TableWindow();
      82             : 
      83             :     void                    KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
      84             :     virtual void            MouseMove( const MouseEvent& rMEvt ) SAL_OVERRIDE;
      85             :     virtual void            MouseButtonUp( const MouseEvent& rMEvt ) SAL_OVERRIDE;
      86             :     virtual void            Paint( const Rectangle& ) SAL_OVERRIDE;
      87             :     virtual void            PopupModeEnd() SAL_OVERRIDE;
      88             :     virtual SfxPopupWindow* Clone() const SAL_OVERRIDE;
      89             : 
      90             : private:
      91             :     void                    Update( long nNewCol, long nNewLine );
      92             :     void                    TableDialog( const Sequence< PropertyValue >& rArgs );
      93             :     void                    CloseAndShowTableDialog();
      94             : };
      95             : 
      96             : const long TableWindow::TABLE_CELLS_HORIZ = 10;
      97             : const long TableWindow::TABLE_CELLS_VERT = 15;
      98             : 
      99             : 
     100             : 
     101           0 : IMPL_LINK_NOARG(TableWindow, SelectHdl)
     102             : {
     103           0 :     CloseAndShowTableDialog();
     104           0 :     return 0;
     105             : }
     106             : 
     107             : 
     108             : 
     109           0 : TableWindow::TableWindow( sal_uInt16 nSlotId, const OUString& rCmd, const OUString& rText,
     110             :                           ToolBox& rParentTbx, const Reference< XFrame >& rFrame )
     111             :     : SfxPopupWindow( nSlotId, rFrame, WinBits( WB_STDPOPUP ) )
     112             :     , aTableButton( this )
     113             :     , nCol( 0 )
     114             :     , nLine( 0 )
     115             :     , bInitialKeyInput(false)
     116             :     , m_bMod1(false)
     117             :     , rTbx(rParentTbx)
     118             :     , mxFrame( rFrame )
     119             :     , maCommand( rCmd )
     120             :     , mnTablePosX(2)
     121           0 :     , mnTablePosY(2)
     122             : {
     123           0 :     mnTableCellWidth  = 15 * GetDPIScaleFactor();
     124           0 :     mnTableCellHeight = 15 * GetDPIScaleFactor();
     125             : 
     126           0 :     mnTableWidth  = mnTablePosX + TABLE_CELLS_HORIZ*mnTableCellWidth;
     127           0 :     mnTableHeight = mnTablePosY + TABLE_CELLS_VERT*mnTableCellHeight;
     128             : 
     129           0 :     const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
     130           0 :     svtools::ColorConfig aColorConfig;
     131             : 
     132           0 :     aLineColor = rStyles.GetShadowColor();
     133           0 :     aFillColor = rStyles.GetWindowColor();
     134           0 :     aHighlightFillColor = rStyles.GetHighlightColor();
     135           0 :     aBackgroundColor = GetSettings().GetStyleSettings().GetFaceColor();
     136             : 
     137           0 :     SetBackground( aBackgroundColor );
     138           0 :     vcl::Font aFont = GetFont();
     139           0 :     aFont.SetColor( ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor )  );
     140           0 :     aFont.SetFillColor( aBackgroundColor );
     141           0 :     aFont.SetTransparent( false );
     142           0 :     SetFont( aFont );
     143             : 
     144           0 :     SetText( rText );
     145             : 
     146             :     aTableButton.SetPosSizePixel( Point( mnTablePosX + mnTableCellWidth, mnTableHeight + 5 ),
     147           0 :             Size( mnTableWidth - mnTablePosX - 2*mnTableCellWidth, 24 ) );
     148           0 :     aTableButton.SetText( SVX_RESSTR( RID_SVXSTR_MORE ) );
     149           0 :     aTableButton.SetClickHdl( LINK( this, TableWindow, SelectHdl ) );
     150           0 :     aTableButton.Show();
     151             : 
     152           0 :     SetOutputSizePixel( Size( mnTableWidth + 3, mnTableHeight + 33 ) );
     153           0 : }
     154             : 
     155             : 
     156             : 
     157           0 : TableWindow::~TableWindow()
     158             : {
     159           0 : }
     160             : 
     161             : 
     162             : 
     163           0 : SfxPopupWindow* TableWindow::Clone() const
     164             : {
     165           0 :     return new TableWindow( GetId(), maCommand, GetText(), rTbx, mxFrame );
     166             : }
     167             : 
     168             : 
     169             : 
     170           0 : void TableWindow::MouseMove( const MouseEvent& rMEvt )
     171             : {
     172           0 :     SfxPopupWindow::MouseMove( rMEvt );
     173           0 :     Point aPos = rMEvt.GetPosPixel();
     174           0 :     Point aMousePos( aPos );
     175             : 
     176           0 :     long nNewCol = ( aMousePos.X() - mnTablePosX + mnTableCellWidth ) / mnTableCellWidth;
     177           0 :     long nNewLine = ( aMousePos.Y() - mnTablePosY + mnTableCellHeight ) / mnTableCellHeight;
     178             : 
     179           0 :     Update( nNewCol, nNewLine );
     180           0 : }
     181             : 
     182             : 
     183             : 
     184           0 : void TableWindow::KeyInput( const KeyEvent& rKEvt )
     185             : {
     186           0 :     bool bHandled = false;
     187           0 :     sal_uInt16 nModifier = rKEvt.GetKeyCode().GetModifier();
     188           0 :     sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode();
     189           0 :     if ( !nModifier )
     190             :     {
     191           0 :         bHandled = true;
     192           0 :         long nNewCol = nCol;
     193           0 :         long nNewLine = nLine;
     194           0 :         switch(nKey)
     195             :         {
     196             :             case KEY_UP:
     197           0 :                 if ( nNewLine > 1 )
     198           0 :                     nNewLine--;
     199             :                 else
     200           0 :                     EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
     201           0 :                 break;
     202             :             case KEY_DOWN:
     203           0 :                 if ( nNewLine < TABLE_CELLS_VERT )
     204           0 :                     nNewLine++;
     205             :                 else
     206           0 :                     CloseAndShowTableDialog();
     207           0 :                 break;
     208             :             case KEY_LEFT:
     209           0 :                 if ( nNewCol > 1 )
     210           0 :                     nNewCol--;
     211             :                 else
     212           0 :                     EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
     213           0 :                 break;
     214             :             case KEY_RIGHT:
     215           0 :                 if ( nNewCol < TABLE_CELLS_HORIZ )
     216           0 :                     nNewCol++;
     217             :                 else
     218           0 :                     CloseAndShowTableDialog();
     219           0 :                 break;
     220             :             case KEY_ESCAPE:
     221           0 :                 EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
     222           0 :                 break;
     223             :             case KEY_RETURN:
     224           0 :                 EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
     225           0 :                 break;
     226             :             case KEY_TAB:
     227           0 :                 CloseAndShowTableDialog();
     228           0 :                 break;
     229             :             default:
     230           0 :                 bHandled = false;
     231             :         }
     232           0 :         if ( bHandled )
     233             :         {
     234             :             //make sure that a table can initially be created
     235           0 :             if(bInitialKeyInput)
     236             :             {
     237           0 :                 bInitialKeyInput = false;
     238           0 :                 if(!nNewLine)
     239           0 :                     nNewLine = 1;
     240           0 :                 if(!nNewCol)
     241           0 :                     nNewCol = 1;
     242             :             }
     243           0 :             Update( nNewCol, nNewLine );
     244             :         }
     245             :     }
     246           0 :     else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey)
     247             :     {
     248           0 :         m_bMod1 = true;
     249           0 :         EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
     250             :     }
     251             : 
     252           0 :     if(!bHandled)
     253           0 :         SfxPopupWindow::KeyInput(rKEvt);
     254           0 : }
     255             : 
     256             : 
     257             : 
     258           0 : void TableWindow::MouseButtonUp( const MouseEvent& rMEvt )
     259             : {
     260           0 :     SfxPopupWindow::MouseButtonUp( rMEvt );
     261           0 :     EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
     262           0 : }
     263             : 
     264             : 
     265             : 
     266           0 : void TableWindow::Paint( const Rectangle& )
     267             : {
     268           0 :     const long nSelectionWidth = mnTablePosX + nCol*mnTableCellWidth;
     269           0 :     const long nSelectionHeight = mnTablePosY + nLine*mnTableCellHeight;
     270             : 
     271             :     // the non-selected parts of the table
     272           0 :     SetLineColor( aLineColor );
     273           0 :     SetFillColor( aFillColor );
     274           0 :     DrawRect( Rectangle( nSelectionWidth, mnTablePosY, mnTableWidth, nSelectionHeight ) );
     275           0 :     DrawRect( Rectangle( mnTablePosX, nSelectionHeight, nSelectionWidth, mnTableHeight ) );
     276           0 :     DrawRect( Rectangle( nSelectionWidth, nSelectionHeight, mnTableWidth, mnTableHeight ) );
     277             : 
     278             :     // the selection
     279           0 :     if ( nCol > 0 && nLine > 0 )
     280             :     {
     281           0 :         SetFillColor( aHighlightFillColor );
     282             :         DrawRect( Rectangle( mnTablePosX, mnTablePosY,
     283           0 :                     nSelectionWidth, nSelectionHeight ) );
     284             :     }
     285             : 
     286             :     // lines inside of the table
     287           0 :     SetLineColor( aLineColor );
     288           0 :     for ( long i = 1; i < TABLE_CELLS_VERT; ++i )
     289           0 :         DrawLine( Point( mnTablePosX, mnTablePosY + i*mnTableCellHeight ),
     290           0 :                   Point( mnTableWidth, mnTablePosY + i*mnTableCellHeight ) );
     291             : 
     292           0 :     for ( long i = 1; i < TABLE_CELLS_HORIZ; ++i )
     293           0 :         DrawLine( Point( mnTablePosX + i*mnTableCellWidth, mnTablePosY ),
     294           0 :                   Point( mnTablePosX + i*mnTableCellWidth, mnTableHeight ) );
     295             : 
     296             :     // the text near the mouse cursor telling the table dimensions
     297           0 :     if ( nCol && nLine )
     298             :     {
     299           0 :         OUString aText;
     300           0 :         aText += OUString::number( nCol );
     301           0 :         aText += " x ";
     302           0 :         aText += OUString::number( nLine );
     303           0 :         if(GetId() == FN_SHOW_MULTIPLE_PAGES)
     304             :         {
     305           0 :             aText += " ";
     306           0 :             aText += SVX_RESSTR(RID_SVXSTR_PAGES);
     307             :         }
     308             : 
     309           0 :         Size aTextSize( GetTextWidth( aText ), GetTextHeight() );
     310             : 
     311           0 :         long nTextX = nSelectionWidth + mnTableCellWidth;
     312           0 :         long nTextY = nSelectionHeight + mnTableCellHeight;
     313           0 :         const long nTipBorder = 2;
     314             : 
     315           0 :         if ( aTextSize.Width() + mnTablePosX + mnTableCellWidth + 2*nTipBorder < nSelectionWidth )
     316           0 :             nTextX = nSelectionWidth - mnTableCellWidth - aTextSize.Width();
     317             : 
     318           0 :         if ( aTextSize.Height() + mnTablePosY + mnTableCellHeight + 2*nTipBorder < nSelectionHeight )
     319           0 :             nTextY = nSelectionHeight - mnTableCellHeight - aTextSize.Height();
     320             : 
     321           0 :         SetLineColor( aLineColor );
     322           0 :         SetFillColor( aBackgroundColor );
     323             :         DrawRect( Rectangle ( nTextX - 2*nTipBorder, nTextY - 2*nTipBorder,
     324           0 :                     nTextX + aTextSize.Width() + nTipBorder, nTextY + aTextSize.Height() + nTipBorder ) );
     325             : 
     326             :         // #i95350# force RTL output
     327           0 :         if ( IsRTLEnabled() )
     328           0 :             aText = OUString(0x202D) + aText;
     329             : 
     330           0 :         DrawText( Point( nTextX, nTextY ), aText );
     331             :     }
     332           0 : }
     333             : 
     334             : 
     335             : 
     336           0 : void TableWindow::PopupModeEnd()
     337             : {
     338           0 :     if ( !IsPopupModeCanceled() && nCol && nLine )
     339             :     {
     340           0 :         Sequence< PropertyValue > aArgs( 2 );
     341           0 :         aArgs[0].Name = "Columns";
     342           0 :         aArgs[0].Value = makeAny( sal_Int16( nCol ));
     343           0 :         aArgs[1].Name = "Rows";
     344           0 :         aArgs[1].Value = makeAny( sal_Int16( nLine ));
     345             : 
     346           0 :         TableDialog( aArgs );
     347             :     }
     348             : 
     349           0 :     SfxPopupWindow::PopupModeEnd();
     350           0 : }
     351             : 
     352             : 
     353             : 
     354           0 : void TableWindow::Update( long nNewCol, long nNewLine )
     355             : {
     356           0 :     if ( nNewCol < 0 || nNewCol > TABLE_CELLS_HORIZ )
     357           0 :         nNewCol = 0;
     358             : 
     359           0 :     if ( nNewLine < 0 || nNewLine > TABLE_CELLS_VERT )
     360           0 :         nNewLine = 0;
     361             : 
     362           0 :     if ( nNewCol != nCol || nNewLine != nLine )
     363             :     {
     364           0 :         nCol = nNewCol;
     365           0 :         nLine = nNewLine;
     366           0 :         Invalidate( Rectangle( mnTablePosX, mnTablePosY, mnTableWidth, mnTableHeight ) );
     367             :     }
     368           0 : }
     369             : 
     370             : 
     371             : 
     372           0 : void TableWindow::TableDialog( const Sequence< PropertyValue >& rArgs )
     373             : {
     374           0 :     Reference< XDispatchProvider > xDispatchProvider( mxFrame, UNO_QUERY );
     375           0 :     if ( xDispatchProvider.is() )
     376             :     {
     377           0 :         com::sun::star::util::URL aTargetURL;
     378           0 :         Reference < XURLTransformer > xTrans( URLTransformer::create(::comphelper::getProcessComponentContext()) );
     379           0 :         aTargetURL.Complete = maCommand;
     380           0 :         xTrans->parseStrict( aTargetURL );
     381             : 
     382           0 :         Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch( aTargetURL, OUString(), 0 );
     383           0 :         if ( xDispatch.is() )
     384           0 :             xDispatch->dispatch( aTargetURL, rArgs );
     385           0 :     }
     386           0 : }
     387             : 
     388             : 
     389             : 
     390           0 : void TableWindow::CloseAndShowTableDialog()
     391             : {
     392             :     // close the toolbar tool
     393           0 :     EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL );
     394             : 
     395             :     // and open the table dialog instead
     396           0 :     TableDialog( Sequence< PropertyValue >() );
     397           0 : }
     398             : 
     399           0 : class ColumnsWindow : public SfxPopupWindow
     400             : {
     401             : private:
     402             :     ::Color             aLineColor;
     403             :     ::Color             aHighlightLineColor;
     404             :     ::Color             aFillColor;
     405             :     ::Color             aHighlightFillColor;
     406             :     ::Color             aFaceColor;
     407             :     long                nCol;
     408             :     long                nWidth;
     409             :     long                nMX;
     410             :     long                nTextHeight;
     411             :     bool                bInitialKeyInput;
     412             :     bool                m_bMod1;
     413             :     ToolBox&            rTbx;
     414             :     Reference< XFrame > mxFrame;
     415             :     OUString            maCommand;
     416             : 
     417             :     void UpdateSize_Impl( long nNewCol );
     418             : public:
     419             :                             ColumnsWindow( sal_uInt16 nId, const OUString& rCmd, const OUString &rText, ToolBox& rParentTbx, const Reference< XFrame >& rFrame );
     420             : 
     421             :     void                    KeyInput( const KeyEvent& rKEvt ) SAL_OVERRIDE;
     422             :     virtual void            MouseMove( const MouseEvent& rMEvt ) SAL_OVERRIDE;
     423             :     virtual void            MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE;
     424             :     virtual void            MouseButtonUp( const MouseEvent& rMEvt ) SAL_OVERRIDE;
     425             :     virtual void            Paint( const Rectangle& ) SAL_OVERRIDE;
     426             :     virtual void            PopupModeEnd() SAL_OVERRIDE;
     427             :     virtual SfxPopupWindow* Clone() const SAL_OVERRIDE;
     428             : };
     429             : 
     430             : 
     431             : 
     432           0 : ColumnsWindow::ColumnsWindow( sal_uInt16 nId, const OUString& rCmd, const OUString& rText, ToolBox& rParentTbx, const Reference< XFrame >& rFrame ) :
     433             :     SfxPopupWindow( nId, rFrame, WB_STDPOPUP ),
     434             :     bInitialKeyInput(true),
     435             :     m_bMod1(false),
     436             :     rTbx(rParentTbx),
     437             :     mxFrame(rFrame),
     438           0 :     maCommand( rCmd )
     439             : {
     440           0 :     const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
     441           0 :     svtools::ColorConfig aColorConfig;
     442           0 :     aLineColor = ::Color( aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor );
     443           0 :     aHighlightLineColor = rStyles.GetHighlightTextColor();
     444           0 :     aFillColor = rStyles.GetWindowColor();
     445           0 :     aHighlightFillColor = rStyles.GetHighlightColor();
     446           0 :     aFaceColor = rStyles.GetFaceColor();
     447             : 
     448           0 :     nTextHeight = GetTextHeight()+1;
     449           0 :     SetBackground();
     450           0 :     vcl::Font aFont( GetFont() );
     451           0 :     aFont.SetColor( aLineColor );
     452           0 :     aFont.SetFillColor( aFaceColor );
     453           0 :     aFont.SetTransparent( false );
     454           0 :     SetFont( aFont );
     455             : 
     456           0 :     nCol        = 0;
     457           0 :     nWidth      = 4;
     458             : 
     459           0 :     SetText( rText );
     460             : 
     461           0 :     Size aLogicSize = LogicToPixel( Size( 95, 155 ), MapMode( MAP_10TH_MM ) );
     462           0 :     nMX = aLogicSize.Width();
     463           0 :     SetOutputSizePixel( Size( nMX*nWidth-1, aLogicSize.Height()+nTextHeight ) );
     464           0 :     StartCascading();
     465           0 : }
     466             : 
     467             : 
     468             : 
     469           0 : SfxPopupWindow* ColumnsWindow::Clone() const
     470             : {
     471           0 :     return new ColumnsWindow( GetId(), maCommand, GetText(), rTbx, mxFrame );
     472             : }
     473             : 
     474             : 
     475             : 
     476           0 : void ColumnsWindow::MouseMove( const MouseEvent& rMEvt )
     477             : {
     478           0 :     SfxPopupWindow::MouseMove( rMEvt );
     479           0 :     Point aPos = rMEvt.GetPosPixel();
     480           0 :     Point aMousePos = aPos;
     481             : 
     482           0 :     if ( rMEvt.IsEnterWindow() )
     483           0 :         CaptureMouse();
     484           0 :     else if ( aMousePos.X() < 0 || aMousePos.Y() < 0 )
     485             :     {
     486           0 :         nCol = 0;
     487           0 :         ReleaseMouse();
     488           0 :         Invalidate();
     489           0 :         return;
     490             :     }
     491             : 
     492           0 :     long    nNewCol = 0;
     493           0 :     if ( aPos.X() > 0 )
     494           0 :         nNewCol = aPos.X() / nMX + 1;
     495           0 :     if ( aPos.Y() < 0 )
     496           0 :         nNewCol = 0;
     497           0 :     if ( nNewCol > 20 )
     498           0 :         nNewCol = 20;
     499           0 :     UpdateSize_Impl( nNewCol );
     500             : }
     501             : 
     502           0 : void ColumnsWindow::UpdateSize_Impl( long nNewCol )
     503             : {
     504           0 :     Size    aWinSize = GetOutputSizePixel();
     505           0 :     Point   aWinPos;// = GetPosPixel();
     506             : 
     507           0 :     if ( nWidth <= nNewCol )
     508             :     {
     509           0 :         Point aMaxPos = OutputToScreenPixel( GetDesktopRectPixel().BottomRight() );
     510             : 
     511           0 :         if ( nWidth <= nNewCol )
     512             :         {
     513           0 :             nWidth = nNewCol;
     514           0 :             nWidth++;
     515             :         }
     516             : 
     517           0 :         while ( nWidth > 0 &&
     518           0 :                 (short)(aWinPos.X()+(nMX*nWidth-1)) >= aMaxPos.X()-3 )
     519           0 :             nWidth--;
     520             : 
     521           0 :         if ( nNewCol > nWidth )
     522           0 :             nNewCol = nWidth;
     523             : 
     524           0 :         Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2,
     525           0 :                                aWinSize.Width(), aWinSize.Height() ) );
     526           0 :         SetOutputSizePixel( Size( nMX*nWidth-1, aWinSize.Height() ) );
     527             :     }
     528             : 
     529             : 
     530           0 :     if ( nNewCol != nCol )
     531             :     {
     532           0 :         Invalidate( Rectangle( 0, aWinSize.Height()-nTextHeight+2,
     533           0 :                                aWinSize.Width(), aWinSize.Height() ) );
     534             : 
     535           0 :         long nMinCol = 0, nMaxCol = 0;
     536             : 
     537           0 :         if ( nNewCol < nCol )
     538             :         {
     539           0 :             nMinCol = nNewCol;
     540           0 :             nMaxCol = nCol;
     541             :         }
     542             :         else
     543             :         {
     544           0 :             nMinCol = nCol;
     545           0 :             nMaxCol = nNewCol;
     546             :         }
     547             : 
     548           0 :         Invalidate( Rectangle( nMinCol*nMX-1, 0,
     549           0 :                                nMaxCol*nMX+1, aWinSize.Height()-nTextHeight+2 ) );
     550           0 :         nCol  = nNewCol;
     551             :     }
     552           0 :     Update();
     553           0 : }
     554             : 
     555             : 
     556           0 : void ColumnsWindow::MouseButtonDown( const MouseEvent& rMEvt )
     557             : {
     558           0 :     SfxPopupWindow::MouseButtonDown( rMEvt );
     559           0 :     CaptureMouse();
     560           0 : }
     561             : 
     562           0 : void ColumnsWindow::KeyInput( const KeyEvent& rKEvt )
     563             : {
     564           0 :     bool bHandled = false;
     565           0 :     sal_uInt16 nModifier = rKEvt.GetKeyCode().GetModifier();
     566           0 :     sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode();
     567           0 :     if(!nModifier)
     568             :     {
     569           0 :         if( KEY_LEFT == nKey || KEY_RIGHT == nKey ||
     570           0 :             KEY_RETURN == nKey ||KEY_ESCAPE == nKey ||
     571             :             KEY_UP == nKey)
     572             :         {
     573           0 :             bHandled = true;
     574           0 :             long nNewCol = nCol;
     575           0 :             switch(nKey)
     576             :             {
     577             :                 case KEY_LEFT :
     578           0 :                     if(nNewCol)
     579           0 :                         nNewCol--;
     580           0 :                 break;
     581             :                 case KEY_RIGHT :
     582           0 :                     nNewCol++;
     583           0 :                 break;
     584             :                 case KEY_RETURN :
     585           0 :                     if(IsMouseCaptured())
     586           0 :                         ReleaseMouse();
     587           0 :                     EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
     588           0 :                 break;
     589             :                 case KEY_ESCAPE :
     590             :                 case KEY_UP :
     591           0 :                     EndPopupMode( FLOATWIN_POPUPMODEEND_CANCEL);
     592           0 :                 break;
     593             :             }
     594             :             //make sure that a table can initially be created
     595           0 :             if(bInitialKeyInput)
     596             :             {
     597           0 :                 bInitialKeyInput = false;
     598           0 :                 if(!nNewCol)
     599           0 :                     nNewCol = 1;
     600             :             }
     601           0 :             UpdateSize_Impl( nNewCol );
     602             :         }
     603             :     }
     604           0 :     else if(KEY_MOD1 == nModifier && KEY_RETURN == nKey)
     605             :     {
     606           0 :         m_bMod1 = true;
     607           0 :         if(IsMouseCaptured())
     608           0 :             ReleaseMouse();
     609           0 :         EndPopupMode(FLOATWIN_POPUPMODEEND_CLOSEALL );
     610             :     }
     611           0 :     if(!bHandled)
     612           0 :         SfxPopupWindow::KeyInput(rKEvt);
     613           0 : }
     614             : 
     615             : 
     616             : 
     617           0 : void ColumnsWindow::MouseButtonUp( const MouseEvent& rMEvt )
     618             : {
     619           0 :     SfxPopupWindow::MouseButtonUp( rMEvt );
     620           0 :     ReleaseMouse();
     621             : 
     622           0 :     if ( IsInPopupMode() )
     623           0 :         EndPopupMode( FLOATWIN_POPUPMODEEND_CLOSEALL );
     624           0 : }
     625             : 
     626             : 
     627             : 
     628           0 : void ColumnsWindow::Paint( const Rectangle& )
     629             : {
     630             :     long    i;
     631             :     long    j;
     632             :     long    nLineWidth;
     633           0 :     Size    aSize = GetOutputSizePixel();
     634             : 
     635           0 :     for ( i = 0; i < nWidth; i++ )
     636             :     {
     637           0 :         if ( i < nCol )
     638             :         {
     639           0 :             SetLineColor( aHighlightLineColor );
     640           0 :             SetFillColor( aHighlightFillColor );
     641             :         }
     642             :         else
     643             :         {
     644           0 :             SetLineColor( aLineColor );
     645           0 :             SetFillColor( aFillColor );
     646             :         }
     647             : 
     648           0 :         DrawRect( Rectangle( i*nMX-1, -1,
     649           0 :                              i*nMX+nMX, aSize.Height()-nTextHeight+1 ) );
     650             : 
     651           0 :         j = 4;
     652           0 :         while ( j < aSize.Height()-nTextHeight-4 )
     653             :         {
     654           0 :             if ( !(j % 16) )
     655           0 :                 nLineWidth = 10;
     656             :             else
     657           0 :                 nLineWidth = 4;
     658           0 :             DrawLine( Point( i*nMX+4, j ), Point( i*nMX+nMX-nLineWidth-4, j ) );
     659           0 :             j += 4;
     660             :         }
     661             :     }
     662             : 
     663           0 :     SetLineColor();
     664           0 :     SetFillColor( aFaceColor );
     665           0 :     OUString aText;
     666           0 :     if ( nCol )
     667           0 :         aText = OUString::number(nCol);
     668             :     else
     669           0 :         aText = comphelper::string::remove(Button::GetStandardText(BUTTON_CANCEL), '~');
     670             : 
     671           0 :     Size aTextSize(GetTextWidth( aText ), GetTextHeight());
     672           0 :     DrawText( Point( ( aSize.Width() - aTextSize.Width() ) / 2, aSize.Height() - nTextHeight + 2 ), aText );
     673             : 
     674           0 :     DrawRect( Rectangle( 0, aSize.Height()-nTextHeight+2, (aSize.Width()-aTextSize.Width())/2-1, aSize.Height() ) );
     675           0 :     DrawRect( Rectangle( (aSize.Width()-aTextSize.Width())/2+aTextSize.Width(), aSize.Height()-nTextHeight+2, aSize.Width(), aSize.Height() ) );
     676             : 
     677           0 :     SetLineColor( aLineColor );
     678           0 :     SetFillColor();
     679           0 :     DrawRect( Rectangle( 0, 0, aSize.Width() - 1, aSize.Height() - nTextHeight + 1 ) );
     680           0 : }
     681             : 
     682             : 
     683             : 
     684           0 : void ColumnsWindow::PopupModeEnd()
     685             : {
     686           0 :     if ( !IsPopupModeCanceled() && nCol )
     687             :     {
     688           0 :         Sequence< PropertyValue > aArgs( 2 );
     689           0 :         aArgs[0].Name = "Columns";
     690           0 :         aArgs[0].Value = makeAny( sal_Int16( nCol ));
     691           0 :         aArgs[1].Name = "Modifier";
     692           0 :         aArgs[1].Value = makeAny( sal_Int16( m_bMod1 ? KEY_MOD1 : 0 ));
     693             : 
     694           0 :         SfxToolBoxControl::Dispatch( Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
     695             :                                         maCommand,
     696           0 :                                         aArgs );
     697             :     }
     698           0 :     else if ( IsPopupModeCanceled() )
     699           0 :         ReleaseMouse();
     700           0 :     SfxPopupWindow::PopupModeEnd();
     701           0 : }
     702             : 
     703         890 : SvxTableToolBoxControl::SvxTableToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
     704             :     SfxToolBoxControl( nSlotId, nId, rTbx ),
     705         890 :     bEnabled( true )
     706             : {
     707         890 :     rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWNONLY | rTbx.GetItemBits( nId ) );
     708         890 :     rTbx.Invalidate();
     709         890 : }
     710             : 
     711             : 
     712             : 
     713        1780 : SvxTableToolBoxControl::~SvxTableToolBoxControl()
     714             : {
     715        1780 : }
     716             : 
     717             : 
     718             : 
     719           0 : SfxPopupWindowType SvxTableToolBoxControl::GetPopupWindowType() const
     720             : {
     721           0 :     return SFX_POPUPWINDOW_ONTIMEOUTANDMOVE;
     722             : }
     723             : 
     724             : 
     725             : 
     726           0 : SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindow()
     727             : {
     728           0 :     if ( bEnabled )
     729             :     {
     730           0 :         ToolBox& rTbx = GetToolBox();
     731           0 :         TableWindow* pWin = new TableWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), rTbx, m_xFrame );
     732           0 :         pWin->StartPopupMode( &rTbx, FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE );
     733           0 :         SetPopupWindow( pWin );
     734           0 :         return pWin;
     735             :     }
     736           0 :     return 0;
     737             : }
     738             : 
     739             : 
     740             : 
     741           0 : SfxPopupWindow* SvxTableToolBoxControl::CreatePopupWindowCascading()
     742             : {
     743           0 :     if ( bEnabled )
     744           0 :         return new TableWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), GetToolBox(), m_xFrame );
     745           0 :     return 0;
     746             : }
     747             : 
     748             : 
     749             : 
     750         919 : void SvxTableToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
     751             : {
     752         919 :     if ( pState && pState->ISA(SfxUInt16Item) )
     753             :     {
     754           0 :         sal_Int16 nValue = static_cast< const SfxUInt16Item* >( pState )->GetValue();
     755           0 :         bEnabled = ( nValue != 0 );
     756             :     }
     757             :     else
     758         919 :         bEnabled = SfxItemState::DISABLED != eState;
     759             : 
     760         919 :     sal_uInt16 nId = GetId();
     761         919 :     ToolBox& rTbx = GetToolBox();
     762             : 
     763         919 :     rTbx.EnableItem( nId, SfxItemState::DISABLED != eState );
     764             :     rTbx.SetItemState( nId,
     765         919 :         ( SfxItemState::DONTCARE == eState ) ? TRISTATE_INDET : TRISTATE_FALSE );
     766         919 : }
     767             : 
     768           0 : SvxColumnsToolBoxControl::SvxColumnsToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
     769             :     : SfxToolBoxControl(nSlotId, nId, rTbx)
     770           0 :     , bEnabled(false)
     771             : {
     772           0 :     rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWN | rTbx.GetItemBits( nId ) );
     773           0 :     rTbx.Invalidate();
     774           0 : }
     775             : 
     776             : 
     777             : 
     778           0 : SvxColumnsToolBoxControl::~SvxColumnsToolBoxControl()
     779             : {
     780           0 : }
     781             : 
     782             : 
     783             : 
     784           0 : SfxPopupWindowType SvxColumnsToolBoxControl::GetPopupWindowType() const
     785             : {
     786           0 :     return SFX_POPUPWINDOW_ONTIMEOUTANDMOVE;
     787             : }
     788             : 
     789             : 
     790             : 
     791           0 : SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindow()
     792             : {
     793           0 :     ColumnsWindow* pWin = 0;
     794           0 :     if(bEnabled)
     795             :     {
     796           0 :             pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), GetToolBox(), m_xFrame );
     797           0 :             pWin->StartPopupMode( &GetToolBox(),
     798           0 :                                   FLOATWIN_POPUPMODE_GRABFOCUS|FLOATWIN_POPUPMODE_NOKEYCLOSE );
     799           0 :             SetPopupWindow( pWin );
     800             :     }
     801           0 :     return pWin;
     802             : }
     803             : 
     804             : 
     805             : 
     806           0 : SfxPopupWindow* SvxColumnsToolBoxControl::CreatePopupWindowCascading()
     807             : {
     808           0 :     ColumnsWindow* pWin = 0;
     809           0 :     if(bEnabled)
     810             :     {
     811           0 :         pWin = new ColumnsWindow( GetSlotId(), m_aCommandURL, GetToolBox().GetItemText( GetId() ), GetToolBox(), m_xFrame );
     812             :     }
     813           0 :     return pWin;
     814             : }
     815             : 
     816           0 : void SvxColumnsToolBoxControl::StateChanged( sal_uInt16 nSID,
     817             :                                               SfxItemState eState,
     818             :                                               const SfxPoolItem* pState )
     819             : {
     820           0 :     bEnabled = SfxItemState::DISABLED != eState;
     821           0 :     SfxToolBoxControl::StateChanged(nSID,   eState, pState );
     822         594 : }
     823             : 
     824             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10