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()                                                       
                                        
+                                                                               
                    );
+    }
 }
 
 //------------------------------------------------------------------------


Reply via email to