xref: /trunk/main/dbaccess/source/ui/tabledesign/TEditControl.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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_TABLEEDITORCONTROL_HXX
28 #define DBAUI_TABLEEDITORCONTROL_HXX
29 
30 #ifndef DBAUI_TABLEDESIGNCONTROL_HXX
31 #include "TableDesignControl.hxx"
32 #endif
33 #ifndef DBAUI_TABLEDESIGNVIEW_HXX
34 #include "TableDesignView.hxx"
35 #endif
36 #ifndef DBAUI_TABLEFIELDDESCRIPTION_HXX
37 #include "TableFieldDescWin.hxx"
38 #endif
39 #ifndef DBAUI_TABLEROW_HXX
40 #include "TableRow.hxx"
41 #endif
42 #ifndef DBAUI_ENUMTYPES_HXX
43 #include "QEnumTypes.hxx"
44 #endif
45 #ifndef DBAUI_TYPEINFO_HXX
46 #include "TypeInfo.hxx"
47 #endif
48 
49 class Edit;
50 class SfxUndoManager;
51 namespace dbaui
52 {
53     class OSQLNameEdit;
54 
55     class OTableEditorCtrl : public OTableRowView
56     {
57         enum ChildFocusState
58         {
59             HELPTEXT,
60             DESCRIPTION,
61             NAME,
62             ROW,
63             NONE
64         };
65 
66         ::std::vector< ::boost::shared_ptr<OTableRow> > m_aUndoList;
67         ::std::vector< ::boost::shared_ptr<OTableRow> >*    m_pRowList;
68 
69         OSQLNameEdit*               pNameCell;
70         ::svt::ListBoxControl*      pTypeCell;
71         Edit*                       pHelpTextCell;
72         Edit*                       pDescrCell;
73         OTableFieldDescWin*         pDescrWin;          // properties of one column
74 
75          ::boost::shared_ptr<OTableRow> pActRow;
76 
77         sal_uLong                       nIndexEvent;
78         sal_uLong                       nCutEvent;
79         sal_uLong                       nPasteEvent;
80         sal_uLong                       nDeleteEvent;
81         sal_uLong                       nInsNewRowsEvent;
82         sal_uLong                       nInvalidateTypeEvent;
83         sal_uLong                       nEntryNotFoundEvent;
84         ChildFocusState             m_eChildFocus;
85 
86         long nOldDataPos;
87 
88         sal_Bool bSaveOnMove;
89         sal_Bool bReadOnly;
90         //------------------------------------------------------------------
91         // Hilfsklasse
92         class ClipboardInvalidator
93         {
94         private:
95             AutoTimer   m_aInvalidateTimer;
96             OTableEditorCtrl* m_pOwner;
97 
98         public:
99             ClipboardInvalidator(sal_uLong nTimeout,OTableEditorCtrl*);
100             ~ClipboardInvalidator();
101 
102         protected:
103             DECL_LINK(OnInvalidate, void*);
104         };
105         friend class OTableEditorCtrl::ClipboardInvalidator;
106 
107         ClipboardInvalidator    m_aInvalidate;
108 
109     protected:
110         virtual void Command( const CommandEvent& rEvt );
111         virtual sal_Bool SeekRow(long nRow);
112         virtual void PaintCell(OutputDevice& rDev, const Rectangle& rRect,
113                                sal_uInt16 nColumnId ) const;
114 
115         virtual void CursorMoved();
116         virtual RowStatus GetRowStatus(long nRow) const;
117 
118         virtual ::svt::CellController* GetController(long nRow, sal_uInt16 nCol);
119         virtual void InitController(::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol);
120 
121         virtual void CellModified();
122         virtual sal_Bool SaveModified();    // wird aufgerufen vor einem Zellenwechsel
123                                         // return sal_False, verhindert Zellenwechsel
124         virtual void Undo();
125         virtual void Redo();
126         virtual String GetCellText(long nRow, sal_uInt16 nColId) const;
127         virtual sal_uInt32 GetTotalCellWidth(long nRow, sal_uInt16 nColId);
128 
129         virtual void CopyRows();
130         virtual void InsertRows( long nRow );
131         virtual void DeleteRows();
132         virtual void InsertNewRows( long nRow );
133 
134         virtual sal_Bool IsPrimaryKeyAllowed( long nRow );
135         virtual sal_Bool IsInsertNewAllowed( long nRow );
136         virtual sal_Bool IsDeleteAllowed( long nRow );
137 
138         void         ClearModified();
139 
140         void         SetPrimaryKey( sal_Bool bSet );
141         sal_Bool         IsPrimaryKey();
142 
143         DECL_LINK(ControlPreNotifyHdl, NotifyEvent*);
144 
145     public:
146         //  TYPEINFO();
147         OTableEditorCtrl(Window* pParentWin);
148         virtual         ~OTableEditorCtrl();
149         virtual sal_Bool    CursorMoving(long nNewRow, sal_uInt16 nNewCol);
150         virtual void    UpdateAll();
151         SfxUndoManager& GetUndoManager() const;
152 
153         void            SetDescrWin( OTableFieldDescWin* pWin ){ pDescrWin = pWin; if (pDescrWin && pActRow) pDescrWin->DisplayData(pActRow->GetActFieldDescr()); }
154         sal_Bool            SaveCurRow();
155         void            SwitchType( const TOTypeInfoSP& _pType );
156 
157         void            DisplayData( long nRow, sal_Bool bGrabFocus = sal_True );
158             // erzwingt das Anzeigen der genannten Zeile (selbst wenn es eigentlich schon die aktuelle ist)
159 
160         virtual void    SetCellData( long nRow, sal_uInt16 nColId, const TOTypeInfoSP& _pTypeInfo );
161         virtual void    SetCellData( long nRow, sal_uInt16 nColId, const ::com::sun::star::uno::Any& _rSaveData );
162         virtual ::com::sun::star::uno::Any  GetCellData( long nRow, sal_uInt16 nColId );
163         virtual void    SetControlText( long nRow, sal_uInt16 nColId, const String& rText );
164         virtual String  GetControlText( long nRow, sal_uInt16 nColId );
165 
166         virtual OTableDesignView* GetView() const;
167 
168         ::std::vector< ::boost::shared_ptr<OTableRow> >* GetRowList(){ return m_pRowList; }
169 
170         ::boost::shared_ptr<OTableRow>         GetActRow(){ return pActRow; }
171         void            CellModified( long nRow, sal_uInt16 nColId );
172         void            SetReadOnly( sal_Bool bRead=sal_True );
173 
174         virtual void Init();
175         virtual void DeactivateCell(sal_Bool bUpdate = sal_True);
176 
177         sal_Bool IsCutAllowed( long nRow = -1 );
178         sal_Bool IsCopyAllowed( long nRow = -1 );
179         sal_Bool IsPasteAllowed( long nRow = -1 );
180         sal_Bool IsReadOnly();
181         OFieldDescription* GetFieldDescr( long nRow );
182 
183         // window overloads
184         virtual long            PreNotify( NotifyEvent& rNEvt );
185 
186         // IClipboardTest
187         virtual sal_Bool isCutAllowed() { return IsCutAllowed(); }
188         virtual sal_Bool isCopyAllowed() { return IsCopyAllowed(); }
189         virtual sal_Bool isPasteAllowed() { return IsPasteAllowed(); }
190         virtual sal_Bool hasChildPathFocus() { return HasChildPathFocus(); }
191 
192         virtual void cut();
193         virtual void copy();
194         virtual void paste();
195     private:
196         DECL_LINK( StartIndexing, void* );
197         DECL_LINK( DelayedCut, void* );
198         DECL_LINK( DelayedPaste, void* );
199         DECL_LINK( DelayedDelete, void* );
200         DECL_LINK( DelayedInsNewRows, void* );
201         DECL_LINK( InvalidateFieldType, void* );
202         DECL_LINK( EntryNotFound, void* );
203 
204         void InitCellController();
205         sal_Int32 HasFieldName( const String& rFieldName );
206         String GenerateName( const String& rName );
207         sal_Bool SetDataPtr( long nRow );
208 
209         sal_Bool SaveData(long nRow, sal_uInt16 nColumnId);
210         /** AdjustFieldDescription set the needed values for the description
211             @param  _pFieldDesc     the field description where to set the values
212             @param  _rMultiSel      contains the postions which changed for undo/redo
213             @param  _nPos           the current position
214             @param  _bSet           should a key be set
215             @param  _bPrimaryKey    which value should the pkey have
216         */
217         void AdjustFieldDescription( OFieldDescription* _pFieldDesc,
218                                      MultiSelection& _rMultiSel,
219                                      sal_Int32 _nPos,
220                                      sal_Bool _bSet,
221                                      sal_Bool _bPrimaryKey);
222         /** InvalidateFeatures invalidates the slots SID_UNDO | SID_REDO | SID_SAVEDOC
223         */
224         void InvalidateFeatures();
225 
226         void resetType();
227     };
228 }
229 #endif // DBAUI_TABLEEDITORCONTROL_HXX
230 
231 
232 
233