1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* 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.
*
************************************************************************/
#ifndef DBAUI_APPDETAILVIEW_HXX
#define DBAUI_APPDETAILVIEW_HXX
#include <com/sun/star/frame/XController.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/ucb/XContent.hpp>
#include <com/sun/star/sdb/application/NamedDatabaseObject.hpp>
#include <vcl/split.hxx>
#include <vcl/fixed.hxx>
#include <vcl/mnemonic.hxx>
#include "IClipBoardTest.hxx"
#include "AppTitleWindow.hxx"
#include "AppElementType.hxx"
#include <svtools/svtreebx.hxx>
#include "VertSplitView.hxx"
#include <vector>
class SvLBoxEntry;
namespace dbaui
{
class OAppBorderWindow;
class OApplicationDetailView;
class OAppDetailPageHelper;
class OTasksWindow;
class OCreationList : public SvTreeListBox
{
OTasksWindow& m_rTaskWindow;
// members related to drawing the currently hovered/selected entry
SvLBoxEntry* m_pMouseDownEntry;
SvLBoxEntry* m_pLastActiveEntry;
Color m_aOriginalBackgroundColor;
Font m_aOriginalFont;
public:
OCreationList( OTasksWindow& _rParent );
// window overloads
virtual void MouseMove( const MouseEvent& rMEvt );
virtual void MouseButtonDown( const MouseEvent& rMEvt );
virtual void MouseButtonUp( const MouseEvent& rMEvt );
virtual void KeyInput( const KeyEvent& rKEvt );
virtual void Paint( const Rectangle& rRect );
virtual void StartDrag( sal_Int8 _nAction, const Point& _rPosPixel );
virtual void GetFocus();
virtual void LoseFocus();
inline void resetLastActive() { m_pLastActiveEntry = NULL;}
void updateHelpText();
protected:
virtual void PreparePaint( SvLBoxEntry* _pEntry );
virtual Rectangle GetFocusRect( SvLBoxEntry* _pEntry, long _nLine );
virtual void ModelHasCleared();
// IMnemonicEntryList
virtual void SelectSearchEntry( const void* _pEntry );
virtual void ExecuteSearchEntry( const void* _pEntry ) const;
private:
void onSelected( SvLBoxEntry* _pEntry ) const;
/** sets a new current entry, and invalidates the old and the new one, if necessary
@return <TRUE/> if and only if the "current entry" changed
*/
bool setCurrentEntryInvalidate( SvLBoxEntry* _pEntry );
};
struct TaskEntry
{
::rtl::OUString sUNOCommand;
sal_uInt16 nHelpID;
String sTitle;
bool bHideWhenDisabled;
// TODO: we should be consistent in the task pane and the menus/toolbars:
// If an entry is disabled in the latter, it should also be disabled in the former.
// If an entry is *hidden* in the former, it should also be hidden in the latter.
TaskEntry( const sal_Char* _pAsciiUNOCommand, sal_uInt16 _nHelpID, sal_uInt16 _nTitleResourceID, bool _bHideWhenDisabled = false );
};
typedef ::std::vector< TaskEntry > TaskEntryList;
struct TaskPaneData
{
/// the tasks available in the pane
TaskEntryList aTasks;
/// the resource ID for the title of the pane
sal_uInt16 nTitleId;
};
class OTasksWindow : public Window
{
OCreationList m_aCreation;
FixedText m_aDescription;
FixedText m_aHelpText;
FixedLine m_aFL;
OApplicationDetailView* m_pDetailView;
DECL_LINK( OnEntrySelectHdl, SvTreeListBox* );
void ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground );
protected:
virtual void DataChanged(const DataChangedEvent& rDCEvt);
public:
OTasksWindow(Window* _pParent,OApplicationDetailView* _pDetailView);
virtual ~OTasksWindow();
// window overloads
virtual void Resize();
OApplicationDetailView* getDetailView() const { return m_pDetailView; }
/// fills the Creation listbox with the necessary strings and images
void fillTaskEntryList( const TaskEntryList& _rList );
inline bool HandleKeyInput( const KeyEvent& _rKEvt )
{
return m_aCreation.HandleKeyInput( _rKEvt );
}
void Clear();
void setHelpText(sal_uInt16 _nId);
};
//==================================================================
class OApplicationDetailView : public OSplitterView
, public IClipboardTest
{
Splitter m_aHorzSplitter;
OTitleWindow m_aTasks;
OTitleWindow m_aContainer;
OAppBorderWindow& m_rBorderWin; // my parent
OAppDetailPageHelper* m_pControlHelper;
::std::vector< TaskPaneData > m_aTaskPaneData;
MnemonicGenerator m_aExternalMnemonics;
void ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground );
protected:
virtual void DataChanged(const DataChangedEvent& rDCEvt);
public:
OApplicationDetailView(OAppBorderWindow& _rParent,PreviewMode _ePreviewMode);
virtual ~OApplicationDetailView();
// window overloads
virtual void GetFocus();
/** creates the tables page
@param _xConnection
The connection to get the table names
*/
void createTablesPage(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _xConnection);
/** creates the page for the specific type.
@param _eType
The type which should be created. E_TABLE isn't allowed.
@param _xContainer
The container of the elements to be inserted.
*/
void createPage(ElementType _eType,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _xContainer);
void setTaskExternalMnemonics( MnemonicGenerator& _rMnemonics );
/** called to give the window the chance to intercept key events, while it has not
the focus
@return <TRUE/> if and only if the event has been handled, and should not
not be further processed
*/
bool interceptKeyInput( const KeyEvent& _rEvent );
inline OAppBorderWindow& getBorderWin() const { return m_rBorderWin; }
inline OTasksWindow& getTasksWindow() const { return *static_cast< OTasksWindow* >( m_aTasks.getChildWindow() ); }
sal_Bool isCutAllowed() ;
sal_Bool isCopyAllowed() ;
sal_Bool isPasteAllowed();
virtual sal_Bool hasChildPathFocus() { return HasChildPathFocus(); }
void copy();
void cut();
void paste();
/** return the qualified name.
@param _pEntry
The entry of a table, or query, form, report to get the qualified name.
If the entry is <NULL/>, the first selected is chosen.
@return
the qualified name
*/
::rtl::OUString getQualifiedName( SvLBoxEntry* _pEntry ) const;
/** returns if an entry is a leaf
@param _pEntry
The entry to check
@return
<TRUE/> if the entry is a leaf, otherwise <FALSE/>
*/
sal_Bool isLeaf(SvLBoxEntry* _pEntry) const;
/** returns if one of the selected entries is a leaf
@return
<TRUE/> if the entry is a leaf, otherwise <FALSE/>
*/
sal_Bool isALeafSelected() const;
/** select all entries in the detail page
*/
void selectAll();
/// returns <TRUE/> if it sorts ascending
sal_Bool isSortUp() const;
/// sort the entries in the detail page down
void sortDown();
/// sort the entries in the detail page up
void sortUp();
/// returns <TRUE/> when a detail page was filled
sal_Bool isFilled() const;
/// return the element of currently select entry
ElementType getElementType() const;
/** clears the detail pages.
@param _bTaskAlso
If <TRUE/> the task window will also be cleared.
*/
void clearPages(sal_Bool _bTaskAlso = sal_True);
/// returns the count of entries
sal_Int32 getElementCount();
/// returns the count of selected entries
sal_Int32 getSelectionCount();
/** returns the element names which are selected
@param _rNames
The list will be filled.
*/
void getSelectionElementNames(::std::vector< ::rtl::OUString>& _rNames ) const;
/** describes the current selection for the given control
*/
void describeCurrentSelectionForControl(
const Control& _rControl,
::com::sun::star::uno::Sequence< ::com::sun::star::sdb::application::NamedDatabaseObject >& _out_rSelectedObjects
);
/** describes the current selection for the given ElementType
*/
void describeCurrentSelectionForType(
const ElementType _eType,
::com::sun::star::uno::Sequence< ::com::sun::star::sdb::application::NamedDatabaseObject >& _out_rSelectedObjects
);
/** select all names on the currently selected container. Non existence names where ignored.
*
* \param _aNames the element names
*/
void selectElements(const ::com::sun::star::uno::Sequence< ::rtl::OUString>& _aNames);
/** adds a new object to the detail page.
@param _eType
The type where the entry shold be appended.
@param _rName
The name of the object to be inserted
@param _rObject
The object to add.
@param _rxConn
If we insert a table, the connection must be set.
*/
SvLBoxEntry* elementAdded(ElementType eType
,const ::rtl::OUString& _rName
,const ::com::sun::star::uno::Any& _rObject );
/** replaces a objects name with a new one
@param _eType
The type where the entry shold be appended.
@param _rOldName
The old name of the object to be replaced
@param _rNewName
The new name of the object to be replaced
@param _rxConn
If we insert a table, the connection must be set.
@param _xObject
The object which was replaced
*/
void elementReplaced(ElementType eType
,const ::rtl::OUString& _rOldName
,const ::rtl::OUString& _rNewName );
/** removes an element from the detail page.
@param _eType
The type where the entry shold be appended.
@param _rName
The name of the element to be removed.
@param _rxConn
If we remove a table, the connection must be set.
*/
void elementRemoved(ElementType _eType
,const ::rtl::OUString& _rName );
/// returns the preview mode
PreviewMode getPreviewMode();
/// <TRUE/> if the preview is enabled
sal_Bool isPreviewEnabled();
/** switches to the given preview mode
@param _eMode
the mode to set for the preview
*/
void switchPreview(PreviewMode _eMode);
/** shows the Preview of the content when it is enabled.
@param _xContent
The content which must support the "preview" command.
*/
void showPreview(const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContent >& _xContent);
/** shows the Preview of a table or query
@param _sDataSourceName
the name of the data source
@param _sName
the name of table or query
@param _bTable
<TRUE/> if it is a table, otherwise <FALSE/>
@return void
*/
void showPreview( const ::rtl::OUString& _sDataSourceName,
const ::rtl::OUString& _sName,
sal_Bool _bTable);
SvLBoxEntry* getEntry( const Point& _aPoint ) const;
Window* getTreeWindow() const;
private:
void impl_createPage(
ElementType _eType,
const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection,
const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxNonTableElements
);
const TaskPaneData& impl_getTaskPaneData( ElementType _eType );
void impl_fillTaskPaneData( ElementType _eType, TaskPaneData& _rData ) const;
};
}
#endif // DBAUI_APPDETAILVIEW_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|