1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_dbaccess.hxx"
26 
27 #ifndef DBAUI_TABLEDESIGNCONTROL_HXX
28 #include "TableDesignControl.hxx"
29 #endif
30 #ifndef _DBU_TBL_HRC_
31 #include "dbu_tbl.hrc"
32 #endif
33 #ifndef DBAUI_TABLEDESIGNVIEW_HXX
34 #include "TableDesignView.hxx"
35 #endif
36 #ifndef DBUI_TABLECONTROLLER_HXX
37 #include "TableController.hxx"
38 #endif
39 #ifndef DBACCESS_UI_BROWSER_ID_HXX
40 #include "browserids.hxx"
41 #endif
42 #ifndef _COM_SUN_STAR_UTIL_URL_HPP_
43 #include <com/sun/star/util/URL.hpp>
44 #endif
45 #ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_
46 #include <com/sun/star/beans/PropertyValue.hpp>
47 #endif
48 #ifndef _DBA_DBACCESS_HELPID_HRC_
49 #include "dbaccess_helpid.hrc"
50 #endif
51 
52 using namespace ::dbaui;
53 using namespace ::svt;
54 using namespace ::com::sun::star::uno;
55 using namespace ::com::sun::star::beans;
56 using namespace ::com::sun::star::util;
57 //--- Defines
58 #define HANDLE_ID 0
59 
60 DBG_NAME(OTableRowView)
61 //------------------------------------------------------------------------
62 OTableRowView::OTableRowView(Window* pParent)
63     :EditBrowseBox(pParent, ModuleRes(RID_DB_TAB_EDITOR),EBBF_NONE,
64 				    BROWSER_COLUMNSELECTION | BROWSER_MULTISELECTION | BROWSER_AUTOSIZE_LASTCOL |
65 				    BROWSER_KEEPSELECTION | BROWSER_HLINESFULL | BROWSER_VLINESFULL)
66     ,m_nDataPos(-1)
67     ,m_nCurrentPos(-1)
68     ,m_nCurUndoActId(0)
69     ,m_bCurrentModified(sal_False)
70     ,m_bUpdatable(sal_False)
71     ,m_bClipboardFilled(sal_False)
72 {
73     DBG_CTOR(OTableRowView,NULL);
74 
75 }
76 
77 //------------------------------------------------------------------------
78 OTableRowView::~OTableRowView()
79 {
80 
81     DBG_DTOR(OTableRowView,NULL);
82 }
83 
84 //------------------------------------------------------------------------
85 void OTableRowView::Init()
86 {
87 	EditBrowseBox::Init();
88 
89 //	SetMapMode( MapMode(MAP_TWIP) );
90 //	GetDataWindow().SetMapMode( GetMapMode() );
91 
92 	Font aFont( GetDataWindow().GetFont() );
93 	aFont.SetWeight( WEIGHT_NORMAL );
94 	GetDataWindow().SetFont( aFont );
95 
96 	// Font fuer die Ueberschriften auf Light setzen
97 	aFont = GetFont();
98 	aFont.SetWeight( WEIGHT_LIGHT );
99 	SetFont(aFont);
100 
101 	// HandleColumn, fuer maximal fuenf Ziffern einrichten
102 	InsertHandleColumn(static_cast<sal_uInt16>(GetTextWidth('0') * 4)/*, sal_True */);
103 
104 	BrowserMode nMode = BROWSER_COLUMNSELECTION | BROWSER_MULTISELECTION | BROWSER_KEEPSELECTION |
105 						BROWSER_HLINESFULL | BROWSER_VLINESFULL | BROWSER_AUTOSIZE_LASTCOL;
106 	if (IsUpdatable())
107 		nMode |= BROWSER_HIDECURSOR;
108 
109 	SetMode(nMode);
110 }
111 
112 //------------------------------------------------------------------------
113 void OTableRowView::KeyInput( const KeyEvent& rEvt )
114 {
115 	if (IsDeleteAllowed(0))
116 	{
117 		if (rEvt.GetKeyCode().GetCode() == KEY_DELETE &&	// Delete rows
118 			!rEvt.GetKeyCode().IsShift() &&
119 			!rEvt.GetKeyCode().IsMod1())
120 		{
121 			DeleteRows();
122 			return;
123 		}
124 		if( rEvt.GetKeyCode().GetCode() == KEY_F2 )
125 		{
126 			::com::sun::star::util::URL aUrl;
127 			aUrl.Complete =::rtl::OUString::createFromAscii(".uno:DSBEditDoc");
128 			GetView()->getController().dispatch( aUrl,Sequence< PropertyValue >() );
129 		}
130 	}
131 	EditBrowseBox::KeyInput(rEvt);
132 }
133 
134 //------------------------------------------------------------------------
135 void OTableRowView::SetUpdatable( sal_Bool bUpdate )
136 {
137 	m_bUpdatable = bUpdate;
138 
139 }
140 
141 //------------------------------------------------------------------------
142 void OTableRowView::Command(const CommandEvent& rEvt)
143 {
144 
145 	switch (rEvt.GetCommand())
146 	{
147 		case COMMAND_CONTEXTMENU:
148 		{
149 			if (!rEvt.IsMouseEvent())
150 			{
151 				EditBrowseBox::Command(rEvt);
152 				return;
153 			}
154 
155 			sal_uInt16 nColId = GetColumnAtXPosPixel(rEvt.GetMousePosPixel().X());
156 			long   nRow = GetRowAtYPosPixel(rEvt.GetMousePosPixel().Y());
157 
158 			if ( nColId == HANDLE_ID )
159 			{
160 				PopupMenu aContextMenu(ModuleRes(RID_TABLEDESIGNROWPOPUPMENU));
161 				long nSelectRowCount = GetSelectRowCount();
162 				aContextMenu.EnableItem( SID_CUT, nSelectRowCount != 0);
163 				aContextMenu.EnableItem( SID_COPY, nSelectRowCount  != 0);
164 				aContextMenu.EnableItem( SID_PASTE, m_bClipboardFilled );
165 				aContextMenu.EnableItem( SID_DELETE, IsUpdatable() && nSelectRowCount != 0 );
166 				switch (aContextMenu.Execute(this, rEvt.GetMousePosPixel()))
167 				{
168 					case SID_CUT:
169 						cut();
170 						break;
171 					case SID_COPY:
172 						copy();
173 						break;
174 					case SID_PASTE:
175 						Paste( nRow );
176 						SetNoSelection();
177 						GoToRow( nRow );
178 						SeekRow( nRow );
179 						break;
180 
181 					case SID_DELETE:
182 						DeleteRows();
183 						break;
184 					case SID_TABLEDESIGN_INSERTROWS:
185 						InsertNewRows( nRow );
186 						SetNoSelection();
187 						GoToRow( nRow );
188 						SeekRow( nRow );
189 						break;
190 					default:
191 						break;
192 				}
193 			}
194 
195 		}
196 		default:
197 			EditBrowseBox::Command(rEvt);
198 	}
199 
200 }
201 
202 //------------------------------------------------------------------------------
203 void OTableRowView::cut()
204 {
205 	CopyRows();
206 	DeleteRows();
207 }
208 
209 //------------------------------------------------------------------------------
210 void OTableRowView::copy()
211 {
212 	CopyRows();
213 }
214 
215 //------------------------------------------------------------------------------
216 void OTableRowView::paste()
217 {
218 	OSL_ENSURE(0,"OTableRowView::Paste : (pseudo-) abstract method called !");
219 }
220 
221 //------------------------------------------------------------------------------
222 void OTableRowView::Paste( long nRow )
223 {
224 	InsertRows( nRow );
225 }
226 
227 //------------------------------------------------------------------------------
228 EditBrowseBox::RowStatus OTableRowView::GetRowStatus(long nRow) const
229 {
230 	if (nRow >= 0 && m_nDataPos == nRow)
231 		return CURRENT;
232 	else
233 		return CLEAN;
234 }
235 
236 
237 
238