2000-10-05 09:09:48 +00:00
/*************************************************************************
*
* $ RCSfile : tabletree . cxx , v $
*
2001-08-28 07:21:51 +00:00
* $ Revision : 1.19 $
2000-10-05 09:09:48 +00:00
*
2001-08-28 07:21:51 +00:00
* last change : $ Author : fs $ $ Date : 2001 - 08 - 28 08 : 21 : 51 $
2000-10-05 09:09:48 +00:00
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc . , October , 2000
*
* GNU Lesser General Public License Version 2.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* Copyright 2000 by Sun Microsystems , Inc .
* 901 San Antonio Road , Palo Alto , CA 94303 , USA
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 , as published by the Free Software Foundation .
*
* This library 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 for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston ,
* MA 02111 - 1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 ( the " License " ) ; You may not use this file
* except in compliance with the License . You may obtain a copy of the
* License at http : //www.openoffice.org/license.html.
*
* Software provided under this License is provided on an " AS IS " basis ,
* WITHOUT WARRANTY OF ANY KIND , EITHER EXPRESS OR IMPLIED , INCLUDING ,
* WITHOUT LIMITATION , WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS ,
* MERCHANTABLE , FIT FOR A PARTICULAR PURPOSE , OR NON - INFRINGING .
* See the License for the specific provisions governing your rights and
* obligations concerning the Software .
*
* The Initial Developer of the Original Code is : Sun Microsystems , Inc . .
*
* Copyright : 2000 by Sun Microsystems , Inc .
*
* All Rights Reserved .
*
* Contributor ( s ) : _______________________________________
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# ifndef _DBAUI_TABLETREE_HXX_
# include "tabletree.hxx"
# endif
# ifndef _DBAUI_TABLETREE_HRC_
# include "tabletree.hrc"
# endif
# ifndef _DBAUI_MODULE_DBU_HXX_
# include "moduledbu.hxx"
# endif
# ifndef _DBU_RESOURCE_HRC_
# include "dbu_resource.hrc"
# endif
# ifndef _SV_MENU_HXX
# include <vcl/menu.hxx>
# endif
# ifndef _CONNECTIVITY_DBTOOLS_HXX_
# include <connectivity/dbtools.hxx>
# endif
2000-10-30 14:37:48 +00:00
# ifndef _COMPHELPER_TYPES_HXX_
# include <comphelper/types.hxx>
# endif
2000-10-26 13:55:04 +00:00
# ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
# include "dbustrings.hrc"
2000-10-05 09:09:48 +00:00
# endif
# ifndef _COM_SUN_STAR_SDBC_XDRIVERACCESS_HPP_
# include <com/sun/star/sdbc/XDriverAccess.hpp>
# endif
# ifndef _COM_SUN_STAR_SDBCX_XDATADEFINITIONSUPPLIER_HPP_
# include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp>
# endif
# ifndef _COM_SUN_STAR_SDBCX_XVIEWSSUPPLIER_HPP_
# include <com/sun/star/sdbcx/XViewsSupplier.hpp>
# endif
# ifndef _COM_SUN_STAR_SDBCX_XTABLESSUPPLIER_HPP_
# include <com/sun/star/sdbcx/XTablesSupplier.hpp>
# endif
2000-10-26 13:55:04 +00:00
# ifndef _COM_SUN_STAR_SDB_SQLCONTEXT_HPP_
# include <com/sun/star/sdb/SQLContext.hpp>
# endif
2000-10-30 14:37:48 +00:00
# ifndef _COM_SUN_STAR_SDBC_XROW_HPP_
# include <com/sun/star/sdbc/XRow.hpp>
# endif
# ifndef _DBAUI_COMMON_TYPES_HXX_
# include "commontypes.hxx"
# endif
2001-01-30 07:29:43 +00:00
# ifndef _DBAUI_LISTVIEWITEMS_HXX_
# include "listviewitems.hxx"
# endif
2000-10-05 09:09:48 +00:00
//.........................................................................
namespace dbaui
{
//.........................................................................
using namespace : : com : : sun : : star : : uno ;
using namespace : : com : : sun : : star : : sdb ;
using namespace : : com : : sun : : star : : lang ;
using namespace : : com : : sun : : star : : sdbc ;
using namespace : : com : : sun : : star : : sdbcx ;
using namespace : : com : : sun : : star : : beans ;
using namespace : : com : : sun : : star : : container ;
using namespace : : dbtools ;
2000-10-30 14:37:48 +00:00
using namespace : : comphelper ;
2000-10-05 09:09:48 +00:00
//========================================================================
//= OTableTreeListBox
//========================================================================
2001-08-14 11:13:53 +00:00
OTableTreeListBox : : OTableTreeListBox ( Window * pParent , WinBits nWinStyle , sal_Bool _bVirtualRoot )
2000-10-05 09:09:48 +00:00
: OMarkableTreeListBox ( pParent , nWinStyle )
, m_aTableImage ( ResId ( TABLE_TREE_ICON ) )
, m_aViewImage ( ResId ( VIEW_TREE_ICON ) )
2001-08-14 11:13:53 +00:00
, m_bVirtualRoot ( _bVirtualRoot )
2000-10-05 09:09:48 +00:00
{
SetDefaultExpandedEntryBmp ( Image ( ModuleRes ( TABLEFOLDER_TREE_ICON ) ) ) ;
SetDefaultCollapsedEntryBmp ( Image ( ModuleRes ( TABLEFOLDER_TREE_ICON ) ) ) ;
}
//------------------------------------------------------------------------
2001-08-14 11:13:53 +00:00
OTableTreeListBox : : OTableTreeListBox ( Window * pParent , const ResId & rResId , sal_Bool _bVirtualRoot )
2000-10-05 09:09:48 +00:00
: OMarkableTreeListBox ( pParent , rResId )
, m_aTableImage ( ModuleRes ( TABLE_TREE_ICON ) )
, m_aViewImage ( ModuleRes ( VIEW_TREE_ICON ) )
2001-08-14 11:13:53 +00:00
, m_bVirtualRoot ( _bVirtualRoot )
2000-10-05 09:09:48 +00:00
{
SetDefaultExpandedEntryBmp ( Image ( ModuleRes ( TABLEFOLDER_TREE_ICON ) ) ) ;
SetDefaultCollapsedEntryBmp ( Image ( ModuleRes ( TABLEFOLDER_TREE_ICON ) ) ) ;
}
//------------------------------------------------------------------------
void OTableTreeListBox : : Command ( const CommandEvent & rEvt )
{
sal_Bool bHandled = sal_False ;
switch ( rEvt . GetCommand ( ) )
{
case COMMAND_CONTEXTMENU :
{
// die Stelle, an der geklickt wurde
Point ptWhere ;
if ( rEvt . IsMouseEvent ( ) )
{
ptWhere = rEvt . GetMousePosPixel ( ) ;
SvLBoxEntry * ptClickedOn = GetEntry ( ptWhere ) ;
if ( ptClickedOn = = NULL )
break ;
if ( ! IsSelected ( ptClickedOn ) )
{
SelectAll ( sal_False ) ;
Select ( ptClickedOn , sal_True ) ;
SetCurEntry ( ptClickedOn ) ;
}
}
else
ptWhere = GetEntryPos ( GetCurEntry ( ) ) ;
SvLBoxEntry * pCurrent = GetCurEntry ( ) ;
if ( ! pCurrent )
break ;
SvSortMode eSortMode = GetModel ( ) - > GetSortMode ( ) ;
PopupMenu aContextMenu ( ModuleRes ( MENU_TABLETREE_POPUP ) ) ;
switch ( aContextMenu . Execute ( this , ptWhere ) )
{
case MID_SORT_ASCENDING :
GetModel ( ) - > SetSortMode ( SortAscending ) ;
break ;
case MID_SORT_DECENDING :
GetModel ( ) - > SetSortMode ( SortDescending ) ;
break ;
}
if ( eSortMode ! = GetModel ( ) - > GetSortMode ( ) )
GetModel ( ) - > Resort ( ) ;
}
break ;
default :
SvTreeListBox : : Command ( rEvt ) ;
}
}
//------------------------------------------------------------------------
2001-08-28 07:21:51 +00:00
Reference < XConnection > OTableTreeListBox : : UpdateTableList ( const : : rtl : : OUString & _rConnectionURL ,
const Sequence < PropertyValue > _rProperties , Reference < XDriver > & _rxCreator ) throw ( SQLException )
2000-10-05 09:09:48 +00:00
{
Reference < XDatabaseMetaData > xMetaData ;
Reference < XConnection > xConnection ;
2001-08-28 07:21:51 +00:00
_rxCreator . clear ( ) ;
2000-10-05 09:09:48 +00:00
2000-10-30 14:37:48 +00:00
Sequence < : : rtl : : OUString > sTables , sViews ;
2000-10-05 09:09:48 +00:00
DBG_ASSERT ( m_xORB . is ( ) , " OTableTreeListBox::UpdateTableList : please use setServiceFactory to give me a service factory ! " ) ;
String sCurrentActionError ;
2000-10-09 11:36:50 +00:00
String sCurrentActionDetails ;
2000-10-05 09:09:48 +00:00
try
{
if ( m_xORB . is ( ) )
{
// get the global DriverManager
Reference < XDriverAccess > xDriverManager ;
sCurrentActionError = String ( ModuleRes ( STR_COULDNOTCREATE_DRIVERMANAGER ) ) ;
// in case an error occures
2001-05-15 10:25:48 +00:00
sCurrentActionError . SearchAndReplaceAscii ( " #servicename# " , ( : : rtl : : OUString ) SERVICE_SDBC_CONNECTIONPOOL ) ;
2000-10-05 09:09:48 +00:00
try
{
2001-05-15 10:25:48 +00:00
xDriverManager = Reference < XDriverAccess > ( m_xORB - > createInstance ( SERVICE_SDBC_CONNECTIONPOOL ) , UNO_QUERY ) ;
2000-10-05 09:09:48 +00:00
DBG_ASSERT ( xDriverManager . is ( ) , " OTableTreeListBox::UpdateTableList : could not instantiate the driver manager, or it does not provide the necessary interface! " ) ;
}
catch ( Exception & e )
{
// wrap the exception into an SQLException
SQLException aSQLWrapper ( e . Message , m_xORB , : : rtl : : OUString ( RTL_CONSTASCII_USTRINGPARAM ( " S1000 " ) ) , 0 , Any ( ) ) ;
throw aSQLWrapper ;
}
if ( ! xDriverManager . is ( ) )
throw Exception ( ) ;
sCurrentActionError = String ( ModuleRes ( STR_NOREGISTEREDDRIVER ) ) ;
2001-08-28 07:21:51 +00:00
_rxCreator = xDriverManager - > getDriverByURL ( _rConnectionURL ) ;
if ( ! _rxCreator . is ( ) )
2000-10-05 09:09:48 +00:00
// will be caught and translated into an SQLContext exception
throw Exception ( ) ;
2000-10-09 11:36:50 +00:00
sCurrentActionError = String ( ModuleRes ( STR_COULDNOTCONNECT ) ) ;
sCurrentActionDetails = String ( ModuleRes ( STR_COULDNOTCONNECT_PLEASECHECK ) ) ;
2001-08-28 07:21:51 +00:00
xConnection = _rxCreator - > connect ( _rConnectionURL , _rProperties ) ;
2000-10-09 11:36:50 +00:00
// exceptions thrown by connect will be caught and re-routed
DBG_ASSERT ( xConnection . is ( ) , " OTableTreeListBox::UpdateTableList : got an invalid connection! " ) ;
// if no exception was thrown, the connection should be no-NULL)
if ( ! xConnection . is ( ) )
throw Exception ( ) ;
sCurrentActionDetails = String ( ) ;
xMetaData = xConnection - > getMetaData ( ) ;
2000-10-30 14:37:48 +00:00
// get the (very necessary) interface XDataDefinitionSupplier
2001-08-28 07:21:51 +00:00
Reference < XDataDefinitionSupplier > xDefinitionAccess ( _rxCreator , UNO_QUERY ) ;
2000-10-30 14:37:48 +00:00
if ( ! xDefinitionAccess . is ( ) )
{
// okay, the driver's programmer was lazy :)
// let's do it on foot .... (ask the meta data for a result set describing the tables)
Reference < XResultSet > xTables ;
2000-10-09 11:36:50 +00:00
2000-10-30 14:37:48 +00:00
static const : : rtl : : OUString s_sTableTypeView ( RTL_CONSTASCII_USTRINGPARAM ( " VIEW " ) ) ;
2001-06-05 11:39:45 +00:00
static const : : rtl : : OUString s_sTableTypeTable ( RTL_CONSTASCII_USTRINGPARAM ( " TABLE " ) ) ;
2000-10-09 11:36:50 +00:00
2000-10-30 14:37:48 +00:00
if ( xMetaData . is ( ) )
{
// we want all catalogues, all schemas, all tables
2001-06-05 11:39:45 +00:00
Sequence < : : rtl : : OUString > sTableTypes ( 3 ) ;
static const : : rtl : : OUString sWildcard = : : rtl : : OUString : : createFromAscii ( " % " ) ;
sTableTypes [ 0 ] = s_sTableTypeView ;
sTableTypes [ 1 ] = s_sTableTypeTable ;
sTableTypes [ 2 ] = sWildcard ; // just to be sure to include anything else ....
2001-05-22 05:31:30 +00:00
2001-06-05 11:39:45 +00:00
xTables = xMetaData - > getTables ( Any ( ) , sWildcard , sWildcard , sTableTypes ) ;
2000-10-30 14:37:48 +00:00
}
Reference < XRow > xCurrentRow ( xTables , UNO_QUERY ) ;
if ( xCurrentRow . is ( ) )
{
StringBag aTableNames , aViewNames ;
: : rtl : : OUString sCatalog , sSchema , sName , sType , sComposedName ;
while ( xTables - > next ( ) )
{
// after creation the set is positioned before the first record, per definitionem
sCatalog = xCurrentRow - > getString ( 1 ) ;
sSchema = xCurrentRow - > getString ( 2 ) ;
sName = xCurrentRow - > getString ( 3 ) ;
sType = xCurrentRow - > getString ( 4 ) ;
2001-02-23 14:16:28 +00:00
: : dbtools : : composeTableName ( xMetaData , sCatalog , sSchema , sName , sComposedName , sal_False ) ;
2000-10-30 14:37:48 +00:00
if ( s_sTableTypeView . equals ( sType ) )
aViewNames . insert ( sComposedName ) ;
else
aTableNames . insert ( sComposedName ) ;
}
// copy the names into the sequence
// tables
sTables . realloc ( aTableNames . size ( ) ) ;
: : rtl : : OUString * pTables = sTables . getArray ( ) ;
ConstStringBagIterator aCopy = aTableNames . begin ( ) ;
for ( ; aCopy ! = aTableNames . end ( ) ; + + aCopy , + + pTables )
* pTables = * aCopy ;
// views
sViews . realloc ( aViewNames . size ( ) ) ;
pTables = sViews . getArray ( ) ;
for ( aCopy = aViewNames . begin ( ) ; aCopy ! = aViewNames . end ( ) ; + + aCopy , + + pTables )
* pTables = * aCopy ;
}
disposeComponent ( xTables ) ;
}
else
{
Reference < XTablesSupplier > xTableSupp ;
Reference < XViewsSupplier > xViewSupp ;
sCurrentActionError = String ( ModuleRes ( STR_NOTABLEINFO ) ) ;
// get the table supplier and the tables
xTableSupp = xDefinitionAccess - > getDataDefinitionByConnection ( xConnection ) ;
if ( ! xTableSupp . is ( ) )
throw Exception ( ) ;
Reference < XNameAccess > xTables , xViews ;
xTables = xTableSupp - > getTables ( ) ;
// get the views supplier and the views
xViewSupp = Reference < XViewsSupplier > ( xTableSupp , UNO_QUERY ) ;
if ( xViewSupp . is ( ) )
xViews = xViewSupp - > getViews ( ) ;
if ( xTables . is ( ) )
sTables = xTables - > getElementNames ( ) ;
if ( xViews . is ( ) )
sViews = xViews - > getElementNames ( ) ;
}
2000-10-05 09:09:48 +00:00
}
}
catch ( RuntimeException & )
{
DBG_ERROR ( " OTableTreeListBox::UpdateTableList : caught an RuntimeException! " ) ;
}
catch ( SQLException & e )
{
sCurrentActionError . SearchAndReplaceAscii ( " #connurl# " , _rConnectionURL ) ;
// prepend a string stating what we were doing and throw again
2000-10-09 11:36:50 +00:00
SQLContext aExtendedInfo = prependContextInfo ( e , NULL , sCurrentActionError . GetBuffer ( ) , sCurrentActionDetails . GetBuffer ( ) ) ;
2000-10-05 09:09:48 +00:00
throw aExtendedInfo ;
}
catch ( Exception & )
{
sCurrentActionError . SearchAndReplaceAscii ( " #connurl# " , _rConnectionURL ) ;
// a non-SQLException exception occured ... simply throw an SQLContext
SQLContext aExtendedInfo ;
aExtendedInfo . Message = sCurrentActionError . GetBuffer ( ) ;
throw aExtendedInfo ;
}
2000-10-30 14:37:48 +00:00
UpdateTableList ( xMetaData , sTables , sViews ) ;
2000-10-05 09:09:48 +00:00
return xConnection ;
}
//------------------------------------------------------------------------
2000-10-30 14:37:48 +00:00
void OTableTreeListBox : : UpdateTableList ( const Reference < XDatabaseMetaData > & _rxConnMetaData , const Sequence < : : rtl : : OUString > & _rTables , const Sequence < : : rtl : : OUString > & _rViews )
2000-10-05 09:09:48 +00:00
{
// throw away all the old stuff
Clear ( ) ;
try
{
2001-01-30 07:29:43 +00:00
// the root entry saying "all objects"
2001-02-05 13:45:04 +00:00
SvLBoxEntry * pAllObjects = NULL ;
2001-08-14 11:13:53 +00:00
if ( haveVirtualRoot ( ) )
2001-02-05 13:45:04 +00:00
{
String sRootEntryText ;
if ( ! _rViews . getLength ( ) )
sRootEntryText = String ( ModuleRes ( STR_ALL_TABLES ) ) ;
else if ( ! _rTables . getLength ( ) )
sRootEntryText = String ( ModuleRes ( STR_ALL_VIEWS ) ) ;
else
sRootEntryText = String ( ModuleRes ( STR_ALL_TABLES_AND_VIEWS ) ) ;
pAllObjects = InsertEntry ( sRootEntryText ) ;
}
2001-01-30 07:29:43 +00:00
2001-06-25 08:05:56 +00:00
if ( ! _rTables . getLength ( ) & & ! _rViews . getLength ( ) )
// nothing to do (besides inserting the root entry)
return ;
2000-10-05 09:09:48 +00:00
// get the table/view names
const : : rtl : : OUString * pTables = NULL ;
const : : rtl : : OUString * pViews = NULL ;
2001-03-29 07:06:35 +00:00
if ( _rTables . getLength ( ) )
pTables = _rTables . getConstArray ( ) ;
if ( _rViews . getLength ( ) )
pViews = _rViews . getConstArray ( ) ;
2000-10-05 09:09:48 +00:00
2001-03-29 06:09:53 +00:00
// loop through both sequences first the vies and than the tables
const : : rtl : : OUString * pSwitchSequences = ( pTables & & pViews ) ? pViews + _rViews . getLength ( ) - 1 : NULL ;
2000-10-05 09:09:48 +00:00
2000-10-30 14:37:48 +00:00
sal_Int32 nOverallLen = _rTables . getLength ( ) + _rViews . getLength ( ) ;
2001-03-29 06:09:53 +00:00
const : : rtl : : OUString * pCurrentTable = pViews ? pViews : pTables ; // currently handled view or table name
sal_Bool bIsView = pViews ? sal_True : sal_False ; // pCurrentTable points to a view name ?
2000-10-05 09:09:48 +00:00
for ( sal_Int32 i = 0 ;
i < nOverallLen ;
+ + i // inc the counter
, ( pSwitchSequences = = pCurrentTable // did we reached the last table ?
2001-03-29 06:09:53 +00:00
? bIsView = ! ( ( pCurrentTable = pTables ) ! = NULL ) // yes -> continue with the views, and set bIsView to sal_True
2000-10-05 09:09:48 +00:00
: + + pCurrentTable ! = NULL // no -> next table
) // (!= NULL is to make this a boolean expression, so it should work under SUNPRO5, too)
)
{
2001-08-14 11:13:53 +00:00
// add the entry
implAddEntry (
_rxConnMetaData ,
* pCurrentTable ,
bIsView ? m_aViewImage : m_aTableImage ,
pAllObjects
) ;
2000-10-05 09:09:48 +00:00
}
}
catch ( RuntimeException & )
{
DBG_ERROR ( " OTableTreeListBox::UpdateTableList : caught a RuntimeException! " ) ;
}
}
2001-01-30 07:29:43 +00:00
//------------------------------------------------------------------------
sal_Bool OTableTreeListBox : : isWildcardChecked ( SvLBoxEntry * _pEntry ) const
{
if ( _pEntry )
{
OBoldListboxString * pTextItem = static_cast < OBoldListboxString * > ( _pEntry - > GetFirstItem ( SV_ITEM_ID_BOLDLBSTRING ) ) ;
if ( pTextItem )
return pTextItem - > isEmphasized ( ) ;
}
return sal_False ;
}
//------------------------------------------------------------------------
void OTableTreeListBox : : checkWildcard ( SvLBoxEntry * _pEntry )
{
SetCheckButtonState ( _pEntry , SV_BUTTON_CHECKED ) ;
checkedButton_noBroadcast ( _pEntry ) ;
}
//------------------------------------------------------------------------
SvLBoxEntry * OTableTreeListBox : : getAllObjectsEntry ( ) const
{
2001-08-14 11:13:53 +00:00
return haveVirtualRoot ( ) ? First ( ) : NULL ;
2001-01-30 07:29:43 +00:00
}
//------------------------------------------------------------------------
void OTableTreeListBox : : checkedButton_noBroadcast ( SvLBoxEntry * _pEntry )
{
OMarkableTreeListBox : : checkedButton_noBroadcast ( _pEntry ) ;
// if an entry has children, it makes a difference if the entry is checked because alls children are checked
// or if the user checked it explicitly.
// So we track explicit (un)checking
SvButtonState eState = GetCheckButtonState ( _pEntry ) ;
DBG_ASSERT ( SV_BUTTON_TRISTATE ! = eState , " OTableTreeListBox::CheckButtonHdl: user action which lead to TRISTATE? " ) ;
implEmphasize ( _pEntry , SV_BUTTON_CHECKED = = eState ) ;
}
//------------------------------------------------------------------------
2001-06-05 11:39:45 +00:00
void OTableTreeListBox : : implEmphasize ( SvLBoxEntry * _pEntry , sal_Bool _bChecked , sal_Bool _bUpdateDescendants , sal_Bool _bUpdateAncestors )
2001-01-30 07:29:43 +00:00
{
DBG_ASSERT ( _pEntry , " OTableTreeListBox::implEmphasize: invalid entry (NULL)! " ) ;
2001-07-16 14:43:24 +00:00
// special emphasizing handling for the "all objects" entry
// 89709 - 16.07.2001 - frank.schoenheit@sun.com
2001-08-14 11:13:53 +00:00
sal_Bool bAllObjectsEntryAffected = haveVirtualRoot ( ) & & ( getAllObjectsEntry ( ) = = _pEntry ) ;
2001-07-16 14:43:24 +00:00
if ( GetModel ( ) - > HasChilds ( _pEntry ) // the entry has children
| | bAllObjectsEntryAffected // or it is the "all objects" entry
)
2001-01-30 07:29:43 +00:00
{
OBoldListboxString * pTextItem = static_cast < OBoldListboxString * > ( _pEntry - > GetFirstItem ( SV_ITEM_ID_BOLDLBSTRING ) ) ;
if ( pTextItem )
pTextItem - > emphasize ( _bChecked ) ;
2001-07-16 14:43:24 +00:00
if ( bAllObjectsEntryAffected )
InvalidateEntry ( _pEntry ) ;
2001-01-30 07:29:43 +00:00
}
2001-06-05 11:39:45 +00:00
if ( _bUpdateDescendants )
2001-01-30 07:29:43 +00:00
{
// remove the mark for all children of the checked entry
SvLBoxEntry * pChildLoop = FirstChild ( _pEntry ) ;
while ( pChildLoop )
{
if ( GetModel ( ) - > HasChilds ( pChildLoop ) )
2001-06-05 11:39:45 +00:00
implEmphasize ( pChildLoop , sal_False , sal_True , sal_False ) ;
2001-01-30 07:29:43 +00:00
pChildLoop = NextSibling ( pChildLoop ) ;
}
2001-06-05 11:39:45 +00:00
}
if ( _bUpdateAncestors )
{
2001-01-30 07:29:43 +00:00
// remove the mark for all ancestors of the entry
if ( GetModel ( ) - > HasParent ( _pEntry ) )
2001-06-05 11:39:45 +00:00
implEmphasize ( GetParent ( _pEntry ) , sal_False , sal_False , sal_True ) ;
2001-01-30 07:29:43 +00:00
}
}
//------------------------------------------------------------------------
void OTableTreeListBox : : InitEntry ( SvLBoxEntry * _pEntry , const XubString & _rString , const Image & _rCollapsedBitmap , const Image & _rExpandedBitmap )
{
OMarkableTreeListBox : : InitEntry ( _pEntry , _rString , _rCollapsedBitmap , _rExpandedBitmap ) ;
// replace the text item with our own one
SvLBoxItem * pTextItem = _pEntry - > GetFirstItem ( SV_ITEM_ID_LBOXSTRING ) ;
DBG_ASSERT ( pTextItem , " OTableTreeListBox::InitEntry: no text item!? " ) ;
sal_uInt16 nTextPos = _pEntry - > GetPos ( pTextItem ) ;
DBG_ASSERT ( ( ( sal_uInt16 ) - 1 ) ! = nTextPos , " OTableTreeListBox::InitEntry: no text item pos! " ) ;
_pEntry - > ReplaceItem ( new OBoldListboxString ( _pEntry , 0 , _rString ) , nTextPos ) ;
}
2001-08-14 11:13:53 +00:00
//------------------------------------------------------------------------
void OTableTreeListBox : : implAddEntry (
const Reference < XDatabaseMetaData > & _rxConnMetaData ,
const : : rtl : : OUString & _rTableName ,
const Image & _rImage ,
SvLBoxEntry * _pParentEntry
)
{
// split the complete name into it's components
: : rtl : : OUString sCatalog , sSchema , sName ;
qualifiedNameComponents ( _rxConnMetaData , _rTableName , sCatalog , sSchema , sName ) ;
SvLBoxEntry * pCat = NULL ;
SvLBoxEntry * pSchema = NULL ;
if ( sCatalog . getLength ( ) )
{
pCat = GetEntryPosByName ( sCatalog , _pParentEntry ) ;
if ( ! pCat )
pCat = InsertEntry ( sCatalog , _pParentEntry ) ;
_pParentEntry = pCat ;
}
if ( sSchema . getLength ( ) )
{
pSchema = GetEntryPosByName ( sSchema , _pParentEntry ) ;
if ( ! pSchema )
pSchema = InsertEntry ( sSchema , _pParentEntry ) ;
_pParentEntry = pSchema ;
}
if ( ! GetEntryPosByName ( sName , _pParentEntry ) )
InsertEntry ( sName , _rImage , _rImage , _pParentEntry ) ;
}
//------------------------------------------------------------------------
void OTableTreeListBox : : addedTable ( const Reference < XConnection > & _rxConn , const : : rtl : : OUString & _rName , const Any & _rObject )
{
try
{
// get the connection meta data
Reference < XDatabaseMetaData > xMeta ;
if ( _rxConn . is ( ) ) xMeta = _rxConn - > getMetaData ( ) ;
if ( ! xMeta . is ( ) )
{
DBG_ERROR ( " OTableTreeListBox::addedTable: invalid connection! " ) ;
return ;
}
// add the entry
implAddEntry ( xMeta , _rName , m_aTableImage , getAllObjectsEntry ( ) ) ;
// TODO: the image
}
catch ( const Exception & )
{
DBG_ERROR ( " OTableTreeListBox::addedTable: caught an exception! " ) ;
}
}
//------------------------------------------------------------------------
void OTableTreeListBox : : removedTable ( const Reference < XConnection > & _rxConn , const : : rtl : : OUString & _rName )
{
try
{
// get the connection meta data
Reference < XDatabaseMetaData > xMeta ;
if ( _rxConn . is ( ) ) xMeta = _rxConn - > getMetaData ( ) ;
if ( ! xMeta . is ( ) )
{
DBG_ERROR ( " OTableTreeListBox::removedTable: invalid connection! " ) ;
return ;
}
// TODO
}
catch ( const Exception & )
{
DBG_ERROR ( " OTableTreeListBox::removedTable: caught an exception! " ) ;
}
}
2000-10-05 09:09:48 +00:00
//.........................................................................
} // namespace dbaui
//.........................................................................
/*************************************************************************
* history :
* $ Log : not supported by cvs2svn $
2001-08-28 07:21:51 +00:00
* Revision 1.18 2001 / 08 / 14 14 : 13 : 33 fs
* # 86945 # removed the tables container parameter from UpdateTableList
*
2001-08-14 13:13:33 +00:00
* Revision 1.17 2001 / 08 / 14 12 : 13 : 53 fs
* preparations for # 86945 #
*
2001-08-14 11:13:53 +00:00
* Revision 1.16 2001 / 07 / 16 15 : 43 : 24 fs
* # 89709 # special emphasizing handling for the ' all objects ' entry
*
2001-07-16 14:43:24 +00:00
* Revision 1.15 2001 / 06 / 25 09 : 05 : 56 fs
* # 88417 # insert the ' all object ' entry even if there currently are no objects
*
2001-06-25 08:05:56 +00:00
* Revision 1.14 2001 / 06 / 05 12 : 39 : 45 fs
* # 87680 # implEmphasize corrected / # 87771 # UpdateTableList : ask for VIEW , TABLE and
*
2001-06-05 11:39:45 +00:00
* Revision 1.13 2001 / 05 / 22 06 : 31 : 30 oj
* # 87081 # show all tabletypes
*
2001-05-22 05:31:30 +00:00
* Revision 1.12 2001 / 05 / 15 11 : 25 : 48 fs
* # 86996 # use the connection pool instead of the driver manager
*
2001-05-15 10:25:48 +00:00
* Revision 1.11 2001 / 03 / 29 08 : 06 : 35 oj
* only assign array when length ! = 0
*
2001-03-29 07:06:35 +00:00
* Revision 1.10 2001 / 03 / 29 07 : 09 : 53 oj
* show views the correct way
*
2001-03-29 06:09:53 +00:00
* Revision 1.9 2001 / 02 / 23 15 : 16 : 28 oj
* use namespace
*
2001-02-23 14:16:28 +00:00
* Revision 1.8 2001 / 02 / 05 14 : 44 : 53 oj
* new member for hiding first entry
*
2001-02-05 13:45:04 +00:00
* Revision 1.7 2001 / 01 / 30 08 : 29 : 43 fs
* ' wildcard checking '
*
2001-01-30 07:29:43 +00:00
* Revision 1.6 2001 / 01 / 15 10 : 55 : 43 oj
* wrong image for table used
*
2001-01-15 09:55:43 +00:00
* Revision 1.5 2000 / 10 / 30 15 : 37 : 48 fs
* # 79816 # no need for a XDataDefinitionSupplier anymore - collect table / view names from the meta data
*
2000-10-30 14:37:48 +00:00
* Revision 1.4 2000 / 10 / 26 14 : 55 : 04 oj
* local strings for dll
*
2000-10-26 13:55:04 +00:00
* Revision 1.3 2000 / 10 / 13 16 : 02 : 21 fs
* typo in error message
*
2000-10-13 15:02:21 +00:00
* Revision 1.2 2000 / 10 / 09 12 : 36 : 50 fs
* reinserted the code for connecting in UpdateTableList
*
2000-10-09 11:36:50 +00:00
* Revision 1.1 2000 / 10 / 05 10 : 00 : 59 fs
* initial checkin
*
2000-10-05 09:09:48 +00:00
*
* Revision 1.0 28.09 .00 13 : 32 : 32 fs
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */