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
TextUnderlineControl(Window * pParent,svx::sidebar::TextPropertyPanel & rPanel,SfxBindings * pBindings)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
initial()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
Rearrange(FontUnderline eLine)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
IMPL_LINK(TextUnderlineControl,VSSelectHdl,void *,pControl)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
IMPL_LINK(TextUnderlineControl,PBClickHdl,PushButton *,pPBtn)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