Added: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx?rev=1459509&view=auto
==============================================================================
--- 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx
 (added)
+++ 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx
 Thu Mar 21 20:23:16 2013
@@ -0,0 +1,813 @@
+/**************************************************************
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ *************************************************************/
+
+#include "precompiled_svx.hxx"
+#include "ParaLineSpacingControl.hxx"
+#include "ParaPropertyPanel.hrc"
+#include <sfx2/sidebar/propertypanel.hrc>
+#include <svx/dialogs.hrc>
+#include <svx/dialmgr.hxx>
+#include <unotools/viewoptions.hxx>
+#include <editeng/kernitem.hxx>
+#include <sfx2/bindings.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/sidebar/Theme.hxx>
+#include <svtools/unitconv.hxx>
+
+#define _DEFAULT_LINE_SPACING  200
+#define FIX_DIST_DEF           283
+#define LINESPACE_1            100
+#define LINESPACE_15           150
+#define LINESPACE_2            200
+#define LINESPACE_115          115
+
+#define LLINESPACE_1          0
+#define LLINESPACE_15         1
+#define LLINESPACE_2          2
+#define LLINESPACE_PROP       3
+#define LLINESPACE_MIN        4
+#define LLINESPACE_DURCH      5
+#define LLINESPACE_FIX        6
+
+#define DO_NOT_CUSTOM          0
+#define USE_CUSTOM             1
+
+namespace svx { namespace sidebar {
+
+
+ParaLineSpacingControl::ParaLineSpacingControl(Window* pParent, 
svx::sidebar::ParaPropertyPanel& rPanel)
+:      PopupControl( pParent,SVX_RES(RID_POPUPPANEL_PARAPAGE_LINESPACING))
+,      mrParaPropertyPanel(rPanel)
+,      mpBindings(NULL)
+,aLineDist                             ( this, SVX_RES( LB_LINE_SPACING )),
+aLineDistAtPercentBox  ( this, SVX_RES( ED_SBINDE_LINEDISTPERCENT ) ),
+aLineDistAtMetricBox   ( this, SVX_RES( ED_SBINDE_LINEDISTPOINT ) ),
+maCustomFT        ( this, SVX_RES( FT_CUSTOM ) ),
+maLSpacingFT      ( this, SVX_RES( FT_LINE_SPACING ) ),
+maOfFT            ( this, SVX_RES( FT_OF ) ),
+maSpacing1       (SVX_RES(IMG_SPACING1)),
+maSpacing115     (SVX_RES(IMG_SPACING115)),
+maSpacing15      (SVX_RES(IMG_SPACING15)),
+maSpacing2       (SVX_RES(IMG_SPACING2)),
+maLPCustom       (SVX_RES(IMG_SPACINGLCUSTOM)),
+maSelSpacing1    (SVX_RES(IMG_SEL_SPACING1)),
+maSelSpacing115  (SVX_RES(IMG_SEL_SPACING115)),
+maSelSpacing15   (SVX_RES(IMG_SEL_SPACING15)),
+maSelSpacing2    (SVX_RES(IMG_SEL_SPACING2)),
+maImgCusGrey    (SVX_RES(IMG_CUSTOM_GRAY)),
+maImgCus                (SVX_RES(IMG_CUSTOM)),
+maStrCus                (SVX_RES(STR_LCVALUE)),
+pActLineDistFld                ( &aLineDistAtPercentBox ),
+nMinFixDist                        ( BEGIN_VALUE ),
+maValue                 ( 0 ),
+maPos                   ( 0 ),
+maLineSpacing          (ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES( 
LINE_SPACING ) ),
+mpImg                  (NULL),
+mpImgSel               (NULL),
+mpStr                  (NULL),
+mpStrTip               (NULL),
+maLine                 (SVX_RES(STR_LSPACING)),
+maOf                   (SVX_RES(STR_LS_OF))
+, mbUseLineSPCustom             (0)
+, mbLineSPDisable               (0)
+{
+       initial();
+       FreeResource();
+       mpBindings = mrParaPropertyPanel.GetBindings();
+//     m_eLNSpaceUnit = mrParaPropertyPanel.maLNSpaceControl.GetCoreMetric();
+       m_eLNSpaceUnit = SFX_MAPUNIT_100TH_MM;
+}
+ParaLineSpacingControl::~ParaLineSpacingControl()
+{
+       delete[] mpImg;
+       delete[] mpImgSel;
+       delete[] mpStr;
+       delete[] mpStrTip;
+}
+/*void TextCharacterSpacingControl::Paint(const Rectangle& rect)
+{
+       svx::sidebar::PopupControl::Paint(rect);
+       Color aOldLineColor = GetLineColor();
+       Color aOldFillColor = GetFillColor();
+
+       //Point aPos = maBorder.GetPosPixel();  
+       //Size aSize = maBorder.GetSizePixel();
+       Point aPos( LogicToPixel( Point( CUSTOM_X, CUSTOM_Y), MAP_APPFONT ));
+       Size aSize( LogicToPixel( Size(  CUSTOM_WIDTH, CUSTOM_HEIGHT ), 
MAP_APPFONT ));
+       Rectangle aRect( aPos, aSize );
+       aRect.Left() -= 1;
+       aRect.Top() -= 1;
+       aRect.Right() += 1;
+       aRect.Bottom() += 1;
+
+
+       Color aLineColor(189,201,219);
+       if(!GetSettings().GetStyleSettings().GetHighContrastMode())
+               SetLineColor(aLineColor);
+       else
+               SetLineColor(GetSettings().GetStyleSettings().GetShadowColor());
+       SetFillColor(COL_TRANSPARENT);
+       //add  for high contract
+       //if(GetSettings().GetStyleSettings().GetHighContrastMode())
+       //{
+       //      
maBorder.SetBackground(GetSettings().GetStyleSettings().GetMenuColor());
+       //      
maFTSpacing.SetBackground(GetSettings().GetStyleSettings().GetMenuColor());
+       //      
maFTBy.SetBackground(GetSettings().GetStyleSettings().GetMenuColor());
+       //}
+       DrawRect(aRect);
+
+
+       SetLineColor(aOldLineColor);
+       SetFillColor(aOldFillColor);
+}*/
+void ParaLineSpacingControl::initial()
+{
+       maLineSpacing.SetStyle( maLineSpacing.GetStyle()| WB_3DLOOK |  
WB_NO_DIRECTSELECT  );
+       
maLineSpacing.SetControlBackground(GetSettings().GetStyleSettings().GetMenuColor());
+       maLineSpacing.SetColor(GetSettings().GetStyleSettings().GetMenuColor());
+       //maLineSpacing.SetMinFont();
+
+       mpImg = new Image[4];
+       mpImg[0] = maSpacing1;
+       mpImg[1] = maSpacing115;
+       mpImg[2] = maSpacing15;
+       mpImg[3] = maSpacing2;
+
+       mpImgSel = new Image[4];
+       mpImgSel[0] = maSelSpacing1;
+       mpImgSel[1] = maSelSpacing115;
+       mpImgSel[2] = maSelSpacing15;
+       mpImgSel[3] = maSelSpacing2;
+
+       mpStr = new XubString[4];
+       mpStr[0] = XubString(SVX_RES(STR_SPACING1));
+       mpStr[1] = XubString(SVX_RES(STR_SPACING115));
+       mpStr[2] = XubString(SVX_RES(STR_SPACING15));
+       mpStr[3] = XubString(SVX_RES(STR_SPACING2));
+
+       mpStrTip = new XubString[4];
+       mpStrTip[0] = XubString(SVX_RES(STR_LS_SINGLE));
+       mpStrTip[1] = XubString(SVX_RES(STR_LS_115));
+       mpStrTip[2] = XubString(SVX_RES(STR_LS_15));
+       mpStrTip[3] = XubString(SVX_RES(STR_LS_DOUBLE));
+       for (int i=0;i<4;i++)
+               maLineSpacing.AddItem(mpImg[i], 
&mpImgSel[i],mpStr[i],&mpStrTip[i]);
+
+       maLineSpacing.InsertCustom(maImgCus, maImgCusGrey, maStrCus);
+       maLineSpacing.SetCustomTip(maStrCus); //Add
+
+       SetAllNoSel();
+       Link aLink = LINK(this, ParaLineSpacingControl,VSSelHdl );
+       maLineSpacing.SetSelectHdl(aLink);
+       maLineSpacing.StartSelection();
+       maLineSpacing.Show();
+
+       aLink = LINK( this, ParaLineSpacingControl, LineSPDistHdl_Impl );
+       aLineDist.SetSelectHdl(aLink);
+       aLineDist.SelectEntryPos( LLINESPACE_1 ) ;
+       aLink = LINK( this, ParaLineSpacingControl, LineSPDistAtHdl_Impl );
+       aLineDistAtPercentBox.SetModifyHdl( aLink );
+       aLineDistAtMetricBox.SetModifyHdl( aLink );
+}
+void ParaLineSpacingControl::ToGetFocus(bool bType)
+{
+       if(!bType)
+               aLineDist.GrabFocus();
+       else
+               maLineSpacing.GrabFocus();      //wj
+}
+
+void ParaLineSpacingControl::Rearrange(SfxItemState currSPState,FieldUnit 
currMetricUnit,SvxLineSpacingItem* currSPItem,const 
::sfx2::sidebar::EnumContext currentContext)
+{
+       SvtViewOptions aWinOpt( E_WINDOW, LSP_POS_GLOBAL_VALUE );
+    if ( aWinOpt.Exists() )
+       {
+               ::com::sun::star::uno::Sequence < 
::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData();
+               ::rtl::OUString aTmp;
+               if ( aSeq.getLength())
+                       aSeq[0].Value >>= aTmp;
+
+               String aWinData( aTmp );
+               maPos = (sal_uInt16)aWinData.ToInt32();
+       }
+
+       SvtViewOptions aWinOpt2( E_WINDOW, LSP_LV_GLOBAL_VALUE );
+    if ( aWinOpt2.Exists() )
+       {
+               ::com::sun::star::uno::Sequence < 
::com::sun::star::beans::NamedValue > aSeq = aWinOpt2.GetUserData();
+               ::rtl::OUString aTmp;
+               if ( aSeq.getLength())
+                       aSeq[0].Value >>= aTmp;
+
+               String aWinData( aTmp );
+               maValue = (sal_uInt16)aWinData.ToInt32();
+       }
+       String sHelpText;
+       switch(maPos)
+       {
+               case LLINESPACE_1:
+                       sHelpText += mpStrTip[0];
+                       break;
+               case LLINESPACE_15:
+                       sHelpText += mpStrTip[2];
+                       break;
+               case LLINESPACE_2:
+                       sHelpText += mpStrTip[3];
+                       break;
+               case LLINESPACE_PROP:
+                       sHelpText +=maLine;
+                       sHelpText.Append(String("Proportion: ", 12, 
RTL_TEXTENCODING_ASCII_US));
+                       sHelpText += maOf;
+                       sHelpText.Append( String::CreateFromInt64( maValue ));
+                       break;
+               case LLINESPACE_MIN:
+                       sHelpText += maLine;
+                       sHelpText.Append(String("At Least: ", 10, 
RTL_TEXTENCODING_ASCII_US));
+                       sHelpText += maOf;
+                       sHelpText.Append( String::CreateFromInt64( maValue ));
+                       break;
+               case LLINESPACE_DURCH:
+                       sHelpText += maLine;
+                       sHelpText.Append(String("Leading: ", 9, 
RTL_TEXTENCODING_ASCII_US));
+                       sHelpText += maOf;
+                       sHelpText.Append( String::CreateFromInt64( maValue ));
+                       break;
+               case LLINESPACE_FIX:
+                       sHelpText += maLine;
+                       sHelpText.Append(String("Fixed: ", 7, 
RTL_TEXTENCODING_ASCII_US));
+                       sHelpText += maOf;
+                       sHelpText.Append( String::CreateFromInt64( maValue ));
+                       break;
+       }
+       if( !aWinOpt.Exists() && !aWinOpt2.Exists() )
+               mbLineSPDisable = sal_True;
+       else 
+               mbLineSPDisable = sal_False;
+
+       if( mbLineSPDisable )
+               maLineSpacing.SetCusEnable(0);
+       else
+       {
+               maLineSpacing.SetCusEnable(1);
+               maLineSpacing.SetCustomTip(sHelpText,sal_True);//Modify for 
Sym2_7266
+       }
+
+       SfxItemState eState = currSPState;
+
+       SetFieldUnit( aLineDistAtMetricBox, currMetricUnit );
+
+//     mpLineSPPage->SetAllNoSel();
+       aLineDist.Enable();
+       pActLineDistFld->Enable();
+       pActLineDistFld->SetText( String() );
+       bool bValueSetFocus = sal_False;                //wj
+
+       if( eState >= SFX_ITEM_AVAILABLE )
+       {
+       //      SfxMapUnit eUnit = maLNSpaceControl.GetCoreMetric();
+               SfxMapUnit eUnit = SFX_MAPUNIT_100TH_MM;
+               m_eLNSpaceUnit = eUnit;
+
+               switch( currSPItem->GetLineSpaceRule() )
+               {
+               case SVX_LINE_SPACE_AUTO:
+                       {
+                               SvxInterLineSpace eInter = 
currSPItem->GetInterLineSpaceRule();
+
+                               switch( eInter )
+                               {
+                               case SVX_INTER_LINE_SPACE_OFF:
+                                       {
+                                               aLineDist.SelectEntryPos( 
LLINESPACE_1 );       
+                                               pActLineDistFld->Disable();
+                                               pActLineDistFld->SetText( 
String() );
+                                               mbUseLineSPCustom = 
DO_NOT_CUSTOM;
+                                               if ( LINESPACE_1 == 
currSPItem->GetPropLineSpace() )
+                                               {
+                                                       
maLineSpacing.SetSelItem(1);
+                                                       bValueSetFocus = 
sal_True;      //wj
+                                               }
+                                       }
+                                       break;
+
+                               case SVX_INTER_LINE_SPACE_PROP:
+                                       {
+                                               if ( LINESPACE_1 == 
currSPItem->GetPropLineSpace() )
+                                               {
+                                                       
aLineDist.SelectEntryPos( LLINESPACE_1 );
+                                                       
pActLineDistFld->Disable();
+                                                       
pActLineDistFld->SetText( String() );
+                                                       mbUseLineSPCustom = 
DO_NOT_CUSTOM;
+                                                       
maLineSpacing.SetSelItem(1);
+                                                       bValueSetFocus = 
sal_True;      //wj
+                                                       break;
+                                               }
+                                               if ( LINESPACE_15 == 
currSPItem->GetPropLineSpace() )
+                                               {
+                                                       
aLineDist.SelectEntryPos( LLINESPACE_15 );
+                                                       
pActLineDistFld->Disable();
+                                                       
pActLineDistFld->SetText( String() );
+
+                                                       mbUseLineSPCustom = 
DO_NOT_CUSTOM;
+                                                       
maLineSpacing.SetSelItem(3);
+                                                       bValueSetFocus = 
sal_True;      //wj
+                                                       break;
+                                               }
+                                               if ( LINESPACE_2 == 
currSPItem->GetPropLineSpace() )
+                                               {
+                                                       
aLineDist.SelectEntryPos( LLINESPACE_2 );
+                                                       
pActLineDistFld->Disable();
+                                                       
pActLineDistFld->SetText( String() );
+                                                       
+                                                       mbUseLineSPCustom = 
DO_NOT_CUSTOM;
+                                                       
maLineSpacing.SetSelItem(4);                                                    
+                                                       bValueSetFocus = 
sal_True;      //wj
+                                                       break;
+                                               }
+
+                                               aLineDist.SelectEntryPos( 
LLINESPACE_PROP );
+                                               if(pActLineDistFld != 
&(aLineDistAtPercentBox))
+                                               {
+                                                       
pActLineDistFld->Disable();
+                                                       pActLineDistFld->Hide();
+                                                       pActLineDistFld = 
&(aLineDistAtPercentBox);
+                                               }
+                                               else
+                                               {
+                                                       pActLineDistFld = 
&(aLineDistAtMetricBox);
+                                                       
pActLineDistFld->Disable();
+                                                       pActLineDistFld->Hide();
+                                                       pActLineDistFld = 
&(aLineDistAtPercentBox);
+                                               }
+                                               pActLineDistFld->Enable();
+                                               pActLineDistFld->Show();
+                                               aLineDistAtPercentBox.
+                                                       SetValue( 
aLineDistAtPercentBox.Normalize(
+                                                       
currSPItem->GetPropLineSpace() ) );
+
+                                               if( 
currSPItem->GetPropLineSpace() == LINESPACE_115 )
+                                               {
+                                                       mbUseLineSPCustom = 
DO_NOT_CUSTOM;
+                                                       
maLineSpacing.SetSelItem(2);
+                                                       bValueSetFocus = 
sal_True;      //wj
+                                               }
+                                               else
+                                               {
+                                                       mbUseLineSPCustom = 
USE_CUSTOM;
+                                                       
maLineSpacing.SetSelItem(0);
+                                               }
+                                       }
+                                       break;
+
+                               case SVX_INTER_LINE_SPACE_FIX:
+                                       {
+                                               if(pActLineDistFld != 
&(aLineDistAtMetricBox))
+                                               {
+                                                       
pActLineDistFld->Disable();
+                                                       pActLineDistFld->Hide();
+                                                       pActLineDistFld = 
&(aLineDistAtMetricBox);
+                                               }
+                                               else
+                                               {
+                                                       pActLineDistFld = 
&(aLineDistAtPercentBox);
+                                                       
pActLineDistFld->Disable();
+                                                       pActLineDistFld->Hide();
+                                                       pActLineDistFld = 
&(aLineDistAtMetricBox);
+                                               }
+                                               pActLineDistFld->Enable();
+                                               pActLineDistFld->Show();
+                                               maLineSpacing.SetSelItem(0);
+
+                                               SetMetricValue( 
aLineDistAtMetricBox,
+                                                       
currSPItem->GetInterLineSpace(), eUnit );
+                                               aLineDist.SelectEntryPos( 
LLINESPACE_DURCH );
+
+                                               mbUseLineSPCustom = USE_CUSTOM;
+                                       }
+                                       break;
+                               }
+                       }
+                       break;
+               case SVX_LINE_SPACE_FIX:
+                       {
+                               if(pActLineDistFld != &(aLineDistAtMetricBox))
+                               {
+                                       pActLineDistFld->Disable();
+                                       pActLineDistFld->Hide();
+                                       pActLineDistFld = 
&(aLineDistAtMetricBox);
+                               }
+                               else
+                               {
+                                       pActLineDistFld = 
&(aLineDistAtPercentBox);
+                                       pActLineDistFld->Disable();
+                                       pActLineDistFld->Hide();
+                                       pActLineDistFld = 
&(aLineDistAtMetricBox);
+                               }
+                               pActLineDistFld->Enable();
+                               pActLineDistFld->Show();
+                               maLineSpacing.SetSelItem(0);
+
+                               SetMetricValue(aLineDistAtMetricBox, 
currSPItem->GetLineHeight(), eUnit);
+                               aLineDist.SelectEntryPos( LLINESPACE_FIX );
+
+                               mbUseLineSPCustom = USE_CUSTOM;
+                       }
+                       break;
+
+               case SVX_LINE_SPACE_MIN:
+                       {
+                               if(pActLineDistFld != &(aLineDistAtMetricBox))
+                               {
+                                       pActLineDistFld->Disable();
+                                       pActLineDistFld->Hide();
+                                       pActLineDistFld = 
&(aLineDistAtMetricBox);
+                               }
+                               else
+                               {
+                                       pActLineDistFld = 
&(aLineDistAtPercentBox);
+                                       pActLineDistFld->Disable();
+                                       pActLineDistFld->Hide();
+                                       pActLineDistFld = 
&(aLineDistAtMetricBox);
+                               }
+                               pActLineDistFld->Enable();
+                               pActLineDistFld->Show();
+                               maLineSpacing.SetSelItem(0);
+
+                               SetMetricValue(aLineDistAtMetricBox, 
currSPItem->GetLineHeight(), eUnit);
+                               aLineDist.SelectEntryPos( LLINESPACE_MIN );
+                               mbUseLineSPCustom = USE_CUSTOM;
+                       }
+                       break;
+               }
+       }
+       else if( eState == SFX_ITEM_DISABLED )
+       {
+               aLineDist.Disable();
+               pActLineDistFld->Enable(sal_False);
+               pActLineDistFld->SetText( String() );
+               maLineSpacing.SetSelItem(0);
+       
+           mbUseLineSPCustom = DO_NOT_CUSTOM;
+       }
+       else
+       {
+               pActLineDistFld->Enable(sal_False);
+               pActLineDistFld->SetText( String() );
+               aLineDist.SetNoSelection();
+               maLineSpacing.SetSelItem(0);
+               mbUseLineSPCustom = DO_NOT_CUSTOM;              
+       }
+
+       aLineDist.SaveValue();
+
+       /*sal_uInt16 nID = pBox->GetCurItemId();
+       pBox->SetItemDown(nID, sal_True);
+
+       Size aFloatSz = GetOutputSizePixel();
+
+       GetLineSPFloatWin()->SetSizePixel( aFloatSz );
+
+       Point aPos=maLineSPTbx->GetPosPixel();
+       aPos.setX(aPos.getX());
+       aPos = OutputToScreenPixel( aPos );
+       Size aSize = maLineSPTbx->GetSizePixel();
+       Rectangle aRect( aPos, aSize );
+
+       GetLineSPFloatWin()->StartPopupMode( aRect, FLOATWIN_POPUPMODE_DOWN | 
FLOATWIN_POPUPMODE_NOFOCUSCLOSE);
+       
GetLineSPFloatWin()->SetPopupModeFlags(GetLineSPFloatWin()->GetPopupModeFlags() 
| FLOATWIN_POPUPMODE_NOAPPFOCUSCLOSE );
+
+       pLineSPPage->ToGetFocus(bValueSetFocus);
+       */
+       sal_uInt16 uCount = aLineDist.GetEntryCount();
+       if( uCount == LLINESPACE_FIX + 1 )
+       {
+               switch (currentContext.GetCombinedContext())
+               {
+                       case CombinedEnumContext(Application_Impress, 
Context_Table):
+                       case CombinedEnumContext(Application_Draw, 
Context_Table):
+                       case CombinedEnumContext(Application_Writer, 
Context_DrawText):
+                       case CombinedEnumContext(Application_Calc, 
Context_DrawText):
+                       case CombinedEnumContext(Application_Draw, 
Context_DrawText):
+                       case CombinedEnumContext(Application_Impress, 
Context_DrawText):
+                       case CombinedEnumContext(Application_Writer, 
Context_Annotation):
+                       case CombinedEnumContext(Application_Draw, 
Context_Draw):
+                       case CombinedEnumContext(Application_Draw, 
Context_TextObject):
+                       case CombinedEnumContext(Application_Draw, 
Context_Graphic):
+                       case CombinedEnumContext(Application_Impress, 
Context_Draw):
+                       case CombinedEnumContext(Application_Impress, 
Context_TextObject):
+                       case CombinedEnumContext(Application_Impress, 
Context_Graphic):
+                       {
+                               aLineDist.RemoveEntry(LLINESPACE_FIX);
+                       }
+               }
+       }
+       else if( uCount == LLINESPACE_FIX)
+       {
+               switch (currentContext.GetCombinedContext())
+               {
+                       case CombinedEnumContext(Application_Writer, 
Context_Default):
+                       case CombinedEnumContext(Application_Writer, 
Context_Text):
+                       case CombinedEnumContext(Application_Writer, 
Context_Table):
+                       {
+                               
aLineDist.InsertEntry(String::CreateFromAscii("Fixed"), LLINESPACE_FIX);
+                       }
+               }
+       }
+       maLineSpacing.Format();
+       maLineSpacing.StartSelection();
+}
+
+void ParaLineSpacingControl::SetAllNoSel()
+{
+       maLineSpacing.SelectItem(1);    //modified by wj for sym2_5397
+       maLineSpacing.SetNoSelection();
+}
+
+IMPL_LINK( ParaLineSpacingControl, LineSPDistHdl_Impl, ListBox*, pBox )
+{
+       maLineSpacing.SetNoSelection();
+       maLineSpacing.SetSelItem(0);
+       maLineSpacing.Format();
+       maLineSpacing.StartSelection();
+
+       switch( pBox->GetSelectEntryPos() )
+       {
+               case LLINESPACE_1:
+               case LLINESPACE_15:
+               case LLINESPACE_2:
+                       pActLineDistFld->Enable(sal_False);
+                       pActLineDistFld->SetText( String() );
+                       break;
+
+               case LLINESPACE_DURCH:
+                       aLineDistAtPercentBox.Hide();
+                       pActLineDistFld = &aLineDistAtMetricBox;
+                       aLineDistAtMetricBox.SetMin(0);
+
+
+                       if ( !aLineDistAtMetricBox.GetText().Len() )
+                               aLineDistAtMetricBox.SetValue(
+                                       aLineDistAtMetricBox.Normalize( 0 ) );
+                       aLineDistAtPercentBox.Hide();
+                       pActLineDistFld->Show();
+                       pActLineDistFld->Enable();
+                       break;
+
+               case LLINESPACE_MIN:
+                       aLineDistAtPercentBox.Hide();
+                       pActLineDistFld = &aLineDistAtMetricBox;
+                       aLineDistAtMetricBox.SetMin(0);
+
+                       if ( !aLineDistAtMetricBox.GetText().Len() )
+                               aLineDistAtMetricBox.SetValue(
+                                       aLineDistAtMetricBox.Normalize( 0 ), 
FUNIT_TWIP );
+                       aLineDistAtPercentBox.Hide();
+                       pActLineDistFld->Show();
+                       pActLineDistFld->Enable();
+                       break;
+
+               case LLINESPACE_PROP:
+                       aLineDistAtMetricBox.Hide();
+                       pActLineDistFld = &aLineDistAtPercentBox;
+
+                       if ( !aLineDistAtPercentBox.GetText().Len() )
+                               aLineDistAtPercentBox.SetValue(
+                                       aLineDistAtPercentBox.Normalize( 100 ), 
FUNIT_TWIP );
+                       aLineDistAtMetricBox.Hide();
+                       pActLineDistFld->Show();
+                       pActLineDistFld->Enable();
+                       break;
+               case LLINESPACE_FIX:
+               {
+                       aLineDistAtPercentBox.Hide();
+                       pActLineDistFld = &aLineDistAtMetricBox;
+                       sal_Int64 nTemp = aLineDistAtMetricBox.GetValue();
+                       
aLineDistAtMetricBox.SetMin(aLineDistAtMetricBox.Normalize(nMinFixDist), 
FUNIT_TWIP);
+
+                       if ( aLineDistAtMetricBox.GetValue() != nTemp )
+                               SetMetricValue( aLineDistAtMetricBox,
+                                                                       
FIX_DIST_DEF, SFX_MAPUNIT_TWIP );
+                       aLineDistAtPercentBox.Hide();
+                       pActLineDistFld->Show();
+                       pActLineDistFld->Enable();
+               }
+               break;
+       }
+       ExecuteLineSpace();
+       return 0;
+}
+
+IMPL_LINK( ParaLineSpacingControl, LineSPDistAtHdl_Impl, MetricField*, pBox )
+{
+       ExecuteLineSpace();
+       return (0L);
+}
+
+void ParaLineSpacingControl::ExecuteLineSpace()
+{              
+       aLineDist.SaveValue();
+       maLineSpacing.SetNoSelection();
+
+       SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, 
SID_ATTR_PARA_LINESPACE);
+       sal_uInt16 nPos = aLineDist.GetSelectEntryPos();
+
+       switch ( nPos )
+       {
+               case LLINESPACE_1:
+               case LLINESPACE_15:
+               case LLINESPACE_2:
+                       {
+                               SetLineSpace( aSpacing, nPos );
+                               maPos = nPos;
+                       }
+                       break;
+
+               case LLINESPACE_PROP:
+                       {
+                               SetLineSpace( aSpacing, nPos,
+                                       aLineDistAtPercentBox.Denormalize(
+                                       (long)aLineDistAtPercentBox.GetValue() 
) );
+                               maPos = nPos;
+                               maValue =aLineDistAtPercentBox.GetValue();
+                       }
+                       break;
+
+               case LLINESPACE_MIN:
+               case LLINESPACE_DURCH:
+               case LLINESPACE_FIX:
+                       {
+                               SetLineSpace( aSpacing, nPos,
+                                       GetCoreValue( aLineDistAtMetricBox, 
m_eLNSpaceUnit ) );
+                               maPos = nPos;
+                               maValue = GetCoreValue( aLineDistAtMetricBox, 
m_eLNSpaceUnit );
+                       }
+               break;
+
+               default:
+                       DBG_ERROR( "error!!" );
+                       break;
+       }
+
+       mpBindings->GetDispatcher()->Execute(
+                       SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, 
&aSpacing, 0L);
+
+       mbUseLineSPCustom = USE_CUSTOM;
+}
+
+void ParaLineSpacingControl::SetLineSpace( SvxLineSpacingItem& rLineSpace,
+                                               int eSpace, long lValue )
+{
+       switch ( eSpace )
+       {
+               case LLINESPACE_1:
+                       rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
+                       rLineSpace.GetInterLineSpaceRule() = 
SVX_INTER_LINE_SPACE_OFF;
+                       break;
+
+               case LLINESPACE_15:
+                       rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
+                       rLineSpace.SetPropLineSpace( LINESPACE_15 );
+                       break;
+
+               case LLINESPACE_2:
+                       rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
+                       rLineSpace.SetPropLineSpace( LINESPACE_2 );
+                       break;
+
+               case LLINESPACE_PROP:
+                       rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
+                       rLineSpace.SetPropLineSpace( (sal_uInt8)lValue );
+                       break;
+
+               case LLINESPACE_MIN:
+                       rLineSpace.SetLineHeight( (sal_uInt16)lValue );
+                       rLineSpace.GetInterLineSpaceRule() = 
SVX_INTER_LINE_SPACE_OFF;
+                       break;
+
+               case LLINESPACE_DURCH:
+                       rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_AUTO;
+                       rLineSpace.SetInterLineSpace( (sal_uInt16)lValue );
+                       break;
+
+               case LLINESPACE_FIX:
+                       rLineSpace.SetLineHeight((sal_uInt16)lValue);
+                       rLineSpace.GetLineSpaceRule() = SVX_LINE_SPACE_FIX;
+                       rLineSpace.GetInterLineSpaceRule() = 
SVX_INTER_LINE_SPACE_OFF;
+               break;
+       }
+}
+
+IMPL_LINK(ParaLineSpacingControl, VSSelHdl, void *, pControl)
+{
+       maLineSpacing.SetNoSelection();
+       bool bClosePop = true;
+       if(pControl == &maLineSpacing)  
+       {               
+               sal_uInt16 iPos = maLineSpacing.GetSelectItemId();
+               short nKern = 0;
+               long nVal = 0;
+               switch ( iPos )
+               {
+                       case 1:
+                               ExecuteLineSpacing( 0, 0 );
+                               break;
+                       case 2:
+                               ExecuteLineSpacing( 0, 3 );
+                               break;
+                       case 3:
+                               ExecuteLineSpacing( 0, 1 );
+                               break;
+                       case 4:
+                               ExecuteLineSpacing( 0, 2 );
+                               break;
+                       case 5:
+                               {
+                                       if(!(mbLineSPDisable))
+                                       {
+                                               //maPos = 
mrParaPropertyPanel.maLinePos;
+                                               aLineDist.SelectEntryPos( maPos 
) ;
+                                               aLineDist.SaveValue();
+                                               //maValue = 
mrParaPropertyPanel.maLineValue;
+
+                                               SvxLineSpacingItem 
aSpacing(_DEFAULT_LINE_SPACING, SID_ATTR_PARA_LINESPACE);
+                                               switch(maPos)
+                                               {
+                                               case LLINESPACE_1:
+                                               case LLINESPACE_15:
+                                               case LLINESPACE_2:
+                                                       SetLineSpace( aSpacing, 
maPos );
+                                                       break;
+
+                                               case LLINESPACE_PROP:
+                                                       SetLineSpace( aSpacing, 
maPos,
+                                                               
aLineDistAtPercentBox.Denormalize( (long)maValue ) );
+                                                       break;
+
+                                               case LLINESPACE_MIN:
+                                               case LLINESPACE_DURCH:
+                                               case LLINESPACE_FIX:
+                                                       SetLineSpace( aSpacing, 
maPos, (long)maValue );
+                                                       break;
+                                               }
+
+                                               
mpBindings->GetDispatcher()->Execute(
+                                                       
SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, &aSpacing, 0L);
+
+                                               ExecuteLineSpacing( USE_CUSTOM, 
0 );
+                                       }
+                                       else
+                                               bClosePop = sal_False;
+                               }
+                               break;
+               }       
+       }
+       if(bClosePop)
+               mrParaPropertyPanel.EndSpacingPopupMode();
+       return 0;
+}
+
+void ParaLineSpacingControl::ExecuteLineSpacing( sal_uInt16 aIsCustom, 
sal_uInt16 aEntry )
+{
+       if( !aIsCustom )
+       {
+               aLineDist.SelectEntryPos( aEntry ) ;
+               aLineDist.SaveValue();
+               SvxLineSpacingItem aSpacing(_DEFAULT_LINE_SPACING, 
SID_ATTR_PARA_LINESPACE);
+               sal_uInt16 nPos = aEntry;
+               if( aEntry == LLINESPACE_PROP )
+                       SetLineSpace( aSpacing, nPos, 
aLineDistAtPercentBox.Denormalize( (long)115 ) );
+               else
+                       SetLineSpace( aSpacing, nPos );
+
+               mpBindings->GetDispatcher()->Execute(
+                       SID_ATTR_PARA_LINESPACE, SFX_CALLMODE_RECORD, 
&aSpacing, 0L);
+       }
+
+       if( !aIsCustom )
+       {
+               mbUseLineSPCustom = DO_NOT_CUSTOM;
+               mrParaPropertyPanel.EndSpacingPopupMode();
+       }
+       maLineSpacing.SetNoSelection();
+}
+
+}} // end of namespace sidebar
+

Propchange: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.cxx
------------------------------------------------------------------------------
    svn:executable = *

Added: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx?rev=1459509&view=auto
==============================================================================
--- 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx
 (added)
+++ 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx
 Thu Mar 21 20:23:16 2013
@@ -0,0 +1,115 @@
+/**************************************************************
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ *************************************************************/
+#ifndef _SVX_SIDEBAR_LINE_SPACING_CONTROL_HXX_
+#define _SVX_SIDEBAR_LINE_SPACING_CONTROL_HXX_
+ 
+#include "svx/sidebar/PopupControl.hxx"
+#include "svx/sidebar/ValueSetWithTextControl.hxx"
+#include <sfx2/bindings.hxx>
+#include <svtools/ctrlbox.hxx>
+#include <svtools/ctrltool.hxx>
+#include "ParaPropertyPanel.hxx"
+#include <vcl/fixed.hxx>
+#include <svl/poolitem.hxx>
+#include <editeng/lspcitem.hxx>
+#include <sfx2/sidebar/EnumContext.hxx>
+
+
+namespace svx { namespace sidebar {
+
+#define LSP_POS_GLOBAL_VALUE   String("Line_Spacing_Pos", 16, 
RTL_TEXTENCODING_ASCII_US)
+#define LSP_LV_GLOBAL_VALUE        String("Line_Spacing_Lv", 15, 
RTL_TEXTENCODING_ASCII_US)
+#define BEGIN_VALUE            28
+class ParaLineSpacingControl:public svx::sidebar::PopupControl
+{
+public:
+       ParaLineSpacingControl(Window* pParent, 
svx::sidebar::ParaPropertyPanel& rPanel);
+       ~ParaLineSpacingControl();
+       void ToGetFocus(bool bType);
+       void Rearrange(SfxItemState currSPState,FieldUnit 
currMetricUnit,SvxLineSpacingItem* currSPItem,const 
::sfx2::sidebar::EnumContext currentContext);
+       //virtual void Paint(const Rectangle& rect);
+       
+       //add 
+       short GetLastCustomState();
+       long  GetLastCustomValue();
+       //add end
+
+       void ExecuteLineSpace();
+       void SetLineSpace( SvxLineSpacingItem& rLineSpace,
+                                               int eSpace, long lValue = 0 );
+
+       void ExecuteLineSpacing( sal_uInt16 aIsCustom, sal_uInt16 aEntry );
+       void SetAllNoSel();
+
+private:       
+       bool                                    mbUseLineSPCustom;
+       bool                                    mbLineSPDisable;
+       SfxMapUnit                      m_eLNSpaceUnit;
+       ParaPropertyPanel&     mrParaPropertyPanel;
+       SfxBindings*            mpBindings;
+
+       long                                                    nMinFixDist;
+       Edit*                                                   pActLineDistFld;
+
+       ValueSetWithTextControl maLineSpacing;
+
+       FixedText maCustomFT;   
+       FixedText maLSpacingFT;
+       ListBox                                         aLineDist;
+       
+       FixedText maOfFT;
+       MetricField                                     aLineDistAtPercentBox;
+       MetricField                                     aLineDistAtMetricBox;
+
+       Image  maSpacing1;
+       Image  maSpacing115;
+       Image  maSpacing15;
+       Image  maSpacing2;
+       Image  maLPCustom;
+
+       Image  maSelSpacing1;
+       Image  maSelSpacing115;
+       Image  maSelSpacing15;
+       Image  maSelSpacing2;
+       Image  maSelSelHanging;
+       Image                           maImgCus;
+       Image                           maImgCusGrey;
+       XubString                       maStrCus;
+
+       Image*                          mpImg;
+       Image*                          mpImgSel;
+       XubString*                      mpStr;
+       XubString*                      mpStrTip;
+       String                          maLine;
+       String                          maOf;
+
+       sal_Int64             maValue;
+       sal_uInt16                maPos;
+private:       
+       void initial();
+       DECL_LINK(LineSPDistHdl_Impl, ListBox*);
+       DECL_LINK(LineSPDistAtHdl_Impl, MetricField*);
+       DECL_LINK(VSSelHdl, void*);
+};
+}}
+
+#endif
+

Propchange: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingControl.hxx
------------------------------------------------------------------------------
    svn:executable = *

Added: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx?rev=1459509&view=auto
==============================================================================
--- 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx
 (added)
+++ 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx
 Thu Mar 21 20:23:16 2013
@@ -0,0 +1,80 @@
+/**************************************************************
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ *************************************************************/
+
+#include "ParaLineSpacingPopup.hxx"
+#include "ParaLineSpacingControl.hxx"
+#include <boost/bind.hpp>
+#include <unotools/viewoptions.hxx>
+
+namespace svx { namespace sidebar {
+
+ParaLineSpacingPopup::ParaLineSpacingPopup (
+    Window* pParent,
+    const ::boost::function<PopupControl*(PopupContainer*)>& rControlCreator)
+    : Popup(
+        pParent,
+        rControlCreator, 
+        ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Character Spacing")))
+{
+       
SetPopupModeEndHandler(::boost::bind(&ParaLineSpacingPopup::PopupModeEndCallback,
 this));
+}
+
+
+
+
+ParaLineSpacingPopup::~ParaLineSpacingPopup (void)
+{
+}
+
+
+
+
+void ParaLineSpacingPopup::Rearrange (SfxItemState currSPState,FieldUnit 
currMetricUnit,SvxLineSpacingItem* currSPItem,const 
::sfx2::sidebar::EnumContext currentContext)
+{
+    ProvideContainerAndControl();
+
+    ParaLineSpacingControl* pControl = 
dynamic_cast<ParaLineSpacingControl*>(mpControl.get());
+    if (pControl != NULL)
+        pControl->Rearrange(currSPState,currMetricUnit, 
currSPItem,currentContext);    
+}
+
+void ParaLineSpacingPopup::PopupModeEndCallback (void)
+{
+       ProvideContainerAndControl();
+       ParaLineSpacingControl* pControl = 
dynamic_cast<ParaLineSpacingControl*>(mpControl.get());
+       if (pControl == NULL)
+               return;
+       
+       /*if( pControl->GetLastCustomState() == SPACING_CLOSE_BY_CUS_EDIT)
+       {
+               SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE 
);
+               ::com::sun::star::uno::Sequence < 
::com::sun::star::beans::NamedValue > aSeq(1);
+               aSeq[0].Name = ::rtl::OUString( 
RTL_CONSTASCII_USTRINGPARAM("Spacing") ); 
+               aSeq[0].Value <<= ::rtl::OUString( String::CreateFromInt32( 
pControl->GetLastCustomValue() ));
+               aWinOpt.SetUserData( aSeq );
+
+       }*/
+}
+
+
+} } // end of namespace svx::sidebar
+
+

Propchange: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.cxx
------------------------------------------------------------------------------
    svn:executable = *

Added: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx?rev=1459509&view=auto
==============================================================================
--- 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx
 (added)
+++ 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx
 Thu Mar 21 20:23:16 2013
@@ -0,0 +1,53 @@
+/**************************************************************
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ *************************************************************/
+
+#ifndef _SVX_SIDEBAR_LINE_SPACING_POPUP_HXX_
+#define _SVX_SIDEBAR_LINE_SPACING_POPUP_HXX_
+
+#include "svx/sidebar/Popup.hxx"
+
+#include <boost/function.hpp>
+#include <svl/poolitem.hxx>
+#include <tools/fldunit.hxx>
+#include <editeng/lspcitem.hxx>
+#include <sfx2/sidebar/EnumContext.hxx>
+
+namespace svx { namespace sidebar {
+
+class ParaLineSpacingPopup
+    : public Popup
+{
+public :
+    ParaLineSpacingPopup (
+        Window* pParent,
+        const ::boost::function<PopupControl*(PopupContainer*)>& 
rControlCreator);
+    ~ParaLineSpacingPopup (void);
+
+    void Rearrange (SfxItemState currSPState,FieldUnit 
currMetricUnit,SvxLineSpacingItem* currSPItem ,const 
::sfx2::sidebar::EnumContext currentContext);
+private:
+    void PopupModeEndCallback (void);
+};
+
+} } // end of namespace svx::sidebar
+
+#endif
+
+

Propchange: 
openoffice/branches/sidebar/main/svx/source/sidebar/paragraph/ParaLineSpacingPopup.hxx
------------------------------------------------------------------------------
    svn:executable = *


Reply via email to