1*d4aefcaeSZheng Fan /************************************************************** 2*d4aefcaeSZheng Fan * 3*d4aefcaeSZheng Fan * Licensed to the Apache Software Foundation (ASF) under one 4*d4aefcaeSZheng Fan * or more contributor license agreements. See the NOTICE file 5*d4aefcaeSZheng Fan * distributed with this work for additional information 6*d4aefcaeSZheng Fan * regarding copyright ownership. The ASF licenses this file 7*d4aefcaeSZheng Fan * to you under the Apache License, Version 2.0 (the 8*d4aefcaeSZheng Fan * "License"); you may not use this file except in compliance 9*d4aefcaeSZheng Fan * with the License. You may obtain a copy of the License at 10*d4aefcaeSZheng Fan * 11*d4aefcaeSZheng Fan * http://www.apache.org/licenses/LICENSE-2.0 12*d4aefcaeSZheng Fan * 13*d4aefcaeSZheng Fan * Unless required by applicable law or agreed to in writing, 14*d4aefcaeSZheng Fan * software distributed under the License is distributed on an 15*d4aefcaeSZheng Fan * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*d4aefcaeSZheng Fan * KIND, either express or implied. See the License for the 17*d4aefcaeSZheng Fan * specific language governing permissions and limitations 18*d4aefcaeSZheng Fan * under the License. 19*d4aefcaeSZheng Fan * 20*d4aefcaeSZheng Fan *************************************************************/ 21*d4aefcaeSZheng Fan 22*d4aefcaeSZheng Fan #include "precompiled_svx.hxx" 23*d4aefcaeSZheng Fan #include "TextCharacterSpacingControl.hxx" 24*d4aefcaeSZheng Fan #include "TextPropertyPanel.hrc" 25*d4aefcaeSZheng Fan #include <sfx2/sidebar/propertypanel.hrc> 26*d4aefcaeSZheng Fan #include <svx/dialogs.hrc> 27*d4aefcaeSZheng Fan #include <svx/dialmgr.hxx> 28*d4aefcaeSZheng Fan #include <unotools/viewoptions.hxx> 29*d4aefcaeSZheng Fan #include <editeng/kernitem.hxx> 30*d4aefcaeSZheng Fan #include <sfx2/bindings.hxx> 31*d4aefcaeSZheng Fan #include <sfx2/dispatch.hxx> 32*d4aefcaeSZheng Fan #include <sfx2/sidebar/Theme.hxx> 33*d4aefcaeSZheng Fan 34*d4aefcaeSZheng Fan namespace svx { namespace sidebar { 35*d4aefcaeSZheng Fan TextCharacterSpacingControl::TextCharacterSpacingControl(Window* pParent, svx::sidebar::TextPropertyPanel& rPanel) 36*d4aefcaeSZheng Fan : PopupControl( pParent,SVX_RES(RID_POPUPPANEL_TEXTPAGE_SPACING)) 37*d4aefcaeSZheng Fan , mrTextPropertyPanel(rPanel) 38*d4aefcaeSZheng Fan , mpBindings(NULL) 39*d4aefcaeSZheng Fan , maVSSpacing (ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES(VS_SPACING)) 40*d4aefcaeSZheng Fan , maLastCus (this, SVX_RES(FT_LASTCUSTOM)) 41*d4aefcaeSZheng Fan //, maBorder (this, SVX_RES(CT_BORDER)) 42*d4aefcaeSZheng Fan , maFTSpacing (this, SVX_RES(FT_SPACING)) 43*d4aefcaeSZheng Fan , maLBKerning (this, SVX_RES(LB_KERNING)) 44*d4aefcaeSZheng Fan , maFTBy (this, SVX_RES(FT_BY)) 45*d4aefcaeSZheng Fan , maEditKerning (this, SVX_RES(ED_KERNING)) 46*d4aefcaeSZheng Fan 47*d4aefcaeSZheng Fan , mpImg (NULL) 48*d4aefcaeSZheng Fan , mpImgSel (NULL) 49*d4aefcaeSZheng Fan , mpStr (NULL) 50*d4aefcaeSZheng Fan , mpStrTip (NULL) 51*d4aefcaeSZheng Fan 52*d4aefcaeSZheng Fan , maImgCus (SVX_RES(IMG_CUSTOM)) 53*d4aefcaeSZheng Fan , maImgCusGrey (SVX_RES(IMG_CUSTOM_GRAY)) 54*d4aefcaeSZheng Fan , maStrCus (SVX_RES(STR_CUSTOM)) 55*d4aefcaeSZheng Fan , maStrCusE (SVX_RES(STR_CUSTOM_E_TIP)) //add 56*d4aefcaeSZheng Fan , maStrCusC (SVX_RES(STR_CUSTOM_C_TIP)) //add 57*d4aefcaeSZheng Fan , maStrCusN (SVX_RES(STR_NORMAL_TIP)) //add 58*d4aefcaeSZheng Fan , maStrUnit (SVX_RES(STR_PT)) //add 59*d4aefcaeSZheng Fan 60*d4aefcaeSZheng Fan , mnCustomKern(0) 61*d4aefcaeSZheng Fan , mnLastCus ( SPACING_NOCUSTOM ) 62*d4aefcaeSZheng Fan , mbCusEnable(false) 63*d4aefcaeSZheng Fan , mbVS(true) 64*d4aefcaeSZheng Fan { 65*d4aefcaeSZheng Fan initial(); 66*d4aefcaeSZheng Fan FreeResource(); 67*d4aefcaeSZheng Fan mpBindings = mrTextPropertyPanel.GetBindings(); 68*d4aefcaeSZheng Fan Link aLink = LINK(this, TextCharacterSpacingControl, KerningSelectHdl); 69*d4aefcaeSZheng Fan maLBKerning.SetSelectHdl(aLink); 70*d4aefcaeSZheng Fan aLink =LINK(this, TextCharacterSpacingControl, KerningModifyHdl); 71*d4aefcaeSZheng Fan maEditKerning.SetModifyHdl(aLink); 72*d4aefcaeSZheng Fan 73*d4aefcaeSZheng Fan } 74*d4aefcaeSZheng Fan TextCharacterSpacingControl::~TextCharacterSpacingControl() 75*d4aefcaeSZheng Fan { 76*d4aefcaeSZheng Fan delete[] mpImg; 77*d4aefcaeSZheng Fan delete[] mpImgSel; 78*d4aefcaeSZheng Fan delete[] mpStr; 79*d4aefcaeSZheng Fan delete[] mpStrTip; 80*d4aefcaeSZheng Fan } 81*d4aefcaeSZheng Fan /*void TextCharacterSpacingControl::Paint(const Rectangle& rect) 82*d4aefcaeSZheng Fan { 83*d4aefcaeSZheng Fan svx::sidebar::PopupControl::Paint(rect); 84*d4aefcaeSZheng Fan Color aOldLineColor = GetLineColor(); 85*d4aefcaeSZheng Fan Color aOldFillColor = GetFillColor(); 86*d4aefcaeSZheng Fan 87*d4aefcaeSZheng Fan //Point aPos = maBorder.GetPosPixel(); 88*d4aefcaeSZheng Fan //Size aSize = maBorder.GetSizePixel(); 89*d4aefcaeSZheng Fan Point aPos( LogicToPixel( Point( CUSTOM_X, CUSTOM_Y), MAP_APPFONT )); 90*d4aefcaeSZheng Fan Size aSize( LogicToPixel( Size( CUSTOM_WIDTH, CUSTOM_HEIGHT ), MAP_APPFONT )); 91*d4aefcaeSZheng Fan Rectangle aRect( aPos, aSize ); 92*d4aefcaeSZheng Fan aRect.Left() -= 1; 93*d4aefcaeSZheng Fan aRect.Top() -= 1; 94*d4aefcaeSZheng Fan aRect.Right() += 1; 95*d4aefcaeSZheng Fan aRect.Bottom() += 1; 96*d4aefcaeSZheng Fan 97*d4aefcaeSZheng Fan 98*d4aefcaeSZheng Fan Color aLineColor(189,201,219); 99*d4aefcaeSZheng Fan if(!GetSettings().GetStyleSettings().GetHighContrastMode()) 100*d4aefcaeSZheng Fan SetLineColor(aLineColor); 101*d4aefcaeSZheng Fan else 102*d4aefcaeSZheng Fan SetLineColor(GetSettings().GetStyleSettings().GetShadowColor()); 103*d4aefcaeSZheng Fan SetFillColor(COL_TRANSPARENT); 104*d4aefcaeSZheng Fan //add for high contract 105*d4aefcaeSZheng Fan //if(GetSettings().GetStyleSettings().GetHighContrastMode()) 106*d4aefcaeSZheng Fan //{ 107*d4aefcaeSZheng Fan // maBorder.SetBackground(GetSettings().GetStyleSettings().GetMenuColor()); 108*d4aefcaeSZheng Fan // maFTSpacing.SetBackground(GetSettings().GetStyleSettings().GetMenuColor()); 109*d4aefcaeSZheng Fan // maFTBy.SetBackground(GetSettings().GetStyleSettings().GetMenuColor()); 110*d4aefcaeSZheng Fan //} 111*d4aefcaeSZheng Fan DrawRect(aRect); 112*d4aefcaeSZheng Fan 113*d4aefcaeSZheng Fan 114*d4aefcaeSZheng Fan SetLineColor(aOldLineColor); 115*d4aefcaeSZheng Fan SetFillColor(aOldFillColor); 116*d4aefcaeSZheng Fan }*/ 117*d4aefcaeSZheng Fan void TextCharacterSpacingControl::initial() 118*d4aefcaeSZheng Fan { 119*d4aefcaeSZheng Fan maVSSpacing.SetStyle( maVSSpacing.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT ); 120*d4aefcaeSZheng Fan //for high contract 121*d4aefcaeSZheng Fan //if(GetSettings().GetStyleSettings().GetHighContrastMode()) 122*d4aefcaeSZheng Fan { 123*d4aefcaeSZheng Fan maVSSpacing.SetControlBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? 124*d4aefcaeSZheng Fan GetSettings().GetStyleSettings().GetMenuColor(): 125*d4aefcaeSZheng Fan sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); 126*d4aefcaeSZheng Fan maVSSpacing.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()? 127*d4aefcaeSZheng Fan GetSettings().GetStyleSettings().GetMenuColor(): 128*d4aefcaeSZheng Fan sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); 129*d4aefcaeSZheng Fan maVSSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? 130*d4aefcaeSZheng Fan GetSettings().GetStyleSettings().GetMenuColor(): 131*d4aefcaeSZheng Fan sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); 132*d4aefcaeSZheng Fan maFTSpacing.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? 133*d4aefcaeSZheng Fan GetSettings().GetStyleSettings().GetMenuColor(): 134*d4aefcaeSZheng Fan sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); 135*d4aefcaeSZheng Fan maFTBy.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? 136*d4aefcaeSZheng Fan GetSettings().GetStyleSettings().GetMenuColor(): 137*d4aefcaeSZheng Fan sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); 138*d4aefcaeSZheng Fan } 139*d4aefcaeSZheng Fan mpImg = new Image[5]; 140*d4aefcaeSZheng Fan mpImg[0] = Image(SVX_RES(IMG_VERY_TIGHT)); 141*d4aefcaeSZheng Fan mpImg[1] = Image(SVX_RES(IMG_TIGHT)); 142*d4aefcaeSZheng Fan mpImg[2] = Image(SVX_RES(IMG_NORMAL)); 143*d4aefcaeSZheng Fan mpImg[3] = Image(SVX_RES(IMG_LOOSE)); 144*d4aefcaeSZheng Fan mpImg[4] = Image(SVX_RES(IMG_VERY_LOOSE)); 145*d4aefcaeSZheng Fan 146*d4aefcaeSZheng Fan mpImgSel = new Image[5]; 147*d4aefcaeSZheng Fan mpImgSel[0] = Image(SVX_RES(IMG_VERY_TIGHT_S)); 148*d4aefcaeSZheng Fan mpImgSel[1] = Image(SVX_RES(IMG_TIGHT_S)); 149*d4aefcaeSZheng Fan mpImgSel[2] = Image(SVX_RES(IMG_NORMAL_S)); 150*d4aefcaeSZheng Fan mpImgSel[3] = Image(SVX_RES(IMG_LOOSE_S)); 151*d4aefcaeSZheng Fan mpImgSel[4] = Image(SVX_RES(IMG_VERY_LOOSE_S)); 152*d4aefcaeSZheng Fan 153*d4aefcaeSZheng Fan mpStr = new XubString[5]; 154*d4aefcaeSZheng Fan mpStr[0] = XubString(SVX_RES(STR_VERY_TIGHT)); 155*d4aefcaeSZheng Fan mpStr[1] = XubString(SVX_RES(STR_TIGHT)); 156*d4aefcaeSZheng Fan mpStr[2] = XubString(SVX_RES(STR_NORMAL)); 157*d4aefcaeSZheng Fan mpStr[3] = XubString(SVX_RES(STR_LOOSE)); 158*d4aefcaeSZheng Fan mpStr[4] = XubString(SVX_RES(STR_VERY_LOOSE)); 159*d4aefcaeSZheng Fan 160*d4aefcaeSZheng Fan 161*d4aefcaeSZheng Fan mpStrTip = new XubString[5]; 162*d4aefcaeSZheng Fan mpStrTip[0] = XubString(SVX_RES(STR_VERY_TIGHT_TIP)); 163*d4aefcaeSZheng Fan mpStrTip[1] = XubString(SVX_RES(STR_TIGHT_TIP)); 164*d4aefcaeSZheng Fan mpStrTip[2] = XubString(SVX_RES(STR_NORMAL_TIP)); 165*d4aefcaeSZheng Fan mpStrTip[3] = XubString(SVX_RES(STR_LOOSE_TIP)); 166*d4aefcaeSZheng Fan mpStrTip[4] = XubString(SVX_RES(STR_VERY_LOOSE_TIP)); 167*d4aefcaeSZheng Fan //maVSSpacing.SetDefaultTip(mpStr); //modify 168*d4aefcaeSZheng Fan //maVSSpacing.SetDefaultTip(mpStrTip, TRUE); //Add 169*d4aefcaeSZheng Fan 170*d4aefcaeSZheng Fan for (int i=0;i<5;i++) 171*d4aefcaeSZheng Fan maVSSpacing.AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]); 172*d4aefcaeSZheng Fan 173*d4aefcaeSZheng Fan maVSSpacing.InsertCustom(maImgCus, maImgCusGrey, maStrCus); 174*d4aefcaeSZheng Fan maVSSpacing.SetCustomTip(maStrCus); //Add 175*d4aefcaeSZheng Fan 176*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); 177*d4aefcaeSZheng Fan Link aLink = LINK(this, TextCharacterSpacingControl,VSSelHdl ); 178*d4aefcaeSZheng Fan maVSSpacing.SetSelectHdl(aLink); 179*d4aefcaeSZheng Fan maVSSpacing.StartSelection(); 180*d4aefcaeSZheng Fan maVSSpacing.Show(); 181*d4aefcaeSZheng Fan } 182*d4aefcaeSZheng Fan void TextCharacterSpacingControl::ToGetFocus() 183*d4aefcaeSZheng Fan { 184*d4aefcaeSZheng Fan if(!mbVS) 185*d4aefcaeSZheng Fan maLBKerning.GrabFocus(); 186*d4aefcaeSZheng Fan else 187*d4aefcaeSZheng Fan maVSSpacing.GrabFocus(); 188*d4aefcaeSZheng Fan } 189*d4aefcaeSZheng Fan 190*d4aefcaeSZheng Fan void TextCharacterSpacingControl::Rearrange(bool bLBAvailable,bool bAvailable, long nKerning) 191*d4aefcaeSZheng Fan { 192*d4aefcaeSZheng Fan mbVS = true; 193*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); 194*d4aefcaeSZheng Fan SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE ); 195*d4aefcaeSZheng Fan if ( aWinOpt.Exists() ) 196*d4aefcaeSZheng Fan { 197*d4aefcaeSZheng Fan ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData(); 198*d4aefcaeSZheng Fan ::rtl::OUString aTmp; 199*d4aefcaeSZheng Fan if ( aSeq.getLength()) 200*d4aefcaeSZheng Fan aSeq[0].Value >>= aTmp; 201*d4aefcaeSZheng Fan 202*d4aefcaeSZheng Fan String aWinData( aTmp ); 203*d4aefcaeSZheng Fan mnCustomKern = aWinData.ToInt32(); 204*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CUS_EDIT; 205*d4aefcaeSZheng Fan mbCusEnable = true; 206*d4aefcaeSZheng Fan } 207*d4aefcaeSZheng Fan else 208*d4aefcaeSZheng Fan { 209*d4aefcaeSZheng Fan mnLastCus = SPACING_NOCUSTOM; 210*d4aefcaeSZheng Fan mbCusEnable = false; 211*d4aefcaeSZheng Fan } 212*d4aefcaeSZheng Fan 213*d4aefcaeSZheng Fan if( !mnLastCus ) 214*d4aefcaeSZheng Fan { 215*d4aefcaeSZheng Fan maVSSpacing.SetCusEnable(false); 216*d4aefcaeSZheng Fan maVSSpacing.SetCustomTip(maStrCus,true); //LAST CUSTOM no tip defect //add 217*d4aefcaeSZheng Fan } 218*d4aefcaeSZheng Fan else 219*d4aefcaeSZheng Fan { 220*d4aefcaeSZheng Fan //set custom tips 221*d4aefcaeSZheng Fan maVSSpacing.SetCusEnable(true); 222*d4aefcaeSZheng Fan if(mnCustomKern > 0) 223*d4aefcaeSZheng Fan { 224*d4aefcaeSZheng Fan String aStrTip( maStrCusE); //LAST CUSTOM no tip defect //add 225*d4aefcaeSZheng Fan aStrTip.Append( String::CreateFromDouble( (double)mnCustomKern / 10)); 226*d4aefcaeSZheng Fan aStrTip.Append(String("pt", 2, RTL_TEXTENCODING_ASCII_US)); 227*d4aefcaeSZheng Fan aStrTip.Append(maStrUnit); // modify 228*d4aefcaeSZheng Fan maVSSpacing.SetCustomTip(aStrTip,true); 229*d4aefcaeSZheng Fan } 230*d4aefcaeSZheng Fan else if(mnCustomKern < 0) 231*d4aefcaeSZheng Fan { 232*d4aefcaeSZheng Fan String aStrTip(maStrCusC) ; //LAST CUSTOM no tip defect //add 233*d4aefcaeSZheng Fan aStrTip.Append( String::CreateFromDouble( (double)-mnCustomKern / 10)); 234*d4aefcaeSZheng Fan aStrTip.Append(String("pt", 2, RTL_TEXTENCODING_ASCII_US)); 235*d4aefcaeSZheng Fan aStrTip.Append(maStrUnit); // modify 236*d4aefcaeSZheng Fan maVSSpacing.SetCustomTip(aStrTip,true); 237*d4aefcaeSZheng Fan } 238*d4aefcaeSZheng Fan else 239*d4aefcaeSZheng Fan { 240*d4aefcaeSZheng Fan String aStrTip(maStrCusN) ; //LAST CUSTOM no tip defect //add 241*d4aefcaeSZheng Fan maVSSpacing.SetCustomTip(aStrTip,true); 242*d4aefcaeSZheng Fan } 243*d4aefcaeSZheng Fan 244*d4aefcaeSZheng Fan } 245*d4aefcaeSZheng Fan 246*d4aefcaeSZheng Fan if(bLBAvailable && bAvailable) 247*d4aefcaeSZheng Fan { 248*d4aefcaeSZheng Fan maLBKerning.Enable(); 249*d4aefcaeSZheng Fan maFTSpacing.Enable(); 250*d4aefcaeSZheng Fan 251*d4aefcaeSZheng Fan SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric(); 252*d4aefcaeSZheng Fan MapUnit eOrgUnit = (MapUnit)eUnit; 253*d4aefcaeSZheng Fan MapUnit ePntUnit( MAP_POINT ); 254*d4aefcaeSZheng Fan long nBig = maEditKerning.Normalize(nKerning); 255*d4aefcaeSZheng Fan nKerning = LogicToLogic( nBig, eOrgUnit, ePntUnit ); 256*d4aefcaeSZheng Fan 257*d4aefcaeSZheng Fan if ( nKerning > 0 ) 258*d4aefcaeSZheng Fan { 259*d4aefcaeSZheng Fan maFTBy.Enable(); 260*d4aefcaeSZheng Fan maEditKerning.Enable(); 261*d4aefcaeSZheng Fan maEditKerning.SetMax( 9999 ); 262*d4aefcaeSZheng Fan maEditKerning.SetLast( 9999 ); 263*d4aefcaeSZheng Fan maEditKerning.SetValue( nKerning ); 264*d4aefcaeSZheng Fan maLBKerning.SelectEntryPos( SIDEBAR_SPACE_EXPAND ); 265*d4aefcaeSZheng Fan if(nKerning == 30) 266*d4aefcaeSZheng Fan { 267*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(4); 268*d4aefcaeSZheng Fan } 269*d4aefcaeSZheng Fan else if(nKerning == 60) 270*d4aefcaeSZheng Fan { 271*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(5); 272*d4aefcaeSZheng Fan } 273*d4aefcaeSZheng Fan else 274*d4aefcaeSZheng Fan { 275*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); 276*d4aefcaeSZheng Fan mbVS = false; 277*d4aefcaeSZheng Fan } 278*d4aefcaeSZheng Fan } 279*d4aefcaeSZheng Fan else if ( nKerning < 0 ) 280*d4aefcaeSZheng Fan { 281*d4aefcaeSZheng Fan maFTBy.Enable(); 282*d4aefcaeSZheng Fan maEditKerning.Enable(); 283*d4aefcaeSZheng Fan maEditKerning.SetValue( -nKerning ); 284*d4aefcaeSZheng Fan maLBKerning.SelectEntryPos( SIDEBAR_SPACE_CONDENSED ); 285*d4aefcaeSZheng Fan long nMax = mrTextPropertyPanel.GetSelFontSize()/6; 286*d4aefcaeSZheng Fan maEditKerning.SetMax( maEditKerning.Normalize( nMax ), FUNIT_POINT ); 287*d4aefcaeSZheng Fan maEditKerning.SetLast( maEditKerning.GetMax( maEditKerning.GetUnit() ) ); 288*d4aefcaeSZheng Fan if( nKerning == -30 ) 289*d4aefcaeSZheng Fan { 290*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(1); 291*d4aefcaeSZheng Fan } 292*d4aefcaeSZheng Fan else if( nKerning == -15 ) 293*d4aefcaeSZheng Fan { 294*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(2); 295*d4aefcaeSZheng Fan } 296*d4aefcaeSZheng Fan else 297*d4aefcaeSZheng Fan { 298*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); 299*d4aefcaeSZheng Fan mbVS = false; 300*d4aefcaeSZheng Fan } 301*d4aefcaeSZheng Fan } 302*d4aefcaeSZheng Fan else 303*d4aefcaeSZheng Fan { 304*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(3); 305*d4aefcaeSZheng Fan maLBKerning.SelectEntryPos( SIDEBAR_SPACE_NORMAL ); 306*d4aefcaeSZheng Fan maFTBy.Disable(); 307*d4aefcaeSZheng Fan maEditKerning.Disable(); 308*d4aefcaeSZheng Fan maEditKerning.SetValue( 0 ); 309*d4aefcaeSZheng Fan maEditKerning.SetMax( 9999 ); 310*d4aefcaeSZheng Fan maEditKerning.SetLast( 9999 ); 311*d4aefcaeSZheng Fan } 312*d4aefcaeSZheng Fan } 313*d4aefcaeSZheng Fan else if(bLBAvailable && !bAvailable) 314*d4aefcaeSZheng Fan { 315*d4aefcaeSZheng Fan //modified 316*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); 317*d4aefcaeSZheng Fan mbVS = false; 318*d4aefcaeSZheng Fan maLBKerning.Enable(); 319*d4aefcaeSZheng Fan maFTSpacing.Enable(); 320*d4aefcaeSZheng Fan maLBKerning.SetNoSelection(); 321*d4aefcaeSZheng Fan maEditKerning.SetText(String()); 322*d4aefcaeSZheng Fan maEditKerning.Disable(); 323*d4aefcaeSZheng Fan maFTBy.Disable(); 324*d4aefcaeSZheng Fan } 325*d4aefcaeSZheng Fan else 326*d4aefcaeSZheng Fan { 327*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); 328*d4aefcaeSZheng Fan mbVS = false; 329*d4aefcaeSZheng Fan maEditKerning.SetText(String()); 330*d4aefcaeSZheng Fan maLBKerning.SetNoSelection(); 331*d4aefcaeSZheng Fan maLBKerning.Disable(); 332*d4aefcaeSZheng Fan maFTSpacing.Disable(); 333*d4aefcaeSZheng Fan maEditKerning.Disable(); 334*d4aefcaeSZheng Fan maFTBy.Disable(); 335*d4aefcaeSZheng Fan } 336*d4aefcaeSZheng Fan GetFocus(); 337*d4aefcaeSZheng Fan maVSSpacing.Format(); 338*d4aefcaeSZheng Fan maVSSpacing.StartSelection(); 339*d4aefcaeSZheng Fan } 340*d4aefcaeSZheng Fan IMPL_LINK(TextCharacterSpacingControl, VSSelHdl, void *, pControl) 341*d4aefcaeSZheng Fan { 342*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; 343*d4aefcaeSZheng Fan 344*d4aefcaeSZheng Fan if(pControl == &maVSSpacing) 345*d4aefcaeSZheng Fan { 346*d4aefcaeSZheng Fan sal_uInt16 iPos = maVSSpacing.GetSelectItemId(); 347*d4aefcaeSZheng Fan short nKern = 0; 348*d4aefcaeSZheng Fan SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric(); 349*d4aefcaeSZheng Fan long nVal = 0; 350*d4aefcaeSZheng Fan if(iPos == 1) 351*d4aefcaeSZheng Fan { 352*d4aefcaeSZheng Fan nVal = LogicToLogic(30, MAP_POINT, (MapUnit)eUnit); 353*d4aefcaeSZheng Fan nKern = (short)maEditKerning.Denormalize(nVal); 354*d4aefcaeSZheng Fan SvxKerningItem aKernItem(-nKern, SID_ATTR_CHAR_KERNING); 355*d4aefcaeSZheng Fan mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); 356*d4aefcaeSZheng Fan mrTextPropertyPanel.SetSpacing(-nKern); 357*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; 358*d4aefcaeSZheng Fan } 359*d4aefcaeSZheng Fan else if(iPos == 2) 360*d4aefcaeSZheng Fan { 361*d4aefcaeSZheng Fan nVal = LogicToLogic(15, MAP_POINT, (MapUnit)eUnit); 362*d4aefcaeSZheng Fan nKern = (short)maEditKerning.Denormalize(nVal); 363*d4aefcaeSZheng Fan SvxKerningItem aKernItem(-nKern, SID_ATTR_CHAR_KERNING); 364*d4aefcaeSZheng Fan mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); 365*d4aefcaeSZheng Fan mrTextPropertyPanel.SetSpacing(-nKern); 366*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; 367*d4aefcaeSZheng Fan } 368*d4aefcaeSZheng Fan else if(iPos == 3) 369*d4aefcaeSZheng Fan { 370*d4aefcaeSZheng Fan SvxKerningItem aKernItem(0, SID_ATTR_CHAR_KERNING); 371*d4aefcaeSZheng Fan mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); 372*d4aefcaeSZheng Fan mrTextPropertyPanel.SetSpacing(0); 373*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; 374*d4aefcaeSZheng Fan } 375*d4aefcaeSZheng Fan else if(iPos == 4) 376*d4aefcaeSZheng Fan { 377*d4aefcaeSZheng Fan nVal = LogicToLogic(30, MAP_POINT, (MapUnit)eUnit); 378*d4aefcaeSZheng Fan nKern = (short)maEditKerning.Denormalize(nVal); 379*d4aefcaeSZheng Fan SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING); 380*d4aefcaeSZheng Fan mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); 381*d4aefcaeSZheng Fan mrTextPropertyPanel.SetSpacing(nKern); 382*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; 383*d4aefcaeSZheng Fan } 384*d4aefcaeSZheng Fan else if(iPos == 5) 385*d4aefcaeSZheng Fan { 386*d4aefcaeSZheng Fan nVal = LogicToLogic(60, MAP_POINT, (MapUnit)eUnit); 387*d4aefcaeSZheng Fan nKern = (short)maEditKerning.Denormalize(nVal); 388*d4aefcaeSZheng Fan SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING); 389*d4aefcaeSZheng Fan mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); 390*d4aefcaeSZheng Fan mrTextPropertyPanel.SetSpacing(nKern); 391*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; 392*d4aefcaeSZheng Fan } 393*d4aefcaeSZheng Fan else if(iPos == 6) 394*d4aefcaeSZheng Fan { 395*d4aefcaeSZheng Fan //modified 396*d4aefcaeSZheng Fan if(mbCusEnable) 397*d4aefcaeSZheng Fan { 398*d4aefcaeSZheng Fan nVal = LogicToLogic(mnCustomKern, MAP_POINT, (MapUnit)eUnit); 399*d4aefcaeSZheng Fan nKern = (short)maEditKerning.Denormalize(nVal); 400*d4aefcaeSZheng Fan SvxKerningItem aKernItem(nKern , SID_ATTR_CHAR_KERNING); 401*d4aefcaeSZheng Fan mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); 402*d4aefcaeSZheng Fan mrTextPropertyPanel.SetSpacing(nKern); 403*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CLICK_ICON; 404*d4aefcaeSZheng Fan } 405*d4aefcaeSZheng Fan else 406*d4aefcaeSZheng Fan { 407*d4aefcaeSZheng Fan maVSSpacing.SetNoSelection(); //add , set no selection and keep the last select item 408*d4aefcaeSZheng Fan maVSSpacing.Format(); 409*d4aefcaeSZheng Fan Invalidate(); 410*d4aefcaeSZheng Fan maVSSpacing.StartSelection(); 411*d4aefcaeSZheng Fan } 412*d4aefcaeSZheng Fan //modify end 413*d4aefcaeSZheng Fan } 414*d4aefcaeSZheng Fan 415*d4aefcaeSZheng Fan if(iPos < 6 || (iPos == 6 && mbCusEnable)) //add 416*d4aefcaeSZheng Fan mrTextPropertyPanel.EndSpacingPopupMode(); 417*d4aefcaeSZheng Fan } 418*d4aefcaeSZheng Fan 419*d4aefcaeSZheng Fan 420*d4aefcaeSZheng Fan 421*d4aefcaeSZheng Fan return 0; 422*d4aefcaeSZheng Fan } 423*d4aefcaeSZheng Fan 424*d4aefcaeSZheng Fan IMPL_LINK(TextCharacterSpacingControl, KerningSelectHdl, ListBox*, EMPTYARG) 425*d4aefcaeSZheng Fan { 426*d4aefcaeSZheng Fan if ( maLBKerning.GetSelectEntryPos() > 0 ) 427*d4aefcaeSZheng Fan { 428*d4aefcaeSZheng Fan maFTBy.Enable(); 429*d4aefcaeSZheng Fan maEditKerning.Enable(); 430*d4aefcaeSZheng Fan } 431*d4aefcaeSZheng Fan else 432*d4aefcaeSZheng Fan { 433*d4aefcaeSZheng Fan maEditKerning.SetValue( 0 ); 434*d4aefcaeSZheng Fan maFTBy.Disable(); 435*d4aefcaeSZheng Fan maEditKerning.Disable(); 436*d4aefcaeSZheng Fan } 437*d4aefcaeSZheng Fan 438*d4aefcaeSZheng Fan if(maVSSpacing.GetSelItem()) 439*d4aefcaeSZheng Fan { 440*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); //modify 441*d4aefcaeSZheng Fan maVSSpacing.Format(); 442*d4aefcaeSZheng Fan Invalidate(); 443*d4aefcaeSZheng Fan maVSSpacing.StartSelection(); 444*d4aefcaeSZheng Fan } 445*d4aefcaeSZheng Fan KerningModifyHdl( NULL ); 446*d4aefcaeSZheng Fan return 0; 447*d4aefcaeSZheng Fan } 448*d4aefcaeSZheng Fan IMPL_LINK(TextCharacterSpacingControl, KerningModifyHdl, MetricField*, EMPTYARG) 449*d4aefcaeSZheng Fan { 450*d4aefcaeSZheng Fan if(maVSSpacing.GetSelItem()) 451*d4aefcaeSZheng Fan { 452*d4aefcaeSZheng Fan maVSSpacing.SetSelItem(0); //modify 453*d4aefcaeSZheng Fan maVSSpacing.Format(); 454*d4aefcaeSZheng Fan Invalidate(); 455*d4aefcaeSZheng Fan maVSSpacing.StartSelection(); 456*d4aefcaeSZheng Fan } 457*d4aefcaeSZheng Fan sal_uInt16 nPos = maLBKerning.GetSelectEntryPos(); 458*d4aefcaeSZheng Fan short nKern = 0; 459*d4aefcaeSZheng Fan SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric(); 460*d4aefcaeSZheng Fan mnLastCus = SPACING_CLOSE_BY_CUS_EDIT; 461*d4aefcaeSZheng Fan if ( nPos == SIDEBAR_SPACE_EXPAND || nPos == SIDEBAR_SPACE_CONDENSED ) 462*d4aefcaeSZheng Fan { 463*d4aefcaeSZheng Fan long nTmp = static_cast<long>(maEditKerning.GetValue()); 464*d4aefcaeSZheng Fan if ( nPos == SIDEBAR_SPACE_CONDENSED ) 465*d4aefcaeSZheng Fan { 466*d4aefcaeSZheng Fan long nMax = mrTextPropertyPanel.GetSelFontSize()/6; 467*d4aefcaeSZheng Fan maEditKerning.SetMax( maEditKerning.Normalize( nMax ), FUNIT_TWIP ); 468*d4aefcaeSZheng Fan maEditKerning.SetLast( maEditKerning.GetMax( maEditKerning.GetUnit() ) ); 469*d4aefcaeSZheng Fan if(nTmp > maEditKerning.GetMax()) 470*d4aefcaeSZheng Fan nTmp = maEditKerning.GetMax(); 471*d4aefcaeSZheng Fan mnCustomKern = -nTmp; 472*d4aefcaeSZheng Fan long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit ); 473*d4aefcaeSZheng Fan nKern = (short)maEditKerning.Denormalize( nVal ); 474*d4aefcaeSZheng Fan nKern *= - 1; 475*d4aefcaeSZheng Fan } 476*d4aefcaeSZheng Fan else 477*d4aefcaeSZheng Fan { 478*d4aefcaeSZheng Fan maEditKerning.SetMax( 9999 ); 479*d4aefcaeSZheng Fan maEditKerning.SetLast( 9999 ); 480*d4aefcaeSZheng Fan if(nTmp > maEditKerning.GetMax(FUNIT_TWIP)) 481*d4aefcaeSZheng Fan nTmp = maEditKerning.GetMax(FUNIT_TWIP); 482*d4aefcaeSZheng Fan mnCustomKern = nTmp; 483*d4aefcaeSZheng Fan long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit ); 484*d4aefcaeSZheng Fan nKern = (short)maEditKerning.Denormalize( nVal ); 485*d4aefcaeSZheng Fan } 486*d4aefcaeSZheng Fan } 487*d4aefcaeSZheng Fan else 488*d4aefcaeSZheng Fan { 489*d4aefcaeSZheng Fan mnCustomKern = 0; 490*d4aefcaeSZheng Fan } 491*d4aefcaeSZheng Fan SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING); 492*d4aefcaeSZheng Fan mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_KERNING, SFX_CALLMODE_RECORD, &aKernItem, 0L); 493*d4aefcaeSZheng Fan mrTextPropertyPanel.SetSpacing(nKern); 494*d4aefcaeSZheng Fan return 0; 495*d4aefcaeSZheng Fan } 496*d4aefcaeSZheng Fan short TextCharacterSpacingControl::GetLastCustomState() 497*d4aefcaeSZheng Fan { 498*d4aefcaeSZheng Fan return mnLastCus; 499*d4aefcaeSZheng Fan } 500*d4aefcaeSZheng Fan long TextCharacterSpacingControl::GetLastCustomValue() 501*d4aefcaeSZheng Fan { 502*d4aefcaeSZheng Fan return mnCustomKern; 503*d4aefcaeSZheng Fan } 504*d4aefcaeSZheng Fan 505*d4aefcaeSZheng Fan }} // end of namespace sidebar 506