1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_dbaccess.hxx"
26*b1cdbd2cSJim Jagielski #ifndef DBAUI_TABLEEDITORCONTROL_HXX
27*b1cdbd2cSJim Jagielski #include "TEditControl.hxx"
28*b1cdbd2cSJim Jagielski #endif
29*b1cdbd2cSJim Jagielski #ifndef _TOOLS_DEBUG_HXX
30*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
31*b1cdbd2cSJim Jagielski #endif
32*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBC_XDATABASEMETADATA_HPP_
33*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
34*b1cdbd2cSJim Jagielski #endif
35*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBCX_XCOLUMNSSUPPLIER_HPP_
36*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBCX_XALTERTABLE_HPP_
39*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XAlterTable.hpp>
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBCX_XDROP_HPP_
42*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XDrop.hpp>
43*b1cdbd2cSJim Jagielski #endif
44*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBCX_XAPPEND_HPP_
45*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbcx/XAppend.hpp>
46*b1cdbd2cSJim Jagielski #endif
47*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
48*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
49*b1cdbd2cSJim Jagielski #endif
50*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_UTIL_XNUMBERFORMATTYPES_HPP_
51*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XNumberFormatTypes.hpp>
52*b1cdbd2cSJim Jagielski #endif
53*b1cdbd2cSJim Jagielski #ifndef _DBU_TBL_HRC_
54*b1cdbd2cSJim Jagielski #include "dbu_tbl.hrc"
55*b1cdbd2cSJim Jagielski #endif
56*b1cdbd2cSJim Jagielski #ifndef DBACCESS_SHARED_DBUSTRINGS_HRC
57*b1cdbd2cSJim Jagielski #include "dbustrings.hrc"
58*b1cdbd2cSJim Jagielski #endif
59*b1cdbd2cSJim Jagielski #ifndef DBACCESS_UI_BROWSER_ID_HXX
60*b1cdbd2cSJim Jagielski #include "browserids.hxx"
61*b1cdbd2cSJim Jagielski #endif
62*b1cdbd2cSJim Jagielski #ifndef _DBA_DBACCESS_HELPID_HRC_
63*b1cdbd2cSJim Jagielski #include "dbaccess_helpid.hrc"
64*b1cdbd2cSJim Jagielski #endif
65*b1cdbd2cSJim Jagielski #ifndef _COMPHELPER_TYPES_HXX_
66*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
67*b1cdbd2cSJim Jagielski #endif
68*b1cdbd2cSJim Jagielski #ifndef DBAUI_FIELDDESCRIPTIONCONTROL_HXX
69*b1cdbd2cSJim Jagielski #include "FieldDescControl.hxx"
70*b1cdbd2cSJim Jagielski #endif
71*b1cdbd2cSJim Jagielski #ifndef DBAUI_FIELDDESCRIPTIONS_HXX
72*b1cdbd2cSJim Jagielski #include "FieldDescriptions.hxx"
73*b1cdbd2cSJim Jagielski #endif
74*b1cdbd2cSJim Jagielski #ifndef _SV_MSGBOX_HXX
75*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
76*b1cdbd2cSJim Jagielski #endif
77*b1cdbd2cSJim Jagielski #ifndef DBAUI_TABLEUNDO_HXX
78*b1cdbd2cSJim Jagielski #include "TableUndo.hxx"
79*b1cdbd2cSJim Jagielski #endif
80*b1cdbd2cSJim Jagielski #ifndef DBUI_TABLECONTROLLER_HXX
81*b1cdbd2cSJim Jagielski #include "TableController.hxx"
82*b1cdbd2cSJim Jagielski #endif
83*b1cdbd2cSJim Jagielski #ifndef _CONNECTIVITY_DBTOOLS_HXX_
84*b1cdbd2cSJim Jagielski #include <connectivity/dbtools.hxx>
85*b1cdbd2cSJim Jagielski #endif
86*b1cdbd2cSJim Jagielski #ifndef DBAUI_SQLNAMEEDIT_HXX
87*b1cdbd2cSJim Jagielski #include "SqlNameEdit.hxx"
88*b1cdbd2cSJim Jagielski #endif
89*b1cdbd2cSJim Jagielski #ifndef DBAUI_TABLEROW_EXCHANGE_HXX
90*b1cdbd2cSJim Jagielski #include "TableRowExchange.hxx"
91*b1cdbd2cSJim Jagielski #endif
92*b1cdbd2cSJim Jagielski #ifndef _SOT_STORAGE_HXX
93*b1cdbd2cSJim Jagielski #include <sot/storage.hxx>
94*b1cdbd2cSJim Jagielski #endif
95*b1cdbd2cSJim Jagielski #ifndef DBAUI_TOOLS_HXX
96*b1cdbd2cSJim Jagielski #include "UITools.hxx"
97*b1cdbd2cSJim Jagielski #endif
98*b1cdbd2cSJim Jagielski #ifndef DBAUI_FIELDDESCRIPTIONCONTROL_HXX
99*b1cdbd2cSJim Jagielski #include "FieldDescControl.hxx"
100*b1cdbd2cSJim Jagielski #endif
101*b1cdbd2cSJim Jagielski #ifndef DBAUI_TABLEFIELDCONTROL_HXX
102*b1cdbd2cSJim Jagielski #include "TableFieldControl.hxx"
103*b1cdbd2cSJim Jagielski #endif
104*b1cdbd2cSJim Jagielski #include "dsntypes.hxx"
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski #include "dbaccess_slotid.hrc"
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski using namespace ::dbaui;
109*b1cdbd2cSJim Jagielski using namespace ::comphelper;
110*b1cdbd2cSJim Jagielski using namespace ::svt;
111*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
112*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
113*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::io;
114*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
115*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
116*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
117*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
118*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbc;
119*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdbcx;
120*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::sdb;
121*b1cdbd2cSJim Jagielski
122*b1cdbd2cSJim Jagielski namespace dbaui
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski extern String GetTypeString( sal_uInt16 nType );
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski //==============================================================================
127*b1cdbd2cSJim Jagielski
128*b1cdbd2cSJim Jagielski // TYPEINIT1(OTableEditorCtrl, DBView);
129*b1cdbd2cSJim Jagielski DBG_NAME(OTableEditorCtrl)
130*b1cdbd2cSJim Jagielski
131*b1cdbd2cSJim Jagielski //==============================================================================
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski #define HANDLE_ID 0
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski // default Spaltenbreiten
136*b1cdbd2cSJim Jagielski #define FIELDNAME_WIDTH 100
137*b1cdbd2cSJim Jagielski #define FIELDTYPE_WIDTH 150
138*b1cdbd2cSJim Jagielski #define FIELDDESCR_WIDTH 300
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski // Maximale Eingabelaenge im Beschreibungsfeld
141*b1cdbd2cSJim Jagielski #define MAX_DESCR_LEN 256
142*b1cdbd2cSJim Jagielski
143*b1cdbd2cSJim Jagielski
144*b1cdbd2cSJim Jagielski #define CONTROL_SPACING_X 18 // 6
145*b1cdbd2cSJim Jagielski #define CONTROL_SPACING_Y 5
146*b1cdbd2cSJim Jagielski #define CONTROL_HEIGHT 20
147*b1cdbd2cSJim Jagielski #define CONTROL_WIDTH_1 140 // 100
148*b1cdbd2cSJim Jagielski #define CONTROL_WIDTH_2 100 // 60
149*b1cdbd2cSJim Jagielski #define CONTROL_WIDTH_3 250
150*b1cdbd2cSJim Jagielski #define CONTROL_WIDTH_4 (CONTROL_WIDTH_3 - CONTROL_HEIGHT - 5)
151*b1cdbd2cSJim Jagielski
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski //==================================================================
DBG_NAME(ClipboardInvalidator)154*b1cdbd2cSJim Jagielski DBG_NAME(ClipboardInvalidator)
155*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
156*b1cdbd2cSJim Jagielski OTableEditorCtrl::ClipboardInvalidator::ClipboardInvalidator(sal_uLong nTimeout,OTableEditorCtrl* _pOwner)
157*b1cdbd2cSJim Jagielski : m_pOwner(_pOwner)
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski DBG_CTOR(ClipboardInvalidator,NULL);
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski m_aInvalidateTimer.SetTimeout(nTimeout);
162*b1cdbd2cSJim Jagielski m_aInvalidateTimer.SetTimeoutHdl(LINK(this, OTableEditorCtrl::ClipboardInvalidator, OnInvalidate));
163*b1cdbd2cSJim Jagielski m_aInvalidateTimer.Start();
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski
166*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
~ClipboardInvalidator()167*b1cdbd2cSJim Jagielski OTableEditorCtrl::ClipboardInvalidator::~ClipboardInvalidator()
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski m_aInvalidateTimer.Stop();
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielski DBG_DTOR(ClipboardInvalidator,NULL);
172*b1cdbd2cSJim Jagielski }
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski //------------------------------------------------------------------
IMPL_LINK(OTableEditorCtrl::ClipboardInvalidator,OnInvalidate,void *,EMPTYARG)175*b1cdbd2cSJim Jagielski IMPL_LINK(OTableEditorCtrl::ClipboardInvalidator, OnInvalidate, void*, EMPTYARG)
176*b1cdbd2cSJim Jagielski {
177*b1cdbd2cSJim Jagielski m_pOwner->GetView()->getController().InvalidateFeature(SID_CUT);
178*b1cdbd2cSJim Jagielski m_pOwner->GetView()->getController().InvalidateFeature(SID_COPY);
179*b1cdbd2cSJim Jagielski m_pOwner->GetView()->getController().InvalidateFeature(SID_PASTE);
180*b1cdbd2cSJim Jagielski return 0L;
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski //==================================================================
Init()184*b1cdbd2cSJim Jagielski void OTableEditorCtrl::Init()
185*b1cdbd2cSJim Jagielski {
186*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
187*b1cdbd2cSJim Jagielski OTableRowView::Init();
188*b1cdbd2cSJim Jagielski
189*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
190*b1cdbd2cSJim Jagielski // Soll der Entwurf ReadOnly geoeffnet werden ?
191*b1cdbd2cSJim Jagielski sal_Bool bRead(GetView()->getController().isReadOnly());
192*b1cdbd2cSJim Jagielski
193*b1cdbd2cSJim Jagielski SetReadOnly( bRead );
194*b1cdbd2cSJim Jagielski
195*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
196*b1cdbd2cSJim Jagielski // Spalten einfuegen
197*b1cdbd2cSJim Jagielski String aColumnName( ModuleRes(STR_TAB_FIELD_COLUMN_NAME) );
198*b1cdbd2cSJim Jagielski InsertDataColumn( FIELD_NAME, aColumnName, FIELDNAME_WIDTH );
199*b1cdbd2cSJim Jagielski
200*b1cdbd2cSJim Jagielski aColumnName = String( ModuleRes(STR_TAB_FIELD_COLUMN_DATATYPE) );
201*b1cdbd2cSJim Jagielski InsertDataColumn( FIELD_TYPE, aColumnName, FIELDTYPE_WIDTH );
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski ::dbaccess::ODsnTypeCollection aDsnTypes(GetView()->getController().getORB());
204*b1cdbd2cSJim Jagielski sal_Bool bShowColumnDescription = aDsnTypes.supportsColumnDescription(::comphelper::getString(GetView()->getController().getDataSource()->getPropertyValue(PROPERTY_URL)));
205*b1cdbd2cSJim Jagielski aColumnName = String( ModuleRes(STR_TAB_HELP_TEXT) );
206*b1cdbd2cSJim Jagielski InsertDataColumn( HELP_TEXT, aColumnName, bShowColumnDescription ? FIELDTYPE_WIDTH : FIELDDESCR_WIDTH );
207*b1cdbd2cSJim Jagielski
208*b1cdbd2cSJim Jagielski if ( bShowColumnDescription )
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski aColumnName = String( ModuleRes(STR_COLUMN_DESCRIPTION) );
211*b1cdbd2cSJim Jagielski InsertDataColumn( COLUMN_DESCRIPTION, aColumnName, FIELDTYPE_WIDTH );
212*b1cdbd2cSJim Jagielski }
213*b1cdbd2cSJim Jagielski
214*b1cdbd2cSJim Jagielski InitCellController();
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
217*b1cdbd2cSJim Jagielski // Zeilen einfuegen
218*b1cdbd2cSJim Jagielski RowInserted(0, m_pRowList->size(), sal_True);
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski //==================================================================
UpdateAll()222*b1cdbd2cSJim Jagielski void OTableEditorCtrl::UpdateAll()
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
225*b1cdbd2cSJim Jagielski RowRemoved(0, GetRowCount(), sal_False);
226*b1cdbd2cSJim Jagielski m_nDataPos = 0;
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski InvalidateFeatures();
229*b1cdbd2cSJim Jagielski Invalidate();
230*b1cdbd2cSJim Jagielski }
231*b1cdbd2cSJim Jagielski //==================================================================
OTableEditorCtrl(Window * pWindow)232*b1cdbd2cSJim Jagielski OTableEditorCtrl::OTableEditorCtrl(Window* pWindow)
233*b1cdbd2cSJim Jagielski :OTableRowView(pWindow)
234*b1cdbd2cSJim Jagielski ,pNameCell(NULL)
235*b1cdbd2cSJim Jagielski ,pTypeCell(NULL)
236*b1cdbd2cSJim Jagielski ,pHelpTextCell(NULL)
237*b1cdbd2cSJim Jagielski ,pDescrCell(NULL)
238*b1cdbd2cSJim Jagielski ,pDescrWin(NULL)
239*b1cdbd2cSJim Jagielski ,nIndexEvent(0)
240*b1cdbd2cSJim Jagielski ,nCutEvent(0)
241*b1cdbd2cSJim Jagielski ,nPasteEvent(0)
242*b1cdbd2cSJim Jagielski ,nDeleteEvent(0)
243*b1cdbd2cSJim Jagielski ,nInsNewRowsEvent(0)
244*b1cdbd2cSJim Jagielski ,nInvalidateTypeEvent(0)
245*b1cdbd2cSJim Jagielski ,nEntryNotFoundEvent(0)
246*b1cdbd2cSJim Jagielski ,m_eChildFocus(NONE)
247*b1cdbd2cSJim Jagielski ,nOldDataPos(-1)
248*b1cdbd2cSJim Jagielski ,bSaveOnMove(sal_True)
249*b1cdbd2cSJim Jagielski ,bReadOnly(sal_True)
250*b1cdbd2cSJim Jagielski ,m_aInvalidate(500,this)
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski DBG_CTOR(OTableEditorCtrl,NULL);
253*b1cdbd2cSJim Jagielski
254*b1cdbd2cSJim Jagielski SetHelpId(HID_TABDESIGN_BACKGROUND);
255*b1cdbd2cSJim Jagielski GetDataWindow().SetHelpId(HID_CTL_TABLEEDIT);
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski m_pRowList = GetView()->getController().getRows();
258*b1cdbd2cSJim Jagielski m_nDataPos = 0;
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetUndoManager() const262*b1cdbd2cSJim Jagielski SfxUndoManager& OTableEditorCtrl::GetUndoManager() const
263*b1cdbd2cSJim Jagielski {
264*b1cdbd2cSJim Jagielski return GetView()->getController().GetUndoManager();
265*b1cdbd2cSJim Jagielski }
266*b1cdbd2cSJim Jagielski
267*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsReadOnly()268*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsReadOnly()
269*b1cdbd2cSJim Jagielski {
270*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
271*b1cdbd2cSJim Jagielski return bReadOnly;
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski
274*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SetReadOnly(sal_Bool bRead)275*b1cdbd2cSJim Jagielski void OTableEditorCtrl::SetReadOnly( sal_Bool bRead )
276*b1cdbd2cSJim Jagielski {
277*b1cdbd2cSJim Jagielski // nix zu tun ?
278*b1cdbd2cSJim Jagielski if (bRead == IsReadOnly())
279*b1cdbd2cSJim Jagielski // diese Abfrage ist wichtig, da die zugrundeliegende Def sonst im folgenden gelockt oder ge-unlocked wird, obwohl es
280*b1cdbd2cSJim Jagielski // nicht notwendig waere (und was schlimmer ist, das wuerde dann auch nicht wieder rueckgaengig gemacht)
281*b1cdbd2cSJim Jagielski return;
282*b1cdbd2cSJim Jagielski
283*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
284*b1cdbd2cSJim Jagielski bReadOnly = bRead;
285*b1cdbd2cSJim Jagielski
286*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
287*b1cdbd2cSJim Jagielski // Aktive Zelle disablen
288*b1cdbd2cSJim Jagielski long nRow(GetCurRow());
289*b1cdbd2cSJim Jagielski sal_uInt16 nCol(GetCurColumnId());
290*b1cdbd2cSJim Jagielski DeactivateCell();
291*b1cdbd2cSJim Jagielski
292*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
293*b1cdbd2cSJim Jagielski // ::com::sun::star::beans::Property Controls disablen
294*b1cdbd2cSJim Jagielski // if (pDescrWin)
295*b1cdbd2cSJim Jagielski // pDescrWin->SetReadOnly(bReadOnly || !SetDataPtr(nRow) || GetActRow()->IsReadOnly());
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
298*b1cdbd2cSJim Jagielski // Cursor des Browsers anpassen
299*b1cdbd2cSJim Jagielski BrowserMode nMode(BROWSER_COLUMNSELECTION | BROWSER_MULTISELECTION | BROWSER_KEEPSELECTION |
300*b1cdbd2cSJim Jagielski BROWSER_HLINESFULL | BROWSER_VLINESFULL|BROWSER_AUTOSIZE_LASTCOL);
301*b1cdbd2cSJim Jagielski if( !bReadOnly )
302*b1cdbd2cSJim Jagielski nMode |= BROWSER_HIDECURSOR;
303*b1cdbd2cSJim Jagielski SetMode(nMode);
304*b1cdbd2cSJim Jagielski
305*b1cdbd2cSJim Jagielski if( !bReadOnly )
306*b1cdbd2cSJim Jagielski ActivateCell( nRow, nCol );
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski
309*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
InitCellController()310*b1cdbd2cSJim Jagielski void OTableEditorCtrl::InitCellController()
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
313*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
314*b1cdbd2cSJim Jagielski // Zelle Feldname
315*b1cdbd2cSJim Jagielski xub_StrLen nMaxTextLen = EDIT_NOLIMIT;
316*b1cdbd2cSJim Jagielski ::rtl::OUString sExtraNameChars;
317*b1cdbd2cSJim Jagielski Reference<XConnection> xCon;
318*b1cdbd2cSJim Jagielski try
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski xCon = GetView()->getController().getConnection();
321*b1cdbd2cSJim Jagielski Reference< XDatabaseMetaData> xMetaData = xCon.is() ? xCon->getMetaData() : Reference< XDatabaseMetaData>();
322*b1cdbd2cSJim Jagielski
323*b1cdbd2cSJim Jagielski nMaxTextLen = ((xub_StrLen)xMetaData.is() ? static_cast<xub_StrLen>(xMetaData->getMaxColumnNameLength()) : 0);
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski if( nMaxTextLen == 0 )
326*b1cdbd2cSJim Jagielski nMaxTextLen = EDIT_NOLIMIT;
327*b1cdbd2cSJim Jagielski sExtraNameChars = xMetaData.is() ? xMetaData->getExtraNameCharacters() : ::rtl::OUString();
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim Jagielski }
330*b1cdbd2cSJim Jagielski catch(SQLException&)
331*b1cdbd2cSJim Jagielski {
332*b1cdbd2cSJim Jagielski OSL_ASSERT(!"getMaxColumnNameLength");
333*b1cdbd2cSJim Jagielski }
334*b1cdbd2cSJim Jagielski
335*b1cdbd2cSJim Jagielski pNameCell = new OSQLNameEdit( &GetDataWindow(), sExtraNameChars,WB_LEFT );
336*b1cdbd2cSJim Jagielski pNameCell->SetMaxTextLen( nMaxTextLen );
337*b1cdbd2cSJim Jagielski pNameCell->setCheck( isSQL92CheckEnabled(xCon) );
338*b1cdbd2cSJim Jagielski
339*b1cdbd2cSJim Jagielski
340*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
341*b1cdbd2cSJim Jagielski // Zelle Typ
342*b1cdbd2cSJim Jagielski pTypeCell = new ListBoxControl( &GetDataWindow() );
343*b1cdbd2cSJim Jagielski pTypeCell->SetDropDownLineCount( 15 );
344*b1cdbd2cSJim Jagielski
345*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
346*b1cdbd2cSJim Jagielski // Zelle Beschreibung
347*b1cdbd2cSJim Jagielski pDescrCell = new Edit( &GetDataWindow(), WB_LEFT );
348*b1cdbd2cSJim Jagielski pDescrCell->SetMaxTextLen( MAX_DESCR_LEN );
349*b1cdbd2cSJim Jagielski
350*b1cdbd2cSJim Jagielski pHelpTextCell = new Edit( &GetDataWindow(), WB_LEFT );
351*b1cdbd2cSJim Jagielski pHelpTextCell->SetMaxTextLen( MAX_DESCR_LEN );
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski pNameCell->SetHelpId(HID_TABDESIGN_NAMECELL);
354*b1cdbd2cSJim Jagielski pTypeCell->SetHelpId(HID_TABDESIGN_TYPECELL);
355*b1cdbd2cSJim Jagielski pDescrCell->SetHelpId(HID_TABDESIGN_COMMENTCELL);
356*b1cdbd2cSJim Jagielski pHelpTextCell->SetHelpId(HID_TABDESIGN_HELPTEXT);
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski Size aHeight;
359*b1cdbd2cSJim Jagielski const Control* pControls[] = { pTypeCell,pDescrCell,pNameCell,pHelpTextCell};
360*b1cdbd2cSJim Jagielski for(sal_Size i= 0; i < sizeof(pControls)/sizeof(pControls[0]);++i)
361*b1cdbd2cSJim Jagielski {
362*b1cdbd2cSJim Jagielski const Size aTemp( pControls[i]->GetOptimalSize(WINDOWSIZE_PREFERRED) );
363*b1cdbd2cSJim Jagielski if ( aTemp.Height() > aHeight.Height() )
364*b1cdbd2cSJim Jagielski aHeight.Height() = aTemp.Height();
365*b1cdbd2cSJim Jagielski } // for(int i= 0; i < sizeof(pControls)/sizeof(pControls[0]);++i
366*b1cdbd2cSJim Jagielski SetDataRowHeight(aHeight.Height());
367*b1cdbd2cSJim Jagielski
368*b1cdbd2cSJim Jagielski ClearModified();
369*b1cdbd2cSJim Jagielski }
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
ClearModified()372*b1cdbd2cSJim Jagielski void OTableEditorCtrl::ClearModified()
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
375*b1cdbd2cSJim Jagielski pNameCell->ClearModifyFlag();
376*b1cdbd2cSJim Jagielski pDescrCell->ClearModifyFlag();
377*b1cdbd2cSJim Jagielski pHelpTextCell->ClearModifyFlag();
378*b1cdbd2cSJim Jagielski pTypeCell->SaveValue();
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski
381*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~OTableEditorCtrl()382*b1cdbd2cSJim Jagielski OTableEditorCtrl::~OTableEditorCtrl()
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski DBG_DTOR(OTableEditorCtrl,NULL);
385*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
386*b1cdbd2cSJim Jagielski // Undo-Manager zuruecksetzen
387*b1cdbd2cSJim Jagielski GetUndoManager().Clear();
388*b1cdbd2cSJim Jagielski
389*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
390*b1cdbd2cSJim Jagielski // Moegliche Events aus Queue entfernen
391*b1cdbd2cSJim Jagielski if( nCutEvent )
392*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nCutEvent );
393*b1cdbd2cSJim Jagielski if( nPasteEvent )
394*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nPasteEvent );
395*b1cdbd2cSJim Jagielski if( nDeleteEvent )
396*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nDeleteEvent );
397*b1cdbd2cSJim Jagielski if( nInsNewRowsEvent )
398*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nInsNewRowsEvent );
399*b1cdbd2cSJim Jagielski if( nInvalidateTypeEvent )
400*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nInvalidateTypeEvent );
401*b1cdbd2cSJim Jagielski if( nEntryNotFoundEvent )
402*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nEntryNotFoundEvent );
403*b1cdbd2cSJim Jagielski
404*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
405*b1cdbd2cSJim Jagielski // Controltypen zerstoeren
406*b1cdbd2cSJim Jagielski delete pNameCell;
407*b1cdbd2cSJim Jagielski delete pTypeCell;
408*b1cdbd2cSJim Jagielski delete pDescrCell;
409*b1cdbd2cSJim Jagielski delete pHelpTextCell;
410*b1cdbd2cSJim Jagielski }
411*b1cdbd2cSJim Jagielski
412*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SetDataPtr(long nRow)413*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::SetDataPtr( long nRow )
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
416*b1cdbd2cSJim Jagielski if(nRow == -1)
417*b1cdbd2cSJim Jagielski return sal_False;
418*b1cdbd2cSJim Jagielski
419*b1cdbd2cSJim Jagielski OSL_ENSURE((xub_StrLen)nRow < m_pRowList->size(),"Row is greater than size!");
420*b1cdbd2cSJim Jagielski if(nRow >= (long)m_pRowList->size())
421*b1cdbd2cSJim Jagielski return sal_False;
422*b1cdbd2cSJim Jagielski pActRow = (*m_pRowList)[nRow];
423*b1cdbd2cSJim Jagielski return bool(pActRow);
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski
426*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SeekRow(long _nRow)427*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::SeekRow(long _nRow)
428*b1cdbd2cSJim Jagielski {
429*b1cdbd2cSJim Jagielski // die Basisklasse braucht den Aufruf, da sie sich dort merkt, welche Zeile gepainted wird
430*b1cdbd2cSJim Jagielski EditBrowseBox::SeekRow(_nRow);
431*b1cdbd2cSJim Jagielski
432*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
433*b1cdbd2cSJim Jagielski m_nCurrentPos = _nRow;
434*b1cdbd2cSJim Jagielski return SetDataPtr(_nRow);
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski
437*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
PaintCell(OutputDevice & rDev,const Rectangle & rRect,sal_uInt16 nColumnId) const438*b1cdbd2cSJim Jagielski void OTableEditorCtrl::PaintCell(OutputDevice& rDev, const Rectangle& rRect,
439*b1cdbd2cSJim Jagielski sal_uInt16 nColumnId ) const
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
442*b1cdbd2cSJim Jagielski const String aText( GetCellText( m_nCurrentPos, nColumnId ));
443*b1cdbd2cSJim Jagielski const Point aPos(rRect.TopLeft());
444*b1cdbd2cSJim Jagielski const Size TxtSize(GetDataWindow().GetTextWidth(aText), GetDataWindow().GetTextHeight());
445*b1cdbd2cSJim Jagielski
446*b1cdbd2cSJim Jagielski rDev.Push( PUSH_CLIPREGION );
447*b1cdbd2cSJim Jagielski rDev.SetClipRegion( rRect );
448*b1cdbd2cSJim Jagielski rDev.DrawText( rRect, aText, TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER );
449*b1cdbd2cSJim Jagielski rDev.Pop();
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski
452*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetController(long nRow,sal_uInt16 nColumnId)453*b1cdbd2cSJim Jagielski CellController* OTableEditorCtrl::GetController(long nRow, sal_uInt16 nColumnId)
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
456*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
457*b1cdbd2cSJim Jagielski // Wenn EditorCtrl ReadOnly ist, darf nicht editiert werden
458*b1cdbd2cSJim Jagielski Reference<XPropertySet> xTable = GetView()->getController().getTable();
459*b1cdbd2cSJim Jagielski if (IsReadOnly() || ( xTable.is() &&
460*b1cdbd2cSJim Jagielski xTable->getPropertySetInfo()->hasPropertyByName(PROPERTY_TYPE) &&
461*b1cdbd2cSJim Jagielski ::comphelper::getString(xTable->getPropertyValue(PROPERTY_TYPE)) == ::rtl::OUString::createFromAscii("VIEW")))
462*b1cdbd2cSJim Jagielski return NULL;
463*b1cdbd2cSJim Jagielski
464*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
465*b1cdbd2cSJim Jagielski // Wenn Zeile ReadOnly ist, darf sie nicht editiert werden
466*b1cdbd2cSJim Jagielski SetDataPtr( nRow );
467*b1cdbd2cSJim Jagielski if( pActRow->IsReadOnly() )
468*b1cdbd2cSJim Jagielski return NULL;
469*b1cdbd2cSJim Jagielski
470*b1cdbd2cSJim Jagielski OFieldDescription* pActFieldDescr = pActRow->GetActFieldDescr();
471*b1cdbd2cSJim Jagielski switch (nColumnId)
472*b1cdbd2cSJim Jagielski {
473*b1cdbd2cSJim Jagielski case FIELD_NAME:
474*b1cdbd2cSJim Jagielski return new EditCellController( pNameCell );
475*b1cdbd2cSJim Jagielski case FIELD_TYPE:
476*b1cdbd2cSJim Jagielski if (pActFieldDescr && (pActFieldDescr->GetName().getLength() != 0))
477*b1cdbd2cSJim Jagielski return new ListBoxCellController( pTypeCell );
478*b1cdbd2cSJim Jagielski else return NULL;
479*b1cdbd2cSJim Jagielski case HELP_TEXT:
480*b1cdbd2cSJim Jagielski if (pActFieldDescr && (pActFieldDescr->GetName().getLength() != 0))
481*b1cdbd2cSJim Jagielski return new EditCellController( pHelpTextCell );
482*b1cdbd2cSJim Jagielski else
483*b1cdbd2cSJim Jagielski return NULL;
484*b1cdbd2cSJim Jagielski case COLUMN_DESCRIPTION:
485*b1cdbd2cSJim Jagielski if (pActFieldDescr && (pActFieldDescr->GetName().getLength() != 0))
486*b1cdbd2cSJim Jagielski return new EditCellController( pDescrCell );
487*b1cdbd2cSJim Jagielski else
488*b1cdbd2cSJim Jagielski return NULL;
489*b1cdbd2cSJim Jagielski default:
490*b1cdbd2cSJim Jagielski return NULL;
491*b1cdbd2cSJim Jagielski }
492*b1cdbd2cSJim Jagielski }
493*b1cdbd2cSJim Jagielski
494*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
InitController(CellControllerRef &,long nRow,sal_uInt16 nColumnId)495*b1cdbd2cSJim Jagielski void OTableEditorCtrl::InitController(CellControllerRef&, long nRow, sal_uInt16 nColumnId)
496*b1cdbd2cSJim Jagielski {
497*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
498*b1cdbd2cSJim Jagielski SeekRow( nRow == -1 ? GetCurRow() : nRow);
499*b1cdbd2cSJim Jagielski OFieldDescription* pActFieldDescr = pActRow->GetActFieldDescr();
500*b1cdbd2cSJim Jagielski String aInitString;
501*b1cdbd2cSJim Jagielski
502*b1cdbd2cSJim Jagielski switch (nColumnId)
503*b1cdbd2cSJim Jagielski {
504*b1cdbd2cSJim Jagielski case FIELD_NAME:
505*b1cdbd2cSJim Jagielski if( pActFieldDescr )
506*b1cdbd2cSJim Jagielski aInitString = pActFieldDescr->GetName();
507*b1cdbd2cSJim Jagielski pNameCell->SetText( aInitString );
508*b1cdbd2cSJim Jagielski pNameCell->SaveValue();
509*b1cdbd2cSJim Jagielski break;
510*b1cdbd2cSJim Jagielski case FIELD_TYPE:
511*b1cdbd2cSJim Jagielski {
512*b1cdbd2cSJim Jagielski if ( pActFieldDescr && pActFieldDescr->getTypeInfo() )
513*b1cdbd2cSJim Jagielski aInitString = pActFieldDescr->getTypeInfo()->aUIName;
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
516*b1cdbd2cSJim Jagielski // Anpassen des ComboBoxInhalts
517*b1cdbd2cSJim Jagielski pTypeCell->Clear();
518*b1cdbd2cSJim Jagielski if( !pActFieldDescr )
519*b1cdbd2cSJim Jagielski break;
520*b1cdbd2cSJim Jagielski
521*b1cdbd2cSJim Jagielski const OTypeInfoMap* pTypeInfo = GetView()->getController().getTypeInfo();
522*b1cdbd2cSJim Jagielski OTypeInfoMap::const_iterator aIter = pTypeInfo->begin();
523*b1cdbd2cSJim Jagielski OTypeInfoMap::const_iterator aEnd = pTypeInfo->end();
524*b1cdbd2cSJim Jagielski for(;aIter != aEnd;++aIter)
525*b1cdbd2cSJim Jagielski pTypeCell->InsertEntry( aIter->second->aUIName );
526*b1cdbd2cSJim Jagielski pTypeCell->SelectEntry( aInitString );
527*b1cdbd2cSJim Jagielski }
528*b1cdbd2cSJim Jagielski
529*b1cdbd2cSJim Jagielski break;
530*b1cdbd2cSJim Jagielski case HELP_TEXT:
531*b1cdbd2cSJim Jagielski if( pActFieldDescr )
532*b1cdbd2cSJim Jagielski aInitString = pActFieldDescr->GetHelpText();
533*b1cdbd2cSJim Jagielski pHelpTextCell->SetText( aInitString );
534*b1cdbd2cSJim Jagielski pHelpTextCell->SaveValue();
535*b1cdbd2cSJim Jagielski break;
536*b1cdbd2cSJim Jagielski case COLUMN_DESCRIPTION:
537*b1cdbd2cSJim Jagielski if( pActFieldDescr )
538*b1cdbd2cSJim Jagielski aInitString = pActFieldDescr->GetDescription();
539*b1cdbd2cSJim Jagielski pDescrCell->SetText( aInitString );
540*b1cdbd2cSJim Jagielski pDescrCell->SaveValue();
541*b1cdbd2cSJim Jagielski break;
542*b1cdbd2cSJim Jagielski
543*b1cdbd2cSJim Jagielski }
544*b1cdbd2cSJim Jagielski }
545*b1cdbd2cSJim Jagielski
546*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetRowStatus(long nRow) const547*b1cdbd2cSJim Jagielski EditBrowseBox::RowStatus OTableEditorCtrl::GetRowStatus(long nRow) const
548*b1cdbd2cSJim Jagielski {
549*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
550*b1cdbd2cSJim Jagielski ( (OTableEditorCtrl*)this )->SetDataPtr( nRow );
551*b1cdbd2cSJim Jagielski if( !pActRow )
552*b1cdbd2cSJim Jagielski return EditBrowseBox::CLEAN;
553*b1cdbd2cSJim Jagielski if (nRow >= 0 && nRow == m_nDataPos)
554*b1cdbd2cSJim Jagielski {
555*b1cdbd2cSJim Jagielski if( pActRow->IsPrimaryKey() )
556*b1cdbd2cSJim Jagielski return EditBrowseBox::CURRENT_PRIMARYKEY;
557*b1cdbd2cSJim Jagielski return EditBrowseBox::CURRENT;
558*b1cdbd2cSJim Jagielski }
559*b1cdbd2cSJim Jagielski else
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski if( pActRow->IsPrimaryKey() )
562*b1cdbd2cSJim Jagielski return EditBrowseBox::PRIMARYKEY;
563*b1cdbd2cSJim Jagielski return EditBrowseBox::CLEAN;
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski }
566*b1cdbd2cSJim Jagielski
567*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SaveCurRow()568*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::SaveCurRow()
569*b1cdbd2cSJim Jagielski {
570*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
571*b1cdbd2cSJim Jagielski if (GetFieldDescr(GetCurRow()) == NULL)
572*b1cdbd2cSJim Jagielski // in der Zeile, in der ich mich i.A. befinde, stehen keine Daten
573*b1cdbd2cSJim Jagielski return sal_True;
574*b1cdbd2cSJim Jagielski if (!SaveModified())
575*b1cdbd2cSJim Jagielski return sal_False;
576*b1cdbd2cSJim Jagielski
577*b1cdbd2cSJim Jagielski SetDataPtr(GetCurRow());
578*b1cdbd2cSJim Jagielski pDescrWin->SaveData( pActRow->GetActFieldDescr() );
579*b1cdbd2cSJim Jagielski return sal_True;
580*b1cdbd2cSJim Jagielski }
581*b1cdbd2cSJim Jagielski
582*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
DisplayData(long nRow,sal_Bool bGrabFocus)583*b1cdbd2cSJim Jagielski void OTableEditorCtrl::DisplayData(long nRow, sal_Bool bGrabFocus)
584*b1cdbd2cSJim Jagielski {
585*b1cdbd2cSJim Jagielski // zur richtigen Zelle fahren
586*b1cdbd2cSJim Jagielski SetDataPtr(nRow);
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski // Editier-Modus temporaer aus
589*b1cdbd2cSJim Jagielski sal_Bool bWasEditing = IsEditing();
590*b1cdbd2cSJim Jagielski if (bWasEditing)
591*b1cdbd2cSJim Jagielski DeactivateCell();
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski CellControllerRef aTemp;
594*b1cdbd2cSJim Jagielski InitController(aTemp, nRow, FIELD_NAME);
595*b1cdbd2cSJim Jagielski InitController(aTemp, nRow, FIELD_TYPE);
596*b1cdbd2cSJim Jagielski InitController(aTemp, nRow, COLUMN_DESCRIPTION);
597*b1cdbd2cSJim Jagielski InitController(aTemp, nRow, HELP_TEXT);
598*b1cdbd2cSJim Jagielski
599*b1cdbd2cSJim Jagielski GoToRow(nRow);
600*b1cdbd2cSJim Jagielski // das Description-Window aktualisieren
601*b1cdbd2cSJim Jagielski GetView()->GetDescWin()->DisplayData(GetFieldDescr(nRow));
602*b1cdbd2cSJim Jagielski // neu zeichnen
603*b1cdbd2cSJim Jagielski RowModified(nRow);
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski // wieder an
606*b1cdbd2cSJim Jagielski if (bWasEditing || bGrabFocus)
607*b1cdbd2cSJim Jagielski ActivateCell(nRow, GetCurColumnId(), bGrabFocus);
608*b1cdbd2cSJim Jagielski }
609*b1cdbd2cSJim Jagielski
610*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
CursorMoved()611*b1cdbd2cSJim Jagielski void OTableEditorCtrl::CursorMoved()
612*b1cdbd2cSJim Jagielski {
613*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
614*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
615*b1cdbd2cSJim Jagielski // Zeilenwechsel ?
616*b1cdbd2cSJim Jagielski m_nDataPos = GetCurRow();
617*b1cdbd2cSJim Jagielski if( m_nDataPos != nOldDataPos && m_nDataPos != -1)
618*b1cdbd2cSJim Jagielski {
619*b1cdbd2cSJim Jagielski CellControllerRef aTemp;
620*b1cdbd2cSJim Jagielski InitController(aTemp,m_nDataPos,FIELD_NAME);
621*b1cdbd2cSJim Jagielski InitController(aTemp,m_nDataPos,FIELD_TYPE);
622*b1cdbd2cSJim Jagielski InitController(aTemp,m_nDataPos,COLUMN_DESCRIPTION);
623*b1cdbd2cSJim Jagielski InitController(aTemp,m_nDataPos,HELP_TEXT);
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski
626*b1cdbd2cSJim Jagielski OTableRowView::CursorMoved();
627*b1cdbd2cSJim Jagielski }
628*b1cdbd2cSJim Jagielski
629*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
HasFieldName(const String & rFieldName)630*b1cdbd2cSJim Jagielski sal_Int32 OTableEditorCtrl::HasFieldName( const String& rFieldName )
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
633*b1cdbd2cSJim Jagielski
634*b1cdbd2cSJim Jagielski Reference<XConnection> xCon = GetView()->getController().getConnection();
635*b1cdbd2cSJim Jagielski Reference< XDatabaseMetaData> xMetaData = xCon.is() ? xCon->getMetaData() : Reference< XDatabaseMetaData>();
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski ::comphelper::UStringMixEqual bCase(xMetaData.is() ? xMetaData->supportsMixedCaseQuotedIdentifiers() : sal_True);
638*b1cdbd2cSJim Jagielski
639*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> >::iterator aIter = m_pRowList->begin();
640*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> >::iterator aEnd = m_pRowList->end();
641*b1cdbd2cSJim Jagielski OFieldDescription* pFieldDescr;
642*b1cdbd2cSJim Jagielski sal_Int32 nCount(0);
643*b1cdbd2cSJim Jagielski for(;aIter != aEnd;++aIter)
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski pFieldDescr = (*aIter)->GetActFieldDescr();
646*b1cdbd2cSJim Jagielski if( pFieldDescr && bCase(rFieldName,pFieldDescr->GetName()))
647*b1cdbd2cSJim Jagielski nCount++;
648*b1cdbd2cSJim Jagielski }
649*b1cdbd2cSJim Jagielski return nCount;
650*b1cdbd2cSJim Jagielski }
651*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------------------------
SaveData(long nRow,sal_uInt16 nColId)652*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::SaveData(long nRow, sal_uInt16 nColId)
653*b1cdbd2cSJim Jagielski {
654*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
655*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
656*b1cdbd2cSJim Jagielski // Zellinhalte in Datenstruktur speichern
657*b1cdbd2cSJim Jagielski SetDataPtr( nRow == -1 ? GetCurRow() : nRow);
658*b1cdbd2cSJim Jagielski OFieldDescription* pActFieldDescr = pActRow->GetActFieldDescr();
659*b1cdbd2cSJim Jagielski
660*b1cdbd2cSJim Jagielski switch( nColId)
661*b1cdbd2cSJim Jagielski {
662*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
663*b1cdbd2cSJim Jagielski // Speichern Inhalt NameCell
664*b1cdbd2cSJim Jagielski case FIELD_NAME:
665*b1cdbd2cSJim Jagielski {
666*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
667*b1cdbd2cSJim Jagielski // Wenn kein Name, nichts machen
668*b1cdbd2cSJim Jagielski String aName(pNameCell->GetText());
669*b1cdbd2cSJim Jagielski
670*b1cdbd2cSJim Jagielski if( !aName.Len() )
671*b1cdbd2cSJim Jagielski {
672*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
673*b1cdbd2cSJim Jagielski // Wenn FieldDescr existiert, wurde Feld geloescht und alter Inhalt wird wiederhergestellt
674*b1cdbd2cSJim Jagielski if (pActFieldDescr)
675*b1cdbd2cSJim Jagielski {
676*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction(new OTableEditorTypeSelUndoAct(this, nRow, FIELD_TYPE, pActFieldDescr->getTypeInfo()));
677*b1cdbd2cSJim Jagielski SwitchType(TOTypeInfoSP());
678*b1cdbd2cSJim Jagielski pActFieldDescr = pActRow->GetActFieldDescr();
679*b1cdbd2cSJim Jagielski }
680*b1cdbd2cSJim Jagielski else
681*b1cdbd2cSJim Jagielski return sal_True;
682*b1cdbd2cSJim Jagielski }
683*b1cdbd2cSJim Jagielski if(pActFieldDescr)
684*b1cdbd2cSJim Jagielski pActFieldDescr->SetName( aName );
685*b1cdbd2cSJim Jagielski pNameCell->ClearModifyFlag();
686*b1cdbd2cSJim Jagielski
687*b1cdbd2cSJim Jagielski break;
688*b1cdbd2cSJim Jagielski }
689*b1cdbd2cSJim Jagielski
690*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
691*b1cdbd2cSJim Jagielski // Speichern Inhalt TypeCell
692*b1cdbd2cSJim Jagielski case FIELD_TYPE:
693*b1cdbd2cSJim Jagielski break;
694*b1cdbd2cSJim Jagielski
695*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
696*b1cdbd2cSJim Jagielski // Speichern Inhalt DescrCell
697*b1cdbd2cSJim Jagielski case HELP_TEXT:
698*b1cdbd2cSJim Jagielski {
699*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
700*b1cdbd2cSJim Jagielski // Wenn aktuelle Feldbeschreibung NULL, Default setzen
701*b1cdbd2cSJim Jagielski if( !pActFieldDescr )
702*b1cdbd2cSJim Jagielski {
703*b1cdbd2cSJim Jagielski pHelpTextCell->SetText(String());
704*b1cdbd2cSJim Jagielski pHelpTextCell->ClearModifyFlag();
705*b1cdbd2cSJim Jagielski }
706*b1cdbd2cSJim Jagielski else
707*b1cdbd2cSJim Jagielski pActFieldDescr->SetHelpText( pHelpTextCell->GetText() );
708*b1cdbd2cSJim Jagielski break;
709*b1cdbd2cSJim Jagielski }
710*b1cdbd2cSJim Jagielski case COLUMN_DESCRIPTION:
711*b1cdbd2cSJim Jagielski {
712*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
713*b1cdbd2cSJim Jagielski // Wenn aktuelle Feldbeschreibung NULL, Default setzen
714*b1cdbd2cSJim Jagielski if( !pActFieldDescr )
715*b1cdbd2cSJim Jagielski {
716*b1cdbd2cSJim Jagielski pDescrCell->SetText(String());
717*b1cdbd2cSJim Jagielski pDescrCell->ClearModifyFlag();
718*b1cdbd2cSJim Jagielski }
719*b1cdbd2cSJim Jagielski else
720*b1cdbd2cSJim Jagielski pActFieldDescr->SetDescription( pDescrCell->GetText() );
721*b1cdbd2cSJim Jagielski break;
722*b1cdbd2cSJim Jagielski }
723*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_DEFAULT:
724*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_REQUIRED:
725*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_TEXTLEN:
726*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_NUMTYPE:
727*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_AUTOINC:
728*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_LENGTH:
729*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_SCALE:
730*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_BOOL_DEFAULT:
731*b1cdbd2cSJim Jagielski pDescrWin->SaveData(pActFieldDescr);
732*b1cdbd2cSJim Jagielski
733*b1cdbd2cSJim Jagielski if ( FIELD_PROPERTY_AUTOINC == nColId && pActFieldDescr->IsAutoIncrement() )
734*b1cdbd2cSJim Jagielski {
735*b1cdbd2cSJim Jagielski OTableController& rController = GetView()->getController();
736*b1cdbd2cSJim Jagielski if ( rController.isAutoIncrementPrimaryKey() )
737*b1cdbd2cSJim Jagielski {
738*b1cdbd2cSJim Jagielski pActFieldDescr->SetPrimaryKey( true );
739*b1cdbd2cSJim Jagielski InvalidateHandleColumn();
740*b1cdbd2cSJim Jagielski Invalidate();
741*b1cdbd2cSJim Jagielski }
742*b1cdbd2cSJim Jagielski }
743*b1cdbd2cSJim Jagielski break;
744*b1cdbd2cSJim Jagielski }
745*b1cdbd2cSJim Jagielski return sal_True;
746*b1cdbd2cSJim Jagielski }
747*b1cdbd2cSJim Jagielski
748*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SaveModified()749*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::SaveModified()
750*b1cdbd2cSJim Jagielski {
751*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
752*b1cdbd2cSJim Jagielski sal_uInt16 nColId = GetCurColumnId();
753*b1cdbd2cSJim Jagielski
754*b1cdbd2cSJim Jagielski switch( nColId )
755*b1cdbd2cSJim Jagielski {
756*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
757*b1cdbd2cSJim Jagielski // NameCell
758*b1cdbd2cSJim Jagielski case FIELD_NAME:
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski // removed the former duplicate-check. this is done in OTableDocShell::CheckDefConsistency now.
761*b1cdbd2cSJim Jagielski // FS - 07.12.99 - 69575
762*b1cdbd2cSJim Jagielski
763*b1cdbd2cSJim Jagielski } break;
764*b1cdbd2cSJim Jagielski
765*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
766*b1cdbd2cSJim Jagielski // TypeCell
767*b1cdbd2cSJim Jagielski case FIELD_TYPE:
768*b1cdbd2cSJim Jagielski {
769*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
770*b1cdbd2cSJim Jagielski // Type umstellen
771*b1cdbd2cSJim Jagielski resetType();
772*b1cdbd2cSJim Jagielski } break;
773*b1cdbd2cSJim Jagielski }
774*b1cdbd2cSJim Jagielski
775*b1cdbd2cSJim Jagielski return sal_True;
776*b1cdbd2cSJim Jagielski }
777*b1cdbd2cSJim Jagielski
778*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
CursorMoving(long nNewRow,sal_uInt16 nNewCol)779*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::CursorMoving(long nNewRow, sal_uInt16 nNewCol)
780*b1cdbd2cSJim Jagielski {
781*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
782*b1cdbd2cSJim Jagielski
783*b1cdbd2cSJim Jagielski if (!EditBrowseBox::CursorMoving(nNewRow, nNewCol))
784*b1cdbd2cSJim Jagielski return sal_False;
785*b1cdbd2cSJim Jagielski
786*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
787*b1cdbd2cSJim Jagielski // Wird nach SaveModified() gerufen, aktuelle Zeile ist noch die alte
788*b1cdbd2cSJim Jagielski m_nDataPos = nNewRow;
789*b1cdbd2cSJim Jagielski nOldDataPos = GetCurRow();
790*b1cdbd2cSJim Jagielski
791*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
792*b1cdbd2cSJim Jagielski // Marker umsetzen
793*b1cdbd2cSJim Jagielski InvalidateStatusCell( nOldDataPos );
794*b1cdbd2cSJim Jagielski InvalidateStatusCell( m_nDataPos );
795*b1cdbd2cSJim Jagielski
796*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
797*b1cdbd2cSJim Jagielski // Daten des Propertyfensters speichern
798*b1cdbd2cSJim Jagielski if( SetDataPtr(nOldDataPos) && pDescrWin)
799*b1cdbd2cSJim Jagielski pDescrWin->SaveData( pActRow->GetActFieldDescr() );
800*b1cdbd2cSJim Jagielski
801*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
802*b1cdbd2cSJim Jagielski // Neue Daten im Propertyfenster anzeigen
803*b1cdbd2cSJim Jagielski if( SetDataPtr(m_nDataPos) && pDescrWin)
804*b1cdbd2cSJim Jagielski pDescrWin->DisplayData( pActRow->GetActFieldDescr() );
805*b1cdbd2cSJim Jagielski
806*b1cdbd2cSJim Jagielski return sal_True;
807*b1cdbd2cSJim Jagielski }
808*b1cdbd2cSJim Jagielski
809*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
810*b1cdbd2cSJim Jagielski IMPL_LINK( OTableEditorCtrl, InvalidateFieldType, void*, /*EMPTYTAG*/ )
811*b1cdbd2cSJim Jagielski {
812*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
813*b1cdbd2cSJim Jagielski nInvalidateTypeEvent = 0;
814*b1cdbd2cSJim Jagielski Invalidate( GetFieldRectPixel(nOldDataPos, FIELD_TYPE) );
815*b1cdbd2cSJim Jagielski
816*b1cdbd2cSJim Jagielski return 0;
817*b1cdbd2cSJim Jagielski }
818*b1cdbd2cSJim Jagielski
819*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
820*b1cdbd2cSJim Jagielski IMPL_LINK( OTableEditorCtrl, EntryNotFound, void*, /*EMPTYTAG*/ )
821*b1cdbd2cSJim Jagielski {
822*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
823*b1cdbd2cSJim Jagielski nEntryNotFoundEvent = 0;
824*b1cdbd2cSJim Jagielski ErrorBox( this, ModuleRes(ERR_INVALID_LISTBOX_ENTRY) ).Execute();
825*b1cdbd2cSJim Jagielski
826*b1cdbd2cSJim Jagielski return 0;
827*b1cdbd2cSJim Jagielski }
828*b1cdbd2cSJim Jagielski
829*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
CellModified(long nRow,sal_uInt16 nColId)830*b1cdbd2cSJim Jagielski void OTableEditorCtrl::CellModified( long nRow, sal_uInt16 nColId )
831*b1cdbd2cSJim Jagielski {
832*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
833*b1cdbd2cSJim Jagielski
834*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
835*b1cdbd2cSJim Jagielski // Wenn aktuelle Feldbeschreibung NULL, Default setzen
836*b1cdbd2cSJim Jagielski if(nRow == -1)
837*b1cdbd2cSJim Jagielski nRow = GetCurRow();
838*b1cdbd2cSJim Jagielski SetDataPtr( nRow );
839*b1cdbd2cSJim Jagielski OFieldDescription* pActFieldDescr = pActRow->GetActFieldDescr();
840*b1cdbd2cSJim Jagielski
841*b1cdbd2cSJim Jagielski String sActionDescription;
842*b1cdbd2cSJim Jagielski switch ( nColId )
843*b1cdbd2cSJim Jagielski {
844*b1cdbd2cSJim Jagielski case FIELD_NAME: sActionDescription = String( ModuleRes( STR_CHANGE_COLUMN_NAME ) ); break;
845*b1cdbd2cSJim Jagielski case FIELD_TYPE: sActionDescription = String( ModuleRes( STR_CHANGE_COLUMN_TYPE ) ); break;
846*b1cdbd2cSJim Jagielski case HELP_TEXT:
847*b1cdbd2cSJim Jagielski case COLUMN_DESCRIPTION: sActionDescription = String( ModuleRes( STR_CHANGE_COLUMN_DESCRIPTION ) ); break;
848*b1cdbd2cSJim Jagielski default: sActionDescription = String( ModuleRes( STR_CHANGE_COLUMN_ATTRIBUTE ) ); break;
849*b1cdbd2cSJim Jagielski }
850*b1cdbd2cSJim Jagielski
851*b1cdbd2cSJim Jagielski GetUndoManager().EnterListAction( sActionDescription, String() );
852*b1cdbd2cSJim Jagielski if (!pActFieldDescr)
853*b1cdbd2cSJim Jagielski {
854*b1cdbd2cSJim Jagielski const OTypeInfoMap* pTypeInfoMap = GetView()->getController().getTypeInfo();
855*b1cdbd2cSJim Jagielski if ( !pTypeInfoMap->empty() )
856*b1cdbd2cSJim Jagielski {
857*b1cdbd2cSJim Jagielski OTypeInfoMap::const_iterator aTypeIter = pTypeInfoMap->find(DataType::VARCHAR);
858*b1cdbd2cSJim Jagielski if ( aTypeIter == pTypeInfoMap->end() )
859*b1cdbd2cSJim Jagielski aTypeIter = pTypeInfoMap->begin();
860*b1cdbd2cSJim Jagielski pActRow->SetFieldType( aTypeIter->second );
861*b1cdbd2cSJim Jagielski }
862*b1cdbd2cSJim Jagielski else
863*b1cdbd2cSJim Jagielski pActRow->SetFieldType( GetView()->getController().getTypeInfoFallBack() );
864*b1cdbd2cSJim Jagielski
865*b1cdbd2cSJim Jagielski nInvalidateTypeEvent = Application::PostUserEvent( LINK(this, OTableEditorCtrl, InvalidateFieldType) );
866*b1cdbd2cSJim Jagielski pActFieldDescr = pActRow->GetActFieldDescr();
867*b1cdbd2cSJim Jagielski pDescrWin->DisplayData( pActFieldDescr );
868*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction( new OTableEditorTypeSelUndoAct(this, nRow, nColId+1, TOTypeInfoSP()) );
869*b1cdbd2cSJim Jagielski }
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski if( nColId != FIELD_TYPE )
872*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction( new OTableDesignCellUndoAct(this, nRow, nColId) );
873*b1cdbd2cSJim Jagielski else
874*b1cdbd2cSJim Jagielski {
875*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction(new OTableEditorTypeSelUndoAct(this, GetCurRow(), nColId, GetFieldDescr(GetCurRow())->getTypeInfo()));
876*b1cdbd2cSJim Jagielski resetType();
877*b1cdbd2cSJim Jagielski }
878*b1cdbd2cSJim Jagielski
879*b1cdbd2cSJim Jagielski SaveData(nRow,nColId);
880*b1cdbd2cSJim Jagielski // SaveData could create a undo action as well
881*b1cdbd2cSJim Jagielski GetUndoManager().LeaveListAction();
882*b1cdbd2cSJim Jagielski RowModified(nRow);
883*b1cdbd2cSJim Jagielski CellControllerRef xController(Controller());
884*b1cdbd2cSJim Jagielski if(xController.Is())
885*b1cdbd2cSJim Jagielski xController->SetModified();
886*b1cdbd2cSJim Jagielski
887*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
888*b1cdbd2cSJim Jagielski // Das ModifyFlag setzen
889*b1cdbd2cSJim Jagielski GetView()->getController().setModified( sal_True );
890*b1cdbd2cSJim Jagielski InvalidateFeatures();
891*b1cdbd2cSJim Jagielski }
892*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
resetType()893*b1cdbd2cSJim Jagielski void OTableEditorCtrl::resetType()
894*b1cdbd2cSJim Jagielski {
895*b1cdbd2cSJim Jagielski sal_uInt16 nPos = pTypeCell->GetSelectEntryPos();
896*b1cdbd2cSJim Jagielski if(nPos != LISTBOX_ENTRY_NOTFOUND)
897*b1cdbd2cSJim Jagielski SwitchType( GetView()->getController().getTypeInfo(nPos) );
898*b1cdbd2cSJim Jagielski else
899*b1cdbd2cSJim Jagielski SwitchType(TOTypeInfoSP());
900*b1cdbd2cSJim Jagielski }
901*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
CellModified()902*b1cdbd2cSJim Jagielski void OTableEditorCtrl::CellModified()
903*b1cdbd2cSJim Jagielski {
904*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
905*b1cdbd2cSJim Jagielski CellModified( GetCurRow(), GetCurColumnId() );
906*b1cdbd2cSJim Jagielski }
907*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
InvalidateFeatures()908*b1cdbd2cSJim Jagielski void OTableEditorCtrl::InvalidateFeatures()
909*b1cdbd2cSJim Jagielski {
910*b1cdbd2cSJim Jagielski GetView()->getController().InvalidateFeature(SID_UNDO);
911*b1cdbd2cSJim Jagielski GetView()->getController().InvalidateFeature(SID_REDO);
912*b1cdbd2cSJim Jagielski GetView()->getController().InvalidateFeature(SID_SAVEDOC);
913*b1cdbd2cSJim Jagielski }
914*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
Undo()915*b1cdbd2cSJim Jagielski void OTableEditorCtrl::Undo()
916*b1cdbd2cSJim Jagielski {
917*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
918*b1cdbd2cSJim Jagielski
919*b1cdbd2cSJim Jagielski InvalidateFeatures();
920*b1cdbd2cSJim Jagielski }
921*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
Redo()922*b1cdbd2cSJim Jagielski void OTableEditorCtrl::Redo()
923*b1cdbd2cSJim Jagielski {
924*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
925*b1cdbd2cSJim Jagielski InvalidateFeatures();
926*b1cdbd2cSJim Jagielski }
927*b1cdbd2cSJim Jagielski
928*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
CopyRows()929*b1cdbd2cSJim Jagielski void OTableEditorCtrl::CopyRows()
930*b1cdbd2cSJim Jagielski {
931*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
932*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
933*b1cdbd2cSJim Jagielski // set to the right row and save it
934*b1cdbd2cSJim Jagielski if( SetDataPtr(m_nDataPos) )
935*b1cdbd2cSJim Jagielski pDescrWin->SaveData( pActRow->GetActFieldDescr() );
936*b1cdbd2cSJim Jagielski
937*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
938*b1cdbd2cSJim Jagielski // Selektierte Zeilen in die ClipboardListe kopieren
939*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pClipboardRow;
940*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pRow;
941*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> > vClipboardList;
942*b1cdbd2cSJim Jagielski vClipboardList.reserve(GetSelectRowCount());
943*b1cdbd2cSJim Jagielski
944*b1cdbd2cSJim Jagielski for( long nIndex=FirstSelectedRow(); nIndex >= 0 && nIndex < static_cast<long>(m_pRowList->size()); nIndex=NextSelectedRow() )
945*b1cdbd2cSJim Jagielski {
946*b1cdbd2cSJim Jagielski pRow = (*m_pRowList)[nIndex];
947*b1cdbd2cSJim Jagielski OSL_ENSURE(pRow,"OTableEditorCtrl::CopyRows: Row is NULL!");
948*b1cdbd2cSJim Jagielski if ( pRow && pRow->GetActFieldDescr() )
949*b1cdbd2cSJim Jagielski {
950*b1cdbd2cSJim Jagielski pClipboardRow.reset(new OTableRow( *pRow ));
951*b1cdbd2cSJim Jagielski vClipboardList.push_back( pClipboardRow);
952*b1cdbd2cSJim Jagielski }
953*b1cdbd2cSJim Jagielski }
954*b1cdbd2cSJim Jagielski if(!vClipboardList.empty())
955*b1cdbd2cSJim Jagielski {
956*b1cdbd2cSJim Jagielski OTableRowExchange* pData = new OTableRowExchange(vClipboardList);
957*b1cdbd2cSJim Jagielski Reference< ::com::sun::star::datatransfer::XTransferable> xRef = pData;
958*b1cdbd2cSJim Jagielski pData->CopyToClipboard(GetParent());
959*b1cdbd2cSJim Jagielski }
960*b1cdbd2cSJim Jagielski }
961*b1cdbd2cSJim Jagielski
962*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GenerateName(const String & rName)963*b1cdbd2cSJim Jagielski String OTableEditorCtrl::GenerateName( const String& rName )
964*b1cdbd2cSJim Jagielski {
965*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
966*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
967*b1cdbd2cSJim Jagielski // Basisnamen zum Anhaengen einer Numerierung erstellen
968*b1cdbd2cSJim Jagielski String aBaseName;
969*b1cdbd2cSJim Jagielski Reference<XConnection> xCon = GetView()->getController().getConnection();
970*b1cdbd2cSJim Jagielski Reference< XDatabaseMetaData> xMetaData = xCon.is() ? xCon->getMetaData() : Reference< XDatabaseMetaData>();
971*b1cdbd2cSJim Jagielski
972*b1cdbd2cSJim Jagielski xub_StrLen nMaxTextLen((xub_StrLen)( xMetaData.is() ? xMetaData->getMaxColumnNameLength() : 0));
973*b1cdbd2cSJim Jagielski
974*b1cdbd2cSJim Jagielski if( (rName.Len()+2) >nMaxTextLen )
975*b1cdbd2cSJim Jagielski aBaseName = rName.Copy( 0, nMaxTextLen-2 );
976*b1cdbd2cSJim Jagielski else
977*b1cdbd2cSJim Jagielski aBaseName = rName;
978*b1cdbd2cSJim Jagielski
979*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
980*b1cdbd2cSJim Jagielski // Namen durchnumerieren (bis 99)
981*b1cdbd2cSJim Jagielski String aFieldName( rName);
982*b1cdbd2cSJim Jagielski sal_Int32 i=1;
983*b1cdbd2cSJim Jagielski while( HasFieldName(aFieldName) )
984*b1cdbd2cSJim Jagielski {
985*b1cdbd2cSJim Jagielski aFieldName = aBaseName;
986*b1cdbd2cSJim Jagielski aFieldName += String::CreateFromInt32(i);
987*b1cdbd2cSJim Jagielski i++;
988*b1cdbd2cSJim Jagielski }
989*b1cdbd2cSJim Jagielski
990*b1cdbd2cSJim Jagielski return aFieldName;
991*b1cdbd2cSJim Jagielski }
992*b1cdbd2cSJim Jagielski
993*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
InsertRows(long nRow)994*b1cdbd2cSJim Jagielski void OTableEditorCtrl::InsertRows( long nRow )
995*b1cdbd2cSJim Jagielski {
996*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
997*b1cdbd2cSJim Jagielski
998*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> > vInsertedUndoRedoRows; // need for undo/redo handling
999*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1000*b1cdbd2cSJim Jagielski // get rows from clipboard
1001*b1cdbd2cSJim Jagielski TransferableDataHelper aTransferData(TransferableDataHelper::CreateFromSystemClipboard(GetParent()));
1002*b1cdbd2cSJim Jagielski if(aTransferData.HasFormat(SOT_FORMATSTR_ID_SBA_TABED))
1003*b1cdbd2cSJim Jagielski {
1004*b1cdbd2cSJim Jagielski SotStorageStreamRef aStreamRef;
1005*b1cdbd2cSJim Jagielski aTransferData.GetSotStorageStream(SOT_FORMATSTR_ID_SBA_TABED,aStreamRef);
1006*b1cdbd2cSJim Jagielski if(aStreamRef.Is())
1007*b1cdbd2cSJim Jagielski {
1008*b1cdbd2cSJim Jagielski aStreamRef->Seek(STREAM_SEEK_TO_BEGIN);
1009*b1cdbd2cSJim Jagielski aStreamRef->ResetError();
1010*b1cdbd2cSJim Jagielski long nInsertRow = nRow;
1011*b1cdbd2cSJim Jagielski String aFieldName;
1012*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pRow;
1013*b1cdbd2cSJim Jagielski sal_Int32 nSize = 0;
1014*b1cdbd2cSJim Jagielski (*aStreamRef) >> nSize;
1015*b1cdbd2cSJim Jagielski vInsertedUndoRedoRows.reserve(nSize);
1016*b1cdbd2cSJim Jagielski for(sal_Int32 i=0;i < nSize;++i)
1017*b1cdbd2cSJim Jagielski {
1018*b1cdbd2cSJim Jagielski pRow.reset(new OTableRow());
1019*b1cdbd2cSJim Jagielski (*aStreamRef) >> *pRow;
1020*b1cdbd2cSJim Jagielski pRow->SetReadOnly( sal_False );
1021*b1cdbd2cSJim Jagielski sal_Int32 nType = pRow->GetActFieldDescr()->GetType();
1022*b1cdbd2cSJim Jagielski if ( pRow->GetActFieldDescr() )
1023*b1cdbd2cSJim Jagielski pRow->GetActFieldDescr()->SetType(GetView()->getController().getTypeInfoByType(nType));
1024*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1025*b1cdbd2cSJim Jagielski // Anpassen des Feldnamens
1026*b1cdbd2cSJim Jagielski aFieldName = GenerateName( pRow->GetActFieldDescr()->GetName() );
1027*b1cdbd2cSJim Jagielski pRow->GetActFieldDescr()->SetName( aFieldName );
1028*b1cdbd2cSJim Jagielski pRow->SetPos(nInsertRow);
1029*b1cdbd2cSJim Jagielski m_pRowList->insert( m_pRowList->begin()+nInsertRow,pRow );
1030*b1cdbd2cSJim Jagielski vInsertedUndoRedoRows.push_back(::boost::shared_ptr<OTableRow>(new OTableRow(*pRow)));
1031*b1cdbd2cSJim Jagielski nInsertRow++;
1032*b1cdbd2cSJim Jagielski }
1033*b1cdbd2cSJim Jagielski }
1034*b1cdbd2cSJim Jagielski }
1035*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1036*b1cdbd2cSJim Jagielski // Beim RowInserted wird CursorMoved gerufen.
1037*b1cdbd2cSJim Jagielski // Die UI-Daten duerfen hier beim CursorMoved nicht gespeichert werden.
1038*b1cdbd2cSJim Jagielski bSaveOnMove = sal_False;
1039*b1cdbd2cSJim Jagielski RowInserted( nRow,vInsertedUndoRedoRows.size(),sal_True );
1040*b1cdbd2cSJim Jagielski bSaveOnMove = sal_True;
1041*b1cdbd2cSJim Jagielski
1042*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1043*b1cdbd2cSJim Jagielski // Undo-Action erzeugen
1044*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction( new OTableEditorInsUndoAct(this, nRow,vInsertedUndoRedoRows) );
1045*b1cdbd2cSJim Jagielski GetView()->getController().setModified( sal_True );
1046*b1cdbd2cSJim Jagielski InvalidateFeatures();
1047*b1cdbd2cSJim Jagielski }
1048*b1cdbd2cSJim Jagielski
1049*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
DeleteRows()1050*b1cdbd2cSJim Jagielski void OTableEditorCtrl::DeleteRows()
1051*b1cdbd2cSJim Jagielski {
1052*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1053*b1cdbd2cSJim Jagielski OSL_ENSURE(GetView()->getController().isDropAllowed(),"Call of DeleteRows not valid here. Please check isDropAllowed!");
1054*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1055*b1cdbd2cSJim Jagielski // Undo-Action erzeugen
1056*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction( new OTableEditorDelUndoAct(this) );
1057*b1cdbd2cSJim Jagielski
1058*b1cdbd2cSJim Jagielski
1059*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1060*b1cdbd2cSJim Jagielski // Alle markierten Zeilen loeschen
1061*b1cdbd2cSJim Jagielski long nIndex = FirstSelectedRow();
1062*b1cdbd2cSJim Jagielski nOldDataPos = nIndex;
1063*b1cdbd2cSJim Jagielski bSaveOnMove = sal_False;
1064*b1cdbd2cSJim Jagielski
1065*b1cdbd2cSJim Jagielski while( nIndex >= 0 && nIndex < static_cast<long>(m_pRowList->size()) )
1066*b1cdbd2cSJim Jagielski {
1067*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1068*b1cdbd2cSJim Jagielski // Zeile entfernen
1069*b1cdbd2cSJim Jagielski m_pRowList->erase( m_pRowList->begin()+nIndex );
1070*b1cdbd2cSJim Jagielski RowRemoved( nIndex, 1, sal_True );
1071*b1cdbd2cSJim Jagielski
1072*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1073*b1cdbd2cSJim Jagielski // Leerzeile am Ende wieder einfuegen
1074*b1cdbd2cSJim Jagielski m_pRowList->push_back( ::boost::shared_ptr<OTableRow>(new OTableRow()));
1075*b1cdbd2cSJim Jagielski RowInserted( GetRowCount()-1, 1, sal_True );
1076*b1cdbd2cSJim Jagielski
1077*b1cdbd2cSJim Jagielski nIndex = FirstSelectedRow();
1078*b1cdbd2cSJim Jagielski }
1079*b1cdbd2cSJim Jagielski
1080*b1cdbd2cSJim Jagielski bSaveOnMove = sal_True;
1081*b1cdbd2cSJim Jagielski
1082*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1083*b1cdbd2cSJim Jagielski // Erzwingen, dass der aktuelle Datensatz angezeigt wird
1084*b1cdbd2cSJim Jagielski m_nDataPos = GetCurRow();
1085*b1cdbd2cSJim Jagielski InvalidateStatusCell( nOldDataPos );
1086*b1cdbd2cSJim Jagielski InvalidateStatusCell( m_nDataPos );
1087*b1cdbd2cSJim Jagielski SetDataPtr( m_nDataPos );
1088*b1cdbd2cSJim Jagielski ActivateCell();
1089*b1cdbd2cSJim Jagielski pDescrWin->DisplayData( pActRow->GetActFieldDescr() );
1090*b1cdbd2cSJim Jagielski GetView()->getController().setModified( sal_True );
1091*b1cdbd2cSJim Jagielski InvalidateFeatures();
1092*b1cdbd2cSJim Jagielski }
1093*b1cdbd2cSJim Jagielski
1094*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
InsertNewRows(long nRow)1095*b1cdbd2cSJim Jagielski void OTableEditorCtrl::InsertNewRows( long nRow )
1096*b1cdbd2cSJim Jagielski {
1097*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1098*b1cdbd2cSJim Jagielski OSL_ENSURE(GetView()->getController().isAddAllowed(),"Call of InsertNewRows not valid here. Please check isAppendAllowed!");
1099*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1100*b1cdbd2cSJim Jagielski // Undo-Action erzeugen
1101*b1cdbd2cSJim Jagielski long nInsertRows = GetSelectRowCount();
1102*b1cdbd2cSJim Jagielski if( !nInsertRows )
1103*b1cdbd2cSJim Jagielski nInsertRows = 1;
1104*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction( new OTableEditorInsNewUndoAct(this, nRow, nInsertRows) );
1105*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1106*b1cdbd2cSJim Jagielski // Zahl der selektierten Zeilen werden neu eingefuegt
1107*b1cdbd2cSJim Jagielski for( long i=nRow; i<(nRow+nInsertRows); i++ )
1108*b1cdbd2cSJim Jagielski m_pRowList->insert( m_pRowList->begin()+i ,::boost::shared_ptr<OTableRow>(new OTableRow()));
1109*b1cdbd2cSJim Jagielski RowInserted( nRow, nInsertRows, sal_True );
1110*b1cdbd2cSJim Jagielski
1111*b1cdbd2cSJim Jagielski GetView()->getController().setModified( sal_True );
1112*b1cdbd2cSJim Jagielski InvalidateFeatures();
1113*b1cdbd2cSJim Jagielski }
1114*b1cdbd2cSJim Jagielski
1115*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetControlText(long nRow,sal_uInt16 nColId)1116*b1cdbd2cSJim Jagielski String OTableEditorCtrl::GetControlText( long nRow, sal_uInt16 nColId )
1117*b1cdbd2cSJim Jagielski {
1118*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1119*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1120*b1cdbd2cSJim Jagielski // Controls des Browsers auslesen
1121*b1cdbd2cSJim Jagielski if( nColId < FIELD_FIRST_VIRTUAL_COLUMN )
1122*b1cdbd2cSJim Jagielski {
1123*b1cdbd2cSJim Jagielski GoToRow( nRow );
1124*b1cdbd2cSJim Jagielski GoToColumnId( nColId );
1125*b1cdbd2cSJim Jagielski CellControllerRef xController = Controller();
1126*b1cdbd2cSJim Jagielski if(xController.Is())
1127*b1cdbd2cSJim Jagielski return xController->GetWindow().GetText();
1128*b1cdbd2cSJim Jagielski else
1129*b1cdbd2cSJim Jagielski return GetCellText(nRow,nColId);
1130*b1cdbd2cSJim Jagielski }
1131*b1cdbd2cSJim Jagielski
1132*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1133*b1cdbd2cSJim Jagielski // Controls der Tabpage Auslesen
1134*b1cdbd2cSJim Jagielski else
1135*b1cdbd2cSJim Jagielski return pDescrWin->GetControlText( nColId );
1136*b1cdbd2cSJim Jagielski }
1137*b1cdbd2cSJim Jagielski
1138*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SetControlText(long nRow,sal_uInt16 nColId,const String & rText)1139*b1cdbd2cSJim Jagielski void OTableEditorCtrl::SetControlText( long nRow, sal_uInt16 nColId, const String& rText )
1140*b1cdbd2cSJim Jagielski {
1141*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1142*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1143*b1cdbd2cSJim Jagielski // Controls des Browsers setzen
1144*b1cdbd2cSJim Jagielski if( nColId < FIELD_FIRST_VIRTUAL_COLUMN )
1145*b1cdbd2cSJim Jagielski {
1146*b1cdbd2cSJim Jagielski GoToRow( nRow );
1147*b1cdbd2cSJim Jagielski GoToColumnId( nColId );
1148*b1cdbd2cSJim Jagielski CellControllerRef xController = Controller();
1149*b1cdbd2cSJim Jagielski if(xController.Is())
1150*b1cdbd2cSJim Jagielski xController->GetWindow().SetText( rText );
1151*b1cdbd2cSJim Jagielski else
1152*b1cdbd2cSJim Jagielski RowModified(nRow,nColId);
1153*b1cdbd2cSJim Jagielski }
1154*b1cdbd2cSJim Jagielski
1155*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1156*b1cdbd2cSJim Jagielski // Controls der Tabpage setzen
1157*b1cdbd2cSJim Jagielski else
1158*b1cdbd2cSJim Jagielski {
1159*b1cdbd2cSJim Jagielski pDescrWin->SetControlText( nColId, rText );
1160*b1cdbd2cSJim Jagielski }
1161*b1cdbd2cSJim Jagielski }
1162*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SetCellData(long nRow,sal_uInt16 nColId,const TOTypeInfoSP & _pTypeInfo)1163*b1cdbd2cSJim Jagielski void OTableEditorCtrl::SetCellData( long nRow, sal_uInt16 nColId, const TOTypeInfoSP& _pTypeInfo )
1164*b1cdbd2cSJim Jagielski {
1165*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1166*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1167*b1cdbd2cSJim Jagielski // Aktuellen Datenzeiger umsetzen
1168*b1cdbd2cSJim Jagielski if( nRow == -1 )
1169*b1cdbd2cSJim Jagielski nRow = GetCurRow();
1170*b1cdbd2cSJim Jagielski OFieldDescription* pFieldDescr = GetFieldDescr( nRow );
1171*b1cdbd2cSJim Jagielski if( !pFieldDescr && nColId != FIELD_TYPE)
1172*b1cdbd2cSJim Jagielski return;
1173*b1cdbd2cSJim Jagielski
1174*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1175*b1cdbd2cSJim Jagielski // Einzelne Felder setzen
1176*b1cdbd2cSJim Jagielski switch( nColId )
1177*b1cdbd2cSJim Jagielski {
1178*b1cdbd2cSJim Jagielski case FIELD_TYPE:
1179*b1cdbd2cSJim Jagielski SwitchType( _pTypeInfo );
1180*b1cdbd2cSJim Jagielski break;
1181*b1cdbd2cSJim Jagielski default:
1182*b1cdbd2cSJim Jagielski OSL_ENSURE(sal_False, "OTableEditorCtrl::SetCellData: invalid column!");
1183*b1cdbd2cSJim Jagielski }
1184*b1cdbd2cSJim Jagielski SetControlText(nRow,nColId,_pTypeInfo.get() ? _pTypeInfo->aUIName : ::rtl::OUString());
1185*b1cdbd2cSJim Jagielski }
1186*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SetCellData(long nRow,sal_uInt16 nColId,const::com::sun::star::uno::Any & _rNewData)1187*b1cdbd2cSJim Jagielski void OTableEditorCtrl::SetCellData( long nRow, sal_uInt16 nColId, const ::com::sun::star::uno::Any& _rNewData )
1188*b1cdbd2cSJim Jagielski {
1189*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1190*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1191*b1cdbd2cSJim Jagielski // Aktuellen Datenzeiger umsetzen
1192*b1cdbd2cSJim Jagielski if( nRow == -1 )
1193*b1cdbd2cSJim Jagielski nRow = GetCurRow();
1194*b1cdbd2cSJim Jagielski OFieldDescription* pFieldDescr = GetFieldDescr( nRow );
1195*b1cdbd2cSJim Jagielski if( !pFieldDescr && nColId != FIELD_TYPE)
1196*b1cdbd2cSJim Jagielski return;
1197*b1cdbd2cSJim Jagielski
1198*b1cdbd2cSJim Jagielski String sValue;
1199*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1200*b1cdbd2cSJim Jagielski // Einzelne Felder setzen
1201*b1cdbd2cSJim Jagielski switch( nColId )
1202*b1cdbd2cSJim Jagielski {
1203*b1cdbd2cSJim Jagielski case FIELD_NAME:
1204*b1cdbd2cSJim Jagielski sValue = ::comphelper::getString(_rNewData);
1205*b1cdbd2cSJim Jagielski pFieldDescr->SetName( sValue );
1206*b1cdbd2cSJim Jagielski break;
1207*b1cdbd2cSJim Jagielski
1208*b1cdbd2cSJim Jagielski case FIELD_TYPE:
1209*b1cdbd2cSJim Jagielski OSL_ENSURE(sal_False, "OTableEditorCtrl::SetCellData: invalid column!");
1210*b1cdbd2cSJim Jagielski break;
1211*b1cdbd2cSJim Jagielski
1212*b1cdbd2cSJim Jagielski case COLUMN_DESCRIPTION:
1213*b1cdbd2cSJim Jagielski pFieldDescr->SetDescription( sValue = ::comphelper::getString(_rNewData) );
1214*b1cdbd2cSJim Jagielski break;
1215*b1cdbd2cSJim Jagielski
1216*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_DEFAULT:
1217*b1cdbd2cSJim Jagielski pFieldDescr->SetControlDefault( _rNewData );
1218*b1cdbd2cSJim Jagielski sValue = GetView()->GetDescWin()->getGenPage()->getFieldControl()->getControlDefault(pFieldDescr);
1219*b1cdbd2cSJim Jagielski break;
1220*b1cdbd2cSJim Jagielski
1221*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_REQUIRED:
1222*b1cdbd2cSJim Jagielski {
1223*b1cdbd2cSJim Jagielski sValue = ::comphelper::getString(_rNewData);
1224*b1cdbd2cSJim Jagielski pFieldDescr->SetIsNullable( sValue.ToInt32() );
1225*b1cdbd2cSJim Jagielski }
1226*b1cdbd2cSJim Jagielski break;
1227*b1cdbd2cSJim Jagielski
1228*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_TEXTLEN:
1229*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_LENGTH:
1230*b1cdbd2cSJim Jagielski {
1231*b1cdbd2cSJim Jagielski sValue = ::comphelper::getString(_rNewData);
1232*b1cdbd2cSJim Jagielski pFieldDescr->SetPrecision( sValue.ToInt32() );
1233*b1cdbd2cSJim Jagielski }
1234*b1cdbd2cSJim Jagielski break;
1235*b1cdbd2cSJim Jagielski
1236*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_NUMTYPE:
1237*b1cdbd2cSJim Jagielski // pFieldDescr->SetNumType( _rNewData );
1238*b1cdbd2cSJim Jagielski OSL_ENSURE(sal_False, "OTableEditorCtrl::SetCellData: invalid column!");
1239*b1cdbd2cSJim Jagielski break;
1240*b1cdbd2cSJim Jagielski
1241*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_AUTOINC:
1242*b1cdbd2cSJim Jagielski {
1243*b1cdbd2cSJim Jagielski String strYes(ModuleRes(STR_VALUE_YES));
1244*b1cdbd2cSJim Jagielski sValue = ::comphelper::getString(_rNewData);
1245*b1cdbd2cSJim Jagielski pFieldDescr->SetAutoIncrement(sValue.Equals(strYes));
1246*b1cdbd2cSJim Jagielski }
1247*b1cdbd2cSJim Jagielski break;
1248*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_SCALE:
1249*b1cdbd2cSJim Jagielski {
1250*b1cdbd2cSJim Jagielski sValue = ::comphelper::getString(_rNewData);
1251*b1cdbd2cSJim Jagielski pFieldDescr->SetScale(sValue.ToInt32());
1252*b1cdbd2cSJim Jagielski }
1253*b1cdbd2cSJim Jagielski break;
1254*b1cdbd2cSJim Jagielski
1255*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_BOOL_DEFAULT:
1256*b1cdbd2cSJim Jagielski sValue = GetView()->GetDescWin()->BoolStringPersistent(::comphelper::getString(_rNewData));
1257*b1cdbd2cSJim Jagielski pFieldDescr->SetControlDefault(makeAny(::rtl::OUString(sValue)));
1258*b1cdbd2cSJim Jagielski break;
1259*b1cdbd2cSJim Jagielski
1260*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_FORMAT:
1261*b1cdbd2cSJim Jagielski {
1262*b1cdbd2cSJim Jagielski sValue = ::comphelper::getString(_rNewData);
1263*b1cdbd2cSJim Jagielski pFieldDescr->SetFormatKey(sValue.ToInt32());
1264*b1cdbd2cSJim Jagielski }
1265*b1cdbd2cSJim Jagielski break;
1266*b1cdbd2cSJim Jagielski }
1267*b1cdbd2cSJim Jagielski
1268*b1cdbd2cSJim Jagielski SetControlText(nRow,nColId,sValue);
1269*b1cdbd2cSJim Jagielski }
1270*b1cdbd2cSJim Jagielski
1271*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetCellData(long nRow,sal_uInt16 nColId)1272*b1cdbd2cSJim Jagielski Any OTableEditorCtrl::GetCellData( long nRow, sal_uInt16 nColId )
1273*b1cdbd2cSJim Jagielski {
1274*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1275*b1cdbd2cSJim Jagielski OFieldDescription* pFieldDescr = GetFieldDescr( nRow );
1276*b1cdbd2cSJim Jagielski if( !pFieldDescr )
1277*b1cdbd2cSJim Jagielski return Any();
1278*b1cdbd2cSJim Jagielski
1279*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1280*b1cdbd2cSJim Jagielski // Aktuellen Datenzeiger umsetzen
1281*b1cdbd2cSJim Jagielski if( nRow==-1 )
1282*b1cdbd2cSJim Jagielski nRow = GetCurRow();
1283*b1cdbd2cSJim Jagielski SetDataPtr( nRow );
1284*b1cdbd2cSJim Jagielski
1285*b1cdbd2cSJim Jagielski static const String strYes(ModuleRes(STR_VALUE_YES));
1286*b1cdbd2cSJim Jagielski static const String strNo(ModuleRes(STR_VALUE_NO));
1287*b1cdbd2cSJim Jagielski ::rtl::OUString sValue;
1288*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1289*b1cdbd2cSJim Jagielski // Einzelne Felder auslesen
1290*b1cdbd2cSJim Jagielski switch( nColId )
1291*b1cdbd2cSJim Jagielski {
1292*b1cdbd2cSJim Jagielski case FIELD_NAME:
1293*b1cdbd2cSJim Jagielski sValue = pFieldDescr->GetName();
1294*b1cdbd2cSJim Jagielski break;
1295*b1cdbd2cSJim Jagielski
1296*b1cdbd2cSJim Jagielski case FIELD_TYPE:
1297*b1cdbd2cSJim Jagielski if ( pFieldDescr->getTypeInfo() )
1298*b1cdbd2cSJim Jagielski sValue = pFieldDescr->getTypeInfo()->aUIName;
1299*b1cdbd2cSJim Jagielski break;
1300*b1cdbd2cSJim Jagielski
1301*b1cdbd2cSJim Jagielski case COLUMN_DESCRIPTION:
1302*b1cdbd2cSJim Jagielski sValue = pFieldDescr->GetDescription();
1303*b1cdbd2cSJim Jagielski break;
1304*b1cdbd2cSJim Jagielski case HELP_TEXT:
1305*b1cdbd2cSJim Jagielski sValue = pFieldDescr->GetHelpText();
1306*b1cdbd2cSJim Jagielski break;
1307*b1cdbd2cSJim Jagielski
1308*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_DEFAULT:
1309*b1cdbd2cSJim Jagielski return pFieldDescr->GetControlDefault();
1310*b1cdbd2cSJim Jagielski
1311*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_REQUIRED:
1312*b1cdbd2cSJim Jagielski sValue = pFieldDescr->GetIsNullable() == ColumnValue::NULLABLE ? strYes : strNo;
1313*b1cdbd2cSJim Jagielski break;
1314*b1cdbd2cSJim Jagielski
1315*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_TEXTLEN:
1316*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_LENGTH:
1317*b1cdbd2cSJim Jagielski sValue = String::CreateFromInt32(pFieldDescr->GetPrecision());
1318*b1cdbd2cSJim Jagielski break;
1319*b1cdbd2cSJim Jagielski
1320*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_NUMTYPE:
1321*b1cdbd2cSJim Jagielski OSL_ENSURE(sal_False, "OTableEditorCtrl::GetCellData: invalid column!");
1322*b1cdbd2cSJim Jagielski // return pFieldDescr->GetNumType();
1323*b1cdbd2cSJim Jagielski
1324*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_AUTOINC:
1325*b1cdbd2cSJim Jagielski sValue = pFieldDescr->IsAutoIncrement() ? strYes : strNo;
1326*b1cdbd2cSJim Jagielski break;
1327*b1cdbd2cSJim Jagielski
1328*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_SCALE:
1329*b1cdbd2cSJim Jagielski sValue = String::CreateFromInt32(pFieldDescr->GetScale());
1330*b1cdbd2cSJim Jagielski break;
1331*b1cdbd2cSJim Jagielski
1332*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_BOOL_DEFAULT:
1333*b1cdbd2cSJim Jagielski sValue = GetView()->GetDescWin()->BoolStringUI(::comphelper::getString(pFieldDescr->GetControlDefault()));
1334*b1cdbd2cSJim Jagielski break;
1335*b1cdbd2cSJim Jagielski
1336*b1cdbd2cSJim Jagielski case FIELD_PROPERTY_FORMAT:
1337*b1cdbd2cSJim Jagielski sValue = String::CreateFromInt32(pFieldDescr->GetFormatKey());
1338*b1cdbd2cSJim Jagielski break;
1339*b1cdbd2cSJim Jagielski }
1340*b1cdbd2cSJim Jagielski
1341*b1cdbd2cSJim Jagielski return makeAny(sValue);
1342*b1cdbd2cSJim Jagielski }
1343*b1cdbd2cSJim Jagielski
1344*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetCellText(long nRow,sal_uInt16 nColId) const1345*b1cdbd2cSJim Jagielski String OTableEditorCtrl::GetCellText( long nRow, sal_uInt16 nColId ) const
1346*b1cdbd2cSJim Jagielski {
1347*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1348*b1cdbd2cSJim Jagielski ::rtl::OUString sCellText;
1349*b1cdbd2cSJim Jagielski const_cast< OTableEditorCtrl* >( this )->GetCellData( nRow, nColId ) >>= sCellText;
1350*b1cdbd2cSJim Jagielski return sCellText;
1351*b1cdbd2cSJim Jagielski }
1352*b1cdbd2cSJim Jagielski
1353*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetTotalCellWidth(long nRow,sal_uInt16 nColId)1354*b1cdbd2cSJim Jagielski sal_uInt32 OTableEditorCtrl::GetTotalCellWidth(long nRow, sal_uInt16 nColId)
1355*b1cdbd2cSJim Jagielski {
1356*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1357*b1cdbd2cSJim Jagielski return GetTextWidth(GetCellText(nRow, nColId)) + 2 * GetTextWidth('0');
1358*b1cdbd2cSJim Jagielski }
1359*b1cdbd2cSJim Jagielski
1360*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetFieldDescr(long nRow)1361*b1cdbd2cSJim Jagielski OFieldDescription* OTableEditorCtrl::GetFieldDescr( long nRow )
1362*b1cdbd2cSJim Jagielski {
1363*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1364*b1cdbd2cSJim Jagielski std::vector< ::boost::shared_ptr<OTableRow> >::size_type nListCount(
1365*b1cdbd2cSJim Jagielski m_pRowList->size());
1366*b1cdbd2cSJim Jagielski if( (nRow<0) || (sal::static_int_cast< unsigned long >(nRow)>=nListCount) )
1367*b1cdbd2cSJim Jagielski {
1368*b1cdbd2cSJim Jagielski OSL_ENSURE(0,"(nRow<0) || (nRow>=nListCount)");
1369*b1cdbd2cSJim Jagielski return NULL;
1370*b1cdbd2cSJim Jagielski }
1371*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pRow = (*m_pRowList)[ nRow ];
1372*b1cdbd2cSJim Jagielski if( !pRow )
1373*b1cdbd2cSJim Jagielski return NULL;
1374*b1cdbd2cSJim Jagielski return pRow->GetActFieldDescr();
1375*b1cdbd2cSJim Jagielski }
1376*b1cdbd2cSJim Jagielski
1377*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsCutAllowed(long nRow)1378*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsCutAllowed( long nRow )
1379*b1cdbd2cSJim Jagielski {
1380*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1381*b1cdbd2cSJim Jagielski sal_Bool bIsCutAllowed = (GetView()->getController().isAddAllowed() && GetView()->getController().isDropAllowed()) ||
1382*b1cdbd2cSJim Jagielski GetView()->getController().isAlterAllowed();
1383*b1cdbd2cSJim Jagielski
1384*b1cdbd2cSJim Jagielski if(bIsCutAllowed)
1385*b1cdbd2cSJim Jagielski {
1386*b1cdbd2cSJim Jagielski switch(m_eChildFocus)
1387*b1cdbd2cSJim Jagielski {
1388*b1cdbd2cSJim Jagielski case DESCRIPTION:
1389*b1cdbd2cSJim Jagielski bIsCutAllowed = pDescrCell->GetSelected().Len() != 0;
1390*b1cdbd2cSJim Jagielski break;
1391*b1cdbd2cSJim Jagielski case HELPTEXT:
1392*b1cdbd2cSJim Jagielski bIsCutAllowed = pHelpTextCell->GetSelected().Len() != 0;
1393*b1cdbd2cSJim Jagielski break;
1394*b1cdbd2cSJim Jagielski case NAME:
1395*b1cdbd2cSJim Jagielski bIsCutAllowed = pNameCell->GetSelected().Len() != 0;
1396*b1cdbd2cSJim Jagielski break;
1397*b1cdbd2cSJim Jagielski case ROW:
1398*b1cdbd2cSJim Jagielski bIsCutAllowed = IsCopyAllowed(nRow);
1399*b1cdbd2cSJim Jagielski break;
1400*b1cdbd2cSJim Jagielski default:
1401*b1cdbd2cSJim Jagielski bIsCutAllowed = sal_False;
1402*b1cdbd2cSJim Jagielski break;
1403*b1cdbd2cSJim Jagielski }
1404*b1cdbd2cSJim Jagielski }
1405*b1cdbd2cSJim Jagielski
1406*b1cdbd2cSJim Jagielski // Reference<XPropertySet> xTable = GetView()->getController().getTable();
1407*b1cdbd2cSJim Jagielski // if( !IsCopyAllowed(nRow) || (xTable.is() && ::comphelper::getString(xTable->getPropertyValue(PROPERTY_TYPE)) == ::rtl::OUString::createFromAscii("VIEW")))
1408*b1cdbd2cSJim Jagielski // return sal_False;
1409*b1cdbd2cSJim Jagielski
1410*b1cdbd2cSJim Jagielski // return bCutAllowed && IsDeleteAllowed( nRow );
1411*b1cdbd2cSJim Jagielski return bIsCutAllowed;
1412*b1cdbd2cSJim Jagielski }
1413*b1cdbd2cSJim Jagielski
1414*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsCopyAllowed(long)1415*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsCopyAllowed( long /*nRow*/ )
1416*b1cdbd2cSJim Jagielski {
1417*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1418*b1cdbd2cSJim Jagielski sal_Bool bIsCopyAllowed = sal_False;
1419*b1cdbd2cSJim Jagielski if(m_eChildFocus == DESCRIPTION )
1420*b1cdbd2cSJim Jagielski bIsCopyAllowed = pDescrCell->GetSelected().Len() != 0;
1421*b1cdbd2cSJim Jagielski else if(HELPTEXT == m_eChildFocus )
1422*b1cdbd2cSJim Jagielski bIsCopyAllowed = pHelpTextCell->GetSelected().Len() != 0;
1423*b1cdbd2cSJim Jagielski else if(m_eChildFocus == NAME)
1424*b1cdbd2cSJim Jagielski bIsCopyAllowed = pNameCell->GetSelected().Len() != 0;
1425*b1cdbd2cSJim Jagielski else if(m_eChildFocus == ROW)
1426*b1cdbd2cSJim Jagielski {
1427*b1cdbd2cSJim Jagielski Reference<XPropertySet> xTable = GetView()->getController().getTable();
1428*b1cdbd2cSJim Jagielski if( !GetSelectRowCount() || (xTable.is() && ::comphelper::getString(xTable->getPropertyValue(PROPERTY_TYPE)) == ::rtl::OUString::createFromAscii("VIEW")))
1429*b1cdbd2cSJim Jagielski return sal_False;
1430*b1cdbd2cSJim Jagielski
1431*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1432*b1cdbd2cSJim Jagielski // Wenn eine der markierten Zeilen leer ist, kein Copy moeglich
1433*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pRow;
1434*b1cdbd2cSJim Jagielski long nIndex = FirstSelectedRow();
1435*b1cdbd2cSJim Jagielski while( nIndex >= 0 && nIndex < static_cast<long>(m_pRowList->size()) )
1436*b1cdbd2cSJim Jagielski {
1437*b1cdbd2cSJim Jagielski pRow = (*m_pRowList)[nIndex];
1438*b1cdbd2cSJim Jagielski if( !pRow->GetActFieldDescr() )
1439*b1cdbd2cSJim Jagielski return sal_False;
1440*b1cdbd2cSJim Jagielski
1441*b1cdbd2cSJim Jagielski nIndex = NextSelectedRow();
1442*b1cdbd2cSJim Jagielski }
1443*b1cdbd2cSJim Jagielski
1444*b1cdbd2cSJim Jagielski bIsCopyAllowed = sal_True;
1445*b1cdbd2cSJim Jagielski }
1446*b1cdbd2cSJim Jagielski
1447*b1cdbd2cSJim Jagielski return bIsCopyAllowed;
1448*b1cdbd2cSJim Jagielski }
1449*b1cdbd2cSJim Jagielski
1450*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsPasteAllowed(long)1451*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsPasteAllowed( long /*nRow*/ )
1452*b1cdbd2cSJim Jagielski {
1453*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1454*b1cdbd2cSJim Jagielski sal_Bool bAllowed = GetView()->getController().isAddAllowed();
1455*b1cdbd2cSJim Jagielski if ( bAllowed )
1456*b1cdbd2cSJim Jagielski {
1457*b1cdbd2cSJim Jagielski TransferableDataHelper aTransferData(TransferableDataHelper::CreateFromSystemClipboard(GetParent()));
1458*b1cdbd2cSJim Jagielski sal_Bool bRowFormat = aTransferData.HasFormat(SOT_FORMATSTR_ID_SBA_TABED);
1459*b1cdbd2cSJim Jagielski if ( m_eChildFocus == ROW )
1460*b1cdbd2cSJim Jagielski bAllowed = bRowFormat;
1461*b1cdbd2cSJim Jagielski else
1462*b1cdbd2cSJim Jagielski bAllowed = !bRowFormat && aTransferData.HasFormat(SOT_FORMAT_STRING);
1463*b1cdbd2cSJim Jagielski }
1464*b1cdbd2cSJim Jagielski
1465*b1cdbd2cSJim Jagielski return bAllowed;
1466*b1cdbd2cSJim Jagielski }
1467*b1cdbd2cSJim Jagielski
1468*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
cut()1469*b1cdbd2cSJim Jagielski void OTableEditorCtrl::cut()
1470*b1cdbd2cSJim Jagielski {
1471*b1cdbd2cSJim Jagielski if(m_eChildFocus == NAME)
1472*b1cdbd2cSJim Jagielski {
1473*b1cdbd2cSJim Jagielski if(GetView()->getController().isAlterAllowed())
1474*b1cdbd2cSJim Jagielski {
1475*b1cdbd2cSJim Jagielski SaveData(-1,FIELD_NAME);
1476*b1cdbd2cSJim Jagielski pNameCell->Cut();
1477*b1cdbd2cSJim Jagielski CellModified(-1,FIELD_NAME);
1478*b1cdbd2cSJim Jagielski }
1479*b1cdbd2cSJim Jagielski }
1480*b1cdbd2cSJim Jagielski else if(m_eChildFocus == DESCRIPTION)
1481*b1cdbd2cSJim Jagielski {
1482*b1cdbd2cSJim Jagielski if(GetView()->getController().isAlterAllowed())
1483*b1cdbd2cSJim Jagielski {
1484*b1cdbd2cSJim Jagielski SaveData(-1,COLUMN_DESCRIPTION);
1485*b1cdbd2cSJim Jagielski pDescrCell->Cut();
1486*b1cdbd2cSJim Jagielski CellModified(-1,COLUMN_DESCRIPTION);
1487*b1cdbd2cSJim Jagielski }
1488*b1cdbd2cSJim Jagielski }
1489*b1cdbd2cSJim Jagielski else if(HELPTEXT == m_eChildFocus )
1490*b1cdbd2cSJim Jagielski {
1491*b1cdbd2cSJim Jagielski if(GetView()->getController().isAlterAllowed())
1492*b1cdbd2cSJim Jagielski {
1493*b1cdbd2cSJim Jagielski SaveData(-1,HELP_TEXT);
1494*b1cdbd2cSJim Jagielski pHelpTextCell->Cut();
1495*b1cdbd2cSJim Jagielski CellModified(-1,HELP_TEXT);
1496*b1cdbd2cSJim Jagielski }
1497*b1cdbd2cSJim Jagielski }
1498*b1cdbd2cSJim Jagielski else if(m_eChildFocus == ROW)
1499*b1cdbd2cSJim Jagielski {
1500*b1cdbd2cSJim Jagielski if (nCutEvent)
1501*b1cdbd2cSJim Jagielski Application::RemoveUserEvent(nCutEvent);
1502*b1cdbd2cSJim Jagielski nCutEvent = Application::PostUserEvent(LINK(this, OTableEditorCtrl, DelayedCut));
1503*b1cdbd2cSJim Jagielski }
1504*b1cdbd2cSJim Jagielski }
1505*b1cdbd2cSJim Jagielski
1506*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
copy()1507*b1cdbd2cSJim Jagielski void OTableEditorCtrl::copy()
1508*b1cdbd2cSJim Jagielski {
1509*b1cdbd2cSJim Jagielski if(GetSelectRowCount())
1510*b1cdbd2cSJim Jagielski OTableRowView::copy();
1511*b1cdbd2cSJim Jagielski else if(m_eChildFocus == NAME)
1512*b1cdbd2cSJim Jagielski pNameCell->Copy();
1513*b1cdbd2cSJim Jagielski else if(HELPTEXT == m_eChildFocus )
1514*b1cdbd2cSJim Jagielski pHelpTextCell->Copy();
1515*b1cdbd2cSJim Jagielski else if(m_eChildFocus == DESCRIPTION )
1516*b1cdbd2cSJim Jagielski pDescrCell->Copy();
1517*b1cdbd2cSJim Jagielski }
1518*b1cdbd2cSJim Jagielski
1519*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
paste()1520*b1cdbd2cSJim Jagielski void OTableEditorCtrl::paste()
1521*b1cdbd2cSJim Jagielski {
1522*b1cdbd2cSJim Jagielski TransferableDataHelper aTransferData(TransferableDataHelper::CreateFromSystemClipboard(GetParent()));
1523*b1cdbd2cSJim Jagielski if(aTransferData.HasFormat(SOT_FORMATSTR_ID_SBA_TABED))
1524*b1cdbd2cSJim Jagielski {
1525*b1cdbd2cSJim Jagielski if( nPasteEvent )
1526*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nPasteEvent );
1527*b1cdbd2cSJim Jagielski nPasteEvent = Application::PostUserEvent( LINK(this, OTableEditorCtrl, DelayedPaste) );
1528*b1cdbd2cSJim Jagielski }
1529*b1cdbd2cSJim Jagielski else if(m_eChildFocus == NAME)
1530*b1cdbd2cSJim Jagielski {
1531*b1cdbd2cSJim Jagielski if(GetView()->getController().isAlterAllowed())
1532*b1cdbd2cSJim Jagielski {
1533*b1cdbd2cSJim Jagielski pNameCell->Paste();
1534*b1cdbd2cSJim Jagielski CellModified();
1535*b1cdbd2cSJim Jagielski }
1536*b1cdbd2cSJim Jagielski }
1537*b1cdbd2cSJim Jagielski else if(HELPTEXT == m_eChildFocus )
1538*b1cdbd2cSJim Jagielski {
1539*b1cdbd2cSJim Jagielski if(GetView()->getController().isAlterAllowed())
1540*b1cdbd2cSJim Jagielski {
1541*b1cdbd2cSJim Jagielski pHelpTextCell->Paste();
1542*b1cdbd2cSJim Jagielski CellModified();
1543*b1cdbd2cSJim Jagielski }
1544*b1cdbd2cSJim Jagielski }
1545*b1cdbd2cSJim Jagielski else if(m_eChildFocus == DESCRIPTION)
1546*b1cdbd2cSJim Jagielski {
1547*b1cdbd2cSJim Jagielski if(GetView()->getController().isAlterAllowed())
1548*b1cdbd2cSJim Jagielski {
1549*b1cdbd2cSJim Jagielski pDescrCell->Paste();
1550*b1cdbd2cSJim Jagielski CellModified();
1551*b1cdbd2cSJim Jagielski }
1552*b1cdbd2cSJim Jagielski }
1553*b1cdbd2cSJim Jagielski }
1554*b1cdbd2cSJim Jagielski
1555*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsDeleteAllowed(long)1556*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsDeleteAllowed( long /*nRow*/ )
1557*b1cdbd2cSJim Jagielski {
1558*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1559*b1cdbd2cSJim Jagielski
1560*b1cdbd2cSJim Jagielski return GetSelectRowCount() != 0 && GetView()->getController().isDropAllowed();
1561*b1cdbd2cSJim Jagielski }
1562*b1cdbd2cSJim Jagielski
1563*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsInsertNewAllowed(long nRow)1564*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsInsertNewAllowed( long nRow )
1565*b1cdbd2cSJim Jagielski {
1566*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1567*b1cdbd2cSJim Jagielski
1568*b1cdbd2cSJim Jagielski sal_Bool bInsertNewAllowed = GetView()->getController().isAddAllowed();
1569*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
1570*b1cdbd2cSJim Jagielski // Wenn nur Felder hinzugefuegt werden duerfen, Paste nur in neue Felder
1571*b1cdbd2cSJim Jagielski if (bInsertNewAllowed && !GetView()->getController().isDropAllowed())
1572*b1cdbd2cSJim Jagielski {
1573*b1cdbd2cSJim Jagielski SetDataPtr(nRow);
1574*b1cdbd2cSJim Jagielski if( GetActRow()->IsReadOnly() )
1575*b1cdbd2cSJim Jagielski return sal_False;
1576*b1cdbd2cSJim Jagielski }
1577*b1cdbd2cSJim Jagielski
1578*b1cdbd2cSJim Jagielski return bInsertNewAllowed;
1579*b1cdbd2cSJim Jagielski }
1580*b1cdbd2cSJim Jagielski
1581*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsPrimaryKeyAllowed(long)1582*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsPrimaryKeyAllowed( long /*nRow*/ )
1583*b1cdbd2cSJim Jagielski {
1584*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1585*b1cdbd2cSJim Jagielski if( !GetSelectRowCount() )
1586*b1cdbd2cSJim Jagielski return sal_False;
1587*b1cdbd2cSJim Jagielski
1588*b1cdbd2cSJim Jagielski OTableController& rController = GetView()->getController();
1589*b1cdbd2cSJim Jagielski if ( !rController.getSdbMetaData().supportsPrimaryKeys() )
1590*b1cdbd2cSJim Jagielski return sal_False;
1591*b1cdbd2cSJim Jagielski
1592*b1cdbd2cSJim Jagielski Reference<XPropertySet> xTable = rController.getTable();
1593*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
1594*b1cdbd2cSJim Jagielski // Key darf nicht veraendert werden
1595*b1cdbd2cSJim Jagielski // Dies gilt jedoch nur, wenn die Tabelle nicht neu ist und keine ::com::sun::star::sdbcx::View. Ansonsten wird kein DROP ausgef�hrt
1596*b1cdbd2cSJim Jagielski
1597*b1cdbd2cSJim Jagielski if(xTable.is() && ::comphelper::getString(xTable->getPropertyValue(PROPERTY_TYPE)) == ::rtl::OUString::createFromAscii("VIEW"))
1598*b1cdbd2cSJim Jagielski return sal_False;
1599*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
1600*b1cdbd2cSJim Jagielski // Wenn leeres Feld, kein PrimKey
1601*b1cdbd2cSJim Jagielski // Eintrag wird nur erlaubt, wenn
1602*b1cdbd2cSJim Jagielski // - kein leerer Eintrag in der Selection ist
1603*b1cdbd2cSJim Jagielski // - kein Eintrag vom Typ Memo oder Image ist
1604*b1cdbd2cSJim Jagielski // - kein DROP erlaubt ist (s.o.) und die Spalte noch kein Required (not null) gesetzt hatte.
1605*b1cdbd2cSJim Jagielski long nIndex = FirstSelectedRow();
1606*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pRow;
1607*b1cdbd2cSJim Jagielski while( nIndex >= 0 && nIndex < static_cast<long>(m_pRowList->size()) )
1608*b1cdbd2cSJim Jagielski {
1609*b1cdbd2cSJim Jagielski pRow = (*m_pRowList)[nIndex];
1610*b1cdbd2cSJim Jagielski OFieldDescription* pFieldDescr = pRow->GetActFieldDescr();
1611*b1cdbd2cSJim Jagielski if(!pFieldDescr)
1612*b1cdbd2cSJim Jagielski return sal_False;
1613*b1cdbd2cSJim Jagielski else
1614*b1cdbd2cSJim Jagielski {
1615*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
1616*b1cdbd2cSJim Jagielski // Wenn Feldtyp Memo oder Image, kein PrimKey
1617*b1cdbd2cSJim Jagielski // oder wenn Spalten nicht gedroped werden k�nnen und das Required Flag ist nicht gesetzt
1618*b1cdbd2cSJim Jagielski // oder wenn eine ::com::sun::star::sdbcx::View vorhanden ist und das Required Flag nicht gesetzt ist
1619*b1cdbd2cSJim Jagielski TOTypeInfoSP pTypeInfo = pFieldDescr->getTypeInfo();
1620*b1cdbd2cSJim Jagielski if( pTypeInfo->nSearchType == ColumnSearch::NONE
1621*b1cdbd2cSJim Jagielski || (pFieldDescr->IsNullable() && pRow->IsReadOnly())
1622*b1cdbd2cSJim Jagielski )
1623*b1cdbd2cSJim Jagielski return sal_False;
1624*b1cdbd2cSJim Jagielski }
1625*b1cdbd2cSJim Jagielski
1626*b1cdbd2cSJim Jagielski nIndex = NextSelectedRow();
1627*b1cdbd2cSJim Jagielski }
1628*b1cdbd2cSJim Jagielski
1629*b1cdbd2cSJim Jagielski return sal_True;
1630*b1cdbd2cSJim Jagielski }
1631*b1cdbd2cSJim Jagielski
1632*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
Command(const CommandEvent & rEvt)1633*b1cdbd2cSJim Jagielski void OTableEditorCtrl::Command(const CommandEvent& rEvt)
1634*b1cdbd2cSJim Jagielski {
1635*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1636*b1cdbd2cSJim Jagielski switch (rEvt.GetCommand())
1637*b1cdbd2cSJim Jagielski {
1638*b1cdbd2cSJim Jagielski case COMMAND_CONTEXTMENU:
1639*b1cdbd2cSJim Jagielski {
1640*b1cdbd2cSJim Jagielski Point aMenuPos( rEvt.GetMousePosPixel() );
1641*b1cdbd2cSJim Jagielski if (!rEvt.IsMouseEvent())
1642*b1cdbd2cSJim Jagielski {
1643*b1cdbd2cSJim Jagielski if ( 1 == GetSelectColumnCount() )
1644*b1cdbd2cSJim Jagielski {
1645*b1cdbd2cSJim Jagielski sal_uInt16 nSelId = GetColumnId(
1646*b1cdbd2cSJim Jagielski sal::static_int_cast< sal_uInt16 >(
1647*b1cdbd2cSJim Jagielski FirstSelectedColumn() ) );
1648*b1cdbd2cSJim Jagielski ::Rectangle aColRect( GetFieldRectPixel( 0, nSelId, sal_False ) );
1649*b1cdbd2cSJim Jagielski
1650*b1cdbd2cSJim Jagielski aMenuPos = aColRect.TopCenter();
1651*b1cdbd2cSJim Jagielski }
1652*b1cdbd2cSJim Jagielski else if ( GetSelectRowCount() > 0 )
1653*b1cdbd2cSJim Jagielski {
1654*b1cdbd2cSJim Jagielski ::Rectangle aColRect( GetFieldRectPixel( FirstSelectedRow(), HANDLE_ID, sal_True ) );
1655*b1cdbd2cSJim Jagielski
1656*b1cdbd2cSJim Jagielski aMenuPos = aColRect.TopCenter();
1657*b1cdbd2cSJim Jagielski }
1658*b1cdbd2cSJim Jagielski else
1659*b1cdbd2cSJim Jagielski {
1660*b1cdbd2cSJim Jagielski OTableRowView::Command(rEvt);
1661*b1cdbd2cSJim Jagielski return;
1662*b1cdbd2cSJim Jagielski }
1663*b1cdbd2cSJim Jagielski }
1664*b1cdbd2cSJim Jagielski
1665*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
1666*b1cdbd2cSJim Jagielski // Kontextmenu einblenden
1667*b1cdbd2cSJim Jagielski if( !IsReadOnly() )
1668*b1cdbd2cSJim Jagielski {
1669*b1cdbd2cSJim Jagielski sal_uInt16 nColId = GetColumnAtXPosPixel(aMenuPos.X());
1670*b1cdbd2cSJim Jagielski long nRow = GetRowAtYPosPixel(aMenuPos.Y());
1671*b1cdbd2cSJim Jagielski
1672*b1cdbd2cSJim Jagielski if ( HANDLE_ID != nColId )
1673*b1cdbd2cSJim Jagielski {
1674*b1cdbd2cSJim Jagielski if ( nRow < 0 && nColId != BROWSER_INVALIDID )
1675*b1cdbd2cSJim Jagielski { // hit the header
1676*b1cdbd2cSJim Jagielski if ( 3 != nColId )
1677*b1cdbd2cSJim Jagielski { // 3 would mean the last column, and this last column is auto-sized
1678*b1cdbd2cSJim Jagielski if ( !IsColumnSelected( nColId ) )
1679*b1cdbd2cSJim Jagielski SelectColumnId( nColId );
1680*b1cdbd2cSJim Jagielski
1681*b1cdbd2cSJim Jagielski PopupMenu aContextMenu( ModuleRes( RID_QUERYCOLPOPUPMENU ) );
1682*b1cdbd2cSJim Jagielski aContextMenu.EnableItem( SID_DELETE, sal_False );
1683*b1cdbd2cSJim Jagielski aContextMenu.RemoveDisabledEntries(sal_True, sal_True);
1684*b1cdbd2cSJim Jagielski switch ( aContextMenu.Execute( this, aMenuPos ) )
1685*b1cdbd2cSJim Jagielski {
1686*b1cdbd2cSJim Jagielski case ID_BROWSER_COLWIDTH:
1687*b1cdbd2cSJim Jagielski adjustBrowseBoxColumnWidth( this, nColId );
1688*b1cdbd2cSJim Jagielski break;
1689*b1cdbd2cSJim Jagielski }
1690*b1cdbd2cSJim Jagielski }
1691*b1cdbd2cSJim Jagielski }
1692*b1cdbd2cSJim Jagielski }
1693*b1cdbd2cSJim Jagielski else
1694*b1cdbd2cSJim Jagielski {
1695*b1cdbd2cSJim Jagielski PopupMenu aContextMenu(ModuleRes(RID_TABLEDESIGNROWPOPUPMENU));
1696*b1cdbd2cSJim Jagielski
1697*b1cdbd2cSJim Jagielski aContextMenu.EnableItem( SID_CUT, IsCutAllowed(nRow) );
1698*b1cdbd2cSJim Jagielski aContextMenu.EnableItem( SID_COPY, IsCopyAllowed(nRow) );
1699*b1cdbd2cSJim Jagielski aContextMenu.EnableItem( SID_PASTE, IsPasteAllowed(nRow) );
1700*b1cdbd2cSJim Jagielski aContextMenu.EnableItem( SID_DELETE, IsDeleteAllowed(nRow) );
1701*b1cdbd2cSJim Jagielski aContextMenu.EnableItem( SID_TABLEDESIGN_TABED_PRIMARYKEY, IsPrimaryKeyAllowed(nRow) );
1702*b1cdbd2cSJim Jagielski aContextMenu.EnableItem( SID_TABLEDESIGN_INSERTROWS, IsInsertNewAllowed(nRow) );
1703*b1cdbd2cSJim Jagielski aContextMenu.CheckItem( SID_TABLEDESIGN_TABED_PRIMARYKEY, IsRowSelected(GetCurRow()) && IsPrimaryKey() );
1704*b1cdbd2cSJim Jagielski
1705*b1cdbd2cSJim Jagielski // jetzt alles, was disabled wurde, wech
1706*b1cdbd2cSJim Jagielski aContextMenu.RemoveDisabledEntries(sal_True, sal_True);
1707*b1cdbd2cSJim Jagielski
1708*b1cdbd2cSJim Jagielski if( SetDataPtr(m_nDataPos) )
1709*b1cdbd2cSJim Jagielski pDescrWin->SaveData( pActRow->GetActFieldDescr() );
1710*b1cdbd2cSJim Jagielski
1711*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////
1712*b1cdbd2cSJim Jagielski // Alle Aktionen, die die Zeilenzahl veraendern, muessen asynchron
1713*b1cdbd2cSJim Jagielski // ausgefuehrt werden->sonst Probleme zwischen Kontextmenu u. Browser
1714*b1cdbd2cSJim Jagielski m_nDataPos = GetCurRow();
1715*b1cdbd2cSJim Jagielski switch (aContextMenu.Execute(this, aMenuPos))
1716*b1cdbd2cSJim Jagielski {
1717*b1cdbd2cSJim Jagielski case SID_CUT:
1718*b1cdbd2cSJim Jagielski cut();
1719*b1cdbd2cSJim Jagielski break;
1720*b1cdbd2cSJim Jagielski case SID_COPY:
1721*b1cdbd2cSJim Jagielski copy();
1722*b1cdbd2cSJim Jagielski break;
1723*b1cdbd2cSJim Jagielski case SID_PASTE:
1724*b1cdbd2cSJim Jagielski paste();
1725*b1cdbd2cSJim Jagielski break;
1726*b1cdbd2cSJim Jagielski case SID_DELETE:
1727*b1cdbd2cSJim Jagielski if( nDeleteEvent )
1728*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nDeleteEvent );
1729*b1cdbd2cSJim Jagielski nDeleteEvent = Application::PostUserEvent( LINK(this, OTableEditorCtrl, DelayedDelete) );
1730*b1cdbd2cSJim Jagielski break;
1731*b1cdbd2cSJim Jagielski case SID_TABLEDESIGN_INSERTROWS:
1732*b1cdbd2cSJim Jagielski if( nInsNewRowsEvent )
1733*b1cdbd2cSJim Jagielski Application::RemoveUserEvent( nInsNewRowsEvent );
1734*b1cdbd2cSJim Jagielski nInsNewRowsEvent = Application::PostUserEvent( LINK(this, OTableEditorCtrl, DelayedInsNewRows) );
1735*b1cdbd2cSJim Jagielski break;
1736*b1cdbd2cSJim Jagielski case SID_TABLEDESIGN_TABED_PRIMARYKEY:
1737*b1cdbd2cSJim Jagielski SetPrimaryKey( !IsPrimaryKey() );
1738*b1cdbd2cSJim Jagielski break;
1739*b1cdbd2cSJim Jagielski default:
1740*b1cdbd2cSJim Jagielski break;
1741*b1cdbd2cSJim Jagielski }
1742*b1cdbd2cSJim Jagielski }
1743*b1cdbd2cSJim Jagielski }
1744*b1cdbd2cSJim Jagielski }
1745*b1cdbd2cSJim Jagielski break;
1746*b1cdbd2cSJim Jagielski default:
1747*b1cdbd2cSJim Jagielski OTableRowView::Command(rEvt);
1748*b1cdbd2cSJim Jagielski }
1749*b1cdbd2cSJim Jagielski
1750*b1cdbd2cSJim Jagielski }
1751*b1cdbd2cSJim Jagielski
1752*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1753*b1cdbd2cSJim Jagielski IMPL_LINK( OTableEditorCtrl, DelayedCut, void*, /*EMPTYTAG*/ )
1754*b1cdbd2cSJim Jagielski {
1755*b1cdbd2cSJim Jagielski nCutEvent = 0;
1756*b1cdbd2cSJim Jagielski OTableRowView::cut();
1757*b1cdbd2cSJim Jagielski return 0;
1758*b1cdbd2cSJim Jagielski }
1759*b1cdbd2cSJim Jagielski
1760*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1761*b1cdbd2cSJim Jagielski IMPL_LINK( OTableEditorCtrl, DelayedPaste, void*, /*EMPTYTAG*/ )
1762*b1cdbd2cSJim Jagielski {
1763*b1cdbd2cSJim Jagielski nPasteEvent = 0;
1764*b1cdbd2cSJim Jagielski
1765*b1cdbd2cSJim Jagielski sal_Int32 nPastePosition = GetView()->getController().getFirstEmptyRowPosition();
1766*b1cdbd2cSJim Jagielski if ( !GetView()->getController().getTable().is() )
1767*b1cdbd2cSJim Jagielski nPastePosition = GetSelectRowCount() ? FirstSelectedRow() : GetCurRow();
1768*b1cdbd2cSJim Jagielski
1769*b1cdbd2cSJim Jagielski if (!IsInsertNewAllowed(nPastePosition))
1770*b1cdbd2cSJim Jagielski { // kein Einfuegen erlaubt, sondern nur anhaengen, also testen, ob hinter der PastePosition noch
1771*b1cdbd2cSJim Jagielski // belegte Zeilen erscheinen
1772*b1cdbd2cSJim Jagielski
1773*b1cdbd2cSJim Jagielski sal_Int32 nFreeFromPos; // ab da nur freie Zeilen
1774*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> >::reverse_iterator aIter = m_pRowList->rbegin();
1775*b1cdbd2cSJim Jagielski for(nFreeFromPos = m_pRowList->size();
1776*b1cdbd2cSJim Jagielski aIter != m_pRowList->rend() && (!(*aIter) || !(*aIter)->GetActFieldDescr() || !(*aIter)->GetActFieldDescr()->GetName().getLength());
1777*b1cdbd2cSJim Jagielski --nFreeFromPos, ++aIter)
1778*b1cdbd2cSJim Jagielski ;
1779*b1cdbd2cSJim Jagielski if (nPastePosition < nFreeFromPos) // es gibt mindestens eine belegte hinter PastePosition -> ganz nach hinten
1780*b1cdbd2cSJim Jagielski nPastePosition = nFreeFromPos;
1781*b1cdbd2cSJim Jagielski }
1782*b1cdbd2cSJim Jagielski
1783*b1cdbd2cSJim Jagielski OTableRowView::Paste( nPastePosition );
1784*b1cdbd2cSJim Jagielski SetNoSelection();
1785*b1cdbd2cSJim Jagielski GoToRow( nPastePosition );
1786*b1cdbd2cSJim Jagielski
1787*b1cdbd2cSJim Jagielski return 0;
1788*b1cdbd2cSJim Jagielski }
1789*b1cdbd2cSJim Jagielski
1790*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1791*b1cdbd2cSJim Jagielski IMPL_LINK( OTableEditorCtrl, DelayedDelete, void*, /*EMPTYTAG*/ )
1792*b1cdbd2cSJim Jagielski {
1793*b1cdbd2cSJim Jagielski nDeleteEvent = 0;
1794*b1cdbd2cSJim Jagielski DeleteRows();
1795*b1cdbd2cSJim Jagielski return 0;
1796*b1cdbd2cSJim Jagielski }
1797*b1cdbd2cSJim Jagielski
1798*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1799*b1cdbd2cSJim Jagielski IMPL_LINK( OTableEditorCtrl, DelayedInsNewRows, void*, /*EMPTYTAG*/ )
1800*b1cdbd2cSJim Jagielski {
1801*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1802*b1cdbd2cSJim Jagielski nInsNewRowsEvent = 0;
1803*b1cdbd2cSJim Jagielski sal_Int32 nPastePosition = GetView()->getController().getFirstEmptyRowPosition();
1804*b1cdbd2cSJim Jagielski if ( !GetView()->getController().getTable().is() )
1805*b1cdbd2cSJim Jagielski nPastePosition = GetSelectRowCount() ? FirstSelectedRow() : m_nDataPos;
1806*b1cdbd2cSJim Jagielski
1807*b1cdbd2cSJim Jagielski InsertNewRows( nPastePosition );
1808*b1cdbd2cSJim Jagielski SetNoSelection();
1809*b1cdbd2cSJim Jagielski GoToRow( nPastePosition );
1810*b1cdbd2cSJim Jagielski
1811*b1cdbd2cSJim Jagielski return 0;
1812*b1cdbd2cSJim Jagielski }
1813*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
AdjustFieldDescription(OFieldDescription * _pFieldDesc,MultiSelection & _rMultiSel,sal_Int32 _nPos,sal_Bool _bSet,sal_Bool _bPrimaryKey)1814*b1cdbd2cSJim Jagielski void OTableEditorCtrl::AdjustFieldDescription(OFieldDescription* _pFieldDesc,
1815*b1cdbd2cSJim Jagielski MultiSelection& _rMultiSel,
1816*b1cdbd2cSJim Jagielski sal_Int32 _nPos,
1817*b1cdbd2cSJim Jagielski sal_Bool _bSet,
1818*b1cdbd2cSJim Jagielski sal_Bool _bPrimaryKey)
1819*b1cdbd2cSJim Jagielski {
1820*b1cdbd2cSJim Jagielski _pFieldDesc->SetPrimaryKey( _bPrimaryKey );
1821*b1cdbd2cSJim Jagielski if(!_bSet && _pFieldDesc->getTypeInfo()->bNullable)
1822*b1cdbd2cSJim Jagielski {
1823*b1cdbd2cSJim Jagielski _pFieldDesc->SetIsNullable(ColumnValue::NO_NULLS);
1824*b1cdbd2cSJim Jagielski _pFieldDesc->SetControlDefault(Any());
1825*b1cdbd2cSJim Jagielski } // if(!_bSet && _pFieldDesc->getTypeInfo()->bNullable)
1826*b1cdbd2cSJim Jagielski if ( _pFieldDesc->IsAutoIncrement() && !_bPrimaryKey )
1827*b1cdbd2cSJim Jagielski {
1828*b1cdbd2cSJim Jagielski OTableController& rController = GetView()->getController();
1829*b1cdbd2cSJim Jagielski if ( rController.isAutoIncrementPrimaryKey() )
1830*b1cdbd2cSJim Jagielski {
1831*b1cdbd2cSJim Jagielski _pFieldDesc->SetAutoIncrement(false);
1832*b1cdbd2cSJim Jagielski }
1833*b1cdbd2cSJim Jagielski }
1834*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1835*b1cdbd2cSJim Jagielski // update field description
1836*b1cdbd2cSJim Jagielski pDescrWin->DisplayData(_pFieldDesc);
1837*b1cdbd2cSJim Jagielski
1838*b1cdbd2cSJim Jagielski _rMultiSel.Insert( _nPos );
1839*b1cdbd2cSJim Jagielski _rMultiSel.Select( _nPos );
1840*b1cdbd2cSJim Jagielski }
1841*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SetPrimaryKey(sal_Bool bSet)1842*b1cdbd2cSJim Jagielski void OTableEditorCtrl::SetPrimaryKey( sal_Bool bSet )
1843*b1cdbd2cSJim Jagielski {
1844*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1845*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1846*b1cdbd2cSJim Jagielski // Evtl. vorhandene Primary Keys loeschen
1847*b1cdbd2cSJim Jagielski MultiSelection aDeletedPrimKeys;
1848*b1cdbd2cSJim Jagielski aDeletedPrimKeys.SetTotalRange( Range(0,GetRowCount()) );
1849*b1cdbd2cSJim Jagielski long nIndex = 0;
1850*b1cdbd2cSJim Jagielski
1851*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> >::const_iterator aIter = m_pRowList->begin();
1852*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> >::const_iterator aEnd = m_pRowList->end();
1853*b1cdbd2cSJim Jagielski for(sal_Int32 nRow = 0;aIter != aEnd;++aIter,++nRow)
1854*b1cdbd2cSJim Jagielski {
1855*b1cdbd2cSJim Jagielski OFieldDescription* pFieldDescr = (*aIter)->GetActFieldDescr();
1856*b1cdbd2cSJim Jagielski if( pFieldDescr && (*aIter)->IsPrimaryKey() && (!bSet || !IsRowSelected(nRow)) )
1857*b1cdbd2cSJim Jagielski {
1858*b1cdbd2cSJim Jagielski AdjustFieldDescription(pFieldDescr,aDeletedPrimKeys,nRow,bSet,sal_False);
1859*b1cdbd2cSJim Jagielski }
1860*b1cdbd2cSJim Jagielski }
1861*b1cdbd2cSJim Jagielski
1862*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1863*b1cdbd2cSJim Jagielski // Die Primary Keys der markierten Zeilen setzen
1864*b1cdbd2cSJim Jagielski MultiSelection aInsertedPrimKeys;
1865*b1cdbd2cSJim Jagielski aInsertedPrimKeys.SetTotalRange( Range(0,GetRowCount()) );
1866*b1cdbd2cSJim Jagielski if( bSet )
1867*b1cdbd2cSJim Jagielski {
1868*b1cdbd2cSJim Jagielski nIndex = FirstSelectedRow();
1869*b1cdbd2cSJim Jagielski while( nIndex >= 0 && nIndex < static_cast<long>(m_pRowList->size()) )
1870*b1cdbd2cSJim Jagielski {
1871*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1872*b1cdbd2cSJim Jagielski // Key setzen
1873*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pRow = (*m_pRowList)[nIndex];
1874*b1cdbd2cSJim Jagielski OFieldDescription* pFieldDescr = pRow->GetActFieldDescr();
1875*b1cdbd2cSJim Jagielski if(pFieldDescr)
1876*b1cdbd2cSJim Jagielski AdjustFieldDescription(pFieldDescr,aInsertedPrimKeys,nIndex,sal_False,sal_True);
1877*b1cdbd2cSJim Jagielski
1878*b1cdbd2cSJim Jagielski nIndex = NextSelectedRow();
1879*b1cdbd2cSJim Jagielski }
1880*b1cdbd2cSJim Jagielski }
1881*b1cdbd2cSJim Jagielski
1882*b1cdbd2cSJim Jagielski GetUndoManager().AddUndoAction( new OPrimKeyUndoAct(this, aDeletedPrimKeys, aInsertedPrimKeys) );
1883*b1cdbd2cSJim Jagielski
1884*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1885*b1cdbd2cSJim Jagielski // Handle-Spalte invalidieren
1886*b1cdbd2cSJim Jagielski InvalidateHandleColumn();
1887*b1cdbd2cSJim Jagielski
1888*b1cdbd2cSJim Jagielski
1889*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1890*b1cdbd2cSJim Jagielski // Das ModifyFlag der TableDocSh setzen
1891*b1cdbd2cSJim Jagielski GetView()->getController().setModified( sal_True );
1892*b1cdbd2cSJim Jagielski InvalidateFeatures();
1893*b1cdbd2cSJim Jagielski }
1894*b1cdbd2cSJim Jagielski
1895*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsPrimaryKey()1896*b1cdbd2cSJim Jagielski sal_Bool OTableEditorCtrl::IsPrimaryKey()
1897*b1cdbd2cSJim Jagielski {
1898*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1899*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1900*b1cdbd2cSJim Jagielski // Gehoeren alle markierten Felder zu einem Primary Key ?
1901*b1cdbd2cSJim Jagielski long nPrimaryKeys = 0;
1902*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> >::const_iterator aIter = m_pRowList->begin();
1903*b1cdbd2cSJim Jagielski ::std::vector< ::boost::shared_ptr<OTableRow> >::const_iterator aEnd = m_pRowList->end();
1904*b1cdbd2cSJim Jagielski for(sal_Int32 nRow=0;aIter != aEnd;++aIter,++nRow)
1905*b1cdbd2cSJim Jagielski {
1906*b1cdbd2cSJim Jagielski if( IsRowSelected(nRow) && !(*aIter)->IsPrimaryKey() )
1907*b1cdbd2cSJim Jagielski return sal_False;
1908*b1cdbd2cSJim Jagielski if( (*aIter)->IsPrimaryKey() )
1909*b1cdbd2cSJim Jagielski ++nPrimaryKeys;
1910*b1cdbd2cSJim Jagielski }
1911*b1cdbd2cSJim Jagielski
1912*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1913*b1cdbd2cSJim Jagielski // Gibt es unselektierte Felder, die noch zu dem Key gehoeren ?
1914*b1cdbd2cSJim Jagielski return GetSelectRowCount() == nPrimaryKeys;
1915*b1cdbd2cSJim Jagielski }
1916*b1cdbd2cSJim Jagielski
1917*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
SwitchType(const TOTypeInfoSP & _pType)1918*b1cdbd2cSJim Jagielski void OTableEditorCtrl::SwitchType( const TOTypeInfoSP& _pType )
1919*b1cdbd2cSJim Jagielski {
1920*b1cdbd2cSJim Jagielski DBG_CHKTHIS(OTableEditorCtrl,NULL);
1921*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1922*b1cdbd2cSJim Jagielski // Wenn noch kein Feldname vergeben wurde
1923*b1cdbd2cSJim Jagielski long nRow(GetCurRow());
1924*b1cdbd2cSJim Jagielski OFieldDescription* pActFieldDescr = GetFieldDescr( nRow );
1925*b1cdbd2cSJim Jagielski if( pActFieldDescr )
1926*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1927*b1cdbd2cSJim Jagielski // Alte Beschreibung speichern
1928*b1cdbd2cSJim Jagielski pDescrWin->SaveData( pActFieldDescr );
1929*b1cdbd2cSJim Jagielski
1930*b1cdbd2cSJim Jagielski if ( nRow < 0 || nRow > static_cast<long>(m_pRowList->size()) )
1931*b1cdbd2cSJim Jagielski return;
1932*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////
1933*b1cdbd2cSJim Jagielski // Neue Beschreibung darstellen
1934*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OTableRow> pRow = (*m_pRowList)[nRow];
1935*b1cdbd2cSJim Jagielski pRow->SetFieldType( _pType, sal_True );
1936*b1cdbd2cSJim Jagielski if ( _pType.get() )
1937*b1cdbd2cSJim Jagielski {
1938*b1cdbd2cSJim Jagielski const sal_uInt16 nCurrentlySelected = pTypeCell->GetSelectEntryPos();
1939*b1cdbd2cSJim Jagielski
1940*b1cdbd2cSJim Jagielski if ( ( LISTBOX_ENTRY_NOTFOUND == nCurrentlySelected )
1941*b1cdbd2cSJim Jagielski || ( GetView()->getController().getTypeInfo( nCurrentlySelected ) != _pType )
1942*b1cdbd2cSJim Jagielski )
1943*b1cdbd2cSJim Jagielski {
1944*b1cdbd2cSJim Jagielski sal_uInt16 nEntryPos = 0;
1945*b1cdbd2cSJim Jagielski const OTypeInfoMap* pTypeInfo = GetView()->getController().getTypeInfo();
1946*b1cdbd2cSJim Jagielski OTypeInfoMap::const_iterator aIter = pTypeInfo->begin();
1947*b1cdbd2cSJim Jagielski OTypeInfoMap::const_iterator aEnd = pTypeInfo->end();
1948*b1cdbd2cSJim Jagielski for(;aIter != aEnd;++aIter,++nEntryPos)
1949*b1cdbd2cSJim Jagielski {
1950*b1cdbd2cSJim Jagielski if(aIter->second == _pType)
1951*b1cdbd2cSJim Jagielski break;
1952*b1cdbd2cSJim Jagielski }
1953*b1cdbd2cSJim Jagielski if (nEntryPos < pTypeCell->GetEntryCount())
1954*b1cdbd2cSJim Jagielski pTypeCell->SelectEntryPos( nEntryPos );
1955*b1cdbd2cSJim Jagielski }
1956*b1cdbd2cSJim Jagielski }
1957*b1cdbd2cSJim Jagielski
1958*b1cdbd2cSJim Jagielski pActFieldDescr = pRow->GetActFieldDescr();
1959*b1cdbd2cSJim Jagielski if (pActFieldDescr != NULL && !pActFieldDescr->GetFormatKey())
1960*b1cdbd2cSJim Jagielski {
1961*b1cdbd2cSJim Jagielski sal_Int32 nFormatKey = ::dbtools::getDefaultNumberFormat( pActFieldDescr->GetType(),
1962*b1cdbd2cSJim Jagielski pActFieldDescr->GetScale(),
1963*b1cdbd2cSJim Jagielski pActFieldDescr->IsCurrency(),
1964*b1cdbd2cSJim Jagielski Reference< XNumberFormatTypes>(GetView()->getController().getNumberFormatter()->getNumberFormatsSupplier()->getNumberFormats(),UNO_QUERY),
1965*b1cdbd2cSJim Jagielski GetView()->getLocale());
1966*b1cdbd2cSJim Jagielski
1967*b1cdbd2cSJim Jagielski pActFieldDescr->SetFormatKey(nFormatKey);
1968*b1cdbd2cSJim Jagielski }
1969*b1cdbd2cSJim Jagielski
1970*b1cdbd2cSJim Jagielski pDescrWin->DisplayData( pActFieldDescr );
1971*b1cdbd2cSJim Jagielski }
1972*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
GetView() const1973*b1cdbd2cSJim Jagielski OTableDesignView* OTableEditorCtrl::GetView() const
1974*b1cdbd2cSJim Jagielski {
1975*b1cdbd2cSJim Jagielski return static_cast<OTableDesignView*>(GetParent()->GetParent());
1976*b1cdbd2cSJim Jagielski }
1977*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
DeactivateCell(sal_Bool bUpdate)1978*b1cdbd2cSJim Jagielski void OTableEditorCtrl::DeactivateCell(sal_Bool bUpdate)
1979*b1cdbd2cSJim Jagielski {
1980*b1cdbd2cSJim Jagielski OTableRowView::DeactivateCell(bUpdate);
1981*b1cdbd2cSJim Jagielski // now we have to deactivate the field description
1982*b1cdbd2cSJim Jagielski long nRow(GetCurRow());
1983*b1cdbd2cSJim Jagielski if (pDescrWin)
1984*b1cdbd2cSJim Jagielski pDescrWin->SetReadOnly(bReadOnly || !SetDataPtr(nRow) || GetActRow()->IsReadOnly());
1985*b1cdbd2cSJim Jagielski }
1986*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
PreNotify(NotifyEvent & rNEvt)1987*b1cdbd2cSJim Jagielski long OTableEditorCtrl::PreNotify( NotifyEvent& rNEvt )
1988*b1cdbd2cSJim Jagielski {
1989*b1cdbd2cSJim Jagielski if (rNEvt.GetType() == EVENT_GETFOCUS)
1990*b1cdbd2cSJim Jagielski {
1991*b1cdbd2cSJim Jagielski if( pHelpTextCell && pHelpTextCell->HasChildPathFocus() )
1992*b1cdbd2cSJim Jagielski m_eChildFocus = HELPTEXT;
1993*b1cdbd2cSJim Jagielski else if( pDescrCell && pDescrCell->HasChildPathFocus() )
1994*b1cdbd2cSJim Jagielski m_eChildFocus = DESCRIPTION;
1995*b1cdbd2cSJim Jagielski else if(pNameCell && pNameCell->HasChildPathFocus() )
1996*b1cdbd2cSJim Jagielski m_eChildFocus = NAME;
1997*b1cdbd2cSJim Jagielski else
1998*b1cdbd2cSJim Jagielski m_eChildFocus = ROW;
1999*b1cdbd2cSJim Jagielski }
2000*b1cdbd2cSJim Jagielski
2001*b1cdbd2cSJim Jagielski return OTableRowView::PreNotify(rNEvt);
2002*b1cdbd2cSJim Jagielski }
2003*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
2004*b1cdbd2cSJim Jagielski
2005*b1cdbd2cSJim Jagielski
2006*b1cdbd2cSJim Jagielski
2007*b1cdbd2cSJim Jagielski
2008