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

Generated by: LCOV version 1.10