xref: /AOO41X/main/dbaccess/source/ui/inc/TableWindow.hxx (revision 2e2212a7c22e96cf6f6fab0dd042c34a45a64bd6)
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 #ifndef DBAUI_TABLEWINDOW_HXX
24 #define DBAUI_TABLEWINDOW_HXX
25 
26 #include <com/sun/star/container/XNameAccess.hpp>
27 #include <com/sun/star/beans/XPropertySet.hpp>
28 #include "TableWindowTitle.hxx"
29 #include <tools/rtti.hxx>
30 #include <rtl/ref.hxx>
31 #include "TableWindowData.hxx"
32 #include <vector>
33 #include <vcl/window.hxx>
34 
35 #include <comphelper/containermultiplexer.hxx>
36 #include "cppuhelper/basemutex.hxx"
37 
38 class SvLBoxEntry;
39 namespace dbaui
40 {
41     //////////////////////////////////////////////////////////////////////////
42     // Flags fuer die Groessenanpassung der SbaJoinTabWins
43     const sal_uInt16 SIZING_NONE    = 0x0000;
44     const sal_uInt16 SIZING_TOP     = 0x0001;
45     const sal_uInt16 SIZING_BOTTOM  = 0x0002;
46     const sal_uInt16 SIZING_LEFT    = 0x0004;
47     const sal_uInt16 SIZING_RIGHT   = 0x0008;
48 
49     class OTableWindowListBox;
50     class OJoinDesignView;
51     class OJoinTableView;
52     class OTableWindowAccess;
53 
54     class OTableWindow : public ::cppu::BaseMutex
55                         ,public ::comphelper::OContainerListener
56                         ,public Window
57     {
58         friend class OTableWindowTitle;
59         friend class OTableWindowListBox;
60     protected:
61         // und die Tabelle selber (brauche ich, da ich sie locken will, solange das Fenster lebt)
62         FixedImage              m_aTypeImage;
63         OTableWindowTitle       m_aTitle;
64         OTableWindowListBox*    m_pListBox;
65         OTableWindowAccess*     m_pAccessible;
66 
67     private:
68         TTableWindowData::value_type
69                                 m_pData;
70         ::rtl::Reference< comphelper::OContainerListenerAdapter>
71                                 m_pContainerListener;
72         sal_Int32               m_nMoveCount;           // how often the arrow keys was pressed
73         sal_Int32               m_nMoveIncrement;       // how many pixel we should move
74         sal_uInt16                  m_nSizingFlags;
75         sal_Bool                    m_bActive;
76 
77         void Draw3DBorder( const Rectangle& rRect );
78         // OContainerListener
79         virtual void _elementInserted( const ::com::sun::star::container::ContainerEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException);
80         virtual void _elementRemoved( const  ::com::sun::star::container::ContainerEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException);
81         virtual void _elementReplaced( const ::com::sun::star::container::ContainerEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException);
82 
83     protected:
84         virtual void    Resize();
85         virtual void    Paint( const Rectangle& rRect );
86         virtual void    MouseMove( const MouseEvent& rEvt );
87         virtual void    MouseButtonDown( const MouseEvent& rEvt );
88         virtual void    DataChanged( const DataChangedEvent& rDCEvt );
89 
90         virtual OTableWindowListBox*    CreateListBox();
91             // wird im ERSTEN Init aufgerufen
92         sal_Bool FillListBox();
93             // wird in JEDEM Init aufgerufen
94 
OnEntryDoubleClicked(SvLBoxEntry *)95         virtual void OnEntryDoubleClicked(SvLBoxEntry* /*pEntry*/) { }
96             // wird aus dem DoubleClickHdl der ListBox heraus aufgerufen
97 
98         /** HandleKeyInput triues to handle the KeyEvent. Movement or deletion
99             @param  rEvt
100                 The KEyEvent
101             @return
102                 <TRUE/> when the table could handle the keyevent.
103         */
104         sal_Bool            HandleKeyInput( const KeyEvent& rEvt );
105 
106         /** delete the user data with the equal type as created within createUserData
107             @param  _pUserData
108                 The user data store in the listbox entries. Created with a call to createUserData.
109                 _pUserData may be <NULL/>. _pUserData will be set to <NULL/> after call.
110         */
111         virtual void deleteUserData(void*& _pUserData);
112 
113         /** creates user information that will be append at the ListBoxentry
114             @param  _xColumn
115                 The corresponding column, can be <NULL/>.
116             @param  _bPrimaryKey
117                 <TRUE/> when the column belongs to the primary key
118             @return
119                 the user data which will be append at the listbox entry, may be <NULL/>
120         */
121         virtual void* createUserData(const ::com::sun::star::uno::Reference<
122                                     ::com::sun::star::beans::XPropertySet>& _xColumn,
123                                     bool _bPrimaryKey);
124 
125         /** updates m_aTypeImage
126         */
127         void    impl_updateImage();
128 
129         OTableWindow( Window* pParent, const TTableWindowData::value_type& pTabWinData );
130 
131     public:
132         virtual ~OTableWindow();
133 
134         // spaeter Constructor, siehe auch CreateListbox und FillListbox
135         virtual sal_Bool Init();
136 
137         OJoinTableView*             getTableView();
138         const OJoinTableView*       getTableView() const;
139         OJoinDesignView*            getDesignView();
140         void                        SetPosPixel( const Point& rNewPos );
141         void                        SetSizePixel( const Size& rNewSize );
142         void                        SetPosSizePixel( const Point& rNewPos, const Size& rNewSize );
143 
144         String                      getTitle() const;
145         void                        SetBoldTitle( sal_Bool bBold );
146         void                        setActive(sal_Bool _bActive = sal_True);
147 
148         void                        Remove();
IsActiveWindow()149         sal_Bool                        IsActiveWindow(){ return m_bActive; }
150 
GetTableName() const151         ::rtl::OUString             GetTableName() const { return m_pData->GetTableName(); }
GetWinName() const152         ::rtl::OUString             GetWinName() const { return m_pData->GetWinName(); }
GetComposedName() const153         ::rtl::OUString             GetComposedName() const { return m_pData->GetComposedName(); }
GetListBox() const154         OTableWindowListBox*        GetListBox() const { return m_pListBox; }
GetData() const155         TTableWindowData::value_type GetData() const { return m_pData; }
GetTitleCtrl()156         OTableWindowTitle*          GetTitleCtrl() { return &m_aTitle; }
157 
158         /** returns the name which should be used when displaying join or relations
159             @return
160                 The composed name or the window name.
161         */
162         virtual ::rtl::OUString     GetName() const = 0;
163 
GetOriginalColumns() const164         inline ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > GetOriginalColumns() const { return m_pData->getColumns(); }
GetTable() const165         inline ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >    GetTable() const { return m_pData->getTable(); }
166 
GetSizingFlags() const167         sal_uInt16                      GetSizingFlags() const { return m_nSizingFlags; }
168         /** set the sizing flag to the direction
169             @param  _rPos
170                 The EndPosition after resizing.
171         */
172         void                        setSizingFlag(const Point& _rPos);
173         /** set the rsizing flag to NONE.
174         */
resetSizingFlag()175         void                        resetSizingFlag() { m_nSizingFlags = SIZING_NONE; }
176 
177         /** returns the new sizing
178         */
179         Rectangle getSizingRect(const Point& _rPos,const Size& _rOutputSize) const;
180 
181         // window override
182         virtual void                StateChanged( StateChangedType nStateChange );
183         virtual void                GetFocus();
184         virtual long                PreNotify( NotifyEvent& rNEvt );
185         virtual void                Command(const CommandEvent& rEvt);
186 
187         // Accessibility
188         virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
189 
190         // habe ich Connections nach aussen ?
191         sal_Bool ExistsAConn() const;
192 
193         void EnumValidFields(::std::vector< ::rtl::OUString>& arrstrFields);
194 
195         /** clears the listbox inside. Must be called be the dtor is called.
196         */
197         void clearListBox();
198 
199     protected:
200         using Window::SetPosSizePixel;
201     };
202 }
203 #endif //DBAUI_TABLEWINDOW_HXX
204 
205 
206