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