summaryrefslogtreecommitdiff
path: root/reportdesign/source/ui/dlg/GroupsSorting.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'reportdesign/source/ui/dlg/GroupsSorting.cxx')
-rw-r--r--reportdesign/source/ui/dlg/GroupsSorting.cxx1562
1 files changed, 1562 insertions, 0 deletions
diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx
new file mode 100644
index 000000000000..d4ea5fa17a48
--- /dev/null
+++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx
@@ -0,0 +1,1562 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "precompiled_reportdesign.hxx"
+#include "GroupsSorting.hxx"
+#include "GroupsSorting.hrc"
+#include <connectivity/dbtools.hxx>
+#include <svtools/editbrowsebox.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XContainerListener.hpp>
+#include <com/sun/star/report/GroupOn.hpp>
+#include <com/sun/star/sdbc/DataType.hpp>
+
+#include <tools/debug.hxx>
+#include "RptResId.hrc"
+#include "rptui_slotid.hrc"
+#include "ModuleHelper.hxx"
+#include "helpids.hrc"
+
+#include <svx/globlmn.hrc>
+#include <svx/svxids.hrc>
+#include <svtools/imgdef.hxx>
+
+#include "GroupExchange.hxx"
+#include "UITools.hxx"
+#include "UndoActions.hxx"
+#include "uistrings.hrc"
+#include "ReportController.hxx"
+#include "ColumnInfo.hxx"
+
+#include <cppuhelper/implbase1.hxx>
+#include <comphelper/property.hxx>
+#include <vcl/mnemonic.hxx>
+#include <vcl/msgbox.hxx>
+#include <algorithm>
+#include <boost/bind.hpp>
+
+#include <cppuhelper/bootstrap.hxx>
+
+#define HANDLE_ID 0
+#define FIELD_EXPRESSION 1
+#define GROUPS_START_LEN 5
+#define NO_GROUP -1
+
+namespace rptui
+{
+using namespace ::com::sun::star;
+using namespace svt;
+using namespace ::comphelper;
+
+ void lcl_addToList_throw( ComboBoxControl& _rListBox, ::std::vector<ColumnInfo>& o_aColumnList,const uno::Reference< container::XNameAccess>& i_xColumns )
+ {
+ uno::Sequence< ::rtl::OUString > aEntries = i_xColumns->getElementNames();
+ const ::rtl::OUString* pEntries = aEntries.getConstArray();
+ sal_Int32 nEntries = aEntries.getLength();
+ for ( sal_Int32 i = 0; i < nEntries; ++i, ++pEntries )
+ {
+ uno::Reference< beans::XPropertySet> xColumn(i_xColumns->getByName(*pEntries),uno::UNO_QUERY_THROW);
+ ::rtl::OUString sLabel;
+ if ( xColumn->getPropertySetInfo()->hasPropertyByName(PROPERTY_LABEL) )
+ xColumn->getPropertyValue(PROPERTY_LABEL) >>= sLabel;
+ o_aColumnList.push_back( ColumnInfo(*pEntries,sLabel) );
+ if ( sLabel.getLength() )
+ _rListBox.InsertEntry( sLabel );
+ else
+ _rListBox.InsertEntry( *pEntries );
+ }
+ }
+
+typedef ::svt::EditBrowseBox OFieldExpressionControl_Base;
+typedef ::cppu::WeakImplHelper1< container::XContainerListener > TContainerListenerBase;
+class OFieldExpressionControl : public TContainerListenerBase
+ ,public OFieldExpressionControl_Base
+{
+ ::osl::Mutex m_aMutex;
+ ::std::vector<sal_Int32> m_aGroupPositions;
+ ::std::vector<ColumnInfo> m_aColumnInfo;
+ ::svt::ComboBoxControl* m_pComboCell;
+ sal_Int32 m_nDataPos;
+ sal_Int32 m_nCurrentPos;
+ ULONG m_nPasteEvent;
+ ULONG m_nDeleteEvent;
+ OGroupsSortingDialog* m_pParent;
+ bool m_bIgnoreEvent;
+
+
+ void fillListBox(const uno::Reference< beans::XPropertySet>& _xDest,long nRow,USHORT nColumnId);
+ BOOL SaveModified(bool _bAppend);
+
+ OFieldExpressionControl(const OFieldExpressionControl&); // NO COPY
+ void operator =(const OFieldExpressionControl&); // NO ASSIGN
+public:
+ OFieldExpressionControl( OGroupsSortingDialog* _pParent,const ResId& _rResId);
+ virtual ~OFieldExpressionControl();
+
+ // XEventListener
+ virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw( ::com::sun::star::uno::RuntimeException );
+ // XContainerListener
+ virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& rEvent) throw(::com::sun::star::uno::RuntimeException);
+
+ void fillColumns(const uno::Reference< container::XNameAccess>& _xColumns);
+ void lateInit();
+ sal_Bool IsDeleteAllowed( );
+ void DeleteRows();
+ void cut();
+ void copy();
+ void paste();
+
+ inline sal_Int32 getGroupPosition(sal_Int32 _nRow) const { return _nRow != BROWSER_ENDOFSELECTION ? m_aGroupPositions[_nRow] : sal_Int32(NO_GROUP); }
+
+ inline ::svt::ComboBoxControl* getExpressionControl() const { return m_pComboCell; }
+
+
+ /** returns the sequence with the selected groups
+ */
+ uno::Sequence<uno::Any> fillSelectedGroups();
+
+ /** move groups given by _aGroups
+ */
+ void moveGroups(const uno::Sequence<uno::Any>& _aGroups,sal_Int32 _nRow,sal_Bool _bSelect = sal_True);
+
+ virtual BOOL CursorMoving(long nNewRow, USHORT nNewCol);
+ using OFieldExpressionControl_Base::GetRowCount;
+protected:
+ virtual BOOL IsTabAllowed(BOOL bForward) const;
+
+
+ virtual void InitController( ::svt::CellControllerRef& rController, long nRow, USHORT nCol );
+ virtual ::svt::CellController* GetController( long nRow, USHORT nCol );
+ virtual void PaintCell( OutputDevice& rDev, const Rectangle& rRect, USHORT nColId ) const;
+ virtual BOOL SeekRow( long nRow );
+ virtual BOOL SaveModified();
+ virtual String GetCellText( long nRow, USHORT nColId ) const;
+ virtual RowStatus GetRowStatus(long nRow) const;
+
+ virtual void KeyInput(const KeyEvent& rEvt);
+ virtual void Command( const CommandEvent& rEvt );
+
+ // D&D
+ virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel );
+ virtual sal_Int8 AcceptDrop( const BrowserAcceptDropEvent& rEvt );
+ virtual sal_Int8 ExecuteDrop( const BrowserExecuteDropEvent& rEvt );
+
+ using BrowseBox::AcceptDrop;
+ using BrowseBox::ExecuteDrop;
+
+private:
+
+ DECL_LINK( AsynchActivate, void* );
+ DECL_LINK( AsynchDeactivate, void* );
+ DECL_LINK( DelayedPaste, void* );
+ DECL_LINK( CBChangeHdl,ComboBox*);
+
+ void InsertRows( long nRow );
+
+public:
+ DECL_LINK( DelayedDelete, void* );
+
+};
+//========================================================================
+// class OFieldExpressionControl
+//========================================================================
+DBG_NAME( rpt_OFieldExpressionControl )
+//------------------------------------------------------------------------
+OFieldExpressionControl::OFieldExpressionControl( OGroupsSortingDialog* _pParent,const ResId& _rResId )
+ :EditBrowseBox( _pParent, _rResId,EBBF_NONE, WB_TABSTOP | BROWSER_COLUMNSELECTION | BROWSER_MULTISELECTION | BROWSER_AUTOSIZE_LASTCOL |
+ BROWSER_KEEPSELECTION | BROWSER_HLINESFULL | BROWSER_VLINESFULL)
+ ,m_aGroupPositions(GROUPS_START_LEN,-1)
+ ,m_pComboCell(NULL)
+ ,m_nDataPos(-1)
+ ,m_nCurrentPos(-1)
+ ,m_nPasteEvent(0)
+ ,m_nDeleteEvent(0)
+ ,m_pParent(_pParent)
+ ,m_bIgnoreEvent(false)
+{
+ DBG_CTOR( rpt_OFieldExpressionControl,NULL);
+ SetBorderStyle(WINDOW_BORDER_MONO);
+}
+
+//------------------------------------------------------------------------
+OFieldExpressionControl::~OFieldExpressionControl()
+{
+ acquire();
+ uno::Reference< report::XGroups > xGroups = m_pParent->getGroups();
+ xGroups->removeContainerListener(this);
+ //////////////////////////////////////////////////////////////////////
+ // delete events from queue
+ if( m_nPasteEvent )
+ Application::RemoveUserEvent( m_nPasteEvent );
+ if( m_nDeleteEvent )
+ Application::RemoveUserEvent( m_nDeleteEvent );
+
+ delete m_pComboCell;
+ DBG_DTOR( rpt_OFieldExpressionControl,NULL);
+}
+//------------------------------------------------------------------------------
+uno::Sequence<uno::Any> OFieldExpressionControl::fillSelectedGroups()
+{
+ uno::Sequence<uno::Any> aList;
+ ::std::vector<uno::Any> vClipboardList;
+ vClipboardList.reserve(GetSelectRowCount());
+
+ uno::Reference<report::XGroups> xGroups = m_pParent->getGroups();
+ sal_Int32 nCount = xGroups->getCount();
+ if ( nCount >= 1 )
+ {
+ for( long nIndex=FirstSelectedRow(); nIndex >= 0 ; nIndex=NextSelectedRow() )
+ {
+ try
+ {
+ if ( m_aGroupPositions[nIndex] != NO_GROUP )
+ {
+ uno::Reference< report::XGroup> xOrgGroup(xGroups->getByIndex(m_aGroupPositions[nIndex]),uno::UNO_QUERY);
+ /*uno::Reference< report::XGroup> xCopy = xGroups->createGroup();
+ ::comphelper::copyProperties(xOrgGroup.get(),xCopy.get());*/
+ vClipboardList.push_back( uno::makeAny(xOrgGroup) );
+ }
+ }
+ catch(uno::Exception&)
+ {
+ OSL_ENSURE(0,"Can not access group!");
+ }
+ }
+ if ( !vClipboardList.empty() )
+ aList = uno::Sequence< uno::Any >(&vClipboardList[0], vClipboardList.size());
+ } // if ( nCount > 1 )
+ return aList;
+}
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::StartDrag( sal_Int8 /*_nAction*/ , const Point& /*_rPosPixel*/ )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ if ( m_pParent && !m_pParent->isReadOnly( ) )
+ {
+ uno::Sequence<uno::Any> aClipboardList = fillSelectedGroups();
+
+ if( aClipboardList.getLength() )
+ {
+ OGroupExchange* pData = new OGroupExchange(aClipboardList);
+ uno::Reference< ::com::sun::star::datatransfer::XTransferable> xRef = pData;
+ pData->StartDrag(this, DND_ACTION_MOVE );
+ } // if(!vClipboardList.empty())
+ }
+}
+//------------------------------------------------------------------------------
+sal_Int8 OFieldExpressionControl::AcceptDrop( const BrowserAcceptDropEvent& rEvt )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ sal_Int8 nAction = DND_ACTION_NONE;
+ if ( IsEditing() )
+ {
+ USHORT nPos = m_pComboCell->GetSelectEntryPos();
+ if ( COMBOBOX_ENTRY_NOTFOUND != nPos || m_pComboCell->GetText().Len() )
+ SaveModified();
+ DeactivateCell();
+ }
+ if ( IsDropFormatSupported( OGroupExchange::getReportGroupId() ) && m_pParent->getGroups()->getCount() > 1 && rEvt.GetWindow() == &GetDataWindow() )
+ {
+ nAction = DND_ACTION_MOVE;
+ }
+ return nAction;
+}
+//------------------------------------------------------------------------------
+sal_Int8 OFieldExpressionControl::ExecuteDrop( const BrowserExecuteDropEvent& rEvt )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ sal_Int8 nAction = DND_ACTION_NONE;
+ if ( IsDropFormatSupported( OGroupExchange::getReportGroupId() ) )
+ {
+ sal_Int32 nRow = GetRowAtYPosPixel(rEvt.maPosPixel.Y(), sal_False);
+ SetNoSelection();
+
+ TransferableDataHelper aDropped( rEvt.maDropEvent.Transferable );
+ uno::Any aDrop = aDropped.GetAny(OGroupExchange::getReportGroupId());
+ uno::Sequence< uno::Any > aGroups;
+ aDrop >>= aGroups;
+ if ( aGroups.getLength() )
+ {
+ moveGroups(aGroups,nRow);
+ nAction = DND_ACTION_MOVE;
+ }
+ }
+ return nAction;
+}
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::moveGroups(const uno::Sequence<uno::Any>& _aGroups,sal_Int32 _nRow,sal_Bool _bSelect)
+{
+ if ( _aGroups.getLength() )
+ {
+ m_bIgnoreEvent = true;
+ {
+ sal_Int32 nRow = _nRow;
+ String sUndoAction(ModuleRes(RID_STR_UNDO_MOVE_GROUP));
+ UndoManagerListAction aListAction(*m_pParent->m_pController->getUndoMgr(),sUndoAction);
+
+ uno::Reference< report::XGroups> xGroups = m_pParent->getGroups();
+ const uno::Any* pIter = _aGroups.getConstArray();
+ const uno::Any* pEnd = pIter + _aGroups.getLength();
+ for(;pIter != pEnd;++pIter)
+ {
+ uno::Reference< report::XGroup> xGroup(*pIter,uno::UNO_QUERY);
+ if ( xGroup.is() )
+ {
+ uno::Sequence< beans::PropertyValue > aArgs(1);
+ aArgs[0].Name = PROPERTY_GROUP;
+ aArgs[0].Value <<= xGroup;
+ // we use this way to create undo actions
+ m_pParent->m_pController->executeChecked(SID_GROUP_REMOVE,aArgs);
+ aArgs.realloc(2);
+ if ( nRow > xGroups->getCount() )
+ nRow = xGroups->getCount();
+ if ( _bSelect )
+ SelectRow(nRow);
+ aArgs[1].Name = PROPERTY_POSITIONY;
+ aArgs[1].Value <<= nRow;
+ m_pParent->m_pController->executeChecked(SID_GROUP_APPEND,aArgs);
+ ++nRow;
+ }
+ } // for(;pIter != pEnd;++pIter)
+ }
+ m_bIgnoreEvent = false;
+ Invalidate();
+ } // if ( _aGroups.getLength() )
+}
+// -----------------------------------------------------------------------------
+void OFieldExpressionControl::fillColumns(const uno::Reference< container::XNameAccess>& _xColumns)
+{
+ m_pComboCell->Clear();
+ if ( _xColumns.is() )
+ lcl_addToList_throw(*m_pComboCell,m_aColumnInfo,_xColumns);
+}
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::lateInit()
+{
+ uno::Reference< report::XGroups > xGroups = m_pParent->getGroups();
+ sal_Int32 nGroupsCount = xGroups->getCount();
+ m_aGroupPositions.resize(::std::max<sal_Int32>(nGroupsCount,sal_Int32(GROUPS_START_LEN)),NO_GROUP);
+ ::std::vector<sal_Int32>::iterator aIter = m_aGroupPositions.begin();
+ for (sal_Int32 i = 0; i < nGroupsCount; ++i,++aIter)
+ *aIter = i;
+
+ if ( ColCount() == 0 )
+ {
+ Font aFont( GetDataWindow().GetFont() );
+ aFont.SetWeight( WEIGHT_NORMAL );
+ GetDataWindow().SetFont( aFont );
+
+ // Font fuer die Ueberschriften auf Light setzen
+ aFont = GetFont();
+ aFont.SetWeight( WEIGHT_LIGHT );
+ SetFont(aFont);
+
+ InsertHandleColumn(static_cast<USHORT>(GetTextWidth('0') * 4)/*, TRUE */);
+ InsertDataColumn( FIELD_EXPRESSION, String(ModuleRes(STR_RPT_EXPRESSION)), 100);
+
+ m_pComboCell = new ComboBoxControl( &GetDataWindow() );
+ m_pComboCell->SetSelectHdl(LINK(this,OFieldExpressionControl,CBChangeHdl));
+ m_pComboCell->SetHelpId(HID_RPT_FIELDEXPRESSION);
+
+ Control* pControls[] = {m_pComboCell};
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ {
+ pControls[i]->SetGetFocusHdl(LINK(m_pParent, OGroupsSortingDialog, OnControlFocusGot));
+ pControls[i]->SetLoseFocusHdl(LINK(m_pParent, OGroupsSortingDialog, OnControlFocusLost));
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // set browse mode
+ BrowserMode nMode(BROWSER_COLUMNSELECTION | BROWSER_MULTISELECTION | BROWSER_KEEPSELECTION |
+ BROWSER_HLINESFULL | BROWSER_VLINESFULL | BROWSER_AUTOSIZE_LASTCOL | BROWSER_AUTO_VSCROLL | BROWSER_AUTO_HSCROLL);
+ if( m_pParent->isReadOnly() )
+ nMode |= BROWSER_HIDECURSOR;
+ SetMode(nMode);
+ xGroups->addContainerListener(this);
+ }
+ else
+ // not the first call
+ RowRemoved(0, GetRowCount());
+
+ RowInserted(0, m_aGroupPositions.size(), TRUE);
+}
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+IMPL_LINK( OFieldExpressionControl, CBChangeHdl, ComboBox*, /*pComboBox*/ )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+
+ SaveModified();
+ return 0L;
+}
+//------------------------------------------------------------------------------
+IMPL_LINK(OFieldExpressionControl, AsynchActivate, void*, EMPTYARG)
+{
+ ActivateCell();
+ return 0L;
+}
+
+//------------------------------------------------------------------------------
+IMPL_LINK(OFieldExpressionControl, AsynchDeactivate, void*, EMPTYARG)
+{
+ DeactivateCell();
+ return 0L;
+}
+
+//------------------------------------------------------------------------------
+BOOL OFieldExpressionControl::IsTabAllowed(BOOL /*bForward*/) const
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+BOOL OFieldExpressionControl::SaveModified()
+{
+ return SaveModified(true);
+}
+//------------------------------------------------------------------------------
+BOOL OFieldExpressionControl::SaveModified(bool _bAppendRow)
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ sal_Int32 nRow = GetCurRow();
+ if ( nRow != BROWSER_ENDOFSELECTION )
+ {
+ sal_Bool bAppend = sal_False;
+ try
+ {
+ uno::Reference< report::XGroup> xGroup;
+ if ( m_aGroupPositions[nRow] == NO_GROUP )
+ {
+ bAppend = sal_True;
+ String sUndoAction(ModuleRes(RID_STR_UNDO_APPEND_GROUP));
+ m_pParent->m_pController->getUndoMgr()->EnterListAction( sUndoAction, String() );
+ xGroup = m_pParent->getGroups()->createGroup();
+ xGroup->setHeaderOn(sal_True);
+
+ uno::Sequence< beans::PropertyValue > aArgs(2);
+ aArgs[0].Name = PROPERTY_GROUP;
+ aArgs[0].Value <<= xGroup;
+ // find position where to insert the new group
+ sal_Int32 nGroupPos = 0;
+ ::std::vector<sal_Int32>::iterator aIter = m_aGroupPositions.begin();
+ ::std::vector<sal_Int32>::iterator aEnd = m_aGroupPositions.begin() + nRow;
+ for(;aIter != aEnd;++aIter)
+ if ( *aIter != NO_GROUP )
+ nGroupPos = *aIter + 1;
+ aArgs[1].Name = PROPERTY_POSITIONY;
+ aArgs[1].Value <<= nGroupPos;
+ m_bIgnoreEvent = true;
+ m_pParent->m_pController->executeChecked(SID_GROUP_APPEND,aArgs);
+ m_bIgnoreEvent = false;
+ OSL_ENSURE(*aIter == NO_GROUP ,"Illegal iterator!");
+ *aIter++ = nGroupPos;
+
+ aEnd = m_aGroupPositions.end();
+ for(;aIter != aEnd;++aIter)
+ if ( *aIter != NO_GROUP )
+ ++*aIter;
+ }
+ else
+ xGroup = m_pParent->getGroup(m_aGroupPositions[nRow]);
+ if ( xGroup.is() )
+ {
+ USHORT nPos = m_pComboCell->GetSelectEntryPos();
+ ::rtl::OUString sExpression;
+ if ( COMBOBOX_ENTRY_NOTFOUND == nPos )
+ sExpression = m_pComboCell->GetText();
+ else
+ {
+ sExpression = m_aColumnInfo[nPos].sColumnName;
+ }
+ xGroup->setExpression( sExpression );
+
+ ::rptui::adjustSectionName(xGroup,nPos);
+
+ if ( bAppend )
+ m_pParent->m_pController->getUndoMgr()->LeaveListAction();
+ }
+
+ if ( Controller() )
+ Controller()->ClearModified();
+ if ( _bAppendRow && GetRowCount() == m_pParent->getGroups()->getCount() )
+ {
+ RowInserted( GetRowCount()-1);
+ m_aGroupPositions.push_back(NO_GROUP);
+ }
+
+ GoToRow(nRow);
+ m_pParent->DisplayData(nRow);
+ }
+ catch(uno::Exception&)
+ {
+ OSL_ENSURE(0,"OFieldExpressionControl::SaveModified: Exception caught!");
+ }
+ }
+
+ return TRUE;
+}
+//------------------------------------------------------------------------------
+String OFieldExpressionControl::GetCellText( long nRow, USHORT /*nColId*/ ) const
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ String sText;
+ if ( nRow != BROWSER_ENDOFSELECTION && m_aGroupPositions[nRow] != NO_GROUP )
+ {
+ try
+ {
+ uno::Reference< report::XGroup> xGroup = m_pParent->getGroup(m_aGroupPositions[nRow]);
+ ::rtl::OUString sExpression = xGroup->getExpression();
+
+ for(::std::vector<ColumnInfo>::const_iterator aIter = m_aColumnInfo.begin(); aIter != m_aColumnInfo.end();++aIter)
+ {
+ if ( aIter->sColumnName == sExpression )
+ {
+ if ( aIter->sLabel.getLength() )
+ sExpression = aIter->sLabel;
+ break;
+ }
+ }
+ sText = sExpression;
+ }
+ catch(uno::Exception&)
+ {
+ OSL_ENSURE(0,"Exception caught while getting expression value from the group");
+ }
+ } // if ( nRow != BROWSER_ENDOFSELECTION && nRow < m_pParent->getGroups()->getCount() )
+ return sText;
+}
+
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::InitController( CellControllerRef& /*rController*/, long nRow, USHORT nColumnId )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+
+ m_pComboCell->SetText( GetCellText( nRow, nColumnId ) );
+}
+//------------------------------------------------------------------------------
+sal_Bool OFieldExpressionControl::CursorMoving(long nNewRow, sal_uInt16 nNewCol)
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+
+ if (!EditBrowseBox::CursorMoving(nNewRow, nNewCol))
+ return sal_False;
+ m_nDataPos = nNewRow;
+ long nOldDataPos = GetCurRow();
+ InvalidateStatusCell( m_nDataPos );
+ InvalidateStatusCell( nOldDataPos );
+
+ m_pParent->SaveData( nOldDataPos );
+ m_pParent->DisplayData( m_nDataPos );
+ return sal_True;
+}
+//------------------------------------------------------------------------------
+CellController* OFieldExpressionControl::GetController( long /*nRow*/, USHORT /*nColumnId*/ )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ ComboBoxCellController* pCellController = new ComboBoxCellController( m_pComboCell );
+ pCellController->GetComboBox().SetReadOnly(!m_pParent->m_pController->isEditable());
+ return pCellController;
+}
+
+//------------------------------------------------------------------------------
+BOOL OFieldExpressionControl::SeekRow( long _nRow )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ // die Basisklasse braucht den Aufruf, da sie sich dort merkt, welche Zeile gepainted wird
+ EditBrowseBox::SeekRow(_nRow);
+ m_nCurrentPos = _nRow;
+ return TRUE;
+}
+
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::PaintCell( OutputDevice& rDev, const Rectangle& rRect, USHORT nColumnId ) const
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ String aText =const_cast< OFieldExpressionControl*>(this)->GetCellText( m_nCurrentPos, nColumnId );
+
+ Point aPos( rRect.TopLeft() );
+ Size aTextSize( GetDataWindow().GetTextHeight(),GetDataWindow().GetTextWidth( aText ));
+
+ if( aPos.X() < rRect.Right() || aPos.X() + aTextSize.Width() > rRect.Right() ||
+ aPos.Y() < rRect.Top() || aPos.Y() + aTextSize.Height() > rRect.Bottom() )
+ rDev.SetClipRegion( rRect );
+
+ rDev.DrawText( aPos, aText );
+
+ if( rDev.IsClipRegion() )
+ rDev.SetClipRegion();
+}
+//------------------------------------------------------------------------------
+EditBrowseBox::RowStatus OFieldExpressionControl::GetRowStatus(long nRow) const
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ if (nRow >= 0 && nRow == m_nDataPos)
+ return EditBrowseBox::CURRENT;
+ if ( nRow != BROWSER_ENDOFSELECTION && nRow < static_cast<long>(m_aGroupPositions.size()) && m_aGroupPositions[nRow] != NO_GROUP )
+ {
+ try
+ {
+ uno::Reference< report::XGroup> xGroup = m_pParent->getGroup(m_aGroupPositions[nRow]);
+ return (xGroup->getHeaderOn() || xGroup->getFooterOn())? EditBrowseBox::HEADERFOOTER : EditBrowseBox::CLEAN;
+ }
+ catch(uno::Exception&)
+ {
+ OSL_ENSURE(0,"Exception cathced while try to get a group!");
+ }
+ }
+ return EditBrowseBox::CLEAN;
+}
+// XEventListener
+//------------------------------------------------------------------------------
+void SAL_CALL OFieldExpressionControl::disposing(const lang::EventObject& /*e*/) throw( uno::RuntimeException )
+{
+}
+//------------------------------------------------------------------------------
+// XContainerListener
+//------------------------------------------------------------------------------
+void SAL_CALL OFieldExpressionControl::elementInserted(const container::ContainerEvent& evt) throw(uno::RuntimeException)
+{
+ if ( m_bIgnoreEvent )
+ return;
+ ::vos::OClearableGuard aSolarGuard( Application::GetSolarMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
+ sal_Int32 nGroupPos = 0;
+ if ( evt.Accessor >>= nGroupPos )
+ {
+ if ( nGroupPos >= GetRowCount() )
+ {
+ sal_Int32 nAddedRows = nGroupPos - GetRowCount();
+ RowInserted(nAddedRows);
+ for (sal_Int32 i = 0; i < nAddedRows; ++i)
+ m_aGroupPositions.push_back(NO_GROUP);
+ m_aGroupPositions[nGroupPos] = nGroupPos;
+ }
+ else
+ {
+ ::std::vector<sal_Int32>::iterator aFind = m_aGroupPositions.begin()+ nGroupPos;
+ if ( aFind == m_aGroupPositions.end() )
+ aFind = ::std::find(m_aGroupPositions.begin(),m_aGroupPositions.end(),NO_GROUP);
+
+ if ( aFind != m_aGroupPositions.end() )
+ {
+ if ( *aFind != NO_GROUP )
+ aFind = m_aGroupPositions.insert(aFind,nGroupPos);
+ else
+ *aFind = nGroupPos;
+
+ ::std::vector<sal_Int32>::iterator aEnd = m_aGroupPositions.end();
+ for(++aFind;aFind != aEnd;++aFind)
+ if ( *aFind != NO_GROUP )
+ ++*aFind;
+
+ //::std::vector<sal_Int32>::reverse_iterator aRIter = m_aGroupPositions.rbegin();
+ //::std::vector<sal_Int32>::reverse_iterator aREnd = m_aGroupPositions.rend();
+ //for (; aRIter != aREnd && *aRIter != NO_GROUP; ++aRIter)
+ // continue;
+ //if ( aRIter != aREnd )
+ // m_aGroupPositions.erase(m_aGroupPositions.begin() + (m_aGroupPositions.size() - 1 - (aRIter - m_aGroupPositions.rbegin())));
+ }
+ }
+ Invalidate();
+ }
+}
+//------------------------------------------------------------------------------
+void SAL_CALL OFieldExpressionControl::elementReplaced(const container::ContainerEvent& /*evt*/) throw(uno::RuntimeException)
+{
+}
+//------------------------------------------------------------------------------
+void SAL_CALL OFieldExpressionControl::elementRemoved(const container::ContainerEvent& evt) throw(uno::RuntimeException)
+{
+ ::vos::OClearableGuard aSolarGuard( Application::GetSolarMutex() );
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ if ( m_bIgnoreEvent )
+ return;
+
+ sal_Int32 nGroupPos = 0;
+ if ( evt.Accessor >>= nGroupPos )
+ {
+ ::std::vector<sal_Int32>::iterator aFind = ::std::find(m_aGroupPositions.begin(),m_aGroupPositions.end(),nGroupPos);
+ if ( aFind != m_aGroupPositions.end() )
+ {
+ *aFind = NO_GROUP;
+ ::std::vector<sal_Int32>::iterator aEnd = m_aGroupPositions.end();
+ for(++aFind;aFind != aEnd;++aFind)
+ if ( *aFind != NO_GROUP )
+ --*aFind;
+ //PaintCell(*this,GetFieldRect(FIELD_EXPRESSION),FIELD_EXPRESSION);
+ Invalidate();
+ }
+ }
+}
+//------------------------------------------------------------------------------
+sal_Bool OFieldExpressionControl::IsDeleteAllowed( )
+{
+ return !m_pParent->isReadOnly() && GetSelectRowCount() > 0;
+}
+//------------------------------------------------------------------------
+void OFieldExpressionControl::KeyInput( const KeyEvent& rEvt )
+{
+ if (IsDeleteAllowed())
+ {
+ if (rEvt.GetKeyCode().GetCode() == KEY_DELETE && // Delete rows
+ !rEvt.GetKeyCode().IsShift() &&
+ !rEvt.GetKeyCode().IsMod1())
+ {
+ DeleteRows();
+ return;
+ }
+ }
+ EditBrowseBox::KeyInput(rEvt);
+}
+//------------------------------------------------------------------------
+void OFieldExpressionControl::Command(const CommandEvent& rEvt)
+{
+ switch (rEvt.GetCommand())
+ {
+ case COMMAND_CONTEXTMENU:
+ {
+ if (!rEvt.IsMouseEvent())
+ {
+ EditBrowseBox::Command(rEvt);
+ return;
+ }
+
+ USHORT nColId = GetColumnAtXPosPixel(rEvt.GetMousePosPixel().X());
+
+ if ( nColId == HANDLE_ID )
+ {
+ //long nRow = GetRowAtYPosPixel(rEvt.GetMousePosPixel().Y());
+ PopupMenu aContextMenu(ModuleRes(RID_GROUPSROWPOPUPMENU));
+ sal_Bool bEnable = sal_False;
+ long nIndex = FirstSelectedRow();
+ while( nIndex >= 0 && !bEnable )
+ {
+ if ( m_aGroupPositions[nIndex] != NO_GROUP )
+ bEnable = sal_True;
+ nIndex = NextSelectedRow();
+ }
+ //aContextMenu.EnableItem( SID_CUT, IsDeleteAllowed() && bEnable);
+ //aContextMenu.EnableItem( SID_COPY, bEnable);
+ //TransferableDataHelper aTransferData(TransferableDataHelper::CreateFromSystemClipboard(GetParent()));
+ //aContextMenu.EnableItem( SID_PASTE, aTransferData.HasFormat(SOT_FORMATSTR_ID_RPT_GRPED) );
+ aContextMenu.EnableItem( SID_DELETE, IsDeleteAllowed() && bEnable );
+ switch (aContextMenu.Execute(this, rEvt.GetMousePosPixel()))
+ {
+ case SID_CUT:
+ cut();
+ break;
+ case SID_COPY:
+ copy();
+ break;
+ case SID_PASTE:
+ paste();
+ break;
+
+ case SID_DELETE:
+ if( m_nDeleteEvent )
+ Application::RemoveUserEvent( m_nDeleteEvent );
+ m_nDeleteEvent = Application::PostUserEvent( LINK(this, OFieldExpressionControl, DelayedDelete) );
+ break;
+ default:
+ break;
+ }
+ } // if ( nColId == HANDLE_ID )
+ // run through
+ }
+ default:
+ EditBrowseBox::Command(rEvt);
+ }
+
+}
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::DeleteRows()
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+
+ sal_Bool bIsEditing = IsEditing();
+ if (bIsEditing)
+ {
+ DeactivateCell();
+ }
+ long nIndex = FirstSelectedRow();
+ if (nIndex == -1)
+ {
+ nIndex = GetCurRow();
+ }
+ bool bFirstTime = true;
+
+ long nOldDataPos = nIndex;
+ uno::Sequence< beans::PropertyValue > aArgs(1);
+ aArgs[0].Name = PROPERTY_GROUP;
+ m_bIgnoreEvent = true;
+ while( nIndex >= 0 )
+ {
+ if ( m_aGroupPositions[nIndex] != NO_GROUP )
+ {
+ if ( bFirstTime )
+ {
+ bFirstTime = false;
+ String sUndoAction(ModuleRes(RID_STR_UNDO_REMOVE_SELECTION));
+ m_pParent->m_pController->getUndoMgr()->EnterListAction( sUndoAction, String() );
+ }
+
+ sal_Int32 nGroupPos = m_aGroupPositions[nIndex];
+ uno::Reference< report::XGroup> xGroup = m_pParent->getGroup(nGroupPos);
+ aArgs[0].Value <<= xGroup;
+ // we use this way to create undo actions
+ m_pParent->m_pController->executeChecked(SID_GROUP_REMOVE,aArgs);
+
+ ::std::vector<sal_Int32>::iterator aFind = ::std::find(m_aGroupPositions.begin(),m_aGroupPositions.end(),nGroupPos);
+ *aFind = NO_GROUP;
+ ::std::vector<sal_Int32>::iterator aEnd = m_aGroupPositions.end();
+ for(++aFind;aFind != aEnd;++aFind)
+ if ( *aFind != NO_GROUP )
+ --*aFind;
+ }
+ nIndex = NextSelectedRow();
+ } // while( nIndex >= 0 )
+
+ if ( !bFirstTime )
+ m_pParent->m_pController->getUndoMgr()->LeaveListAction();
+
+ m_nDataPos = GetCurRow();
+ InvalidateStatusCell( nOldDataPos );
+ InvalidateStatusCell( m_nDataPos );
+ ActivateCell();
+ m_pParent->DisplayData( m_nDataPos );
+ m_bIgnoreEvent = false;
+ Invalidate();
+}
+//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::cut()
+{
+ copy();
+ DeleteRows();
+}
+
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::copy()
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+ //////////////////////////////////////////////////////////////////////
+ // set to the right row and save it
+ m_pParent->SaveData( m_nDataPos );
+
+ uno::Sequence<uno::Any> aClipboardList = fillSelectedGroups();
+
+ if( aClipboardList.getLength() )
+ {
+ OGroupExchange* pData = new OGroupExchange(aClipboardList);
+ uno::Reference< ::com::sun::star::datatransfer::XTransferable> xRef = pData;
+ pData->CopyToClipboard(GetParent());
+ }
+}
+
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::paste()
+{
+ TransferableDataHelper aTransferData(TransferableDataHelper::CreateFromSystemClipboard(GetParent()));
+ if(aTransferData.HasFormat(OGroupExchange::getReportGroupId()))
+ {
+ if( m_nPasteEvent )
+ Application::RemoveUserEvent( m_nPasteEvent );
+ m_nPasteEvent = Application::PostUserEvent( LINK(this, OFieldExpressionControl, DelayedPaste) );
+ }
+}
+//------------------------------------------------------------------------------
+IMPL_LINK( OFieldExpressionControl, DelayedPaste, void*, )
+{
+ m_nPasteEvent = 0;
+
+ sal_Int32 nPastePosition = GetSelectRowCount() ? FirstSelectedRow() : GetCurRow();
+
+ InsertRows( nPastePosition );
+ SetNoSelection();
+ GoToRow( nPastePosition );
+
+ return 0;
+}
+//------------------------------------------------------------------------------
+IMPL_LINK( OFieldExpressionControl, DelayedDelete, void*, )
+{
+ m_nDeleteEvent = 0;
+ DeleteRows();
+ return 0;
+}
+//------------------------------------------------------------------------------
+void OFieldExpressionControl::InsertRows( long nRow )
+{
+ DBG_CHKTHIS( rpt_OFieldExpressionControl,NULL);
+
+ sal_Int32 nSize = 0;
+ //////////////////////////////////////////////////////////////////////
+ // get rows from clipboard
+ TransferableDataHelper aTransferData(TransferableDataHelper::CreateFromSystemClipboard(GetParent()));
+ if(aTransferData.HasFormat(OGroupExchange::getReportGroupId()))
+ {
+ datatransfer::DataFlavor aFlavor;
+ SotExchange::GetFormatDataFlavor(OGroupExchange::getReportGroupId(), aFlavor);
+ uno::Sequence< uno::Any > aGroups;
+
+ if( (aTransferData.GetAny(aFlavor) >>= aGroups) && aGroups.getLength() )
+ {
+ m_bIgnoreEvent = false;
+ {
+ String sUndoAction(ModuleRes(RID_STR_UNDO_APPEND_GROUP));
+ UndoManagerListAction aListAction(*m_pParent->m_pController->getUndoMgr(),sUndoAction);
+
+ uno::Reference<report::XGroups> xGroups = m_pParent->getGroups();
+ sal_Int32 nGroupPos = 0;
+ ::std::vector<sal_Int32>::iterator aIter = m_aGroupPositions.begin();
+ ::std::vector<sal_Int32>::size_type nRowPos = static_cast< ::std::vector<sal_Int32>::size_type >(nRow);
+ if ( nRowPos < m_aGroupPositions.size() )
+ {
+ ::std::vector<sal_Int32>::iterator aEnd = m_aGroupPositions.begin() + nRowPos;
+ for(;aIter != aEnd;++aIter)
+ {
+ if ( *aIter != NO_GROUP )
+ nGroupPos = *aIter;
+ }
+ }
+ for(sal_Int32 i=0;i < aGroups.getLength();++i,++nSize)
+ {
+ uno::Sequence< beans::PropertyValue > aArgs(2);
+ aArgs[0].Name = PROPERTY_GROUP;
+ aArgs[0].Value = aGroups[i];
+ aArgs[1].Name = PROPERTY_POSITIONY;
+ aArgs[1].Value <<= nGroupPos;
+ m_pParent->m_pController->executeChecked(SID_GROUP_APPEND,aArgs);
+
+ ::std::vector<sal_Int32>::iterator aInsertPos = m_aGroupPositions.insert(aIter,nGroupPos);
+ ++aInsertPos;
+ aIter = aInsertPos;
+ ::std::vector<sal_Int32>::iterator aEnd = m_aGroupPositions.end();
+ for(;aInsertPos != aEnd;++aInsertPos)
+ if ( *aInsertPos != NO_GROUP )
+ ++*aInsertPos;
+ }
+ }
+ m_bIgnoreEvent = true;
+ }
+ }
+
+ RowInserted( nRow,nSize,sal_True );
+}
+//------------------------------------------------------------------------------
+
+DBG_NAME( rpt_OGroupsSortingDialog )
+//========================================================================
+// class OGroupsSortingDialog
+//========================================================================
+OGroupsSortingDialog::OGroupsSortingDialog( Window* _pParent
+ ,sal_Bool _bReadOnly
+ ,OReportController* _pController)
+ : FloatingWindow( _pParent, ModuleRes(RID_GROUPS_SORTING) )
+ ,OPropertyChangeListener(m_aMutex)
+ ,m_aFL2(this, ModuleRes(FL_SEPARATOR2) )
+ ,m_aMove(this, ModuleRes(FT_MOVELABEL) )
+/*
+ ,m_aPB_Up(this, ModuleRes(PB_UP) )
+ ,m_aPB_Down(this, ModuleRes(PB_DOWN) )
+ ,m_aPB_Delete(this, ModuleRes(PB_DELETE) )
+*/
+ ,m_aToolBox(this, ModuleRes(TB_TOOLBOX) )
+
+ ,m_aFL3(this, ModuleRes(FL_SEPARATOR3) )
+ ,m_aOrder(this, ModuleRes(FT_ORDER) )
+ ,m_aOrderLst(this, ModuleRes(LST_ORDER) )
+ ,m_aHeader(this, ModuleRes(FT_HEADER) )
+ ,m_aHeaderLst(this, ModuleRes(LST_HEADERLST) )
+ ,m_aFooter(this, ModuleRes(FT_FOOTER) )
+ ,m_aFooterLst(this, ModuleRes(LST_FOOTERLST) )
+ ,m_aGroupOn(this, ModuleRes(FT_GROUPON) )
+ ,m_aGroupOnLst(this, ModuleRes(LST_GROUPONLST) )
+ ,m_aGroupInterval(this, ModuleRes(FT_GROUPINTERVAL) )
+ ,m_aGroupIntervalEd(this, ModuleRes(ED_GROUPINTERVALLST) )
+ ,m_aKeepTogether(this, ModuleRes(FT_KEEPTOGETHER) )
+ ,m_aKeepTogetherLst(this, ModuleRes(LST_KEEPTOGETHERLST) )
+ ,m_aFL(this, ModuleRes(FL_SEPARATOR1) )
+ ,m_aHelpWindow(this, ModuleRes(HELP_FIELD) )
+ ,m_pFieldExpression( new OFieldExpressionControl(this,ModuleRes(WND_CONTROL)))
+ ,m_pController(_pController)
+ ,m_pCurrentGroupListener(NULL)
+ ,m_xGroups(m_pController->getReportDefinition()->getGroups())
+ ,m_bReadOnly(_bReadOnly)
+{
+ DBG_CTOR( rpt_OGroupsSortingDialog,NULL);
+
+
+ Control* pControlsLst[] = { &m_aHeaderLst, &m_aFooterLst, &m_aGroupOnLst, &m_aKeepTogetherLst, &m_aOrderLst, &m_aGroupIntervalEd};
+ for (size_t i = 0; i < sizeof(pControlsLst)/sizeof(pControlsLst[0]); ++i)
+ {
+ pControlsLst[i]->SetGetFocusHdl(LINK(this, OGroupsSortingDialog, OnControlFocusGot));
+ pControlsLst[i]->SetLoseFocusHdl(LINK(this, OGroupsSortingDialog, OnControlFocusLost));
+ pControlsLst[i]->Show(TRUE);
+ } // for (int i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+
+ for (size_t i = 0; i < (sizeof(pControlsLst)/sizeof(pControlsLst[0]))-1; ++i)
+ static_cast<ListBox*>(pControlsLst[i])->SetSelectHdl(LINK(this,OGroupsSortingDialog,LBChangeHdl));
+
+ Control* pControls[] = { &m_aHeader, &m_aFooter, &m_aGroupOn, &m_aGroupInterval, &m_aKeepTogether, &m_aOrder
+ , &m_aMove,&m_aFL2};
+ sal_Int32 nMaxTextWidth = 0;
+ MnemonicGenerator aMnemonicGenerator;
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ aMnemonicGenerator.RegisterMnemonic( pControls[i]->GetText() );
+
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ {
+ pControls[i]->Show(TRUE);
+ String sText = pControls[i]->GetText();
+ if ( aMnemonicGenerator.CreateMnemonic(sText) )
+ pControls[i]->SetText(sText);
+ sal_Int32 nTextWidth = GetTextWidth(sText);
+ nMaxTextWidth = ::std::max<sal_Int32>(nTextWidth,nMaxTextWidth);
+ }
+
+ Size aSize(UNRELATED_CONTROLS, PAGE_HEIGHT);
+ Size aSpace = LogicToPixel( aSize, MAP_APPFONT );
+ Size aOutSize(nMaxTextWidth + m_aHeader.GetSizePixel().Width() + 3*aSpace.Width(),aSpace.Height());
+ SetMinOutputSizePixel(aOutSize);
+ SetOutputSizePixel(aOutSize);
+// Resize();
+
+ m_pReportListener = new OPropertyChangeMultiplexer(this,m_pController->getReportDefinition().get());
+ m_pReportListener->addProperty(PROPERTY_COMMAND);
+ m_pReportListener->addProperty(PROPERTY_COMMANDTYPE);
+
+ m_pFieldExpression->lateInit();
+ fillColumns();
+ m_pFieldExpression->Show();
+
+ //m_aHelpWindow.SetReadOnly();
+ m_aHelpWindow.SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );
+ //BTN m_aPB_Up.SetClickHdl(LINK(this,OGroupsSortingDialog,ClickHdl));
+ //BTN m_aPB_Down.SetClickHdl(LINK(this,OGroupsSortingDialog,ClickHdl));
+ //BTN m_aPB_Delete.SetClickHdl(LINK(this,OGroupsSortingDialog,ClickHdl));
+
+ m_pFieldExpression->SetZOrder(&m_aFL2, WINDOW_ZORDER_BEHIND);
+
+ m_aMove.SetZOrder(m_pFieldExpression, WINDOW_ZORDER_BEHIND);
+ //BTN m_aPB_Up.SetZOrder(&m_aMove, WINDOW_ZORDER_BEHIND);
+ //BTN m_aPB_Down.SetZOrder(&m_aPB_Up, WINDOW_ZORDER_BEHIND);
+ // set Hi contrast bitmaps
+ //BTN m_aPB_Up.SetModeImage( ModuleRes(IMG_UP_H),BMP_COLOR_HIGHCONTRAST);
+ //BTN m_aPB_Down.SetModeImage( ModuleRes(IMG_DOWN_H),BMP_COLOR_HIGHCONTRAST);
+ m_aToolBox.SetStyle(m_aToolBox.GetStyle()|WB_LINESPACING);
+ m_aToolBox.SetSelectHdl(LINK(this, OGroupsSortingDialog, OnFormatAction));
+ m_aToolBox.SetImageListProvider(this);
+ setToolBox(&m_aToolBox);
+
+ checkButtons(0);
+ Resize();
+
+ FreeResource();
+}
+
+//------------------------------------------------------------------------
+OGroupsSortingDialog::~OGroupsSortingDialog()
+{
+ DBG_DTOR( rpt_OGroupsSortingDialog,NULL);
+ delete m_pFieldExpression;
+ m_xColumns.clear();
+ m_pReportListener->dispose();
+ if ( m_pCurrentGroupListener.is() )
+ m_pCurrentGroupListener->dispose();
+}
+// -----------------------------------------------------------------------------
+sal_Bool OGroupsSortingDialog::isReadOnly( ) const
+{
+ return m_bReadOnly;
+}
+//------------------------------------------------------------------------------
+void OGroupsSortingDialog::UpdateData( )
+{
+ m_pFieldExpression->Invalidate();
+ long nCurRow = m_pFieldExpression->GetCurRow();
+ m_pFieldExpression->DeactivateCell();
+ m_pFieldExpression->ActivateCell(nCurRow, m_pFieldExpression->GetCurColumnId());
+ DisplayData(nCurRow);
+}
+//------------------------------------------------------------------------------
+void OGroupsSortingDialog::DisplayData( sal_Int32 _nRow )
+{
+ DBG_CHKTHIS( rpt_OGroupsSortingDialog,NULL);
+ sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
+ sal_Bool bEmpty = nGroupPos == NO_GROUP;
+ m_aHeaderLst.Enable(!bEmpty);
+ m_aFooterLst.Enable(!bEmpty);
+ m_aGroupOnLst.Enable(!bEmpty);
+ m_aGroupIntervalEd.Enable(!bEmpty);
+ m_aKeepTogetherLst.Enable(!bEmpty);
+ m_aOrderLst.Enable(!bEmpty);
+
+ m_aFL3.Enable(!bEmpty);
+ m_aHeader.Enable(!bEmpty);
+ m_aFooter.Enable(!bEmpty);
+ m_aGroupOn.Enable(!bEmpty);
+ m_aGroupInterval.Enable(!bEmpty);
+ m_aKeepTogether.Enable(!bEmpty);
+ m_aOrder.Enable(!bEmpty);
+
+ checkButtons(_nRow);
+
+ if ( m_pCurrentGroupListener.is() )
+ m_pCurrentGroupListener->dispose();
+ m_pCurrentGroupListener = NULL;
+ if ( !bEmpty && nGroupPos != NO_GROUP )
+ {
+ uno::Reference< report::XGroup> xGroup = getGroup(nGroupPos);
+
+ m_pCurrentGroupListener = new OPropertyChangeMultiplexer(this,xGroup.get());
+ m_pCurrentGroupListener->addProperty(PROPERTY_HEADERON);
+ m_pCurrentGroupListener->addProperty(PROPERTY_FOOTERON);
+
+ displayGroup(xGroup);
+ }
+}
+//------------------------------------------------------------------------------
+void OGroupsSortingDialog::SaveData( sal_Int32 _nRow)
+{
+ DBG_CHKTHIS( rpt_OGroupsSortingDialog,NULL);
+ sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
+ if ( nGroupPos == NO_GROUP )
+ return;
+
+ uno::Reference< report::XGroup> xGroup = getGroup(nGroupPos);
+ if ( m_aHeaderLst.GetSavedValue() != m_aHeaderLst.GetSelectEntryPos() )
+ xGroup->setHeaderOn( m_aHeaderLst.GetSelectEntryPos() == 0 );
+ if ( m_aFooterLst.GetSavedValue() != m_aFooterLst.GetSelectEntryPos() )
+ xGroup->setFooterOn( m_aFooterLst.GetSelectEntryPos() == 0 );
+ if ( m_aKeepTogetherLst.GetSavedValue() != m_aKeepTogetherLst.GetSelectEntryPos() )
+ xGroup->setKeepTogether( m_aKeepTogetherLst.GetSelectEntryPos() );
+ if ( m_aGroupOnLst.GetSavedValue() != m_aGroupOnLst.GetSelectEntryPos() )
+ {
+ sal_Int16 nGroupOn = static_cast<sal_Int16>(reinterpret_cast<sal_IntPtr>(m_aGroupOnLst.GetEntryData(m_aGroupOnLst.GetSelectEntryPos())));
+ xGroup->setGroupOn( nGroupOn );
+ }
+ if ( m_aGroupIntervalEd.GetSavedValue().ToInt32() != m_aGroupIntervalEd.GetValue() )
+ {
+ xGroup->setGroupInterval( static_cast<sal_Int32>(m_aGroupIntervalEd.GetValue()) );
+ m_aGroupIntervalEd.SaveValue();
+ }
+ if ( m_aOrderLst.GetSavedValue() != m_aOrderLst.GetSelectEntryPos() )
+ xGroup->setSortAscending( m_aOrderLst.GetSelectEntryPos() == 0 );
+
+ ListBox* pControls[] = { &m_aHeaderLst,&m_aFooterLst,&m_aGroupOnLst,&m_aKeepTogetherLst,&m_aOrderLst};
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ pControls[i]->SaveValue();
+}
+
+// -----------------------------------------------------------------------------
+sal_Int32 OGroupsSortingDialog::getColumnDataType(const ::rtl::OUString& _sColumnName)
+{
+ sal_Int32 nDataType = sdbc::DataType::VARCHAR;
+ try
+ {
+ if ( !m_xColumns.is() )
+ fillColumns();
+ if ( m_xColumns.is() && m_xColumns->hasByName(_sColumnName) )
+ {
+ uno::Reference< beans::XPropertySet> xColumn(m_xColumns->getByName(_sColumnName),uno::UNO_QUERY);
+ if ( xColumn.is() )
+ xColumn->getPropertyValue(PROPERTY_TYPE) >>= nDataType;
+ }
+ }
+ catch(uno::Exception&)
+ {
+ OSL_ENSURE(0,"Eception caught while getting the type of a column");
+ }
+
+ return nDataType;
+}
+//------------------------------------------------------------------------------
+IMPL_LINK(OGroupsSortingDialog, OnControlFocusGot, Control*, pControl )
+{
+ if ( m_pFieldExpression && m_pFieldExpression->getExpressionControl() )
+ {
+ Control* pControls[] = { m_pFieldExpression->getExpressionControl(),&m_aHeaderLst,&m_aFooterLst,&m_aGroupOnLst,&m_aGroupIntervalEd,&m_aKeepTogetherLst,&m_aOrderLst};
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ {
+ if ( pControl == pControls[i] )
+ {
+ ListBox* pListBox = dynamic_cast< ListBox* >( pControl );
+ if ( pListBox )
+ pListBox->SaveValue();
+ NumericField* pNumericField = dynamic_cast< NumericField* >( pControl );
+ if ( pNumericField )
+ pNumericField->SaveValue();
+ showHelpText(static_cast<USHORT>(i+STR_RPT_HELP_FIELD));
+ break;
+ }
+ }
+ }
+ return 0L;
+}
+//------------------------------------------------------------------------------
+IMPL_LINK(OGroupsSortingDialog, OnControlFocusLost, Control*, pControl )
+{
+ if ( m_pFieldExpression && pControl == &m_aGroupIntervalEd )
+ {
+ if ( m_aGroupIntervalEd.IsModified() )
+ SaveData(m_pFieldExpression->GetCurRow());
+ }
+ return 0L;
+}
+// -----------------------------------------------------------------------------
+IMPL_LINK( OGroupsSortingDialog, OnFormatAction, ToolBox*, /*NOTINTERESTEDIN*/ )
+// IMPL_LINK( OGroupsSortingDialog, ClickHdl, ImageButton*, _pButton )
+{
+ DBG_CHKTHIS( rpt_OGroupsSortingDialog,NULL);
+
+ USHORT nCommand = m_aToolBox.GetCurItemId();
+
+ if ( m_pFieldExpression )
+ {
+ long nIndex = m_pFieldExpression->GetCurrRow();
+ sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(nIndex);
+ uno::Sequence<uno::Any> aClipboardList;
+ if ( nIndex >= 0 && nGroupPos != NO_GROUP )
+ {
+ aClipboardList.realloc(1);
+ aClipboardList[0] = m_xGroups->getByIndex(nGroupPos);
+ }
+ //BTN if ( _pButton == &m_aPB_Up )
+ if ( nCommand == SID_RPT_GROUPSORT_MOVE_UP )
+ {
+ --nIndex;
+ }
+ //BTN if ( _pButton == &m_aPB_Down )
+ if ( nCommand == SID_RPT_GROUPSORT_MOVE_DOWN )
+ {
+ ++nIndex;
+ }
+ //BTN if ( _pButton == &m_aPB_Delete )
+ if ( nCommand == SID_RPT_GROUPSORT_DELETE )
+ {
+ // m_pFieldExpression->DeleteCurrentRow();
+ Application::PostUserEvent( LINK(m_pFieldExpression, OFieldExpressionControl, DelayedDelete) );
+ // UpdateData( );
+ }
+ else
+ {
+ if ( nIndex >= 0 && aClipboardList.getLength() )
+ {
+ m_pFieldExpression->SetNoSelection();
+ m_pFieldExpression->moveGroups(aClipboardList,nIndex,sal_False);
+ m_pFieldExpression->DeactivateCell();
+ m_pFieldExpression->GoToRow(nIndex);
+ //long nCurRow = m_pFieldExpression->GetCurRow();
+ m_pFieldExpression->ActivateCell(nIndex, m_pFieldExpression->GetCurColumnId());
+ DisplayData(nIndex);
+ }
+ }
+ }
+ return 1L;
+}
+// -----------------------------------------------------------------------------
+IMPL_LINK( OGroupsSortingDialog, LBChangeHdl, ListBox*, pListBox )
+{
+ DBG_CHKTHIS( rpt_OGroupsSortingDialog,NULL);
+ if ( pListBox->GetSavedValue() != pListBox->GetSelectEntryPos() )
+ {
+ sal_Int32 nRow = m_pFieldExpression->GetCurRow();
+ sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(nRow);
+ if ( pListBox != &m_aHeaderLst && pListBox != &m_aFooterLst)
+ {
+ if ( pListBox && pListBox->GetSavedValue() != pListBox->GetSelectEntryPos() )
+ SaveData(nRow);
+ if ( pListBox == &m_aGroupOnLst )
+ m_aGroupIntervalEd.Enable( pListBox->GetSelectEntryPos() != 0 );
+ }
+ else if ( nGroupPos != NO_GROUP )
+ {
+ uno::Reference< report::XGroup> xGroup = getGroup(nGroupPos);
+ uno::Sequence< beans::PropertyValue > aArgs(2);
+ aArgs[1].Name = PROPERTY_GROUP;
+ aArgs[1].Value <<= xGroup;
+
+ if ( &m_aHeaderLst == pListBox )
+ aArgs[0].Name = PROPERTY_HEADERON;
+ else
+ aArgs[0].Name = PROPERTY_FOOTERON;
+
+ aArgs[0].Value <<= pListBox->GetSelectEntryPos() == 0;
+ m_pController->executeChecked(&m_aHeaderLst == pListBox ? SID_GROUPHEADER : SID_GROUPFOOTER,aArgs);
+ if ( m_pFieldExpression )
+ m_pFieldExpression->InvalidateHandleColumn();
+ }
+ }
+ return 1L;
+}
+// -----------------------------------------------------------------------------
+void OGroupsSortingDialog::showHelpText(USHORT _nResId)
+{
+ m_aHelpWindow.SetText(String(ModuleRes(_nResId)));
+}
+// -----------------------------------------------------------------------------
+void OGroupsSortingDialog::_propertyChanged(const beans::PropertyChangeEvent& _rEvent) throw( uno::RuntimeException)
+{
+ uno::Reference< report::XGroup > xGroup(_rEvent.Source,uno::UNO_QUERY);
+ if ( xGroup.is() )
+ displayGroup(xGroup);
+ else
+ fillColumns();
+}
+// -----------------------------------------------------------------------------
+void OGroupsSortingDialog::fillColumns()
+{
+ m_xColumns = m_pController->getColumns();
+ m_pFieldExpression->fillColumns(m_xColumns);
+}
+// -----------------------------------------------------------------------------
+void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _xGroup)
+{
+ m_aHeaderLst.SelectEntryPos(_xGroup->getHeaderOn() ? 0 : 1 );
+ m_aFooterLst.SelectEntryPos(_xGroup->getFooterOn() ? 0 : 1 );
+ sal_Int32 nDataType = getColumnDataType(_xGroup->getExpression());
+
+ // first clear whole group on list
+ while(m_aGroupOnLst.GetEntryCount() > 1 )
+ {
+ m_aGroupOnLst.RemoveEntry(1);
+ }
+
+ switch(nDataType)
+ {
+ case sdbc::DataType::LONGVARCHAR:
+ case sdbc::DataType::VARCHAR:
+ case sdbc::DataType::CHAR:
+ m_aGroupOnLst.InsertEntry(String(ModuleRes(STR_RPT_PREFIXCHARS)));
+ m_aGroupOnLst.SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::PREFIX_CHARACTERS));
+ break;
+ case sdbc::DataType::DATE:
+ case sdbc::DataType::TIME:
+ case sdbc::DataType::TIMESTAMP:
+ {
+ USHORT nIds[] = { STR_RPT_YEAR, STR_RPT_QUARTER,STR_RPT_MONTH,STR_RPT_WEEK,STR_RPT_DAY,STR_RPT_HOUR,STR_RPT_MINUTE };
+ for (USHORT i = 0; i < sizeof(nIds)/sizeof(nIds[0]); ++i)
+ {
+ m_aGroupOnLst.InsertEntry(String(ModuleRes(nIds[i])));
+ m_aGroupOnLst.SetEntryData(i+1,reinterpret_cast<void*>(i+2));
+ }
+ }
+ break;
+ default:
+ m_aGroupOnLst.InsertEntry(String(ModuleRes(STR_RPT_INTERVAL)));
+ m_aGroupOnLst.SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::INTERVAL));
+ break;
+ } // switch(nDataType)
+ USHORT nPos = 0;
+ switch(_xGroup->getGroupOn())
+ {
+ case report::GroupOn::DEFAULT:
+ nPos = 0;
+ break;
+ case report::GroupOn::PREFIX_CHARACTERS:
+ nPos = 1;
+ break;
+ case report::GroupOn::YEAR:
+ nPos = 1;
+ break;
+ case report::GroupOn::QUARTAL:
+ nPos = 2;
+ break;
+ case report::GroupOn::MONTH:
+ nPos = 3;
+ break;
+ case report::GroupOn::WEEK:
+ nPos = 4;
+ break;
+ case report::GroupOn::DAY:
+ nPos = 5;
+ break;
+ case report::GroupOn::HOUR:
+ nPos = 6;
+ break;
+ case report::GroupOn::MINUTE:
+ nPos = 7;
+ break;
+ case report::GroupOn::INTERVAL:
+ nPos = 1;
+ break;
+ default:
+ nPos = 0;
+ }
+ m_aGroupOnLst.SelectEntryPos(nPos);
+ m_aGroupIntervalEd.SetText(String::CreateFromInt32(_xGroup->getGroupInterval()));
+ m_aGroupIntervalEd.SaveValue();
+ m_aGroupIntervalEd.Enable( nPos != 0 );
+ m_aKeepTogetherLst.SelectEntryPos(_xGroup->getKeepTogether());
+ m_aOrderLst.SelectEntryPos(_xGroup->getSortAscending() ? 0 : 1);
+
+ ListBox* pControls[] = { &m_aHeaderLst,&m_aFooterLst,&m_aGroupOnLst,&m_aKeepTogetherLst,&m_aOrderLst};
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ pControls[i]->SaveValue();
+
+ ListBox* pControlsLst2[] = { &m_aHeaderLst, &m_aFooterLst, &m_aGroupOnLst, &m_aKeepTogetherLst,&m_aOrderLst};
+ sal_Bool bReadOnly = !m_pController->isEditable();
+ for (size_t i = 0; i < sizeof(pControlsLst2)/sizeof(pControlsLst2[0]); ++i)
+ pControlsLst2[i]->SetReadOnly(bReadOnly);
+ m_aGroupIntervalEd.SetReadOnly(bReadOnly);
+}
+//------------------------------------------------------------------------------
+void OGroupsSortingDialog::Resize()
+{
+ Window::Resize();
+ Size aTotalOutputSize = GetOutputSizePixel();
+ Size aSpace = LogicToPixel( Size( UNRELATED_CONTROLS, UNRELATED_CONTROLS ), MAP_APPFONT );
+ m_pFieldExpression->SetSizePixel(Size(aTotalOutputSize.Width() - 2*aSpace.Width(),m_pFieldExpression->GetSizePixel().Height()));
+
+ Control* pControlsLst[] = { &m_aHeaderLst, &m_aFooterLst, &m_aGroupOnLst, &m_aGroupIntervalEd,&m_aKeepTogetherLst,&m_aOrderLst};
+ Control* pControls[] = { &m_aHeader, &m_aFooter, &m_aGroupOn, &m_aGroupInterval, &m_aKeepTogether, &m_aOrder};
+ sal_Int32 nMaxTextWidth = 0;
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ {
+ nMaxTextWidth = ::std::max<sal_Int32>(static_cast<sal_Int32>(GetTextWidth(pControls[i]->GetText())),nMaxTextWidth);
+ } // for (int i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+
+ // aTotalOutputSize.Width() - m_aHeaderLst.GetSizePixel().Width() - 3*aSpace.Width()
+ for (size_t i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+ {
+ pControls[i]->SetSizePixel(Size(nMaxTextWidth,pControls[i]->GetSizePixel().Height()));
+ Point aPos = pControls[i]->GetPosPixel();
+ aPos.X() += nMaxTextWidth + aSpace.Width();
+ aPos.Y() = pControlsLst[i]->GetPosPixel().Y();
+
+ pControlsLst[i]->SetPosSizePixel(aPos,Size(aTotalOutputSize.Width() - aPos.X() - aSpace.Width(),pControlsLst[i]->GetSizePixel().Height()));
+ } // for (int i = 0; i < sizeof(pControls)/sizeof(pControls[0]); ++i)
+
+ m_aFL.SetSizePixel(Size(aTotalOutputSize.Width() - aSpace.Width(),m_aFL.GetSizePixel().Height()));
+ m_aFL2.SetSizePixel(Size(aTotalOutputSize.Width() - aSpace.Width(),m_aFL2.GetSizePixel().Height()));
+ m_aFL3.SetSizePixel(Size(aTotalOutputSize.Width() - aSpace.Width(),m_aFL3.GetSizePixel().Height()));
+
+//BTN sal_Int32 nPos = aTotalOutputSize.Width() - aSpace.Width() - m_aPB_Up.GetSizePixel().Width();
+//BTN m_aPB_Delete.SetPosPixel(Point(nPos,m_aPB_Delete.GetPosPixel().Y()));
+//BTN
+//BTN nPos -= (m_aPB_Up.GetSizePixel().Width() + LogicToPixel( Size( UNRELATED_CONTROLS, 0 ), MAP_APPFONT ).Width());
+//BTN m_aPB_Down.SetPosPixel(Point(nPos,m_aPB_Down.GetPosPixel().Y()));
+//BTN
+//BTN nPos -= (m_aPB_Up.GetSizePixel().Width() + LogicToPixel( Size( RELATED_CONTROLS, 0 ), MAP_APPFONT ).Width());
+//BTN m_aPB_Up.SetPosPixel(Point(nPos,m_aPB_Up.GetPosPixel().Y()));
+ sal_Int32 nPos = aTotalOutputSize.Width() - aSpace.Width() - m_aToolBox.GetSizePixel().Width();
+ m_aToolBox.SetPosPixel(Point(nPos,m_aToolBox.GetPosPixel().Y()));
+
+ Point aHelpPos = m_aHelpWindow.GetPosPixel();
+ m_aHelpWindow.SetSizePixel(Size(aTotalOutputSize.Width() - aHelpPos.X(),aTotalOutputSize.Height() - aHelpPos.Y()));
+}
+//------------------------------------------------------------------------------
+void OGroupsSortingDialog::checkButtons(sal_Int32 _nRow)
+{
+ sal_Int32 nGroupCount = m_xGroups->getCount();
+ sal_Int32 nRowCount = m_pFieldExpression->GetRowCount();
+ sal_Bool bEnabled = nGroupCount > 1;
+
+ if (bEnabled && _nRow > 0 /* && _nRow < nGroupCount */ )
+ {
+ m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_UP, sal_True);
+ }
+ else
+ {
+ m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_UP, sal_False);
+ }
+ if (bEnabled && _nRow < (nRowCount - 1) /* && _nRow < (nGroupCount - 1) */ )
+ {
+ m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_DOWN, sal_True);
+ }
+ else
+ {
+ m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_DOWN, sal_False);
+ }
+ //BTN m_aPB_Up.Enable(bEnable && _nRow > 0 );
+ //BTN m_aPB_Down.Enable(bEnable && _nRow < (m_pFieldExpression->GetRowCount()-1) );
+ // m_aToolBox.EnableItem(SID_RPT_GROUPSORT_MOVE_DOWN, bEnable && _nRow < (-1) );
+
+ sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
+ if ( nGroupPos != NO_GROUP )
+ {
+ sal_Bool bEnableDelete = nGroupCount > 0;
+ //BTN m_aPB_Delete.Enable(bEnableDelete );
+ m_aToolBox.EnableItem(SID_RPT_GROUPSORT_DELETE, bEnableDelete);
+ }
+ else
+ {
+ //BTN m_aPB_Delete.Enable( sal_False );
+ m_aToolBox.EnableItem(SID_RPT_GROUPSORT_DELETE, sal_False);
+ }
+}
+
+ImageList OGroupsSortingDialog::getImageList(sal_Int16 _eBitmapSet,sal_Bool _bHiContast) const
+{
+ sal_Int16 nN = IMG_CONDFORMAT_DLG_SC;
+ sal_Int16 nH = IMG_CONDFORMAT_DLG_SCH;
+ if ( _eBitmapSet == SFX_SYMBOLS_SIZE_LARGE )
+ {
+ nN = IMG_CONDFORMAT_DLG_LC;
+ nH = IMG_CONDFORMAT_DLG_LCH;
+ }
+ return ImageList(ModuleRes( _bHiContast ? nH : nN ));
+}
+
+//------------------------------------------------------------------
+void OGroupsSortingDialog::resizeControls(const Size& _rDiff)
+{
+ // we use large images so we must change them
+ if ( _rDiff.Width() || _rDiff.Height() )
+ {
+ Point aPos = LogicToPixel( Point( 2*RELATED_CONTROLS , 0), MAP_APPFONT );
+ Invalidate();
+ }
+}
+
+//------------------------------------------------------------------
+// load the images
+ImageList OGroupsSortingDialog::getImageList(vcl::ImageListType _eType) SAL_THROW (( com::sun::star::lang::IllegalArgumentException ))
+{
+ if (_eType == vcl::HIGHCONTRAST_NO)
+ {
+ return ImageList(ModuleRes(IMGLST_GROUPSORT_DLG_SC));
+ }
+ else if (_eType == vcl::HIGHCONTRAST_YES)
+ {
+ return ImageList(ModuleRes(IMGLST_GROUPSORT_DLG_SCH));
+ }
+ else
+ {
+ throw com::sun::star::lang::IllegalArgumentException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("High contrast parameter is wrong.")), NULL, 0);
+ }
+}
+
+
+
+// =============================================================================
+} // rptui
+// =============================================================================