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