Author: alg
Date: Tue Jul 2 08:50:18 2013
New Revision: 1498841
URL: http://svn.apache.org/r1498841
Log:
i122589 check if element is added before removing and deleting it (well, put it
in undo)
Modified:
openoffice/trunk/main/dbaccess/source/ui/inc/QueryTableView.hxx
openoffice/trunk/main/dbaccess/source/ui/querydesign/QueryTableView.cxx
Modified: openoffice/trunk/main/dbaccess/source/ui/inc/QueryTableView.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/dbaccess/source/ui/inc/QueryTableView.hxx?rev=1498841&r1=1498840&r2=1498841&view=diff
==============================================================================
--- openoffice/trunk/main/dbaccess/source/ui/inc/QueryTableView.hxx (original)
+++ openoffice/trunk/main/dbaccess/source/ui/inc/QueryTableView.hxx Tue Jul 2
08:50:18 2013
@@ -73,6 +73,7 @@ namespace dbaui
// Basisklasse ueberschrieben : Fenster kreieren und loeschen
// (eigentlich nicht wirklich LOESCHEN, es geht in die
Verantwortung einer UNDO-Action ueber)
+ bool ContainsTabWin(const OTableWindow& rTabWin); // #122589# Allow to
check if OTableWindow is registered
virtual void AddTabWin( const ::rtl::OUString& _rTableName,
const ::rtl::OUString& _rAliasName, sal_Bool bNewTable = sal_False );
virtual void RemoveTabWin(OTableWindow* pTabWin);
Modified:
openoffice/trunk/main/dbaccess/source/ui/querydesign/QueryTableView.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/dbaccess/source/ui/querydesign/QueryTableView.cxx?rev=1498841&r1=1498840&r2=1498841&view=diff
==============================================================================
--- openoffice/trunk/main/dbaccess/source/ui/querydesign/QueryTableView.cxx
(original)
+++ openoffice/trunk/main/dbaccess/source/ui/querydesign/QueryTableView.cxx Tue
Jul 2 08:50:18 2013
@@ -835,42 +835,65 @@ sal_Bool OQueryTableView::FindTableFromF
}
//------------------------------------------------------------------------------
-void OQueryTableView::RemoveTabWin(OTableWindow* pTabWin)
+bool OQueryTableView::ContainsTabWin(const OTableWindow& rTabWin)
{
- DBG_CHKTHIS(OQueryTableView,NULL);
- DBG_ASSERT(pTabWin != NULL, "OQueryTableView::RemoveTabWin : Fenster
sollte ungleich NULL sein !");
-
- // mein Parent brauche ich, da es vom Loeschen erfahren soll
- OQueryDesignView* pParent =
static_cast<OQueryDesignView*>(getDesignView());
+ OTableWindowMap* pTabWins = GetTabWinMap();
+ DBG_ASSERT(pTabWins != NULL, "OQueryTableView::HideTabWin : habe keine
TabWins !");
- SfxUndoManager& rUndoMgr = m_pView->getController().GetUndoManager();
- rUndoMgr.EnterListAction( String(
ModuleRes(STR_QUERY_UNDO_TABWINDELETE) ), String() );
+ OTableWindowMap::iterator aIter = pTabWins->begin();
+ OTableWindowMap::iterator aEnd = pTabWins->end();
- // Undo-Action anlegen
- OQueryTabWinDelUndoAct* pUndoAction = new OQueryTabWinDelUndoAct(this);
- pUndoAction->SetTabWin(static_cast< OQueryTableWindow*>(pTabWin));
+ for ( ;aIter != aEnd ; ++aIter )
+ {
+ if ( aIter->second == &rTabWin )
+ {
+ return true;
+ }
+ }
- // und Fenster verstecken
- HideTabWin(static_cast< OQueryTableWindow*>(pTabWin), pUndoAction);
-
- // Undo Actions und Loeschen der Felder in SelectionBrowseBox
- pParent->TableDeleted( static_cast<
OQueryTableWindowData*>(pTabWin->GetData().get())->GetAliasName() );
-
- m_pView->getController().addUndoActionAndInvalidate( pUndoAction );
- rUndoMgr.LeaveListAction();
+ return false;
+}
- if (m_lnkTabWinsChangeHandler.IsSet())
- {
- TabWinsChangeNotification
aHint(TabWinsChangeNotification::AT_REMOVED_WIN, static_cast<
OQueryTableWindow*>(pTabWin)->GetAliasName());
- m_lnkTabWinsChangeHandler.Call(&aHint);
- }
+//------------------------------------------------------------------------------
+void OQueryTableView::RemoveTabWin(OTableWindow* pTabWin)
+{
+ DBG_CHKTHIS(OQueryTableView,NULL);
+ DBG_ASSERT(pTabWin != NULL, "OQueryTableView::RemoveTabWin : Fenster
sollte ungleich NULL sein !");
- modified();
- if ( m_pAccessible )
- m_pAccessible->notifyAccessibleEvent(
AccessibleEventId::CHILD,
-
makeAny(pTabWin->GetAccessible()),
-
Any()
-
);
+ if(pTabWin && ContainsTabWin(*pTabWin)) // #122589# check if registered
before deleting
+ {
+ // mein Parent brauche ich, da es vom Loeschen erfahren soll
+ OQueryDesignView* pParent =
static_cast<OQueryDesignView*>(getDesignView());
+
+ SfxUndoManager& rUndoMgr =
m_pView->getController().GetUndoManager();
+ rUndoMgr.EnterListAction( String(
ModuleRes(STR_QUERY_UNDO_TABWINDELETE) ), String() );
+
+ // Undo-Action anlegen
+ OQueryTabWinDelUndoAct* pUndoAction = new
OQueryTabWinDelUndoAct(this);
+ pUndoAction->SetTabWin(static_cast< OQueryTableWindow*>(pTabWin));
+
+ // und Fenster verstecken
+ HideTabWin(static_cast< OQueryTableWindow*>(pTabWin), pUndoAction);
+
+ // Undo Actions und Loeschen der Felder in SelectionBrowseBox
+ pParent->TableDeleted( static_cast<
OQueryTableWindowData*>(pTabWin->GetData().get())->GetAliasName() );
+
+ m_pView->getController().addUndoActionAndInvalidate( pUndoAction );
+ rUndoMgr.LeaveListAction();
+
+ if (m_lnkTabWinsChangeHandler.IsSet())
+ {
+ TabWinsChangeNotification
aHint(TabWinsChangeNotification::AT_REMOVED_WIN, static_cast<
OQueryTableWindow*>(pTabWin)->GetAliasName());
+ m_lnkTabWinsChangeHandler.Call(&aHint);
+ }
+
+ modified();
+ if ( m_pAccessible )
+ m_pAccessible->notifyAccessibleEvent(
AccessibleEventId::CHILD,
+
makeAny(pTabWin->GetAccessible()),
+
Any()
+
);
+ }
}
//------------------------------------------------------------------------