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