1b9e67834SAndre Fischer /************************************************************** 2b9e67834SAndre Fischer * 3b9e67834SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 4b9e67834SAndre Fischer * or more contributor license agreements. See the NOTICE file 5b9e67834SAndre Fischer * distributed with this work for additional information 6b9e67834SAndre Fischer * regarding copyright ownership. The ASF licenses this file 7b9e67834SAndre Fischer * to you under the Apache License, Version 2.0 (the 8b9e67834SAndre Fischer * "License"); you may not use this file except in compliance 9b9e67834SAndre Fischer * with the License. You may obtain a copy of the License at 10b9e67834SAndre Fischer * 11b9e67834SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 12b9e67834SAndre Fischer * 13b9e67834SAndre Fischer * Unless required by applicable law or agreed to in writing, 14b9e67834SAndre Fischer * software distributed under the License is distributed on an 15b9e67834SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b9e67834SAndre Fischer * KIND, either express or implied. See the License for the 17b9e67834SAndre Fischer * specific language governing permissions and limitations 18b9e67834SAndre Fischer * under the License. 19b9e67834SAndre Fischer * 20b9e67834SAndre Fischer *************************************************************/ 21b9e67834SAndre Fischer 22b9e67834SAndre Fischer #include "precompiled_svx.hxx" 23d4aefcaeSZheng Fan #include "TextUnderlineControl.hxx" 24d4aefcaeSZheng Fan #include "TextPropertyPanel.hrc" 25d29c2fc2SAndre 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 #include <editeng/udlnitem.hxx> 34d4aefcaeSZheng Fan 35d4aefcaeSZheng Fan namespace svx { namespace sidebar { 36d4aefcaeSZheng Fan 3745da7d5eSAndre Fischer TextUnderlineControl::TextUnderlineControl ( 3845da7d5eSAndre Fischer Window* pParent, 3945da7d5eSAndre Fischer svx::sidebar::TextPropertyPanel& rPanel, 4045da7d5eSAndre Fischer SfxBindings* pBindings) 41d4aefcaeSZheng Fan : svx::sidebar::PopupControl( pParent,SVX_RES(RID_POPUPPANEL_TEXTPAGE_UNDERLINE)) 42d4aefcaeSZheng Fan , mrTextPropertyPanel(rPanel) 4345da7d5eSAndre Fischer , mpBindings(pBindings) 44b9e67834SAndre Fischer , maVSUnderline( this, SVX_RES(VS_UNDERLINE)) 45d4aefcaeSZheng Fan , maPBOptions (this, SVX_RES(PB_OPTIONS) ) 46b9e67834SAndre Fischer 47b9e67834SAndre Fischer , maIMGSingle (SVX_RES(IMG_SINGLE)) 48b9e67834SAndre Fischer , maIMGDouble (SVX_RES(IMG_DOUBLE)) 49b9e67834SAndre Fischer , maIMGBold (SVX_RES(IMG_BOLD2)) 50b9e67834SAndre Fischer , maIMGDot (SVX_RES(IMG_DOT)) 51b9e67834SAndre Fischer , maIMGDotBold (SVX_RES(IMG_DOT_BOLD)) 52b9e67834SAndre Fischer , maIMGDash (SVX_RES(IMG_DASH)) 53b9e67834SAndre Fischer , maIMGDashLong (SVX_RES(IMG_DASH_LONG)) 54b9e67834SAndre Fischer , maIMGDashDot (SVX_RES(IMG_DASH_DOT)) 55b9e67834SAndre Fischer , maIMGDashDotDot (SVX_RES(IMG_DASH_DOT_DOT)) 56b9e67834SAndre Fischer , maIMGWave (SVX_RES(IMG_WAVE)) 57b9e67834SAndre Fischer 58b9e67834SAndre Fischer // high contrast 59b9e67834SAndre Fischer , maIMGSingleH (SVX_RES(IMG_SINGLE_H)) 60b9e67834SAndre Fischer , maIMGDoubleH (SVX_RES(IMG_DOUBLE_H)) 61b9e67834SAndre Fischer , maIMGBoldH (SVX_RES(IMG_BOLD2_H)) 62b9e67834SAndre Fischer , maIMGDotH (SVX_RES(IMG_DOT_H)) 63b9e67834SAndre Fischer , maIMGDotBoldH (SVX_RES(IMG_DOT_BOLD_H)) 64b9e67834SAndre Fischer , maIMGDashH (SVX_RES(IMG_DASH_H)) 65b9e67834SAndre Fischer , maIMGDashLongH (SVX_RES(IMG_DASH_LONG_H)) 66b9e67834SAndre Fischer , maIMGDashDotH (SVX_RES(IMG_DASH_DOT_H)) 67b9e67834SAndre Fischer , maIMGDashDotDotH(SVX_RES(IMG_DASH_DOT_DOT_H)) 68b9e67834SAndre Fischer , maIMGWaveH (SVX_RES(IMG_WAVE_H)) 69b9e67834SAndre Fischer 70b9e67834SAndre Fischer , maIMGSingleSel (SVX_RES(IMG_SINGLE_SEL)) 71b9e67834SAndre Fischer , maIMGDoubleSel (SVX_RES(IMG_DOUBLE_SEL)) 72b9e67834SAndre Fischer , maIMGBoldSel (SVX_RES(IMG_BOLD2_SEL)) 73b9e67834SAndre Fischer , maIMGDotSel (SVX_RES(IMG_DOT_SEL)) 74b9e67834SAndre Fischer , maIMGDotBoldSel (SVX_RES(IMG_DOT_BOLD_SEL)) 75b9e67834SAndre Fischer , maIMGDashSel (SVX_RES(IMG_DASH_SEL)) 76b9e67834SAndre Fischer , maIMGDashLongSel (SVX_RES(IMG_DASH_LONG_SEL)) 77b9e67834SAndre Fischer , maIMGDashDotSel (SVX_RES(IMG_DASH_DOT_SEL)) 78b9e67834SAndre Fischer , maIMGDashDotDotSel (SVX_RES(IMG_DASH_DOT_DOT_SEL)) 79b9e67834SAndre Fischer , maIMGWaveSel (SVX_RES(IMG_WAVE_SEL)) 80b9e67834SAndre Fischer 81b9e67834SAndre Fischer { 82b9e67834SAndre Fischer initial(); 83b9e67834SAndre Fischer FreeResource(); 84b9e67834SAndre Fischer } 85b9e67834SAndre Fischer 86d4aefcaeSZheng Fan void TextUnderlineControl::initial() 87b9e67834SAndre Fischer { 88*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()? 89*a3586beeSOliver-Rainer Wittmann GetSettings().GetStyleSettings().GetMenuColor(): 90*a3586beeSOliver-Rainer Wittmann sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); 91*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()? 92*a3586beeSOliver-Rainer Wittmann GetSettings().GetStyleSettings().GetMenuColor(): 93*a3586beeSOliver-Rainer Wittmann sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground )); 94b9e67834SAndre Fischer 95*a3586beeSOliver-Rainer Wittmann Link aLink = LINK( this, TextUnderlineControl, PBClickHdl ) ; 96*a3586beeSOliver-Rainer Wittmann maPBOptions.SetClickHdl(aLink); 97b9e67834SAndre Fischer 98*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetStyle( maVSUnderline.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT ); 99b9e67834SAndre Fischer 100*a3586beeSOliver-Rainer Wittmann // 'none' item 101*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetStyle( maVSUnderline.GetStyle()| WB_NONEFIELD | WB_MENUSTYLEVALUESET ); 102*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetText( String(SVX_RES(STR_WITHOUT) ) ); 103b9e67834SAndre Fischer 104*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(1, maIMGSingle ,String(SVX_RES(STR_SINGLE))); 105*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(1, (void*)(sal_uInt64)UNDERLINE_SINGLE); 106b9e67834SAndre Fischer 107*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(2, maIMGDouble ,String(SVX_RES(STR_DOUBLE))); 108*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(2, (void*)(sal_uInt64)UNDERLINE_DOUBLE); 109b9e67834SAndre Fischer 110*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(3, maIMGBold, String(SVX_RES(STR_BOLD))); 111*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(3,(void*)(sal_uInt64)UNDERLINE_BOLD); 112b9e67834SAndre Fischer 113*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(4, maIMGDot, String(SVX_RES(STR_DOT))); 114*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(4,(void*)(sal_uInt64)UNDERLINE_DOTTED); 115b9e67834SAndre Fischer 116*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(5, maIMGDotBold, String(SVX_RES(STR_DOT_BOLD))); 117*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(5,(void*)(sal_uInt64)UNDERLINE_BOLDDOTTED); 118b9e67834SAndre Fischer 119*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(6, maIMGDash, String(SVX_RES(STR_DASH))); 120*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(6,(void*)(sal_uInt64)UNDERLINE_DASH); 121b9e67834SAndre Fischer 122*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(7, maIMGDashLong,String(SVX_RES(STR_DASH_LONG))); 123*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(7,(void*)(sal_uInt64)UNDERLINE_LONGDASH); 124b9e67834SAndre Fischer 125*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(8, maIMGDashDot, String(SVX_RES(STR_DASH_DOT))); 126*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(8,(void*)(sal_uInt64)UNDERLINE_DASHDOT); 127b9e67834SAndre Fischer 128*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(9, maIMGDashDotDot, String(SVX_RES(STR_DASH_DOT_DOT))); 129*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(9,(void*)(sal_uInt64)UNDERLINE_DASHDOTDOT); 130b9e67834SAndre Fischer 131*a3586beeSOliver-Rainer Wittmann maVSUnderline.InsertItem(10, maIMGWave, String(SVX_RES(STR_WAVE))); 132*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemData(10,(void*)(sal_uInt64)UNDERLINE_WAVE); 133*a3586beeSOliver-Rainer Wittmann 134*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetColCount( 1 ); 135*a3586beeSOliver-Rainer Wittmann aLink = LINK( this, TextUnderlineControl, VSSelectHdl ) ; 136b9e67834SAndre Fischer maVSUnderline.SetSelectHdl(aLink); 137b9e67834SAndre Fischer 138*a3586beeSOliver-Rainer Wittmann maVSUnderline.StartSelection(); 139*a3586beeSOliver-Rainer Wittmann maVSUnderline.Show(); 140b9e67834SAndre Fischer } 141b9e67834SAndre Fischer 142900fdb6dSOliver-Rainer Wittmann 143d4aefcaeSZheng Fan void TextUnderlineControl::Rearrange(FontUnderline eLine) 144b9e67834SAndre Fischer { 145b9e67834SAndre Fischer // high contrast 146b9e67834SAndre Fischer maVSUnderline.SetItemImage(1, GetDisplayBackground().GetColor().IsDark()? maIMGSingleH :maIMGSingle); 147b9e67834SAndre Fischer maVSUnderline.SetItemImage(2, GetDisplayBackground().GetColor().IsDark()? maIMGDoubleH : maIMGDouble ); 148b9e67834SAndre Fischer maVSUnderline.SetItemImage(3, GetDisplayBackground().GetColor().IsDark()? maIMGBoldH : maIMGBold); 149b9e67834SAndre Fischer maVSUnderline.SetItemImage(4, GetDisplayBackground().GetColor().IsDark()? maIMGDotH : maIMGDot); 150b9e67834SAndre Fischer maVSUnderline.SetItemImage(5, GetDisplayBackground().GetColor().IsDark()? maIMGDotBoldH :maIMGDotBold); 151b9e67834SAndre Fischer maVSUnderline.SetItemImage(6, GetDisplayBackground().GetColor().IsDark()? maIMGDashH :maIMGDash); 152b9e67834SAndre Fischer maVSUnderline.SetItemImage(7, GetDisplayBackground().GetColor().IsDark()? maIMGDashLongH : maIMGDashLong); 153b9e67834SAndre Fischer maVSUnderline.SetItemImage(8, GetDisplayBackground().GetColor().IsDark()? maIMGDashDotH : maIMGDashDot); 154b9e67834SAndre Fischer maVSUnderline.SetItemImage(9, GetDisplayBackground().GetColor().IsDark()? maIMGDashDotDotH : maIMGDashDotDot); 155b9e67834SAndre Fischer maVSUnderline.SetItemImage(10, GetDisplayBackground().GetColor().IsDark()? maIMGWaveH : maIMGWave); 156b9e67834SAndre Fischer 157*a3586beeSOliver-Rainer Wittmann switch(eLine) 158*a3586beeSOliver-Rainer Wittmann { 159*a3586beeSOliver-Rainer Wittmann case UNDERLINE_SINGLE: 160*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(1, maIMGSingleSel); 161*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(1); 162*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 163*a3586beeSOliver-Rainer Wittmann break; 164*a3586beeSOliver-Rainer Wittmann case UNDERLINE_DOUBLE: 165*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(2, maIMGDoubleSel); 166*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(2); 167*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 168*a3586beeSOliver-Rainer Wittmann break; 169*a3586beeSOliver-Rainer Wittmann case UNDERLINE_BOLD: 170*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(3, maIMGBoldSel); 171*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(3); 172*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 173*a3586beeSOliver-Rainer Wittmann break; 174*a3586beeSOliver-Rainer Wittmann case UNDERLINE_DOTTED: 175*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(4, maIMGDotSel); 176*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(4); 177*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 178*a3586beeSOliver-Rainer Wittmann break; 179*a3586beeSOliver-Rainer Wittmann case UNDERLINE_BOLDDOTTED: 180*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(5, maIMGDotBoldSel); 181*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(5); 182*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 183*a3586beeSOliver-Rainer Wittmann break; 184*a3586beeSOliver-Rainer Wittmann case UNDERLINE_DASH: 185*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(6, maIMGDashSel); 186*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(6); 187*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 188*a3586beeSOliver-Rainer Wittmann break; 189*a3586beeSOliver-Rainer Wittmann case UNDERLINE_LONGDASH: 190*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(7, maIMGDashLongSel); 191*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(7); 192*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 193*a3586beeSOliver-Rainer Wittmann break; 194*a3586beeSOliver-Rainer Wittmann case UNDERLINE_DASHDOT: 195*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(8, maIMGDashDotSel); 196*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(8); 197*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 198*a3586beeSOliver-Rainer Wittmann break; 199*a3586beeSOliver-Rainer Wittmann case UNDERLINE_DASHDOTDOT: 200*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(9, maIMGDashDotDotSel); 201*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(9); 202*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 203*a3586beeSOliver-Rainer Wittmann break; 204*a3586beeSOliver-Rainer Wittmann case UNDERLINE_WAVE: 205*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetItemImage(10, maIMGWaveSel); 206*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(10); 207*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 208*a3586beeSOliver-Rainer Wittmann break; 209*a3586beeSOliver-Rainer Wittmann case UNDERLINE_NONE: 210*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(0); 211*a3586beeSOliver-Rainer Wittmann maVSUnderline.GrabFocus(); 212*a3586beeSOliver-Rainer Wittmann break; 213*a3586beeSOliver-Rainer Wittmann default: 214*a3586beeSOliver-Rainer Wittmann maVSUnderline.SelectItem(1); 215*a3586beeSOliver-Rainer Wittmann maVSUnderline.SetNoSelection(); 216*a3586beeSOliver-Rainer Wittmann maPBOptions.GrabFocus(); 217*a3586beeSOliver-Rainer Wittmann } 218*a3586beeSOliver-Rainer Wittmann maVSUnderline.StartSelection(); 219b9e67834SAndre Fischer } 220900fdb6dSOliver-Rainer Wittmann 221900fdb6dSOliver-Rainer Wittmann 222d4aefcaeSZheng Fan IMPL_LINK(TextUnderlineControl, VSSelectHdl, void *, pControl) 223b9e67834SAndre Fischer { 224*a3586beeSOliver-Rainer Wittmann if ( pControl == &maVSUnderline ) 225*a3586beeSOliver-Rainer Wittmann { 226*a3586beeSOliver-Rainer Wittmann const sal_uInt16 iPos = maVSUnderline.GetSelectItemId(); 227*a3586beeSOliver-Rainer Wittmann const FontUnderline eUnderline = ( iPos == 0 ) 228*a3586beeSOliver-Rainer Wittmann ? UNDERLINE_NONE 229*a3586beeSOliver-Rainer Wittmann : (FontUnderline)(sal_uInt64)maVSUnderline.GetItemData( iPos ); 230b9e67834SAndre Fischer 231*a3586beeSOliver-Rainer Wittmann SvxUnderlineItem aLineItem(eUnderline, SID_ATTR_CHAR_UNDERLINE); 232b9e67834SAndre Fischer 233*a3586beeSOliver-Rainer Wittmann aLineItem.SetColor(mrTextPropertyPanel.GetUnderlineColor()); 234*a3586beeSOliver-Rainer Wittmann mpBindings->GetDispatcher()->Execute(SID_ATTR_CHAR_UNDERLINE, SFX_CALLMODE_RECORD, &aLineItem, 0L); 235b9e67834SAndre Fischer 236*a3586beeSOliver-Rainer Wittmann mrTextPropertyPanel.SetUnderline(eUnderline); 237b9e67834SAndre Fischer 238*a3586beeSOliver-Rainer Wittmann mrTextPropertyPanel.EndUnderlinePopupMode(); 239*a3586beeSOliver-Rainer Wittmann } 240*a3586beeSOliver-Rainer Wittmann return( 0L ); 241b9e67834SAndre Fischer } 242b9e67834SAndre Fischer 243d4aefcaeSZheng Fan IMPL_LINK(TextUnderlineControl, PBClickHdl, PushButton *, pPBtn) 244b9e67834SAndre Fischer { 245b9e67834SAndre Fischer if(pPBtn == &maPBOptions) 246b9e67834SAndre Fischer { 247b9e67834SAndre Fischer if (mpBindings) 248b9e67834SAndre Fischer { 249b9e67834SAndre Fischer SfxDispatcher* pDisp = mpBindings->GetDispatcher(); 250b9e67834SAndre Fischer pDisp->Execute( SID_CHAR_DLG_EFFECT, SFX_CALLMODE_ASYNCHRON ); 251b9e67834SAndre Fischer } 252d4aefcaeSZheng Fan mrTextPropertyPanel.EndUnderlinePopupMode(); 253b9e67834SAndre Fischer } 254b9e67834SAndre Fischer return 0; 255b9e67834SAndre Fischer } 256b9e67834SAndre Fischer 257d4aefcaeSZheng Fan }} 258