xref: /trunk/main/dbaccess/source/ui/inc/TableWindow.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef DBAUI_TABLEWINDOW_HXX
28 #define DBAUI_TABLEWINDOW_HXX
29 
30 #include <com/sun/star/container/XNameAccess.hpp>
31 #include <com/sun/star/beans/XPropertySet.hpp>
32 #include "TableWindowTitle.hxx"
33 #include <tools/rtti.hxx>
34 #include <rtl/ref.hxx>
35 #include "TableWindowData.hxx"
36 #include <vector>
37 #include <vcl/window.hxx>
38 
39 #include <comphelper/containermultiplexer.hxx>
40 #include "cppuhelper/basemutex.hxx"
41 
42 class SvLBoxEntry;
43 namespace dbaui
44 {
45     //////////////////////////////////////////////////////////////////////////
46     // Flags fuer die Groessenanpassung der SbaJoinTabWins
47     const sal_uInt16 SIZING_NONE    = 0x0000;
48     const sal_uInt16 SIZING_TOP     = 0x0001;
49     const sal_uInt16 SIZING_BOTTOM  = 0x0002;
50     const sal_uInt16 SIZING_LEFT    = 0x0004;
51     const sal_uInt16 SIZING_RIGHT   = 0x0008;
52 
53     class OTableWindowListBox;
54     class OJoinDesignView;
55     class OJoinTableView;
56     class OTableWindowAccess;
57 
58     class OTableWindow : public ::cppu::BaseMutex
59                         ,public ::comphelper::OContainerListener
60                         ,public Window
61     {
62         friend class OTableWindowTitle;
63         friend class OTableWindowListBox;
64     protected:
65         // und die Tabelle selber (brauche ich, da ich sie locken will, solange das Fenster lebt)
66         FixedImage              m_aTypeImage;
67         OTableWindowTitle       m_aTitle;
68         OTableWindowListBox*    m_pListBox;
69         OTableWindowAccess*     m_pAccessible;
70 
71     private:
72         TTableWindowData::value_type
73                                 m_pData;
74         ::rtl::Reference< comphelper::OContainerListenerAdapter>
75                                 m_pContainerListener;
76         sal_Int32               m_nMoveCount;           // how often the arrow keys was pressed
77         sal_Int32               m_nMoveIncrement;       // how many pixel we should move
78         sal_uInt16                  m_nSizingFlags;
79         sal_Bool                    m_bActive;
80 
81         void Draw3DBorder( const Rectangle& rRect );
82         // OContainerListener
83         virtual void _elementInserted( const ::com::sun::star::container::ContainerEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException);
84         virtual void _elementRemoved( const  ::com::sun::star::container::ContainerEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException);
85         virtual void _elementReplaced( const ::com::sun::star::container::ContainerEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException);
86 
87     protected:
88         virtual void    Resize();
89         virtual void    Paint( const Rectangle& rRect );
90         virtual void    MouseMove( const MouseEvent& rEvt );
91         virtual void    MouseButtonDown( const MouseEvent& rEvt );
92         virtual void    DataChanged( const DataChangedEvent& rDCEvt );
93 
94         virtual OTableWindowListBox*    CreateListBox();
95             // wird im ERSTEN Init aufgerufen
96         sal_Bool FillListBox();
97             // wird in JEDEM Init aufgerufen
98 
99         virtual void OnEntryDoubleClicked(SvLBoxEntry* /*pEntry*/) { }
100             // wird aus dem DoubleClickHdl der ListBox heraus aufgerufen
101 
102         /** HandleKeyInput triues to handle the KeyEvent. Movement or deletion
103             @param  rEvt
104                 The KEyEvent
105             @return
106                 <TRUE/> when the table could handle the keyevent.
107         */
108         sal_Bool            HandleKeyInput( const KeyEvent& rEvt );
109 
110         /** delete the user data with the equal type as created within createUserData
111             @param  _pUserData
112                 The user data store in the listbox entries. Created with a call to createUserData.
113                 _pUserData may be <NULL/>. _pUserData will be set to <NULL/> after call.
114         */
115         virtual void deleteUserData(void*& _pUserData);
116 
117         /** creates user information that will be append at the ListBoxentry
118             @param  _xColumn
119                 The corresponding column, can be <NULL/>.
120             @param  _bPrimaryKey
121                 <TRUE/> when the column belongs to the primary key
122             @return
123                 the user data which will be append at the listbox entry, may be <NULL/>
124         */
125         virtual void* createUserData(const ::com::sun::star::uno::Reference<
126                                     ::com::sun::star::beans::XPropertySet>& _xColumn,
127                                     bool _bPrimaryKey);
128 
129         /** updates m_aTypeImage
130         */
131         void    impl_updateImage();
132 
133         OTableWindow( Window* pParent, const TTableWindowData::value_type& pTabWinData );
134 
135     public:
136         virtual ~OTableWindow();
137 
138         // spaeter Constructor, siehe auch CreateListbox und FillListbox
139         virtual sal_Bool Init();
140 
141         OJoinTableView*             getTableView();
142         const OJoinTableView*       getTableView() const;
143         OJoinDesignView*            getDesignView();
144         void                        SetPosPixel( const Point& rNewPos );
145         void                        SetSizePixel( const Size& rNewSize );
146         void                        SetPosSizePixel( const Point& rNewPos, const Size& rNewSize );
147 
148         String                      getTitle() const;
149         void                        SetBoldTitle( sal_Bool bBold );
150         void                        setActive(sal_Bool _bActive = sal_True);
151 
152         void                        Remove();
153         sal_Bool                        IsActiveWindow(){ return m_bActive; }
154 
155         ::rtl::OUString             GetTableName() const { return m_pData->GetTableName(); }
156         ::rtl::OUString             GetWinName() const { return m_pData->GetWinName(); }
157         ::rtl::OUString             GetComposedName() const { return m_pData->GetComposedName(); }
158         OTableWindowListBox*        GetListBox() const { return m_pListBox; }
159         TTableWindowData::value_type GetData() const { return m_pData; }
160         OTableWindowTitle*          GetTitleCtrl() { return &m_aTitle; }
161 
162         /** returns the name which should be used when displaying join or relations
163             @return
164                 The composed name or the window name.
165         */
166         virtual ::rtl::OUString     GetName() const = 0;
167 
168         inline ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > GetOriginalColumns() const { return m_pData->getColumns(); }
169         inline ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >    GetTable() const { return m_pData->getTable(); }
170 
171         sal_uInt16                      GetSizingFlags() const { return m_nSizingFlags; }
172         /** set the sizing flag to the direction
173             @param  _rPos
174                 The EndPosition after resizing.
175         */
176         void                        setSizingFlag(const Point& _rPos);
177         /** set the rsizing flag to NONE.
178         */
179         void                        resetSizingFlag() { m_nSizingFlags = SIZING_NONE; }
180 
181         /** returns the new sizing
182         */
183         Rectangle getSizingRect(const Point& _rPos,const Size& _rOutputSize) const;
184 
185         // window override
186         virtual void                StateChanged( StateChangedType nStateChange );
187         virtual void                GetFocus();
188         virtual long                PreNotify( NotifyEvent& rNEvt );
189         virtual void                Command(const CommandEvent& rEvt);
190 
191         // Accessibility
192         virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
193 
194         // habe ich Connections nach aussen ?
195         sal_Bool ExistsAConn() const;
196 
197         void EnumValidFields(::std::vector< ::rtl::OUString>& arrstrFields);
198 
199         /** clears the listbox inside. Must be called be the dtor is called.
200         */
201         void clearListBox();
202 
203     protected:
204         using Window::SetPosSizePixel;
205     };
206 }
207 #endif //DBAUI_TABLEWINDOW_HXX
208 
209 
210