1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23 #include "precompiled_rptui.hxx"
24 #include "AddField.hxx"
25 #include "UITools.hxx"
26 #include <svx/dbaexchange.hxx>
27 #include <svx/svdpagv.hxx>
28 #include <com/sun/star/sdb/CommandType.hpp>
29 #include <com/sun/star/util/URL.hpp>
30 #include <com/sun/star/sdb/XDocumentDataSource.hpp>
31 #include <com/sun/star/util/URL.hpp>
32 #include <com/sun/star/i18n/XCollator.hpp>
33
34 #include <vcl/waitobj.hxx>
35 #include <vcl/svapp.hxx>
36 #include <tools/diagnose_ex.h>
37 #include <comphelper/stl_types.hxx>
38 #include "rptui_slotid.hrc"
39
40 #include <connectivity/dbtools.hxx>
41 #include "helpids.hrc"
42 #include "RptResId.hrc"
43 #include "CondFormat.hrc"
44 #include "ModuleHelper.hxx"
45 #include "uistrings.hrc"
46 #include "ColumnInfo.hxx"
47
48 #include <comphelper/property.hxx>
49 #include <svtools/imgdef.hxx>
50
51 namespace rptui
52 {
53 const long STD_WIN_SIZE_X = 180;
54 const long STD_WIN_SIZE_Y = 320;
55
56 const long LISTBOX_BORDER = 2;
57
58 using namespace ::com::sun::star;
59 using namespace sdbc;
60 using namespace sdb;
61 using namespace uno;
62 using namespace datatransfer;
63 using namespace beans;
64 using namespace lang;
65 using namespace container;
66 using namespace ::svx;
67
68 class OAddFieldWindowListBox : public SvTreeListBox
69 {
70 OAddFieldWindow* m_pTabWin;
71
72 OAddFieldWindowListBox(const OAddFieldWindowListBox&);
73 void operator =(const OAddFieldWindowListBox&);
74 protected:
75 // virtual void Command( const CommandEvent& rEvt );
76
77 public:
78 OAddFieldWindowListBox( OAddFieldWindow* _pParent );
79 virtual ~OAddFieldWindowListBox();
80
81 sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
82 sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
83
84 uno::Sequence< beans::PropertyValue > getSelectedFieldDescriptors();
85
86 protected:
87 // DragSourceHelper
88 virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
89
90 private:
91 using SvTreeListBox::ExecuteDrop;
92 };
93 // -----------------------------------------------------------------------------
getSelectedFieldDescriptors()94 uno::Sequence< beans::PropertyValue > OAddFieldWindowListBox::getSelectedFieldDescriptors()
95 {
96 uno::Sequence< beans::PropertyValue > aArgs(GetSelectionCount());
97 sal_Int32 i = 0;
98 SvLBoxEntry* pSelected = FirstSelected();
99 while( pSelected )
100 {
101 // build a descriptor for the currently selected field
102 ::svx::ODataAccessDescriptor aDescriptor;
103 m_pTabWin->fillDescriptor(pSelected,aDescriptor);
104 aArgs[i++].Value <<= aDescriptor.createPropertyValueSequence();
105 pSelected = NextSelected(pSelected);
106 }
107 return aArgs;
108 }
109 //==================================================================
110 // class OAddFieldWindowListBox
111 //==================================================================
112 DBG_NAME( rpt_OAddFieldWindowListBox );
113 //------------------------------------------------------------------------------
OAddFieldWindowListBox(OAddFieldWindow * _pParent)114 OAddFieldWindowListBox::OAddFieldWindowListBox( OAddFieldWindow* _pParent )
115 :SvTreeListBox( _pParent, WB_TABSTOP|WB_BORDER|WB_SORT )
116 ,m_pTabWin( _pParent )
117 {
118 DBG_CTOR( rpt_OAddFieldWindowListBox,NULL);
119 SetHelpId( HID_RPT_FIELD_SEL );
120 SetSelectionMode(MULTIPLE_SELECTION);
121 SetDragDropMode( 0xFFFF );
122 SetHighlightRange( );
123 }
124
125 //------------------------------------------------------------------------------
~OAddFieldWindowListBox()126 OAddFieldWindowListBox::~OAddFieldWindowListBox()
127 {
128 DBG_DTOR( rpt_OAddFieldWindowListBox,NULL);
129 }
130
131 //------------------------------------------------------------------------------
AcceptDrop(const AcceptDropEvent &)132 sal_Int8 OAddFieldWindowListBox::AcceptDrop( const AcceptDropEvent& /*rEvt*/ )
133 {
134 return DND_ACTION_NONE;
135 }
136
137 //------------------------------------------------------------------------------
ExecuteDrop(const ExecuteDropEvent &)138 sal_Int8 OAddFieldWindowListBox::ExecuteDrop( const ExecuteDropEvent& /*rEvt*/ )
139 {
140 return DND_ACTION_NONE;
141 }
142
143 //------------------------------------------------------------------------------
StartDrag(sal_Int8,const Point &)144 void OAddFieldWindowListBox::StartDrag( sal_Int8 /*_nAction*/, const Point& /*_rPosPixel*/ )
145 {
146 if ( GetSelectionCount() < 1 )
147 // no drag without a field
148 return;
149
150 OMultiColumnTransferable* pDataContainer = new OMultiColumnTransferable(getSelectedFieldDescriptors());
151 Reference< XTransferable> xEnsureDelete = pDataContainer;
152
153 EndSelection();
154 pDataContainer->StartDrag( this, DND_ACTION_COPYMOVE | DND_ACTION_LINK );
155 }
156 //========================================================================
157 // class OAddFieldWindow
158 //========================================================================
159 DBG_NAME( rpt_OAddFieldWindow );
160 //-----------------------------------------------------------------------
OAddFieldWindow(Window * pParent,const uno::Reference<beans::XPropertySet> & _xRowSet)161 OAddFieldWindow::OAddFieldWindow(Window* pParent
162 ,const uno::Reference< beans::XPropertySet >& _xRowSet
163 )
164 :FloatingWindow(pParent, WinBits(WB_STDMODELESS|WB_SIZEABLE))
165 ,::comphelper::OPropertyChangeListener(m_aMutex)
166 ,::comphelper::OContainerListener(m_aMutex)
167 ,m_xRowSet(_xRowSet)
168 ,m_aActions(this,ModuleRes(RID_TB_SORTING))
169 ,m_pListBox(new OAddFieldWindowListBox( this ))
170 ,m_aFixedLine(this, ModuleRes(ADDFIELD_FL_HELP_SEPARATOR) )
171 ,m_aHelpText(this, ModuleRes(ADDFIELD_HELP_FIELD) )
172 ,m_aInsertButton(this, WB_TABSTOP|WB_CENTER)
173 ,m_nCommandType(0)
174 ,m_bEscapeProcessing(sal_False)
175 ,m_pChangeListener(NULL)
176 ,m_pContainerListener(NULL)
177 {
178 DBG_CTOR( rpt_OAddFieldWindow,NULL);
179 SetHelpId( HID_RPT_FIELD_SEL_WIN );
180 SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor()) );
181 SetMinOutputSizePixel(Size(STD_WIN_SIZE_X,STD_WIN_SIZE_Y));
182
183 m_aActions.SetStyle(m_aActions.GetStyle()|WB_LINESPACING);
184 m_aActions.SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor()) );
185
186 m_aActions.SetSelectHdl(LINK(this, OAddFieldWindow, OnSortAction));
187 setToolBox(&m_aActions);
188 m_aActions.CheckItem(SID_FM_SORTUP);
189 m_aActions.EnableItem(SID_ADD_CONTROL_PAIR, sal_False);
190
191 m_pListBox->SetDoubleClickHdl(LINK( this, OAddFieldWindow, OnDoubleClickHdl ) );
192 m_pListBox->SetSelectHdl(LINK( this, OAddFieldWindow, OnSelectHdl ) );
193 m_pListBox->SetDeselectHdl(LINK( this, OAddFieldWindow, OnSelectHdl ) );
194 m_pListBox->SetDoubleClickHdl(LINK( this, OAddFieldWindow, OnDoubleClickHdl ) );
195 m_pListBox->Show();
196 const String sTitle(ModuleRes(RID_STR_INSERT));
197 m_aInsertButton.SetText(sTitle);
198 m_aInsertButton.SetClickHdl(LINK( this, OAddFieldWindow, OnDoubleClickHdl ) );
199 m_aInsertButton.Show();
200
201 m_aFixedLine.SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );
202 m_aHelpText.SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );
203
204 SetSizePixel(Size(STD_WIN_SIZE_X,STD_WIN_SIZE_Y));
205 //Show();
206
207 if ( m_xRowSet.is() )
208 {
209 try
210 {
211 // be notified when the settings of report definition change
212 m_pChangeListener = new ::comphelper::OPropertyChangeMultiplexer( this, m_xRowSet );
213 m_pChangeListener->addProperty( PROPERTY_COMMAND );
214 m_pChangeListener->addProperty( PROPERTY_COMMANDTYPE );
215 m_pChangeListener->addProperty( PROPERTY_ESCAPEPROCESSING );
216 m_pChangeListener->addProperty( PROPERTY_FILTER );
217 }
218 catch( const Exception& )
219 {
220 DBG_UNHANDLED_EXCEPTION();
221 }
222 }
223 }
224
225 //-----------------------------------------------------------------------
~OAddFieldWindow()226 OAddFieldWindow::~OAddFieldWindow()
227 {
228 if ( m_pListBox.get() )
229 {
230 SvLBoxTreeList* pModel = m_pListBox->GetModel();
231 sal_uLong nCount = pModel->GetEntryCount();
232 for(sal_uLong i = 0; i< nCount;++i)
233 {
234 delete static_cast<ColumnInfo*>(pModel->GetEntry(i)->GetUserData());
235 }
236 }
237 if (m_pChangeListener.is())
238 m_pChangeListener->dispose();
239 if ( m_pContainerListener.is() )
240 m_pContainerListener->dispose();
241 DBG_DTOR( rpt_OAddFieldWindow,NULL);
242 }
243
244 //-----------------------------------------------------------------------
GetFocus()245 void OAddFieldWindow::GetFocus()
246 {
247 if ( m_pListBox.get() )
248 m_pListBox->GrabFocus();
249 else
250 FloatingWindow::GetFocus();
251 }
252 //-----------------------------------------------------------------------
getSelectedFieldDescriptors()253 uno::Sequence< beans::PropertyValue > OAddFieldWindow::getSelectedFieldDescriptors()
254 {
255 return m_pListBox->getSelectedFieldDescriptors();
256 }
257
258 //-----------------------------------------------------------------------
PreNotify(NotifyEvent & _rNEvt)259 long OAddFieldWindow::PreNotify( NotifyEvent& _rNEvt )
260 {
261 if ( EVENT_KEYINPUT == _rNEvt.GetType() )
262 {
263 const KeyCode& rKeyCode = _rNEvt.GetKeyEvent()->GetKeyCode();
264 if ( ( 0 == rKeyCode.GetModifier() ) && ( KEY_RETURN == rKeyCode.GetCode() ) )
265 {
266 if ( m_aCreateLink.IsSet() )
267 {
268 m_aCreateLink.Call(this);
269 return 1;
270 }
271 }
272 }
273
274 return FloatingWindow::PreNotify( _rNEvt );
275 }
276 //-----------------------------------------------------------------------
_propertyChanged(const beans::PropertyChangeEvent & _evt)277 void OAddFieldWindow::_propertyChanged( const beans::PropertyChangeEvent& _evt ) throw( uno::RuntimeException )
278 {
279 OSL_ENSURE( _evt.Source == m_xRowSet, "OAddFieldWindow::_propertyChanged: where did this come from?" );
280 (void)_evt;
281 Update();
282 }
283
284 //-----------------------------------------------------------------------
285 namespace
286 {
lcl_addToList(OAddFieldWindowListBox & _rListBox,const uno::Sequence<::rtl::OUString> & _rEntries)287 void lcl_addToList( OAddFieldWindowListBox& _rListBox, const uno::Sequence< ::rtl::OUString >& _rEntries )
288 {
289 const ::rtl::OUString* pEntries = _rEntries.getConstArray();
290 sal_Int32 nEntries = _rEntries.getLength();
291 for ( sal_Int32 i = 0; i < nEntries; ++i, ++pEntries )
292 _rListBox.InsertEntry( *pEntries,NULL,sal_False,LIST_APPEND,new ColumnInfo(*pEntries) );
293 }
lcl_addToList(OAddFieldWindowListBox & _rListBox,const uno::Reference<container::XNameAccess> & i_xColumns)294 void lcl_addToList( OAddFieldWindowListBox& _rListBox, const uno::Reference< container::XNameAccess>& i_xColumns )
295 {
296 uno::Sequence< ::rtl::OUString > aEntries = i_xColumns->getElementNames();
297 const ::rtl::OUString* pEntries = aEntries.getConstArray();
298 sal_Int32 nEntries = aEntries.getLength();
299 for ( sal_Int32 i = 0; i < nEntries; ++i, ++pEntries )
300 {
301 uno::Reference< beans::XPropertySet> xColumn(i_xColumns->getByName(*pEntries),UNO_QUERY_THROW);
302 ::rtl::OUString sLabel;
303 if ( xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_LABEL) )
304 xColumn->getPropertyValue(PROPERTY_LABEL) >>= sLabel;
305 if ( sLabel.getLength() )
306 _rListBox.InsertEntry( sLabel,NULL,sal_False,LIST_APPEND,new ColumnInfo(*pEntries,sLabel) );
307 else
308 _rListBox.InsertEntry( *pEntries,NULL,sal_False,LIST_APPEND,new ColumnInfo(*pEntries,sLabel) );
309 }
310 }
311 }
312
313 //-----------------------------------------------------------------------
Update()314 void OAddFieldWindow::Update()
315 {
316 if ( m_pContainerListener.is() )
317 m_pContainerListener->dispose();
318 m_pContainerListener = NULL;
319 m_xColumns.clear();
320
321 try
322 {
323 // ListBox loeschen
324 m_pListBox->Clear();
325 const sal_uInt16 nItemCount = m_aActions.GetItemCount();
326 for (sal_uInt16 j = 0; j< nItemCount; ++j)
327 {
328 m_aActions.EnableItem(m_aActions.GetItemId(j),sal_False);
329 }
330
331 String aTitle(ModuleRes(RID_STR_FIELDSELECTION));
332 SetText(aTitle);
333 if ( m_xRowSet.is() )
334 {
335 ::rtl::OUString sCommand( m_aCommandName );
336 sal_Int32 nCommandType( m_nCommandType );
337 sal_Bool bEscapeProcessing( m_bEscapeProcessing );
338 ::rtl::OUString sFilter( m_sFilter );
339
340 OSL_VERIFY( m_xRowSet->getPropertyValue( PROPERTY_COMMAND ) >>= sCommand );
341 OSL_VERIFY( m_xRowSet->getPropertyValue( PROPERTY_COMMANDTYPE ) >>= nCommandType );
342 OSL_VERIFY( m_xRowSet->getPropertyValue( PROPERTY_ESCAPEPROCESSING ) >>= bEscapeProcessing );
343 OSL_VERIFY( m_xRowSet->getPropertyValue( PROPERTY_FILTER ) >>= sFilter );
344
345 m_aCommandName = sCommand;
346 m_nCommandType = nCommandType;
347 m_bEscapeProcessing = bEscapeProcessing;
348 m_sFilter = sFilter;
349
350 // add the columns to the list
351 uno::Reference< sdbc::XConnection> xCon = getConnection();
352 if ( xCon.is() && m_aCommandName.getLength() )
353 m_xColumns = dbtools::getFieldsByCommandDescriptor( xCon, GetCommandType(), GetCommand(), m_xHoldAlive );
354 if ( m_xColumns.is() )
355 {
356 lcl_addToList( *m_pListBox, m_xColumns );
357 uno::Reference< container::XContainer> xContainer(m_xColumns,uno::UNO_QUERY);
358 if ( xContainer.is() )
359 m_pContainerListener = new ::comphelper::OContainerListenerAdapter(this,xContainer);
360 }
361
362 // add the parameter columns to the list
363 uno::Reference< ::com::sun::star::sdbc::XRowSet > xRowSet(m_xRowSet,uno::UNO_QUERY);
364 Sequence< ::rtl::OUString > aParamNames( getParameterNames( xRowSet ) );
365 lcl_addToList( *m_pListBox, aParamNames );
366
367 // set title
368 aTitle.AppendAscii(" ");
369 aTitle += m_aCommandName.getStr();
370 SetText( aTitle );
371 if ( m_aCommandName.getLength() )
372 {
373 for (sal_uInt16 i = 0; i < nItemCount; ++i)
374 {
375 m_aActions.EnableItem(m_aActions.GetItemId(i));
376 }
377 }
378 OnSelectHdl(NULL);
379 }
380 }
381 catch( const Exception& )
382 {
383 DBG_UNHANDLED_EXCEPTION();
384 }
385 }
386
387 //-----------------------------------------------------------------------
Resize()388 void OAddFieldWindow::Resize()
389 {
390 FloatingWindow::Resize();
391
392 const Size aWindowSize( GetOutputSizePixel() );
393
394
395 const Size aRelated(LogicToPixel( Size( RELATED_CONTROLS, RELATED_CONTROLS ), MAP_APPFONT ));
396 const Size aFixedTextSize(LogicToPixel( Size( FIXEDTEXT_WIDTH, FIXEDTEXT_HEIGHT ), MAP_APPFONT ));
397
398 // ToolBar
399 Size aToolbarSize( m_aActions.GetSizePixel() );
400 Point aToolbarPos( aRelated.Width(), aRelated.Height());
401 m_aActions.SetPosPixel(Point(aToolbarPos.X(), aToolbarPos.Y()));
402
403 Size aLBSize( aWindowSize );
404 aLBSize.Width() -= ( 2 * aRelated.Width() );
405
406 // help text
407 const Size aHelpTextSize = m_aHelpText.CalcMinimumSize(aLBSize.Width());
408
409 // ListBox
410 Point aLBPos( aRelated.Width(), aRelated.Height() + aToolbarSize.Height() + aRelated.Height() );
411
412 aLBSize.Height() -= aToolbarSize.Height(); // Toolbar
413 aLBSize.Height() -= (6*aRelated.Height()); // 6 * gap
414 aLBSize.Height() -= aFixedTextSize.Height(); // fixed line
415 aLBSize.Height() -= aHelpTextSize.Height(); // help text
416 m_pListBox->SetPosSizePixel( aLBPos, aLBSize );
417
418 // FixedLine
419 Size aFLSize( aLBSize.Width(),aFixedTextSize.Height() );
420 Point aFLPos( aRelated.Width(), aLBPos.Y() + aLBSize.Height() + aRelated.Height());
421 m_aFixedLine.SetPosSizePixel( aFLPos, aFLSize );
422
423 // Help text
424 Point aFTPos( aRelated.Width(), aFLPos.Y() + aFLSize.Height() + aRelated.Height() );
425 m_aHelpText.SetPosSizePixel( aFTPos, aHelpTextSize );
426 }
427 // -----------------------------------------------------------------------------
getConnection() const428 uno::Reference< sdbc::XConnection> OAddFieldWindow::getConnection() const
429 {
430 return uno::Reference< sdbc::XConnection>(m_xRowSet->getPropertyValue( PROPERTY_ACTIVECONNECTION ),uno::UNO_QUERY);
431 }
432 // -----------------------------------------------------------------------------
fillDescriptor(SvLBoxEntry * _pSelected,::svx::ODataAccessDescriptor & _rDescriptor)433 void OAddFieldWindow::fillDescriptor(SvLBoxEntry* _pSelected,::svx::ODataAccessDescriptor& _rDescriptor)
434 {
435 if ( _pSelected && m_xColumns.is() )
436 {
437 uno::Reference<container::XChild> xChild(getConnection(),uno::UNO_QUERY);
438 if ( xChild.is( ) )
439 {
440 uno::Reference<sdb::XDocumentDataSource> xDocument( xChild->getParent(), uno::UNO_QUERY );
441 if ( xDocument.is() )
442 {
443 uno::Reference<frame::XModel> xModel(xDocument->getDatabaseDocument(),uno::UNO_QUERY);
444 if ( xModel.is() )
445 _rDescriptor[ daDatabaseLocation ] <<= xModel->getURL();
446 } // if ( xDocument.is() )
447 }
448
449 _rDescriptor[ ::svx::daCommand ] <<= GetCommand();
450 _rDescriptor[ ::svx::daCommandType ] <<= GetCommandType();
451 _rDescriptor[ ::svx::daEscapeProcessing ] <<= GetEscapeProcessing();
452 _rDescriptor[ ::svx::daConnection ] <<= getConnection();
453
454 ColumnInfo* pInfo = static_cast<ColumnInfo*>(_pSelected->GetUserData());
455 // ::rtl::OUString sColumnName = m_pListBox->GetEntryText( _pSelected );
456 _rDescriptor[ ::svx::daColumnName ] <<= pInfo->sColumnName;
457 if ( m_xColumns->hasByName( pInfo->sColumnName ) )
458 _rDescriptor[ ::svx::daColumnObject ] <<= m_xColumns->getByName(pInfo->sColumnName);
459 }
460 }
461 // -----------------------------------------------------------------------------
_elementInserted(const container::ContainerEvent & _rEvent)462 void OAddFieldWindow::_elementInserted( const container::ContainerEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException)
463 {
464 if ( m_pListBox.get() )
465 {
466 ::rtl::OUString sName;
467 if ( (_rEvent.Accessor >>= sName) && m_xColumns->hasByName(sName) )
468 {
469 uno::Reference< beans::XPropertySet> xColumn(m_xColumns->getByName(sName),UNO_QUERY_THROW);
470 ::rtl::OUString sLabel;
471 if ( xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_LABEL) )
472 xColumn->getPropertyValue(PROPERTY_LABEL) >>= sLabel;
473 if ( sLabel.getLength() )
474 m_pListBox->InsertEntry( sLabel,NULL,sal_False,LIST_APPEND,new ColumnInfo(sName,sLabel) );
475 else
476 m_pListBox->InsertEntry( sName,NULL,sal_False,LIST_APPEND,new ColumnInfo(sName,sLabel) );
477 }
478 }
479 }
480 // -----------------------------------------------------------------------------
_elementRemoved(const container::ContainerEvent &)481 void OAddFieldWindow::_elementRemoved( const container::ContainerEvent& /*_rEvent*/ ) throw(::com::sun::star::uno::RuntimeException)
482 {
483 if ( m_pListBox.get() )
484 {
485 m_pListBox->Clear();
486 if ( m_xColumns.is() )
487 lcl_addToList( *m_pListBox, m_xColumns );
488 }
489 }
490 // -----------------------------------------------------------------------------
_elementReplaced(const container::ContainerEvent &)491 void OAddFieldWindow::_elementReplaced( const container::ContainerEvent& /*_rEvent*/ ) throw(::com::sun::star::uno::RuntimeException)
492 {
493 }
494 // -----------------------------------------------------------------------------
495 IMPL_LINK( OAddFieldWindow, OnSelectHdl, void* ,/*_pAddFieldDlg*/)
496 {
497 m_aActions.EnableItem(SID_ADD_CONTROL_PAIR, ( m_pListBox.get() && m_pListBox->GetSelectionCount() > 0 ));
498
499 return 0L;
500 }
501 // -----------------------------------------------------------------------------
502 IMPL_LINK( OAddFieldWindow, OnDoubleClickHdl, void* ,/*_pAddFieldDlg*/)
503 {
504 if ( m_aCreateLink.IsSet() )
505 m_aCreateLink.Call(this);
506
507 return 0L;
508 }
509 //------------------------------------------------------------------------------
getImageList(sal_Int16 _eBitmapSet,sal_Bool _bHiContast) const510 ImageList OAddFieldWindow::getImageList(sal_Int16 _eBitmapSet,sal_Bool _bHiContast) const
511 {
512 sal_Int16 nN = IMG_ADDFIELD_DLG_SC;
513 sal_Int16 nH = IMG_ADDFIELD_DLG_SCH;
514 if ( _eBitmapSet == SFX_SYMBOLS_SIZE_LARGE )
515 {
516 nN = IMG_ADDFIELD_DLG_LC;
517 nH = IMG_ADDFIELD_DLG_LCH;
518 }
519 return ImageList(ModuleRes( _bHiContast ? nH : nN ));
520 }
521 //------------------------------------------------------------------
resizeControls(const Size & _rDiff)522 void OAddFieldWindow::resizeControls(const Size& _rDiff)
523 {
524 // we use large images so we must change them
525 if ( _rDiff.Width() || _rDiff.Height() )
526 {
527 Invalidate();
528 }
529 }
530 //------------------------------------------------------------------
531 IMPL_LINK( OAddFieldWindow, OnSortAction, ToolBox*, /*NOTINTERESTEDIN*/ )
532 {
533 const sal_uInt16 nCurItem = m_aActions.GetCurItemId();
534 if ( SID_ADD_CONTROL_PAIR == nCurItem )
535 OnDoubleClickHdl(NULL);
536 else
537 {
538 if ( SID_FM_REMOVE_FILTER_SORT == nCurItem || !m_aActions.IsItemChecked(nCurItem) )
539 {
540 const sal_uInt16 nItemCount = m_aActions.GetItemCount();
541 for (sal_uInt16 j = 0; j< nItemCount; ++j)
542 {
543 const sal_uInt16 nItemId = m_aActions.GetItemId(j);
544 if ( nCurItem != nItemId )
545 m_aActions.CheckItem(nItemId,sal_False);
546 }
547 SvSortMode eSortMode = SortNone;
548 if ( SID_FM_REMOVE_FILTER_SORT != nCurItem )
549 {
550 m_aActions.CheckItem(nCurItem,!m_aActions.IsItemChecked(nCurItem));
551 if ( m_aActions.IsItemChecked(SID_FM_SORTUP) )
552 eSortMode = SortAscending;
553 else if ( m_aActions.IsItemChecked(SID_FM_SORTDOWN) )
554 eSortMode = SortDescending;
555 } // if ( SID_FM_REMOVE_FILTER_SORT != nCurItem )
556
557 m_pListBox->GetModel()->SetSortMode(eSortMode);
558 if ( SID_FM_REMOVE_FILTER_SORT == nCurItem )
559 Update();
560
561 m_pListBox->GetModel()->Resort();
562 }
563 }
564 return 0L;
565 }
566 // -----------------------------------------------------------------------------
567 // =============================================================================
568 } // namespace rptui
569 // =============================================================================
570
571