xref: /AOO41X/main/dbaccess/source/ui/browser/dsEntriesNoExp.cxx (revision 96de54900b79e13b861fbc62cbf36018b54e21b7)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_dbaccess.hxx"
26 
27 #ifndef _SBA_UNODATBR_HXX_
28 #include "unodatbr.hxx"
29 #endif
30 #ifndef DBACCESS_UI_BROWSER_ID_HXX
31 #include "browserids.hxx"
32 #endif
33 #ifndef _DBAUI_LISTVIEWITEMS_HXX_
34 #include "listviewitems.hxx"
35 #endif
36 #ifndef DBACCESS_IMAGEPROVIDER_HXX
37 #include "imageprovider.hxx"
38 #endif
39 #ifndef _TOOLS_DEBUG_HXX
40 #include <tools/debug.hxx>
41 #endif
42 #ifndef DBACCESS_UI_DBTREEVIEW_HXX
43 #include "dbtreeview.hxx"
44 #endif
45 #ifndef DBAUI_DBTREELISTBOX_HXX
46 #include "dbtreelistbox.hxx"
47 #endif
48 #ifndef _DBU_BRW_HRC_
49 #include "dbu_brw.hrc"
50 #endif
51 #ifndef DBAUI_DBTREEMODEL_HXX
52 #include "dbtreemodel.hxx"
53 #endif
54 
55 using namespace ::com::sun::star::frame;
56 using namespace ::dbtools;
57 using namespace ::svx;
58 
59 // .........................................................................
60 namespace dbaui
61 {
62 // .........................................................................
63 // -----------------------------------------------------------------------------
getChildType(SvLBoxEntry * _pEntry) const64 SbaTableQueryBrowser::EntryType SbaTableQueryBrowser::getChildType( SvLBoxEntry* _pEntry ) const
65 {
66     DBG_ASSERT(isContainer(_pEntry), "SbaTableQueryBrowser::getChildType: invalid entry!");
67     switch (getEntryType(_pEntry))
68     {
69         case etTableContainer:
70             return etTableOrView;
71         case etQueryContainer:
72             return etQuery;
73         default:
74             break;
75     }
76     return etUnknown;
77 }
78 
79 // -----------------------------------------------------------------------------
GetEntryText(SvLBoxEntry * _pEntry) const80 String SbaTableQueryBrowser::GetEntryText( SvLBoxEntry* _pEntry ) const
81 {
82     return m_pTreeView->getListBox().GetEntryText(_pEntry);
83 }
84 
85 // -----------------------------------------------------------------------------
getEntryType(SvLBoxEntry * _pEntry) const86 SbaTableQueryBrowser::EntryType SbaTableQueryBrowser::getEntryType( SvLBoxEntry* _pEntry ) const
87 {
88     if (!_pEntry)
89         return etUnknown;
90 
91     SvLBoxEntry* pRootEntry     = m_pTreeView->getListBox().GetRootLevelParent(_pEntry);
92     SvLBoxEntry* pEntryParent   = m_pTreeView->getListBox().GetParent(_pEntry);
93     SvLBoxEntry* pTables        = m_pTreeView->getListBox().GetEntry(pRootEntry, CONTAINER_TABLES);
94     SvLBoxEntry* pQueries       = m_pTreeView->getListBox().GetEntry(pRootEntry, CONTAINER_QUERIES);
95 
96 #ifdef DBG_UTIL
97     String sTest;
98     if (pTables) sTest = m_pTreeView->getListBox().GetEntryText(pTables);
99     if (pQueries) sTest = m_pTreeView->getListBox().GetEntryText(pQueries);
100 #endif
101 
102     if (pRootEntry == _pEntry)
103         return etDatasource;
104 
105     if (pTables == _pEntry)
106         return etTableContainer;
107 
108     if (pQueries == _pEntry)
109         return etQueryContainer;
110 
111     if (pTables == pEntryParent)
112         return etTableOrView;
113 
114     if (pQueries == pEntryParent)
115     {
116         DBTreeListUserData* pEntryData = static_cast<DBTreeListUserData*>(_pEntry->GetUserData());
117         if ( pEntryData )
118             return pEntryData->eType;
119 
120         return etQuery;
121     }
122     while( pEntryParent != pQueries )
123     {
124         pEntryParent = m_pTreeView->getListBox().GetParent(pEntryParent);
125         if ( !pEntryParent )
126             return etUnknown;
127     }
128 
129     return etQueryContainer;
130 }
131 //------------------------------------------------------------------------------
select(SvLBoxEntry * _pEntry,sal_Bool _bSelect)132 void SbaTableQueryBrowser::select(SvLBoxEntry* _pEntry, sal_Bool _bSelect)
133 {
134     SvLBoxItem* pTextItem = _pEntry ? _pEntry->GetFirstItem(SV_ITEM_ID_BOLDLBSTRING) : NULL;
135     if (pTextItem)
136     {
137         static_cast<OBoldListboxString*>(pTextItem)->emphasize(_bSelect);
138         m_pTreeModel->InvalidateEntry(_pEntry);
139     }
140     else {
141         DBG_ERROR("SbaTableQueryBrowser::select: invalid entry!");
142     }
143 }
144 
145 //------------------------------------------------------------------------------
selectPath(SvLBoxEntry * _pEntry,sal_Bool _bSelect)146 void SbaTableQueryBrowser::selectPath(SvLBoxEntry* _pEntry, sal_Bool _bSelect)
147 {
148     while (_pEntry)
149     {
150         select(_pEntry, _bSelect);
151         _pEntry = m_pTreeModel->GetParent(_pEntry);
152     }
153 }
154 //------------------------------------------------------------------------------
isSelected(SvLBoxEntry * _pEntry) const155 sal_Bool SbaTableQueryBrowser::isSelected(SvLBoxEntry* _pEntry) const
156 {
157     SvLBoxItem* pTextItem = _pEntry ? _pEntry->GetFirstItem(SV_ITEM_ID_BOLDLBSTRING) : NULL;
158     if (pTextItem)
159         return static_cast<OBoldListboxString*>(pTextItem)->isEmphasized();
160     else {
161         DBG_ERROR("SbaTableQueryBrowser::isSelected: invalid entry!");
162     }
163     return sal_False;
164 }
165 //------------------------------------------------------------------------------
SelectionChanged()166 void SbaTableQueryBrowser::SelectionChanged()
167 {
168     if ( !m_bShowMenu )
169     {
170         InvalidateFeature(ID_BROWSER_INSERTCOLUMNS);
171         InvalidateFeature(ID_BROWSER_INSERTCONTENT);
172         InvalidateFeature(ID_BROWSER_FORMLETTER);
173     } // if ( !m_bShowMenu )
174     InvalidateFeature(ID_BROWSER_COPY);
175     InvalidateFeature(ID_BROWSER_CUT);
176 }
177 //------------------------------------------------------------------------------
describeSupportedFeatures()178 void SbaTableQueryBrowser::describeSupportedFeatures()
179 {
180     SbaXDataBrowserController::describeSupportedFeatures();
181 
182     implDescribeSupportedFeature( ".uno:Title",                             ID_BROWSER_TITLE );
183     if ( !m_bShowMenu )
184     {
185         implDescribeSupportedFeature( ".uno:DSBrowserExplorer",                 ID_BROWSER_EXPLORER, CommandGroup::VIEW );
186 
187         implDescribeSupportedFeature( ".uno:DSBFormLetter",                     ID_BROWSER_FORMLETTER, CommandGroup::DOCUMENT );
188         implDescribeSupportedFeature( ".uno:DSBInsertColumns",                  ID_BROWSER_INSERTCOLUMNS, CommandGroup::INSERT );
189         implDescribeSupportedFeature( ".uno:DSBInsertContent",                  ID_BROWSER_INSERTCONTENT, CommandGroup::INSERT );
190         implDescribeSupportedFeature( ".uno:DSBDocumentDataSource",             ID_BROWSER_DOCUMENT_DATASOURCE, CommandGroup::VIEW );
191 
192         implDescribeSupportedFeature( ".uno:DataSourceBrowser/FormLetter",          ID_BROWSER_FORMLETTER );
193         implDescribeSupportedFeature( ".uno:DataSourceBrowser/InsertColumns",       ID_BROWSER_INSERTCOLUMNS );
194         implDescribeSupportedFeature( ".uno:DataSourceBrowser/InsertContent",       ID_BROWSER_INSERTCONTENT );
195         implDescribeSupportedFeature( ".uno:DataSourceBrowser/DocumentDataSource",  ID_BROWSER_DOCUMENT_DATASOURCE );
196     }
197 
198     implDescribeSupportedFeature( ".uno:CloseWin",      ID_BROWSER_CLOSE, CommandGroup::DOCUMENT );
199     implDescribeSupportedFeature( ".uno:DBRebuildData", ID_BROWSER_REFRESH_REBUILD, CommandGroup::DATA );
200 }
201 
202 // -----------------------------------------------------------------------------
getDatabaseObjectType(EntryType _eType)203 sal_Int32 SbaTableQueryBrowser::getDatabaseObjectType( EntryType _eType )
204 {
205     switch ( _eType )
206     {
207     case etQuery:
208     case etQueryContainer:
209         return DatabaseObject::QUERY;
210     case etTableOrView:
211     case etTableContainer:
212         return DatabaseObject::TABLE;
213     default:
214         break;
215     }
216     OSL_ENSURE( false, "SbaTableQueryBrowser::getDatabaseObjectType: folder types and 'Unknown' not allowed here!" );
217     return DatabaseObject::TABLE;
218 }
219 
220 // -----------------------------------------------------------------------------
notifyHiContrastChanged()221 void SbaTableQueryBrowser::notifyHiContrastChanged()
222 {
223     if ( m_pTreeView )
224     {
225         // change all bitmap entries
226         SvLBoxEntry* pEntryLoop = m_pTreeModel->First();
227         while ( pEntryLoop )
228         {
229             DBTreeListUserData* pData = static_cast<DBTreeListUserData*>(pEntryLoop->GetUserData());
230             if ( !pData )
231             {
232                 pEntryLoop = m_pTreeModel->Next(pEntryLoop);
233                 continue;
234             }
235 
236             // the connection to which this entry belongs, if any
237             ::std::auto_ptr< ImageProvider > pImageProvider( getImageProviderFor( pEntryLoop ) );
238 
239             // the images for this entry
240             Image aImage, aImageHC;
241             if ( pData->eType == etDatasource )
242             {
243                 aImage = pImageProvider->getDatabaseImage( false );
244                 aImageHC = pImageProvider->getDatabaseImage( true );
245             }
246             else
247             {
248                 bool bIsFolder = !isObject( pData->eType );
249                 if ( bIsFolder )
250                 {
251                     sal_Int32 nObjectType( getDatabaseObjectType( pData->eType ) );
252                     aImage = pImageProvider->getFolderImage( nObjectType, false );
253                     aImageHC = pImageProvider->getFolderImage( nObjectType, true );
254                 }
255                 else
256                 {
257                     sal_Int32 nObjectType( getDatabaseObjectType( pData->eType ) );
258                     pImageProvider->getImages( GetEntryText( pEntryLoop ), nObjectType, aImage, aImageHC );
259                 }
260             }
261 
262             // find the proper item, and set its icons
263             sal_uInt16 nCount = pEntryLoop->ItemCount();
264             for (sal_uInt16 i=0;i<nCount;++i)
265             {
266                 SvLBoxItem* pItem = pEntryLoop->GetItem(i);
267                 if ( !pItem || ( pItem->IsA() != SV_ITEM_ID_LBOXCONTEXTBMP ) )
268                     continue;
269 
270                 SvLBoxContextBmp* pContextBitmapItem = static_cast< SvLBoxContextBmp* >( pItem );
271 
272                 pContextBitmapItem->SetBitmap1( aImage, BMP_COLOR_NORMAL );
273                 pContextBitmapItem->SetBitmap2( aImage, BMP_COLOR_NORMAL );
274                 pContextBitmapItem->SetBitmap1( aImageHC, BMP_COLOR_HIGHCONTRAST );
275                 pContextBitmapItem->SetBitmap2( aImageHC, BMP_COLOR_HIGHCONTRAST );
276                 break;
277             }
278 
279             pEntryLoop = m_pTreeModel->Next(pEntryLoop);
280         }
281     }
282 }
283 // -----------------------------------------------------------------------------
284 // .........................................................................
285 }   // namespace dbaui
286 // .........................................................................
287 
288