1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// ddModelBrowser.cpp - Tables Tree of Database Designer.
//
//////////////////////////////////////////////////////////////////////////
#include "pgAdmin3.h"
// wxWindows headers
#include <wx/wx.h>
#include <wx/regex.h>
#include <wx/imaglist.h>
// App headers
#include "dd/ddmodel/ddModelBrowser.h"
#include "dd/ddmodel/ddDatabaseDesign.h"
#include "dd/ddmodel/ddBrowserDataContainer.h"
// Images
#include "images/table-sm.pngc"
#include "images/database-sm.pngc"
BEGIN_EVENT_TABLE(ddModelBrowser, wxTreeCtrl)
EVT_TREE_ITEM_ACTIVATED(DD_BROWSER, ddModelBrowser::OnItemActivated)
EVT_TREE_BEGIN_DRAG(DD_BROWSER, ddModelBrowser::OnBeginDrag)
END_EVENT_TABLE()
ddModelBrowser::ddModelBrowser(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style, ddDatabaseDesign *design)
: wxTreeCtrl(parent, id, pos, size, style)
{
ownerDesign = design;
rootNode = (wxTreeItemId *)NULL;
createRoot(_("Database Design"));
// Create normal images list of browser
// Remember to update enum gqbImages in ddModelBrowser.h if changing the images!!
imageList = new wxImageList(16, 16);
imageList->Add(*database_sm_png_ico);
imageList->Add(*table_sm_png_ico);
this->AssignImageList(imageList);
}
// Destructor
ddModelBrowser::~ddModelBrowser()
{
this->DeleteAllItems(); // This remove and delete data inside tree's node
}
// Create root node
wxTreeItemId &ddModelBrowser::createRoot(wxString Name)
{
rootNode = this->AddRoot(Name, DD_IMG_FIG_DATABASE, DD_IMG_FIG_DATABASE);
return rootNode;
}
void ddModelBrowser::refreshFromModel()
{
this->DeleteAllItems();
createRoot(_("Database Design"));
hdIteratorBase *iterator = ownerDesign->getEditor()->modelFiguresEnumerator();
hdIFigure *tmpFigure;
ddTableFigure *table;
while(iterator->HasNext())
{
tmpFigure = (hdIFigure *)iterator->Next();
if(tmpFigure->getKindId() == DDTABLEFIGURE)
{
table = (ddTableFigure *)tmpFigure;
this->AppendItem(rootNode, table->getTableName(), DD_IMG_FIG_TABLE, DD_IMG_FIG_TABLE, new ddBrowserDataContainer(table));
}
}
delete iterator;
this->Expand(rootNode);
this->SortChildren(rootNode);
}
void ddModelBrowser::OnItemActivated(wxTreeEvent &event)
{
}
void ddModelBrowser::OnBeginDrag(wxTreeEvent &event)
{
wxTreeItemId itemId = event.GetItem();
// Simplest solution, simulate DnD but actually don't do it
ddBrowserDataContainer *object = (ddBrowserDataContainer *) GetItemData(itemId);
if(object != NULL && (object->getFigureKindId() == DDTABLEFIGURE))
{
ddTableFigure *item = (ddTableFigure *) object->getFigure();
wxString tableName = item->getTableName();
wxTextDataObject textData(tableName);
wxDropSource dragSource(this);
dragSource.SetData(textData);
wxDragResult result = dragSource.DoDragDrop(wxDrag_CopyOnly);
if(result != wxDragCopy)
{
wxMessageBox(wxT("Invalid kind of data during drag and drop operation"), wxT("Drag and drop error"), wxICON_ERROR | wxOK);
}
}
}
|