1 //////////////////////////////////////////////////////////////////////////
2 //
3 // pgAdmin III - PostgreSQL Tools
4 //
5 // Copyright (C) 2002 - 2016, The pgAdmin Development Team
6 // This software is released under the PostgreSQL Licence
7 //
8 // ddRemoveTableButtonHandle.cpp - A handle for a table figure that allow to delete it
9 //
10 //////////////////////////////////////////////////////////////////////////
11 
12 #include "pgAdmin3.h"
13 
14 // wxWindows headers
15 #include <wx/wx.h>
16 
17 // App headers
18 #include "dd/dditems/handles/ddRemoveTableButtonHandle.h"
19 #include "dd/dditems/figures/ddTableFigure.h"
20 #include "dd/dditems/figures/ddRelationshipFigure.h"
21 #include "dd/dditems/utilities/ddDataType.h"
22 #include "hotdraw/main/hdDrawingView.h"
23 #include "hotdraw/utilities/hdRemoveDeleteDialog.h"
24 #include "dd/ddmodel/ddDrawingEditor.h"
25 #include "dd/ddmodel/ddDatabaseDesign.h"
26 
27 //Images
28 #include "images/ddDeleteTableCursor.pngc"
29 
ddRemoveTableButtonHandle(hdIFigure * owner,hdILocator * buttonLocator,wxBitmap & buttonImage,wxSize & size)30 ddRemoveTableButtonHandle::ddRemoveTableButtonHandle(hdIFigure *owner, hdILocator *buttonLocator , wxBitmap &buttonImage, wxSize &size):
31 	hdButtonHandle(owner, buttonLocator, buttonImage, size)
32 {
33 }
34 
~ddRemoveTableButtonHandle()35 ddRemoveTableButtonHandle::~ddRemoveTableButtonHandle()
36 {
37 }
38 
invokeStart(hdMouseEvent & event,hdDrawingView * view)39 void ddRemoveTableButtonHandle::invokeStart(hdMouseEvent &event, hdDrawingView *view)
40 {
41 }
42 
invokeStep(hdMouseEvent & event,hdDrawingView * view)43 void ddRemoveTableButtonHandle::invokeStep(hdMouseEvent &event, hdDrawingView *view)
44 {
45 }
46 
invokeEnd(hdMouseEvent & event,hdDrawingView * view)47 void ddRemoveTableButtonHandle::invokeEnd(hdMouseEvent &event, hdDrawingView *view)
48 {
49 	if(view && getOwner())
50 	{
51 		ddTableFigure *table = (ddTableFigure *) getOwner();
52 		hdRemoveDeleteDialog dialog(_("Are you sure you wish to delete table ") + table->getTableName() + wxT("?"), _("Delete table?"), view);
53 		int answer = dialog.ShowModal();
54 		if (answer == DD_DELETE)
55 		{
56 			ddDrawingEditor *editor = (ddDrawingEditor *) view->editor();
57 			//Unselect table at all diagrams
58 			editor->removeFromAllSelections(table);
59 			//Drop foreign keys with this table as origin or destination
60 			table->processDeleteAlert(view->getDrawing());
61 			//Drop table
62 			editor->deleteModelFigure(table);
63 			editor->getDesign()->refreshBrowser();
64 			editor->checkRelationshipsConsistency(view->getIdx());
65 			view->notifyChanged();
66 		}
67 		else if(answer == DD_REMOVE)
68 		{
69 			ddDrawingEditor *editor = (ddDrawingEditor *) view->editor();
70 			editor->getExistingDiagram(view->getIdx())->removeFromSelection(table);
71 			editor->getExistingDiagram(view->getIdx())->remove(table);
72 			editor->checkRelationshipsConsistency(view->getIdx());
73 			view->notifyChanged();
74 		}
75 
76 	}
77 }
78