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 <svl/intitem.hxx>
22 : #include <svl/eitem.hxx>
23 : #include <svl/stritem.hxx>
24 : #include <sfx2/dispatch.hxx>
25 : #include <vcl/toolbox.hxx>
26 : #include <vcl/fixed.hxx>
27 : #include <vcl/settings.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 "tbxform.hxx"
36 : #include "svx/fmresids.hrc"
37 : #include "fmhelp.hrc"
38 : #include <sfx2/viewfrm.hxx>
39 : #include <sfx2/viewsh.hxx>
40 : #include <sfx2/imagemgr.hxx>
41 : #include <com/sun/star/beans/XPropertySet.hpp>
42 :
43 : using namespace ::com::sun::star::uno;
44 : using namespace ::com::sun::star::beans;
45 : using namespace ::com::sun::star::frame;
46 : using ::com::sun::star::beans::XPropertySet;
47 :
48 0 : SvxFmAbsRecWin::SvxFmAbsRecWin( vcl::Window* _pParent, SfxToolBoxControl* _pController )
49 : :NumericField( _pParent, WB_BORDER )
50 0 : ,m_pController(_pController)
51 : {
52 0 : SetMin(1);
53 0 : SetFirst(1);
54 0 : SetSpinSize(1);
55 0 : SetSizePixel( Size(70,19) );
56 :
57 0 : SetDecimalDigits(0);
58 0 : SetStrictFormat(true);
59 0 : }
60 :
61 :
62 0 : void SvxFmAbsRecWin::FirePosition( bool _bForce )
63 : {
64 0 : if ( _bForce || IsValueChangedFromSaved() )
65 : {
66 0 : sal_Int64 nRecord = GetValue();
67 0 : if (nRecord < GetMin() || nRecord > GetMax())
68 : {
69 0 : return;
70 : }
71 :
72 0 : SfxInt32Item aPositionParam( FN_PARAM_1, static_cast<sal_Int32>(nRecord) );
73 :
74 0 : Any a;
75 0 : Sequence< PropertyValue > aArgs( 1 );
76 0 : aArgs[0].Name = "Position";
77 0 : aPositionParam.QueryValue( a );
78 0 : aArgs[0].Value = a;
79 : m_pController->Dispatch( OUString( ".uno:AbsoluteRecord" ),
80 0 : aArgs );
81 0 : m_pController->updateStatus();
82 :
83 0 : SaveValue();
84 : }
85 : }
86 :
87 :
88 0 : void SvxFmAbsRecWin::LoseFocus()
89 : {
90 0 : FirePosition( false );
91 0 : }
92 :
93 :
94 0 : void SvxFmAbsRecWin::KeyInput( const KeyEvent& rKeyEvent )
95 : {
96 0 : if( rKeyEvent.GetKeyCode() == KEY_RETURN && !GetText().isEmpty() )
97 0 : FirePosition( true );
98 : else
99 0 : NumericField::KeyInput( rKeyEvent );
100 0 : }
101 :
102 :
103 : // class SvxFmTbxCtlConfig
104 :
105 :
106 : struct MapSlotToCmd
107 : {
108 : sal_uInt16 nSlotId;
109 : const char* pCommand;
110 : };
111 :
112 : static const MapSlotToCmd SlotToCommands[] =
113 : {
114 : { SID_FM_PUSHBUTTON, ".uno:Pushbutton" },
115 : { SID_FM_RADIOBUTTON, ".uno:RadioButton" },
116 : { SID_FM_CHECKBOX, ".uno:CheckBox" },
117 : { SID_FM_FIXEDTEXT, ".uno:Label" },
118 : { SID_FM_GROUPBOX, ".uno:GroupBox" },
119 : { SID_FM_LISTBOX, ".uno:ListBox" },
120 : { SID_FM_COMBOBOX, ".uno:ComboBox" },
121 : { SID_FM_EDIT, ".uno:Edit" },
122 : { SID_FM_DBGRID, ".uno:Grid" },
123 : { SID_FM_IMAGEBUTTON, ".uno:Imagebutton" },
124 : { SID_FM_IMAGECONTROL, ".uno:ImageControl" },
125 : { SID_FM_FILECONTROL, ".uno:FileControl" },
126 : { SID_FM_DATEFIELD, ".uno:DateField" },
127 : { SID_FM_TIMEFIELD, ".uno:TimeField" },
128 : { SID_FM_NUMERICFIELD, ".uno:NumericField" },
129 : { SID_FM_CURRENCYFIELD, ".uno:CurrencyField" },
130 : { SID_FM_PATTERNFIELD, ".uno:PatternField" },
131 : { SID_FM_DESIGN_MODE, ".uno:SwitchControlDesignMode" },
132 : { SID_FM_FORMATTEDFIELD, ".uno:FormattedField" },
133 : { SID_FM_SCROLLBAR, ".uno:ScrollBar" },
134 : { SID_FM_SPINBUTTON, ".uno:SpinButton" },
135 : { 0, "" }
136 : };
137 :
138 177 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlConfig, SfxUInt16Item );
139 :
140 :
141 63 : SvxFmTbxCtlConfig::SvxFmTbxCtlConfig( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
142 : : SfxToolBoxControl( nSlotId, nId, rTbx )
143 63 : ,nLastSlot( 0 )
144 : {
145 63 : rTbx.SetItemBits( nId, ToolBoxItemBits::DROPDOWN | rTbx.GetItemBits( nId ) );
146 63 : }
147 :
148 :
149 92 : void SvxFmTbxCtlConfig::StateChanged(sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
150 : {
151 92 : if (nSID == SID_FM_CONFIG)
152 : {
153 92 : sal_uInt16 nSlot = 0;
154 92 : if (eState >= SfxItemState::DEFAULT)
155 92 : nSlot = static_cast<const SfxUInt16Item*>(pState)->GetValue();
156 :
157 92 : switch( nSlot )
158 : {
159 : case SID_FM_PUSHBUTTON:
160 : case SID_FM_RADIOBUTTON:
161 : case SID_FM_CHECKBOX:
162 : case SID_FM_FIXEDTEXT:
163 : case SID_FM_GROUPBOX:
164 : case SID_FM_LISTBOX:
165 : case SID_FM_COMBOBOX:
166 : case SID_FM_NAVIGATIONBAR:
167 : case SID_FM_EDIT:
168 : case SID_FM_DBGRID:
169 : case SID_FM_IMAGEBUTTON:
170 : case SID_FM_IMAGECONTROL:
171 : case SID_FM_FILECONTROL:
172 : case SID_FM_DATEFIELD:
173 : case SID_FM_TIMEFIELD:
174 : case SID_FM_NUMERICFIELD:
175 : case SID_FM_CURRENCYFIELD:
176 : case SID_FM_PATTERNFIELD:
177 : case SID_FM_DESIGN_MODE:
178 : case SID_FM_FORMATTEDFIELD:
179 : case SID_FM_SCROLLBAR:
180 : case SID_FM_SPINBUTTON:
181 : { // set a new image, matching to this slot
182 0 : OUString aSlotURL = "slot:" + OUString::number( nSlot);
183 0 : Image aImage = GetImage( m_xFrame, aSlotURL, hasBigImages() );
184 0 : GetToolBox().SetItemImage( GetId(), aImage );
185 0 : nLastSlot = nSlot;
186 : }
187 0 : break;
188 : }
189 : }
190 92 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
191 92 : }
192 :
193 :
194 0 : SfxPopupWindowType SvxFmTbxCtlConfig::GetPopupWindowType() const
195 : {
196 0 : return( nLastSlot == 0 ? SfxPopupWindowType::ONCLICK : SfxPopupWindowType::ONTIMEOUT );
197 : }
198 :
199 :
200 0 : VclPtr<SfxPopupWindow> SvxFmTbxCtlConfig::CreatePopupWindow()
201 : {
202 0 : if ( GetSlotId() == SID_FM_CONFIG )
203 : {
204 0 : ::svxform::FormToolboxes aToolboxes( m_xFrame );
205 0 : createAndPositionSubToolBar( aToolboxes.getToolboxResourceName( SID_FM_CONFIG ) );
206 : }
207 0 : return NULL;
208 : }
209 :
210 :
211 0 : void SvxFmTbxCtlConfig::Select( sal_uInt16 /*nSelectModifier*/ )
212 : {
213 :
214 : // Click auf den Button SID_FM_CONFIG in der ObjectBar
215 0 : if ( nLastSlot )
216 : {
217 0 : sal_uInt16 n = 0;
218 0 : while( SlotToCommands[n].nSlotId > 0 )
219 : {
220 0 : if ( SlotToCommands[n].nSlotId == nLastSlot )
221 0 : break;
222 0 : n++;
223 : }
224 :
225 0 : if ( SlotToCommands[n].nSlotId > 0 )
226 : {
227 0 : Sequence< PropertyValue > aArgs;
228 : Dispatch( OUString::createFromAscii( SlotToCommands[n].pCommand ),
229 0 : aArgs );
230 : }
231 : }
232 0 : }
233 :
234 114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlAbsRec, SfxInt32Item );
235 :
236 0 : SvxFmTbxCtlAbsRec::SvxFmTbxCtlAbsRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
237 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
238 : {
239 0 : }
240 :
241 :
242 0 : SvxFmTbxCtlAbsRec::~SvxFmTbxCtlAbsRec()
243 : {
244 0 : }
245 :
246 :
247 0 : void SvxFmTbxCtlAbsRec::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
248 : {
249 0 : sal_uInt16 nId = GetId();
250 0 : ToolBox* pToolBox = &GetToolBox();
251 0 : SvxFmAbsRecWin* pWin = static_cast<SvxFmAbsRecWin*>( pToolBox->GetItemWindow(nId) );
252 :
253 : assert(pWin && "Control not found!");
254 :
255 0 : if (pState)
256 : {
257 0 : const SfxInt32Item* pItem = PTR_CAST( SfxInt32Item, pState );
258 : DBG_ASSERT( pItem, "SvxFmTbxCtlAbsRec::StateChanged: invalid item!" );
259 0 : pWin->SetValue( pItem ? pItem->GetValue() : -1 );
260 : }
261 :
262 0 : bool bEnable = SfxItemState::DISABLED != eState && pState;
263 0 : if (!bEnable)
264 0 : pWin->SetText(OUString());
265 :
266 :
267 : // Enablen/disablen des Fensters
268 0 : pToolBox->EnableItem(nId, bEnable);
269 0 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
270 0 : }
271 :
272 :
273 0 : VclPtr<vcl::Window> SvxFmTbxCtlAbsRec::CreateItemWindow( vcl::Window* pParent )
274 : {
275 0 : VclPtrInstance<SvxFmAbsRecWin> pWin( pParent, this );
276 0 : pWin->SetUniqueId( UID_ABSOLUTE_RECORD_WINDOW );
277 0 : return pWin.get();
278 : }
279 :
280 114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecText, SfxBoolItem );
281 :
282 0 : SvxFmTbxCtlRecText::SvxFmTbxCtlRecText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
283 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
284 : {
285 0 : }
286 :
287 :
288 0 : SvxFmTbxCtlRecText::~SvxFmTbxCtlRecText()
289 : {
290 0 : }
291 :
292 :
293 0 : VclPtr<vcl::Window> SvxFmTbxCtlRecText::CreateItemWindow( vcl::Window* pParent )
294 : {
295 0 : OUString aText(SVX_RESSTR(RID_STR_REC_TEXT));
296 0 : VclPtrInstance<FixedText> pFixedText( pParent );
297 0 : Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
298 0 : pFixedText->SetText( aText );
299 0 : aSize.Width() += 6;
300 0 : pFixedText->SetSizePixel( aSize );
301 0 : pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
302 :
303 0 : return pFixedText;
304 : }
305 :
306 114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecFromText, SfxBoolItem );
307 :
308 0 : SvxFmTbxCtlRecFromText::SvxFmTbxCtlRecFromText( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
309 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
310 : {
311 0 : }
312 :
313 :
314 0 : SvxFmTbxCtlRecFromText::~SvxFmTbxCtlRecFromText()
315 : {
316 0 : }
317 :
318 :
319 0 : VclPtr<vcl::Window> SvxFmTbxCtlRecFromText::CreateItemWindow( vcl::Window* pParent )
320 : {
321 0 : OUString aText(SVX_RESSTR(RID_STR_REC_FROM_TEXT));
322 0 : VclPtrInstance<FixedText> pFixedText( pParent, WB_CENTER );
323 0 : Size aSize( pFixedText->GetTextWidth( aText ), pFixedText->GetTextHeight( ) );
324 0 : aSize.Width() += 12;
325 0 : pFixedText->SetText( aText );
326 0 : pFixedText->SetSizePixel( aSize );
327 0 : pFixedText->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
328 0 : return pFixedText.get();
329 : }
330 :
331 114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxCtlRecTotal, SfxStringItem );
332 :
333 :
334 0 : SvxFmTbxCtlRecTotal::SvxFmTbxCtlRecTotal( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
335 : :SfxToolBoxControl( nSlotId, nId, rTbx )
336 0 : ,pFixedText( NULL )
337 : {
338 0 : }
339 :
340 :
341 0 : SvxFmTbxCtlRecTotal::~SvxFmTbxCtlRecTotal()
342 : {
343 0 : }
344 :
345 :
346 0 : VclPtr<vcl::Window> SvxFmTbxCtlRecTotal::CreateItemWindow( vcl::Window* pParent )
347 : {
348 0 : pFixedText.reset(VclPtr<FixedText>::Create( pParent ));
349 0 : OUString aSample("123456");
350 0 : Size aSize( pFixedText->GetTextWidth( aSample ), pFixedText->GetTextHeight( ) );
351 0 : aSize.Width() += 12;
352 0 : pFixedText->SetSizePixel( aSize );
353 0 : pFixedText->SetBackground();
354 0 : pFixedText->SetPaintTransparent(true);
355 0 : return pFixedText;
356 : }
357 :
358 :
359 0 : void SvxFmTbxCtlRecTotal::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
360 : {
361 :
362 : // Setzen des FixedTextes
363 0 : if (GetSlotId() != SID_FM_RECORD_TOTAL)
364 0 : return;
365 :
366 0 : OUString aText;
367 0 : if (pState)
368 0 : aText = static_cast<const SfxStringItem*>(pState)->GetValue();
369 : else
370 0 : aText = "?";
371 :
372 0 : pFixedText->SetText( aText );
373 0 : pFixedText->Update();
374 0 : pFixedText->Flush();
375 :
376 0 : SfxToolBoxControl::StateChanged( nSID, eState,pState );
377 : }
378 :
379 114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxNextRec, SfxBoolItem );
380 :
381 :
382 0 : SvxFmTbxNextRec::SvxFmTbxNextRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
383 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
384 : {
385 0 : rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | ToolBoxItemBits::REPEAT);
386 :
387 0 : AllSettings aSettings = rTbx.GetSettings();
388 0 : MouseSettings aMouseSettings = aSettings.GetMouseSettings();
389 0 : aMouseSettings.SetButtonRepeat(aMouseSettings.GetButtonRepeat() / 4);
390 0 : aSettings.SetMouseSettings(aMouseSettings);
391 0 : rTbx.SetSettings(aSettings, true);
392 0 : }
393 :
394 114 : SFX_IMPL_TOOLBOX_CONTROL( SvxFmTbxPrevRec, SfxBoolItem );
395 :
396 :
397 0 : SvxFmTbxPrevRec::SvxFmTbxPrevRec( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx )
398 0 : :SfxToolBoxControl( nSlotId, nId, rTbx )
399 : {
400 0 : rTbx.SetItemBits(nId, rTbx.GetItemBits(nId) | ToolBoxItemBits::REPEAT);
401 390 : }
402 :
403 :
404 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|