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 #ifndef DBAUI_OQueryTabWinUndoAct_HXX
31 #include "QueryTabWinUndoAct.hxx"
32 #endif
33 #ifndef _OSL_DIAGNOSE_H_
34 #include <osl/diagnose.h>
35 #endif
36 #ifndef DBAUI_QUERY_TABLEWINDOW_HXX
37 #include "QTableWindow.hxx"
38 #endif
39 #ifndef DBAUI_QUERY_TABLEWINDOWDATA_HXX
40 #include "QTableWindowData.hxx"
41 #endif
42 #ifndef DBAUI_TABLECONNECTION_HXX
43 #include "TableConnection.hxx"
44 #endif
45 #ifndef DBAUI_TABLECONNECTIONDATA_HXX
46 #include "TableConnectionData.hxx"
47 #endif
48 #ifndef DBAUI_QUERYDESIGNFIELDUNDOACT_HXX
49 #include "QueryDesignFieldUndoAct.hxx"
50 #endif
51 #ifndef DBAUI_QUERYTABLEVIEW_HXX
52 #include "QueryTableView.hxx"
53 #endif
54 
55 
56 using namespace dbaui;
57 DBG_NAME(OQueryDesignFieldUndoAct)
58 OQueryDesignFieldUndoAct::OQueryDesignFieldUndoAct(OSelectionBrowseBox* pSelBrwBox, sal_uInt16 nCommentID)
59 	: OCommentUndoAction(nCommentID)
60 	, pOwner(pSelBrwBox)
61 	, m_nColumnPostion(BROWSER_INVALIDID)
62 {
63 	DBG_CTOR(OQueryDesignFieldUndoAct,NULL);
64 }
65 // -----------------------------------------------------------------------------
66 OQueryDesignFieldUndoAct::~OQueryDesignFieldUndoAct()
67 {
68 	DBG_DTOR(OQueryDesignFieldUndoAct,NULL);
69 	pOwner = NULL;
70 }
71 // -----------------------------------------------------------------------------
72 
73 DBG_NAME(OQueryTabWinUndoAct )
74 // ------------------------------------------------------------------------------------------------
75 OQueryTabWinUndoAct::OQueryTabWinUndoAct(OQueryTableView* pOwner, sal_uInt16 nCommentID)
76 	:OQueryDesignUndoAction(pOwner, nCommentID)
77 	,m_pTabWin(NULL)
78 {
79 	DBG_CTOR(OQueryTabWinUndoAct ,NULL);
80 }
81 //==============================================================================
82 OQueryTabWinUndoAct::~OQueryTabWinUndoAct()
83 {
84 	DBG_DTOR(OQueryTabWinUndoAct ,NULL);
85 	if (m_bOwnerOfObjects)
86 	{	// wenn ich der alleinige Owner des Fenster bin, muss ich dafuer sorgen, dass es geloescht wird
87 		OSL_ENSURE(m_pTabWin != NULL, "OQueryTabWinUndoAct::~OQueryTabWinUndoAct() : m_pTabWin sollte nicht NULL sein");
88 		OSL_ENSURE(!m_pTabWin->IsVisible(), "OQueryTabWinUndoAct::~OQueryTabWinUndoAct() : *m_pTabWin sollte nicht sichtbar sein");
89 
90 		if ( m_pTabWin )
91 			m_pTabWin->clearListBox();
92 		delete m_pTabWin;
93 
94 		// und natuerlich auch die entsprechenden Connections
95 		::std::vector<OTableConnection*>::iterator aIter = m_vTableConnection.begin();
96         ::std::vector<OTableConnection*>::iterator aEnd = m_vTableConnection.end();
97 		for(;aIter != aEnd;++aIter)
98 		{
99 			m_pOwner->DeselectConn(*aIter);
100 			delete (*aIter);
101 		}
102 		m_vTableConnection.clear();
103 	}
104 }
105 //------------------------------------------------------------------------------
106 void OTabFieldCellModifiedUndoAct::Undo()
107 {
108 	pOwner->EnterUndoMode();
109 	OSL_ENSURE(m_nColumnPostion != BROWSER_INVALIDID,"Column position was not set add the undo action!");
110 	OSL_ENSURE(m_nColumnPostion < pOwner->GetColumnCount(),"Position outside the column count!");
111 	if ( m_nColumnPostion != BROWSER_INVALIDID )
112 	{
113 		sal_uInt16 nColumnId = pOwner->GetColumnId(m_nColumnPostion);
114 		String strNext = pOwner->GetCellContents(m_nCellIndex, nColumnId);
115 		pOwner->SetCellContents(m_nCellIndex, nColumnId, m_strNextCellContents);
116 		m_strNextCellContents = strNext;
117 	}
118 	pOwner->LeaveUndoMode();
119 }
120 
121 //------------------------------------------------------------------------------
122 void OTabFieldSizedUndoAct::Undo()
123 {
124 	pOwner->EnterUndoMode();
125 	OSL_ENSURE(m_nColumnPostion != BROWSER_INVALIDID,"Column position was not set add the undo action!");
126 	if ( m_nColumnPostion != BROWSER_INVALIDID )
127 	{
128 		sal_uInt16 nColumnId = pOwner->GetColumnId(m_nColumnPostion);
129 		long nNextWidth = pOwner->GetColumnWidth(nColumnId);
130 		pOwner->SetColWidth(nColumnId, m_nNextWidth);
131 		m_nNextWidth = nNextWidth;
132 	}
133 	pOwner->LeaveUndoMode();
134 }
135 // -----------------------------------------------------------------------------
136 void OTabFieldMovedUndoAct::Undo()
137 {
138 	pOwner->EnterUndoMode();
139 	OSL_ENSURE(m_nColumnPostion != BROWSER_INVALIDID,"Column position was not set add the undo action!");
140 	if ( m_nColumnPostion != BROWSER_INVALIDID )
141 	{
142 		sal_uInt16 nId = pDescr->GetColumnId();
143 		sal_uInt16 nOldPos = pOwner->GetColumnPos(nId);
144 		pOwner->SetColumnPos(nId,m_nColumnPostion);
145 		pOwner->ColumnMoved(nId,sal_False);
146 		m_nColumnPostion = nOldPos;
147 	}
148 	pOwner->LeaveUndoMode();
149 }
150 // -----------------------------------------------------------------------------
151 
152 
153 
154 
155 
156