Line data Source code
1 : /*
2 : * This file is part of the LibreOffice project.
3 : *
4 : * This Source Code Form is subject to the terms of the Mozilla Public
5 : * License, v. 2.0. If a copy of the MPL was not distributed with this
6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 : *
8 : * This file incorporates work covered by the following license notice:
9 : *
10 : * Licensed to the Apache Software Foundation (ASF) under one or more
11 : * contributor license agreements. See the NOTICE file distributed
12 : * with this work for additional information regarding copyright
13 : * ownership. The ASF licenses this file to you under the Apache
14 : * License, Version 2.0 (the "License"); you may not use this file
15 : * except in compliance with the License. You may obtain a copy of
16 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
17 : */
18 : #include "LineWidthControl.hxx"
19 : #include "LinePropertyPanel.hrc"
20 : #include "LinePropertyPanel.hxx"
21 :
22 : #include <svx/dialogs.hrc>
23 : #include <svx/dialmgr.hxx>
24 : #include <sfx2/sidebar/ResourceDefinitions.hrc>
25 : #include <comphelper/processfactory.hxx>
26 : #include <vcl/svapp.hxx>
27 : #include <vcl/settings.hxx>
28 : #include <unotools/viewoptions.hxx>
29 : #include <svx/xlnwtit.hxx>
30 : #include <sfx2/bindings.hxx>
31 : #include <sfx2/dispatch.hxx>
32 : #include "svx/sidebar/PopupContainer.hxx"
33 :
34 :
35 : namespace svx { namespace sidebar {
36 :
37 0 : LineWidthControl::LineWidthControl (
38 : Window* pParent,
39 : LinePropertyPanel& rPanel)
40 0 : : svx::sidebar::PopupControl(pParent,SVX_RES(RID_POPUPPANEL_LINEPAGE_WIDTH)),
41 : mrLinePropertyPanel(rPanel),
42 : mpBindings(NULL),
43 0 : maVSWidth( this, SVX_RES(VS_WIDTH)),
44 0 : maFTCus( this, SVX_RES(FT_CUSTOME)),
45 0 : maFTWidth( this, SVX_RES(FT_LINE_WIDTH)),
46 0 : maMFWidth( this, SVX_RES(MF_WIDTH)),
47 : meMapUnit(SFX_MAPUNIT_TWIP),
48 : rStr(NULL),
49 0 : mstrPT(SVX_RESSTR(STR_PT)),
50 : mnCustomWidth(0),
51 : mbCustom(false),
52 : mbColseByEdit(false),
53 : mnTmpCusomWidth(0),
54 : mbVSFocus(true),
55 0 : maIMGCus(SVX_RES(IMG_WIDTH_CUSTOM)),
56 0 : maIMGCusGray(SVX_RES(IMG_WIDTH_CUSTOM_GRAY))
57 : {
58 0 : Initialize();
59 0 : FreeResource();
60 0 : mpBindings = mrLinePropertyPanel.GetBindings();
61 0 : }
62 :
63 :
64 :
65 :
66 0 : LineWidthControl::~LineWidthControl (void)
67 : {
68 0 : delete[] rStr;
69 0 : }
70 :
71 :
72 :
73 :
74 0 : void LineWidthControl::Paint(const Rectangle& rect)
75 : {
76 0 : svx::sidebar::PopupControl::Paint(rect);
77 :
78 0 : Color aOldLineColor = GetLineColor();
79 0 : Color aOldFillColor = GetFillColor();
80 :
81 0 : Point aPos( LogicToPixel( Point( CUSTOM_X, CUSTOM_Y), MAP_APPFONT ));
82 0 : Size aSize( LogicToPixel( Size( CUSTOM_W, CUSTOM_H ), MAP_APPFONT ));
83 0 : Rectangle aRect( aPos, aSize );
84 0 : aRect.Left() -= 1;
85 0 : aRect.Top() -= 1;
86 0 : aRect.Right() += 1;
87 0 : aRect.Bottom() += 1;
88 :
89 0 : Color aLineColor(189,201,219);
90 0 : if(!GetSettings().GetStyleSettings().GetHighContrastMode())
91 0 : SetLineColor(aLineColor);
92 : else
93 0 : SetLineColor(GetSettings().GetStyleSettings().GetShadowColor());
94 0 : SetFillColor(COL_TRANSPARENT);
95 0 : DrawRect(aRect);
96 :
97 0 : SetLineColor(aOldLineColor);
98 0 : SetFillColor(aOldFillColor);
99 0 : }
100 :
101 :
102 :
103 :
104 0 : void LineWidthControl::Initialize()
105 : {
106 0 : maVSWidth.SetStyle( maVSWidth.GetStyle()| WB_3DLOOK | WB_NO_DIRECTSELECT );// WB_NAMEFIELD | WB_ITEMBORDER |WB_DOUBLEBORDER | WB_NONEFIELD |
107 : //for high contrast wj
108 0 : if(GetSettings().GetStyleSettings().GetHighContrastMode())
109 : {
110 0 : maVSWidth.SetColor(GetSettings().GetStyleSettings().GetMenuColor());
111 : // maBorder.SetBackground(GetSettings().GetStyleSettings().GetMenuColor());
112 0 : maFTWidth.SetBackground(GetSettings().GetStyleSettings().GetMenuColor());
113 : }
114 : else
115 : {
116 0 : maVSWidth.SetColor(COL_WHITE);
117 : // maBorder.SetBackground(Wallpaper(COL_WHITE));
118 0 : maFTWidth.SetBackground(Wallpaper(COL_WHITE));
119 : }
120 :
121 0 : sal_Int64 nFirst= maMFWidth.Denormalize( maMFWidth.GetFirst( FUNIT_TWIP ) );
122 0 : sal_Int64 nLast = maMFWidth.Denormalize( maMFWidth.GetLast( FUNIT_TWIP ) );
123 0 : sal_Int64 nMin = maMFWidth.Denormalize( maMFWidth.GetMin( FUNIT_TWIP ) );
124 0 : sal_Int64 nMax = maMFWidth.Denormalize( maMFWidth.GetMax( FUNIT_TWIP ) );
125 0 : maMFWidth.SetSpinSize( 10 );
126 0 : maMFWidth.SetUnit( FUNIT_POINT );
127 0 : if( maMFWidth.GetDecimalDigits() > 1 )
128 0 : maMFWidth.SetDecimalDigits( 1 );
129 0 : maMFWidth.SetFirst( maMFWidth.Normalize( nFirst ), FUNIT_TWIP );
130 0 : maMFWidth.SetLast( maMFWidth.Normalize( nLast ), FUNIT_TWIP );
131 0 : maMFWidth.SetMin( maMFWidth.Normalize( nMin ), FUNIT_TWIP );
132 0 : maMFWidth.SetMax( maMFWidth.Normalize( nMax ), FUNIT_TWIP );
133 :
134 0 : rStr = new OUString[9];
135 : //modify,
136 0 : rStr[0] = "0.5";
137 0 : rStr[1] = "0.8";
138 0 : rStr[2] = "1.0";
139 0 : rStr[3] = "1.5";
140 0 : rStr[4] = "2.3";
141 0 : rStr[5] = "3.0";
142 0 : rStr[6] = "4.5";
143 0 : rStr[7] = "6.0";
144 0 : rStr[8] = SVX_RESSTR(STR_WIDTH_LAST_CUSTOM);
145 :
146 0 : const LocaleDataWrapper& rLocaleWrapper( Application::GetSettings().GetLocaleDataWrapper() );
147 0 : const sal_Unicode cSep = rLocaleWrapper.getNumDecimalSep()[0];
148 :
149 0 : for(int i = 0; i <= 7 ; i++)
150 : {
151 0 : rStr[i] = rStr[i].replace('.', cSep);//Modify
152 0 : rStr[i] += mstrPT;
153 : }
154 : //end
155 :
156 0 : for(sal_uInt16 i = 1 ; i <= 9 ; i++)
157 : {
158 0 : maVSWidth.InsertItem(i);
159 0 : maVSWidth.SetItemText(i, rStr[i-1]);
160 : }
161 0 : maVSWidth.SetUnit(rStr);
162 0 : maVSWidth.SetItemData(1,(void*)5);
163 0 : maVSWidth.SetItemData(2,(void*)8);
164 0 : maVSWidth.SetItemData(3,(void*)10);
165 0 : maVSWidth.SetItemData(4,(void*)15);
166 0 : maVSWidth.SetItemData(5,(void*)23);
167 0 : maVSWidth.SetItemData(6,(void*)30);
168 0 : maVSWidth.SetItemData(7,(void*)45);
169 0 : maVSWidth.SetItemData(8,(void*)60);
170 0 : maVSWidth.SetImage(maIMGCusGray);
171 :
172 0 : maVSWidth.SetSelItem(0);
173 0 : Link aLink = LINK( this, LineWidthControl, VSSelectHdl ) ;
174 0 : maVSWidth.SetSelectHdl(aLink);
175 0 : aLink = LINK(this, LineWidthControl, MFModifyHdl);
176 0 : maMFWidth.SetModifyHdl(aLink);
177 :
178 0 : maVSWidth.StartSelection();
179 0 : maVSWidth.Show();
180 0 : }
181 :
182 :
183 :
184 :
185 0 : void LineWidthControl::GetFocus()
186 : {
187 0 : if(!mbVSFocus)
188 0 : maMFWidth.GrabFocus();
189 : else
190 0 : maVSWidth.GrabFocus();
191 0 : }
192 :
193 :
194 :
195 :
196 0 : void LineWidthControl::SetWidthSelect( long lValue, bool bValuable, SfxMapUnit eMapUnit)
197 : {
198 0 : mbVSFocus = true;
199 0 : maVSWidth.SetSelItem(0);
200 0 : mbColseByEdit = false;
201 0 : meMapUnit = eMapUnit;
202 0 : SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_LINE_WIDTH_GLOBAL_VALUE );
203 0 : if ( aWinOpt.Exists() )
204 : {
205 0 : ::com::sun::star::uno::Sequence < ::com::sun::star::beans::NamedValue > aSeq = aWinOpt.GetUserData();
206 0 : ::rtl::OUString aTmp;
207 0 : if ( aSeq.getLength())
208 0 : aSeq[0].Value >>= aTmp;
209 :
210 0 : OUString aWinData( aTmp );
211 0 : mnCustomWidth = aWinData.toInt32();
212 0 : mbCustom = true;
213 0 : maVSWidth.SetImage(maIMGCus);
214 0 : maVSWidth.SetCusEnable(true);
215 :
216 0 : OUString aStrTip( OUString::number( (double)mnCustomWidth / 10));
217 0 : aStrTip += mstrPT;
218 0 : maVSWidth.SetItemText(9, aStrTip);
219 : }
220 : else
221 : {
222 0 : mbCustom = false;
223 0 : maVSWidth.SetImage(maIMGCusGray);
224 0 : maVSWidth.SetCusEnable(false);
225 : //modify
226 : //String aStrTip(String(SVX_RES(STR_WIDTH_LAST_CUSTOM)));
227 : //maVSWidth.SetItemText(9, aStrTip);
228 0 : maVSWidth.SetItemText(9, rStr[8]);
229 : }
230 :
231 0 : if(bValuable)
232 : {
233 0 : sal_Int64 nVal = OutputDevice::LogicToLogic( lValue, (MapUnit)eMapUnit, MAP_100TH_MM );
234 0 : nVal = maMFWidth.Normalize( nVal );
235 0 : maMFWidth.SetValue( nVal, FUNIT_100TH_MM );
236 : }
237 : else
238 : {
239 0 : maMFWidth.SetText( "" );
240 : }
241 :
242 0 : MapUnit eOrgUnit = (MapUnit)eMapUnit;
243 0 : MapUnit ePntUnit( MAP_TWIP );
244 0 : lValue = LogicToLogic( lValue , eOrgUnit, ePntUnit );
245 :
246 0 : OUString strCurrValue = maMFWidth.GetText();
247 0 : sal_uInt16 i = 0;
248 0 : for(; i < 8; i++)
249 0 : if(strCurrValue == rStr[i])
250 : {
251 0 : maVSWidth.SetSelItem(i+1);
252 0 : break;
253 : }
254 0 : if (i>=8)
255 : {
256 0 : mbVSFocus = false;
257 0 : maVSWidth.SetSelItem(0);
258 : }
259 0 : maVSWidth.Format();
260 0 : maVSWidth.StartSelection();
261 0 : }
262 :
263 :
264 :
265 :
266 0 : IMPL_LINK(LineWidthControl, VSSelectHdl, void *, pControl)
267 : {
268 0 : if(pControl == &maVSWidth)
269 : {
270 0 : sal_uInt16 iPos = maVSWidth.GetSelectItemId();
271 0 : if(iPos >= 1 && iPos <= 8)
272 : {
273 0 : sal_IntPtr nVal = LogicToLogic((sal_IntPtr)maVSWidth.GetItemData( iPos ) , MAP_POINT, (MapUnit)meMapUnit);
274 0 : nVal = maMFWidth.Denormalize(nVal);
275 0 : XLineWidthItem aWidthItem( nVal );
276 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L);
277 0 : mrLinePropertyPanel.SetWidthIcon(iPos);
278 0 : mrLinePropertyPanel.SetWidth(nVal);
279 0 : mbColseByEdit = false;
280 0 : mnTmpCusomWidth = 0;
281 : }
282 0 : else if(iPos == 9)
283 : {//last custom
284 : //modified
285 0 : if(mbCustom)
286 : {
287 0 : long nVal = LogicToLogic(mnCustomWidth , MAP_POINT, (MapUnit)meMapUnit);
288 0 : nVal = maMFWidth.Denormalize(nVal);
289 0 : XLineWidthItem aWidthItem( nVal );
290 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L);
291 0 : mrLinePropertyPanel.SetWidth(nVal);
292 0 : mbColseByEdit = false;
293 0 : mnTmpCusomWidth = 0;
294 : }
295 : else
296 : {
297 0 : maVSWidth.SetNoSelection(); //add , set no selection and keep the last select item
298 0 : maVSWidth.Format();
299 0 : Invalidate();
300 0 : maVSWidth.StartSelection();
301 : }
302 : //modify end
303 : }
304 0 : if((iPos >= 1 && iPos <= 8) || (iPos == 9 && mbCustom)) //add
305 0 : mrLinePropertyPanel.EndLineWidthPopupMode();
306 : }
307 0 : return( 0L );
308 : }
309 :
310 :
311 :
312 :
313 0 : IMPL_LINK(LineWidthControl, MFModifyHdl, void *, pControl)
314 : {
315 0 : if(pControl == &maMFWidth)
316 : {
317 0 : if(maVSWidth.GetSelItem())
318 : {
319 0 : maVSWidth.SetSelItem(0);
320 0 : maVSWidth.Format();
321 0 : Invalidate();
322 0 : maVSWidth.StartSelection();
323 : }
324 0 : long nTmp = static_cast<long>(maMFWidth.GetValue());
325 0 : long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)meMapUnit );
326 0 : sal_Int32 nNewWidth = (short)maMFWidth.Denormalize( nVal );
327 0 : XLineWidthItem aWidthItem(nNewWidth);
328 0 : mpBindings->GetDispatcher()->Execute(SID_ATTR_LINE_WIDTH, SFX_CALLMODE_RECORD, &aWidthItem, 0L);
329 :
330 0 : mbColseByEdit = true;
331 0 : mnTmpCusomWidth = nTmp;
332 : /*for(sal_uInt16 i = 0; i < 8; i++)
333 : {
334 : if(nTmp == (sal_Int32)maVSWidth.GetItemData(i))
335 : {
336 : mbColseByEdit = false;
337 : break;
338 : }
339 : }*/
340 :
341 : }
342 0 : return( 0L );
343 : }
344 :
345 :
346 :
347 :
348 0 : bool LineWidthControl::IsCloseByEdit()
349 : {
350 0 : return mbColseByEdit;
351 : }
352 :
353 :
354 :
355 :
356 0 : long LineWidthControl::GetTmpCustomWidth()
357 : {
358 0 : return mnTmpCusomWidth;
359 : }
360 :
361 :
362 :
363 : } } // end of namespace svx::sidebar
364 :
365 : // eof
|