User: kz Date: 2006/10/05 06:02:47 Modified: dba/dbaccess/source/ui/browser/unodatbr.cxx
Log: INTEGRATION: CWS hsqlcsvstage1 (1.179.2); FILE MERGED 2006/09/20 11:43:57 fs 1.179.2.1: #i69696#, being stage 1 of issue #i69526#: merging changes from CWS hsqlcsv herein File Changes: Directory: /dba/dbaccess/source/ui/browser/ =========================================== File [changed]: unodatbr.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/browser/unodatbr.cxx?r1=1.179&r2=1.180 Delta lines: +63 -68 --------------------- --- unodatbr.cxx 17 Sep 2006 06:59:27 -0000 1.179 +++ unodatbr.cxx 5 Oct 2006 13:02:44 -0000 1.180 @@ -48,6 +48,9 @@ #ifndef _SBA_GRID_HXX #include "sbagrid.hxx" #endif +#ifndef DBACCESS_IMAGEPROVIDER_HXX +#include "imageprovider.hxx" +#endif #ifndef _SVTREEBOX_HXX #include <svtools/svtreebx.hxx> #endif @@ -416,7 +419,6 @@ ,m_nAsyncDrop(0) ,m_nBorder(1) ,m_bQueryEscapeProcessing( sal_False ) - ,m_bHiContrast(sal_False) ,m_bShowMenu(sal_False) ,m_bInSuspend(sal_False) ,m_bEnableBrowser(sal_True) @@ -550,8 +552,6 @@ m_pTreeView->getListBox()->setControlActionListener(this); m_pTreeView->SetHelpId(HID_CTL_TREEVIEW); - m_bHiContrast = isHiContrast(); - // a default pos for the splitter, so that the listbox is about 80 (logical) pixels wide m_pSplitter->SetSplitPosPixel( getBrowserView()->LogicToPixel( Size( 80, 0 ), MAP_APPFONT ).Width() ); @@ -1991,13 +1991,14 @@ if (!_rTableName.Len()) _rTableName = String(ModuleRes(RID_STR_TABLES_CONTAINER)); + ImageProvider aImageProvider; if (!_rQueryImage) - _rQueryImage = Image(ModuleRes( DBTreeListModel::getImageResId(etQueryContainer,isHiContrast()) )); + _rQueryImage = aImageProvider.getFolderImage( DatabaseObject::QUERY, isHiContrast() ); if (!_rTableImage) - _rTableImage = Image(ModuleRes( DBTreeListModel::getImageResId(etTableContainer,isHiContrast()) )); + _rTableImage = aImageProvider.getFolderImage( DatabaseObject::TABLE, isHiContrast() ); if (!_rDbImage) - _rDbImage = Image(ModuleRes( DBTreeListModel::getImageResId(etDatasource,isHiContrast()) )); + _rDbImage = aImageProvider.getDatabaseImage( isHiContrast() ); // add the entry for the data source // special handling for data sources denoted by URLs - we do not want to display this ugly URL, do we? @@ -2050,15 +2051,12 @@ // ------------------------------------------------------------------------- sal_Bool SbaTableQueryBrowser::populateTree(const Reference<XNameAccess>& _xNameAccess, SvLBoxEntry* _pParent, - const EntryType& _rEntryType) + EntryType _eEntryType) { DBTreeListModel::DBTreeListUserData* pData = static_cast<DBTreeListModel::DBTreeListUserData*>(_pParent->GetUserData()); if(pData) // don't ask if the nameaccess is already set see OnExpandEntry views and tables pData->xContainer = _xNameAccess; - ModuleRes aResId(DBTreeListModel::getImageResId(_rEntryType,isHiContrast())); - Image aImage(aResId); - try { Sequence< ::rtl::OUString > aNames = _xNameAccess->getElementNames(); @@ -2069,8 +2067,8 @@ if(!m_pTreeView->getListBox()->GetEntryPosByName(*pIter,_pParent)) { DBTreeListModel::DBTreeListUserData* pEntryData = new DBTreeListModel::DBTreeListUserData; - pEntryData->eType = _rEntryType; - m_pTreeView->getListBox()->InsertEntry(*pIter, aImage, aImage, _pParent, sal_False,LIST_APPEND,pEntryData); + pEntryData->eType = _eEntryType; + implAppendEntry( _pParent, *pIter, pEntryData, _eEntryType ); } } } @@ -2081,6 +2079,23 @@ } return sal_True; } + +//------------------------------------------------------------------------------ +void SbaTableQueryBrowser::implAppendEntry( SvLBoxEntry* _pParent, const String& _rName, void* _pUserData, EntryType _eEntryType ) +{ + ::std::auto_ptr< ImageProvider > pImageProvider( getImageProviderFor( _pParent ) ); + + Image aImage( pImageProvider->getImage( _rName, getDatabaseObjectType( _eEntryType ), false ) ); + Image aImageHC( pImageProvider->getImage( _rName, getDatabaseObjectType( _eEntryType ), true ) ); + + SvLBoxEntry* pNewEntry = m_pTreeView->getListBox()->InsertEntry( _rName, _pParent, sal_False, LIST_APPEND, _pUserData ); + + m_pTreeView->getListBox()->SetExpandedEntryBmp( pNewEntry, aImage, BMP_COLOR_NORMAL ); + m_pTreeView->getListBox()->SetCollapsedEntryBmp( pNewEntry, aImage, BMP_COLOR_NORMAL ); + m_pTreeView->getListBox()->SetExpandedEntryBmp( pNewEntry, aImageHC, BMP_COLOR_HIGHCONTRAST ); + m_pTreeView->getListBox()->SetCollapsedEntryBmp( pNewEntry, aImageHC, BMP_COLOR_HIGHCONTRAST ); +} + //------------------------------------------------------------------------------ IMPL_LINK(SbaTableQueryBrowser, OnExpandEntry, SvLBoxEntry*, _pParent) { @@ -2122,12 +2137,12 @@ // the nameaccess will be overwriten in populateTree Reference<XViewsSupplier> xViewSup(xConnection,UNO_QUERY); if(xViewSup.is()) - populateTree(xViewSup->getViews(),_pParent,etView); + populateTree( xViewSup->getViews(), _pParent, etTableOrView ); Reference<XTablesSupplier> xTabSup(xConnection,UNO_QUERY); if(xTabSup.is()) { - populateTree(xTabSup->getTables(),_pParent,etTable); + populateTree( xTabSup->getTables(), _pParent, etTableOrView ); Reference<XContainer> xCont(xTabSup->getTables(),UNO_QUERY); if(xCont.is()) // add as listener to know when elements are inserted or removed @@ -2396,9 +2411,8 @@ DBTreeListModel::DBTreeListUserData* pEntryData = static_cast<DBTreeListModel::DBTreeListUserData*>(_pEntry->GetUserData()); switch (pEntryData->eType) { - case etTable: + case etTableOrView: case etQuery: - case etView: break; default: // nothing to do @@ -2624,32 +2638,12 @@ DBTreeListModel::DBTreeListUserData* pContainerData = static_cast<DBTreeListModel::DBTreeListUserData*>(pEntry->GetUserData()); OSL_ENSURE(pContainerData, "elementInserted: There must be user data for this type!"); + DBTreeListModel::DBTreeListUserData* pNewData = new DBTreeListModel::DBTreeListUserData; sal_Bool bIsTable = etTableContainer == pContainerData->eType; - if (bIsTable) + if ( bIsTable ) { - // only insert userdata when we have a table because the query is only a commanddefinition object and not a query - DBTreeListModel::DBTreeListUserData* pNewData = new DBTreeListModel::DBTreeListUserData; - _rEvent.Element >>= pNewData->xObjectProperties;// remember the new element - // now we have to check which type we have here - ::rtl::OUString sType; - if ( pNewData->xObjectProperties->getPropertySetInfo()->hasPropertyByName( PROPERTY_TYPE ) ) - pNewData->xObjectProperties->getPropertyValue(PROPERTY_TYPE) >>= sType; - if(sType.getLength() && sType == ::rtl::OUString::createFromAscii("VIEW")) - pNewData->eType = etView; - else - pNewData->eType = etTable; - - sal_uInt16 nImageResId = DBTreeListModel::getImageResId(pNewData->eType,isHiContrast()); - - Image aImage = Image(ModuleRes(nImageResId)); - m_pTreeView->getListBox()->InsertEntry(::comphelper::getString(_rEvent.Accessor), - aImage, - aImage, - pEntry, - sal_False, - LIST_APPEND, - pNewData); + pNewData->eType = etTableOrView; } else { @@ -2659,23 +2653,9 @@ // now that it has all items populateTree(xNames, pEntry, etQuery ); } - else - { - DBTreeListModel::DBTreeListUserData* pNewData = new DBTreeListModel::DBTreeListUserData; - // _rEvent.Element >>= pNewData->xObjectProperties;// remember the new element pNewData->eType = etQuery; - - sal_uInt16 nImageResId = DBTreeListModel::getImageResId(pNewData->eType,isHiContrast()); - Image aImage = Image(ModuleRes(nImageResId)); - m_pTreeView->getListBox()->InsertEntry(::comphelper::getString(_rEvent.Accessor), - aImage, - aImage, - pEntry, - sal_False, - LIST_APPEND, - pNewData); - } } + implAppendEntry( pEntry, ::comphelper::getString( _rEvent.Accessor ), pNewData, pNewData->eType ); } else if (xNames.get() == m_xDatabaseContext.get()) { // a new datasource has been added to the context @@ -2830,7 +2810,7 @@ DBTreeListModel::DBTreeListUserData* pData = static_cast<DBTreeListModel::DBTreeListUserData*>(pTemp->GetUserData()); if (pData) { - if (etTable == pData->eType || etView == pData->eType) + if ( etTableOrView == pData->eType ) { // only insert userdata when we have a table because the query is only a commanddefinition object and not a query _rEvent.Element >>= pData->xObjectProperties; // remember the new element } @@ -2852,7 +2832,7 @@ DBTreeListModel::DBTreeListUserData* pData = static_cast<DBTreeListModel::DBTreeListUserData*>(pChild->GetUserData()); if (pData) { - if (etTable == pData->eType || etView == pData->eType) + if ( etTableOrView == pData->eType ) { // only insert userdata when we have a table because the query is only a commanddefinition object and not a query _rEvent.Element >>= pData->xObjectProperties; // remember the new element } @@ -3256,6 +3236,29 @@ } // ----------------------------------------------------------------------------- +::std::auto_ptr< ImageProvider > SbaTableQueryBrowser::getImageProviderFor( SvLBoxEntry* _pAnyEntry ) +{ + ::std::auto_ptr< ImageProvider > pImageProvider( new ImageProvider ); + SharedConnection xConnection; + if ( getExistentConnectionFor( _pAnyEntry, xConnection ) ) + pImageProvider.reset( new ImageProvider( xConnection ) ); + return pImageProvider; +} + +// ----------------------------------------------------------------------------- +sal_Bool SbaTableQueryBrowser::getExistentConnectionFor( SvLBoxEntry* _pAnyEntry, SharedConnection& _rConnection ) +{ + SvLBoxEntry* pDSEntry = m_pTreeView->getListBox()->GetRootLevelParent( _pAnyEntry ); + DBTreeListModel::DBTreeListUserData* pDSData = + pDSEntry + ? static_cast< DBTreeListModel::DBTreeListUserData* >( pDSEntry->GetUserData() ) + : NULL; + if ( pDSData ) + _rConnection = pDSData->xConnection; + return _rConnection.is(); +} + +// ----------------------------------------------------------------------------- bool SbaTableQueryBrowser::impl_isDataSourceEntry( SvLBoxEntry* _pEntry ) const { return m_pTreeModel->GetRootLevelParent( _pEntry ) == _pEntry; @@ -3529,19 +3532,11 @@ switch (eType) { - // 1. for tables + // 1. for tables/views case etTableContainer: - case etTable: + case etTableOrView: { - aContextMenu.EnableItem(SID_COPY, etTable == eType); - } - break; - // 2. for views - case etView: - { - // 2.3 actions on existing tables - aContextMenu.EnableItem(SID_COPY, sal_True); - + aContextMenu.EnableItem( SID_COPY, etTableOrView == eType ); } break; --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
