Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <string>
21 : #include <tools/shl.hxx>
22 : #include <svl/intitem.hxx>
23 : #include <svl/eitem.hxx>
24 : #include <svl/stritem.hxx>
25 : #include <sfx2/dispatch.hxx>
26 : #include <vcl/toolbox.hxx>
27 : #include <vcl/fixed.hxx>
28 : #include "fmitems.hxx"
29 : #include "formtoolbars.hxx"
30 :
31 :
32 : #include <svx/dialmgr.hxx>
33 : #include <svx/dialogs.hrc>
34 : #include "svx/tbxctl.hxx"
35 : #include "svx/tbxdraw.hxx"
36 : #include "tbxform.hxx"
37 : #include "svx/fmresids.hrc"
38 : #include "fmhelp.hrc"
39 : #include <sfx2/viewfrm.hxx>
40 : #include <sfx2/viewsh.hxx>
41 : #include <sfx2/imagemgr.hxx>
42 : #include <com/sun/star/beans/XPropertySet.hpp>
43 :
44 : using namespace ::com::sun::star::uno;
45 : using namespace ::com::sun::star::beans;
46 : using namespace ::com::sun::star::frame;
47 : using ::com::sun::star::beans::XPropertySet;
48 :
49 :
50 : //========================================================================
51 : // class SvxFmAbsRecWin
52 : //========================================================================
53 :
54 : // -----------------------------------------------------------------------
55 0 : SvxFmAbsRecWin::SvxFmAbsRecWin( Window* _pParent, SfxToolBoxControl* _pController )
56 : :NumericField( _pParent, WB_BORDER )
57 0 : ,m_pController(_pController)
58 : {
59 0 : SetMin(1);
60 0 : SetFirst(1);
61 0 : SetSpinSize(1);
62 0 : SetSizePixel( Size(70,19) );
63 :
64 0 : SetDecimalDigits(0);
65 0 : SetStrictFormat(sal_True);
66 0 : }
67 :
68 : // -----------------------------------------------------------------------
69 0 : SvxFmAbsRecWin::~SvxFmAbsRecWin()
70 : {
71 0 : }
72 :
73 : // -----------------------------------------------------------------------
74 0 : void SvxFmAbsRecWin::FirePosition( sal_Bool _bForce )
75 : {
76 0 : if ( _bForce || ( GetText() != GetSavedValue() ) )
77 : {
78 0 : sal_Int64 nRecord = GetValue();
79 0 : if (nRecord < GetMin() || nRecord > GetMax())
80 : {
81 0 : return;
82 : }
83 :
84 0 : SfxInt32Item aPositionParam( FN_PARAM_1, static_cast<sal_Int32>(nRecord) );
85 :
86 0 : Any a;
87 0 : Sequence< PropertyValue > aArgs( 1 );
88 0 : aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Position" ));
89 0 : aPositionParam.QueryValue( a );
90 0 : aArgs[0].Value = a;
91 : m_pController->Dispatch( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:AbsoluteRecord" )),
92 0 : aArgs );
93 0 : m_pController->updateStatus();
94 :
95 0 : SaveValue();
96 : }
97 : }
98 :
99 : // -----------------------------------------------------------------------
100 0 : void SvxFmAbsRecWin::LoseFocus()
101 : {
102 0 : FirePosition( sal_False );
103 0 : }
104 :
105 : // -----------------------------------------------------------------------
106 0 : void SvxFmAbsRecWin::KeyInput( const KeyEvent& rKeyEvent )
107 : {
108 0 : if( rKeyEvent.GetKeyCode() == KEY_RETURN && GetText().Len() )
109 0 : FirePosition( sal_True );
110 : else
111 0 : NumericField::KeyInput( rKeyEvent );
112 0 : }
113 :
114 : //========================================================================
115 : // class SvxFmTbxCtlConfig
116 : //========================================================================
117 :
118 : struct MapSlotToCmd
119 : {
120 : sal_uInt16 nSlotId;
121 : const char* pCommand;
122 : };
123 :
124 : static MapSlotToCmd SlotToCommands[] =
125 : {
126 : { SID_FM_PUSHBUTTON, ".uno:Pushbutton" },
127 : { SID_FM_RADIOBUTTON, ".uno:RadioButton" },
128 : { SID_FM_CHECKBOX, ".uno:CheckBox" },
129 : { SID_FM_FIXEDTEXT, ".uno:Label" },
130 : { SID_FM_GROUPBOX, ".uno:GroupBox" },
131 : { SID_FM_LISTBOX, ".uno:ListBox" },
132 : { SID_FM_COMBOBOX, ".uno:ComboBox" },
133 : { SID_FM_EDIT, ".uno:Edit" },
134 : { SID_FM_DBGRID, ".uno:Grid" },
135 : { SID_FM_IMAGEBUTTON, ".uno:Imagebutton" },
136 : { SID_FM_IMAGECONTROL, ".uno:ImageControl" },
137 : { SID_FM_FILECONTROL, ".uno:FileControl" },
138 : { SID_FM_DATEFIELD, ".uno:DateField" },
139 : { SID_FM_TIMEFIELD, ".uno:TimeField" },
140 : { SID_FM_NUMERICFIELD, ".uno:NumericField" },
141 : { SID_FM_CURRENCYFIELD, ".uno:CurrencyField" },
142 : { SID_FM_PATTERNFIELD, ".uno:PatternField" },
143 : { SID_FM_DESIGN_MODE, ".uno:SwitchControlDesignMode" },
144 : { SID_FM_FORMATTEDFIELD, ".uno:FormattedField" },
145 : { SID_FM_SCROLLBAR, ".uno:ScrollBar" },
146 : { SID_FM_SPINBUTTON, ".uno:SpinButton" },
147 : { 0, "" }
148 : };
149 :
150 18 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlConfig, SfxUInt16Item );
151 :
152 : //-----------------------------------------------------------------------
153 0 : SvxFmTbxCtlConfig::SvxFmTbxCtlConfig( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
154 : : SfxToolBoxControl( nSlotId, nId, rTbx )
155 0 : ,nLastSlot( 0 )
156 : {
157 0 : rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
158 0 : }
159 :
160 : //-----------------------------------------------------------------------
161 0 : void SvxFmTbxCtlConfig::StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
162 : {
163 0 : if (nSID == SID_FM_CONFIG)
164 : {
165 0 : sal_uInt16 nSlot = 0;
166 0 : if (eState >= SFX_ITEM_AVAILABLE)
167 0 : nSlot = ((SfxUInt16Item*)pState)->GetValue();
168 :
169 0 : switch( nSlot )
170 : {
171 : case SID_FM_PUSHBUTTON:
172 : case SID_FM_RADIOBUTTON:
173 : case SID_FM_CHECKBOX:
174 : case SID_FM_FIXEDTEXT:
175 : case SID_FM_GROUPBOX:
176 : case SID_FM_LISTBOX:
177 : case SID_FM_COMBOBOX:
178 : case SID_FM_NAVIGATIONBAR:
179 : case SID_FM_EDIT:
180 : case SID_FM_DBGRID:
181 : case SID_FM_IMAGEBUTTON:
182 : case SID_FM_IMAGECONTROL:
183 : case SID_FM_FILECONTROL:
184 : case SID_FM_DATEFIELD:
185 : case SID_FM_TIMEFIELD:
186 : case SID_FM_NUMERICFIELD:
187 : case SID_FM_CURRENCYFIELD:
188 : case SID_FM_PATTERNFIELD:
189 : case SID_FM_DESIGN_MODE:
190 : case SID_FM_FORMATTEDFIELD:
191 : case SID_FM_SCROLLBAR:
192 : case SID_FM_SPINBUTTON:
193 : { // set a new image, matching to this slot
194 0 : rtl::OUString aSlotURL( RTL_CONSTASCII_USTRINGPARAM( "slot:" ));
195 0 : aSlotURL += rtl::OUString::valueOf( sal_Int32( nSlot ));
196 0 : Image aImage = GetImage( m_xFrame, aSlotURL, hasBigImages() );
197 0 : GetToolBox().SetItemImage( GetId(), aImage );
198 0 : nLastSlot = nSlot;
199 : }
200 0 : break;
201 : }
202 : }
203 0 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
204 0 : }
205 :
206 : //-----------------------------------------------------------------------
207 0 : SfxPopupWindowType SvxFmTbxCtlConfig::GetPopupWindowType() const
208 : {
209 0 : return( nLastSlot == 0 ? SFX_POPUPWINDOW_ONCLICK : SFX_POPUPWINDOW_ONTIMEOUT );
210 : }
211 :
212 : //-----------------------------------------------------------------------
213 0 : SfxPopupWindow* SvxFmTbxCtlConfig::CreatePopupWindow()
214 : {
215 0 : if ( GetSlotId() == SID_FM_CONFIG )
216 : {
217 0 : ::svxform::FormToolboxes aToolboxes( m_xFrame );
218 0 : createAndPositionSubToolBar( aToolboxes.getToolboxResourceName( SID_FM_CONFIG ) );
219 : }
220 0 : return NULL;
221 : }
222 :
223 : //-----------------------------------------------------------------------
224 0 : void SvxFmTbxCtlConfig::Select( sal_uInt16 /*nModifier*/ )
225 : {
226 : //////////////////////////////////////////////////////////////////////
227 : // Click auf den Button SID_FM_CONFIG in der ObjectBar
228 0 : if ( nLastSlot )
229 : {
230 0 : sal_uInt16 n = 0;
231 0 : while( SlotToCommands[n].nSlotId > 0 )
232 : {
233 0 : if ( SlotToCommands[n].nSlotId == nLastSlot )
234 0 : break;
235 0 : n++;
236 : }
237 :
238 0 : if ( SlotToCommands[n].nSlotId > 0 )
239 : {
240 0 : Sequence< PropertyValue > aArgs;
241 : Dispatch( rtl::OUString::createFromAscii( SlotToCommands[n].pCommand ),
242 0 : aArgs );
243 : }
244 : }
245 0 : }
246 :
247 :
248 : //========================================================================
249 : // class SvxFmTbxCtlAbsRec
250 : //========================================================================
251 :
252 18 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlAbsRec, SfxInt32Item );
253 : DBG_NAME(SvxFmTbxCtlAbsRec);
254 : //-----------------------------------------------------------------------
255 0 : SvxFmTbxCtlAbsRec::SvxFmTbxCtlAbsRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
256 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
257 : {
258 : DBG_CTOR(SvxFmTbxCtlAbsRec,NULL);
259 0 : }
260 :
261 : //-----------------------------------------------------------------------
262 0 : SvxFmTbxCtlAbsRec::~SvxFmTbxCtlAbsRec()
263 : {
264 : DBG_DTOR(SvxFmTbxCtlAbsRec,NULL);
265 0 : }
266 :
267 : //-----------------------------------------------------------------------
268 0 : void SvxFmTbxCtlAbsRec::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
269 : {
270 0 : sal_uInt16 nId = GetId();
271 0 : ToolBox* pToolBox = &GetToolBox();
272 0 : SvxFmAbsRecWin* pWin = (SvxFmAbsRecWin*)( pToolBox->GetItemWindow(nId) );
273 :
274 : DBG_ASSERT( pWin, "Control not found!" );
275 :
276 0 : if (pState)
277 : {
278 0 : const SfxInt32Item* pItem = PTR_CAST( SfxInt32Item, pState );
279 : DBG_ASSERT( pItem, "SvxFmTbxCtlAbsRec::StateChanged: invalid item!" );
280 0 : pWin->SetValue( pItem ? pItem->GetValue() : -1 );
281 : }
282 :
283 0 : sal_Bool bEnable = SFX_ITEM_DISABLED != eState && pState;
284 0 : if (!bEnable)
285 0 : pWin->SetText(String());
286 :
287 : //////////////////////////////////////////////////////////////////////
288 : // Enablen/disablen des Fensters
289 0 : pToolBox->EnableItem(nId, bEnable);
290 0 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
291 0 : }
292 :
293 : //-----------------------------------------------------------------------
294 0 : Window* SvxFmTbxCtlAbsRec::CreateItemWindow( Window* pParent )
295 : {
296 0 : SvxFmAbsRecWin* pWin = new SvxFmAbsRecWin( pParent, this );
297 0 : pWin->SetUniqueId( UID_ABSOLUTE_RECORD_WINDOW );
298 0 : return pWin;
299 : }
300 :
301 :
302 : //========================================================================
303 : // SvxFmTbxCtlRecText
304 : //========================================================================
305 :
306 18 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecText, SfxBoolItem );
307 : DBG_NAME(SvxFmTbxCtlRecText);
308 : //-----------------------------------------------------------------------
309 0 : SvxFmTbxCtlRecText::SvxFmTbxCtlRecText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
310 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
311 : {
312 : DBG_CTOR(SvxFmTbxCtlRecText,NULL);
313 0 : }
314 :
315 : //-----------------------------------------------------------------------
316 0 : SvxFmTbxCtlRecText::~SvxFmTbxCtlRecText()
317 : {
318 : DBG_DTOR(SvxFmTbxCtlRecText,NULL);
319 0 : }
320 :
321 : //-----------------------------------------------------------------------
322 0 : Window* SvxFmTbxCtlRecText::CreateItemWindow( Window* pParent )
323 : {
324 0 : XubString aText( SVX_RES(RID_STR_REC_TEXT) );
325 0 : FixedText* pFixedText = new FixedText( pParent );
326 0 : Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
327 0 : pFixedText->SetText( aText );
328 0 : aSize.Width() += 6;
329 0 : pFixedText->SetSizePixel( aSize );
330 0 : pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
331 :
332 0 : return pFixedText;
333 : }
334 :
335 :
336 : //========================================================================
337 : // SvxFmTbxCtlRecFromText
338 : //========================================================================
339 :
340 18 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecFromText, SfxBoolItem );
341 : DBG_NAME(SvxFmTbxCtlRecFromText);
342 : //-----------------------------------------------------------------------
343 0 : SvxFmTbxCtlRecFromText::SvxFmTbxCtlRecFromText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
344 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
345 : {
346 : DBG_CTOR(SvxFmTbxCtlRecFromText,NULL);
347 0 : }
348 :
349 : //-----------------------------------------------------------------------
350 0 : SvxFmTbxCtlRecFromText::~SvxFmTbxCtlRecFromText()
351 : {
352 : DBG_DTOR(SvxFmTbxCtlRecFromText,NULL);
353 0 : }
354 :
355 : //-----------------------------------------------------------------------
356 0 : Window* SvxFmTbxCtlRecFromText::CreateItemWindow( Window* pParent )
357 : {
358 0 : XubString aText( SVX_RES(RID_STR_REC_FROM_TEXT) );
359 0 : FixedText* pFixedText = new FixedText( pParent, WB_CENTER );
360 0 : Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
361 0 : aSize.Width() += 12;
362 0 : pFixedText->SetText( aText );
363 0 : pFixedText->SetSizePixel( aSize );
364 0 : pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
365 0 : return pFixedText;
366 : }
367 :
368 :
369 : //========================================================================
370 : // SvxFmTbxCtlRecTotal
371 : //========================================================================
372 : DBG_NAME(SvxFmTbxCtlRecTotal);
373 18 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecTotal, SfxStringItem );
374 :
375 : //-----------------------------------------------------------------------
376 0 : SvxFmTbxCtlRecTotal::SvxFmTbxCtlRecTotal( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
377 : :SfxToolBoxControl( nSlotId, nId, rTbx )
378 0 : ,pFixedText( NULL )
379 : {
380 : DBG_CTOR(SvxFmTbxCtlRecTotal,NULL);
381 0 : }
382 :
383 : //-----------------------------------------------------------------------
384 0 : SvxFmTbxCtlRecTotal::~SvxFmTbxCtlRecTotal()
385 : {
386 : DBG_DTOR(SvxFmTbxCtlRecTotal,NULL);
387 0 : }
388 :
389 : //-----------------------------------------------------------------------
390 0 : Window* SvxFmTbxCtlRecTotal::CreateItemWindow( Window* pParent )
391 : {
392 0 : pFixedText = new FixedText( pParent );
393 0 : String aSample(RTL_CONSTASCII_USTRINGPARAM("123456"));
394 0 : Size aSize( pFixedText->GetTextWidth( aSample ), pFixedText->GetTextHeight( ) );
395 0 : aSize.Width() += 12;
396 0 : pFixedText->SetSizePixel( aSize );
397 0 : pFixedText->SetBackground();
398 0 : pFixedText->SetPaintTransparent(sal_True);
399 0 : return pFixedText;
400 : }
401 :
402 : //-----------------------------------------------------------------------
403 0 : void SvxFmTbxCtlRecTotal::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
404 : {
405 : //////////////////////////////////////////////////////////////////////
406 : // Setzen des FixedTextes
407 0 : if (GetSlotId() != SID_FM_RECORD_TOTAL)
408 0 : return;
409 :
410 0 : XubString aText;
411 0 : if (pState)
412 0 : aText = ((SfxStringItem*)pState)->GetValue();
413 : else
414 0 : aText = '?';
415 :
416 0 : pFixedText->SetText( aText );
417 0 : pFixedText->Update();
418 0 : pFixedText->Flush();
419 :
420 0 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
421 : }
422 :
423 : //========================================================================
424 : // SvxFmTbxNextRec
425 : //========================================================================
426 18 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxNextRec, SfxBoolItem );
427 :
428 : //-----------------------------------------------------------------------
429 0 : SvxFmTbxNextRec::SvxFmTbxNextRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
430 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
431 : {
432 0 : rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | TIB_REPEAT);
433 :
434 0 : AllSettings aSettings = rTbx.GetSettings();
435 0 : MouseSettings aMouseSettings = aSettings.GetMouseSettings();
436 0 : aMouseSettings.SetButtonRepeat(aMouseSettings.GetButtonRepeat() / 4);
437 0 : aSettings.SetMouseSettings(aMouseSettings);
438 0 : rTbx.SetSettings(aSettings, sal_True);
439 0 : }
440 :
441 : //========================================================================
442 : // SvxFmTbxPrevRec
443 : //========================================================================
444 18 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxPrevRec, SfxBoolItem );
445 :
446 : //-----------------------------------------------------------------------
447 0 : SvxFmTbxPrevRec::SvxFmTbxPrevRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
448 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
449 : {
450 0 : rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | TIB_REPEAT);
451 0 : }
452 :
453 :
454 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|