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 <vcl/settings.hxx>
29 : #include "fmitems.hxx"
30 : #include "formtoolbars.hxx"
31 :
32 :
33 : #include <svx/dialmgr.hxx>
34 : #include <svx/dialogs.hrc>
35 : #include "svx/tbxctl.hxx"
36 : #include "svx/tbxdraw.hxx"
37 : #include "tbxform.hxx"
38 : #include "svx/fmresids.hrc"
39 : #include "fmhelp.hrc"
40 : #include <sfx2/viewfrm.hxx>
41 : #include <sfx2/viewsh.hxx>
42 : #include <sfx2/imagemgr.hxx>
43 : #include <com/sun/star/beans/XPropertySet.hpp>
44 :
45 : using namespace ::com::sun::star::uno;
46 : using namespace ::com::sun::star::beans;
47 : using namespace ::com::sun::star::frame;
48 : using ::com::sun::star::beans::XPropertySet;
49 :
50 :
51 :
52 : // class SvxFmAbsRecWin
53 :
54 :
55 :
56 0 : SvxFmAbsRecWin::SvxFmAbsRecWin( Window* _pParent, SfxToolBoxControl* _pController )
57 : :NumericField( _pParent, WB_BORDER )
58 0 : ,m_pController(_pController)
59 : {
60 0 : SetMin(1);
61 0 : SetFirst(1);
62 0 : SetSpinSize(1);
63 0 : SetSizePixel( Size(70,19) );
64 :
65 0 : SetDecimalDigits(0);
66 0 : SetStrictFormat(true);
67 0 : }
68 :
69 :
70 0 : SvxFmAbsRecWin::~SvxFmAbsRecWin()
71 : {
72 0 : }
73 :
74 :
75 0 : void SvxFmAbsRecWin::FirePosition( sal_Bool _bForce )
76 : {
77 0 : if ( _bForce || ( GetText() != GetSavedValue() ) )
78 : {
79 0 : sal_Int64 nRecord = GetValue();
80 0 : if (nRecord < GetMin() || nRecord > GetMax())
81 : {
82 0 : return;
83 : }
84 :
85 0 : SfxInt32Item aPositionParam( FN_PARAM_1, static_cast<sal_Int32>(nRecord) );
86 :
87 0 : Any a;
88 0 : Sequence< PropertyValue > aArgs( 1 );
89 0 : aArgs[0].Name = "Position";
90 0 : aPositionParam.QueryValue( a );
91 0 : aArgs[0].Value = a;
92 : m_pController->Dispatch( OUString( ".uno:AbsoluteRecord" ),
93 0 : aArgs );
94 0 : m_pController->updateStatus();
95 :
96 0 : SaveValue();
97 : }
98 : }
99 :
100 :
101 0 : void SvxFmAbsRecWin::LoseFocus()
102 : {
103 0 : FirePosition( sal_False );
104 0 : }
105 :
106 :
107 0 : void SvxFmAbsRecWin::KeyInput( const KeyEvent& rKeyEvent )
108 : {
109 0 : if( rKeyEvent.GetKeyCode() == KEY_RETURN && !GetText().isEmpty() )
110 0 : FirePosition( sal_True );
111 : else
112 0 : NumericField::KeyInput( rKeyEvent );
113 0 : }
114 :
115 :
116 : // class SvxFmTbxCtlConfig
117 :
118 :
119 : struct MapSlotToCmd
120 : {
121 : sal_uInt16 nSlotId;
122 : const char* pCommand;
123 : };
124 :
125 : static const MapSlotToCmd SlotToCommands[] =
126 : {
127 : { SID_FM_PUSHBUTTON, ".uno:Pushbutton" },
128 : { SID_FM_RADIOBUTTON, ".uno:RadioButton" },
129 : { SID_FM_CHECKBOX, ".uno:CheckBox" },
130 : { SID_FM_FIXEDTEXT, ".uno:Label" },
131 : { SID_FM_GROUPBOX, ".uno:GroupBox" },
132 : { SID_FM_LISTBOX, ".uno:ListBox" },
133 : { SID_FM_COMBOBOX, ".uno:ComboBox" },
134 : { SID_FM_EDIT, ".uno:Edit" },
135 : { SID_FM_DBGRID, ".uno:Grid" },
136 : { SID_FM_IMAGEBUTTON, ".uno:Imagebutton" },
137 : { SID_FM_IMAGECONTROL, ".uno:ImageControl" },
138 : { SID_FM_FILECONTROL, ".uno:FileControl" },
139 : { SID_FM_DATEFIELD, ".uno:DateField" },
140 : { SID_FM_TIMEFIELD, ".uno:TimeField" },
141 : { SID_FM_NUMERICFIELD, ".uno:NumericField" },
142 : { SID_FM_CURRENCYFIELD, ".uno:CurrencyField" },
143 : { SID_FM_PATTERNFIELD, ".uno:PatternField" },
144 : { SID_FM_DESIGN_MODE, ".uno:SwitchControlDesignMode" },
145 : { SID_FM_FORMATTEDFIELD, ".uno:FormattedField" },
146 : { SID_FM_SCROLLBAR, ".uno:ScrollBar" },
147 : { SID_FM_SPINBUTTON, ".uno:SpinButton" },
148 : { 0, "" }
149 : };
150 :
151 0 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlConfig, SfxUInt16Item );
152 :
153 :
154 0 : SvxFmTbxCtlConfig::SvxFmTbxCtlConfig( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
155 : : SfxToolBoxControl( nSlotId, nId, rTbx )
156 0 : ,nLastSlot( 0 )
157 : {
158 0 : rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
159 0 : }
160 :
161 :
162 0 : void SvxFmTbxCtlConfig::StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
163 : {
164 0 : if (nSID == SID_FM_CONFIG)
165 : {
166 0 : sal_uInt16 nSlot = 0;
167 0 : if (eState >= SFX_ITEM_AVAILABLE)
168 0 : nSlot = ((SfxUInt16Item*)pState)->GetValue();
169 :
170 0 : switch( nSlot )
171 : {
172 : case SID_FM_PUSHBUTTON:
173 : case SID_FM_RADIOBUTTON:
174 : case SID_FM_CHECKBOX:
175 : case SID_FM_FIXEDTEXT:
176 : case SID_FM_GROUPBOX:
177 : case SID_FM_LISTBOX:
178 : case SID_FM_COMBOBOX:
179 : case SID_FM_NAVIGATIONBAR:
180 : case SID_FM_EDIT:
181 : case SID_FM_DBGRID:
182 : case SID_FM_IMAGEBUTTON:
183 : case SID_FM_IMAGECONTROL:
184 : case SID_FM_FILECONTROL:
185 : case SID_FM_DATEFIELD:
186 : case SID_FM_TIMEFIELD:
187 : case SID_FM_NUMERICFIELD:
188 : case SID_FM_CURRENCYFIELD:
189 : case SID_FM_PATTERNFIELD:
190 : case SID_FM_DESIGN_MODE:
191 : case SID_FM_FORMATTEDFIELD:
192 : case SID_FM_SCROLLBAR:
193 : case SID_FM_SPINBUTTON:
194 : { // set a new image, matching to this slot
195 0 : OUString aSlotURL = "slot:" + OUString::number( 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 /*nSelectModifier*/ )
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( OUString::createFromAscii( SlotToCommands[n].pCommand ),
242 0 : aArgs );
243 : }
244 : }
245 0 : }
246 :
247 :
248 :
249 : // class SvxFmTbxCtlAbsRec
250 :
251 :
252 0 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlAbsRec, SfxInt32Item );
253 :
254 0 : SvxFmTbxCtlAbsRec::SvxFmTbxCtlAbsRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
255 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
256 : {
257 0 : }
258 :
259 :
260 0 : SvxFmTbxCtlAbsRec::~SvxFmTbxCtlAbsRec()
261 : {
262 0 : }
263 :
264 :
265 0 : void SvxFmTbxCtlAbsRec::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
266 : {
267 0 : sal_uInt16 nId = GetId();
268 0 : ToolBox* pToolBox = &GetToolBox();
269 0 : SvxFmAbsRecWin* pWin = (SvxFmAbsRecWin*)( pToolBox->GetItemWindow(nId) );
270 :
271 : DBG_ASSERT( pWin, "Control not found!" );
272 :
273 0 : if (pState)
274 : {
275 0 : const SfxInt32Item* pItem = PTR_CAST( SfxInt32Item, pState );
276 : DBG_ASSERT( pItem, "SvxFmTbxCtlAbsRec::StateChanged: invalid item!" );
277 0 : pWin->SetValue( pItem ? pItem->GetValue() : -1 );
278 : }
279 :
280 0 : sal_Bool bEnable = SFX_ITEM_DISABLED != eState && pState;
281 0 : if (!bEnable)
282 0 : pWin->SetText(OUString());
283 :
284 :
285 : // Enablen/disablen des Fensters
286 0 : pToolBox->EnableItem(nId, bEnable);
287 0 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
288 0 : }
289 :
290 :
291 0 : Window* SvxFmTbxCtlAbsRec::CreateItemWindow( Window* pParent )
292 : {
293 0 : SvxFmAbsRecWin* pWin = new SvxFmAbsRecWin( pParent, this );
294 0 : pWin->SetUniqueId( UID_ABSOLUTE_RECORD_WINDOW );
295 0 : return pWin;
296 : }
297 :
298 :
299 :
300 : // SvxFmTbxCtlRecText
301 :
302 :
303 0 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecText, SfxBoolItem );
304 :
305 0 : SvxFmTbxCtlRecText::SvxFmTbxCtlRecText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
306 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
307 : {
308 0 : }
309 :
310 :
311 0 : SvxFmTbxCtlRecText::~SvxFmTbxCtlRecText()
312 : {
313 0 : }
314 :
315 :
316 0 : Window* SvxFmTbxCtlRecText::CreateItemWindow( Window* pParent )
317 : {
318 0 : OUString aText(SVX_RESSTR(RID_STR_REC_TEXT));
319 0 : FixedText* pFixedText = new FixedText( pParent );
320 0 : Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
321 0 : pFixedText->SetText( aText );
322 0 : aSize.Width() += 6;
323 0 : pFixedText->SetSizePixel( aSize );
324 0 : pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
325 :
326 0 : return pFixedText;
327 : }
328 :
329 :
330 :
331 : // SvxFmTbxCtlRecFromText
332 :
333 :
334 0 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecFromText, SfxBoolItem );
335 :
336 0 : SvxFmTbxCtlRecFromText::SvxFmTbxCtlRecFromText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
337 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
338 : {
339 0 : }
340 :
341 :
342 0 : SvxFmTbxCtlRecFromText::~SvxFmTbxCtlRecFromText()
343 : {
344 0 : }
345 :
346 :
347 0 : Window* SvxFmTbxCtlRecFromText::CreateItemWindow( Window* pParent )
348 : {
349 0 : OUString aText(SVX_RESSTR(RID_STR_REC_FROM_TEXT));
350 0 : FixedText* pFixedText = new FixedText( pParent, WB_CENTER );
351 0 : Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
352 0 : aSize.Width() += 12;
353 0 : pFixedText->SetText( aText );
354 0 : pFixedText->SetSizePixel( aSize );
355 0 : pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
356 0 : return pFixedText;
357 : }
358 :
359 :
360 :
361 : // SvxFmTbxCtlRecTotal
362 :
363 0 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecTotal, SfxStringItem );
364 :
365 :
366 0 : SvxFmTbxCtlRecTotal::SvxFmTbxCtlRecTotal( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
367 : :SfxToolBoxControl( nSlotId, nId, rTbx )
368 0 : ,pFixedText( NULL )
369 : {
370 0 : }
371 :
372 :
373 0 : SvxFmTbxCtlRecTotal::~SvxFmTbxCtlRecTotal()
374 : {
375 0 : }
376 :
377 :
378 0 : Window* SvxFmTbxCtlRecTotal::CreateItemWindow( Window* pParent )
379 : {
380 0 : pFixedText = new FixedText( pParent );
381 0 : OUString aSample("123456");
382 0 : Size aSize( pFixedText->GetTextWidth( aSample ), pFixedText->GetTextHeight( ) );
383 0 : aSize.Width() += 12;
384 0 : pFixedText->SetSizePixel( aSize );
385 0 : pFixedText->SetBackground();
386 0 : pFixedText->SetPaintTransparent(true);
387 0 : return pFixedText;
388 : }
389 :
390 :
391 0 : void SvxFmTbxCtlRecTotal::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
392 : {
393 :
394 : // Setzen des FixedTextes
395 0 : if (GetSlotId() != SID_FM_RECORD_TOTAL)
396 0 : return;
397 :
398 0 : OUString aText;
399 0 : if (pState)
400 0 : aText = ((SfxStringItem*)pState)->GetValue();
401 : else
402 0 : aText = "?";
403 :
404 0 : pFixedText->SetText( aText );
405 0 : pFixedText->Update();
406 0 : pFixedText->Flush();
407 :
408 0 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
409 : }
410 :
411 :
412 : // SvxFmTbxNextRec
413 :
414 0 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxNextRec, SfxBoolItem );
415 :
416 :
417 0 : SvxFmTbxNextRec::SvxFmTbxNextRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
418 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
419 : {
420 0 : rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | TIB_REPEAT);
421 :
422 0 : AllSettings aSettings = rTbx.GetSettings();
423 0 : MouseSettings aMouseSettings = aSettings.GetMouseSettings();
424 0 : aMouseSettings.SetButtonRepeat(aMouseSettings.GetButtonRepeat() / 4);
425 0 : aSettings.SetMouseSettings(aMouseSettings);
426 0 : rTbx.SetSettings(aSettings, true);
427 0 : }
428 :
429 :
430 : // SvxFmTbxPrevRec
431 :
432 0 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxPrevRec, SfxBoolItem );
433 :
434 :
435 0 : SvxFmTbxPrevRec::SvxFmTbxPrevRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
436 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
437 : {
438 0 : rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | TIB_REPEAT);
439 0 : }
440 :
441 :
442 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|