mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 14:15:49 -06:00
114 lines
3.1 KiB
C++
114 lines
3.1 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// pgAdmin III - PostgreSQL Tools
|
|
//
|
|
// Copyright (C) 2002 - 2016, 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);
|
|
}
|
|
}
|
|
}
|