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