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