34#include <wx/splitter.h>
35#include <wx/progdlg.h>
71 wxPanel(parent,
id), manager_(NULL) {
73 wxSplitterWindow* splitter =
new wxSplitterWindow(
this, wxVERTICAL);
75 wxBoxSizer* sizer =
new wxBoxSizer(wxVERTICAL);
76 tree_ =
new wxTreeCtrl(splitter, ID_TREE_VIEW);
78 splitter->SetMinimumPaneSize(150);
79 splitter->SplitVertically(tree_, infoPanel_);
80 sizer->Add(splitter, 1, wxGROW);
121 tree_->DeleteAllItems();
122 wxTreeItemId root =
tree_->AddRoot(_T(
"HDB"));
124 wxTreeItemId fus =
tree_->AppendItem(
127 wxTreeItemId rfs =
tree_->AppendItem(
130 wxTreeItemId fuEntries =
tree_->AppendItem(
133 wxTreeItemId rfEntries =
tree_->AppendItem(
136 wxTreeItemId busEntries =
tree_->AppendItem(
139 wxTreeItemId socketEntries =
tree_->AppendItem(
142 wxTreeItemId costPlugins =
tree_->AppendItem(
145 wxTreeItemId operationImplementations =
tree_->AppendItem(
148 wxTreeItemId operationImplementationResources =
tree_->AppendItem(
151 std::set<RowID>::iterator iter;
164 int entries = fuArchIds.size() + rfArchIds.size() + fuIDs.size() +
165 rfIDs.size() + busIDs.size() + socketIDs.size() + pluginIDs.size();
169 wxProgressDialog dialog(
170 _T(
"Loading HDB"), _T(
"Loading HDB"), entries,
this,
171 wxPD_APP_MODAL|wxPD_AUTO_HIDE);
173 dialog.SetSize(300,100);
175 int ids = fuArchIds.size();
180 for (iter = fuArchIds.begin(); iter != fuArchIds.end(); iter++) {
189 message.Printf(wxT(
"Loading FU Architectures... (%04d / %04d)"),cur,ids);
190 dialog.Update(c, message);
191 dialog.SetSize(300,100);
193 tree_->SortChildren(fus);
196 ids = rfArchIds.size();
198 for (iter = rfArchIds.begin(); iter != rfArchIds.end(); iter++) {
200 wxTreeItemId
id =
tree_->AppendItem(rfs, archLabel);
204 message.Printf(wxT(
"Loading RF Architectures... (%04d / %04d)"),cur,ids);
205 dialog.Update(c, message);
206 dialog.SetSize(300,100);
212 for (iter = fuIDs.begin(); iter != fuIDs.end(); iter++) {
215 wxTreeItemId entryTreeID =
tree_->AppendItem(fuEntries, fuEntryLabel);
221 int archID = arch.
id();
227 wxTreeItemId
id =
tree_->AppendItem(archTreeID, impName);
235 message.Printf(wxT(
"Loading FU entries... (%04d / %04d)"),cur,ids);
236 dialog.Update(c, message);
237 dialog.SetSize(300,100);
243 for (iter = rfIDs.begin(); iter != rfIDs.end(); iter++) {
246 wxTreeItemId entryTreeID =
tree_->AppendItem(rfEntries, rfEntryLabel);
251 int archID = arch.
id();
257 wxTreeItemId
id =
tree_->AppendItem(archTreeID, impName);
264 message.Printf(wxT(
"Loading RF entries... (%04d / %04d)"),cur,ids);
265 dialog.Update(c, message);
266 dialog.SetSize(300,100);
272 for (iter = busIDs.begin(); iter != busIDs.end(); iter++) {
274 wxTreeItemId entryTreeID =
275 tree_->AppendItem(busEntries, busEntryLabel);
280 message.Printf(wxT(
"Loading bus entries... (%04d / %04d)"),cur,ids);
281 dialog.Update(c, message);
282 dialog.SetSize(300,100);
287 ids = socketIDs.size();
288 for (iter = socketIDs.begin(); iter != socketIDs.end(); iter++) {
290 wxTreeItemId entryTreeID =
291 tree_->AppendItem(socketEntries, socketEntryLabel);
295 message.Printf(wxT(
"Loading socket entries... (%04d / %04d)"),cur,ids);
296 dialog.Update(c, message);
297 dialog.SetSize(300,100);
302 ids = pluginIDs.size();
303 for (iter = pluginIDs.begin(); iter != pluginIDs.end(); iter++) {
309 wxTreeItemId
id =
tree_->AppendItem(costPlugins, pluginName);
314 message.Printf(wxT(
"Loading cost estimation plugins... (%04d / %04d)"),cur,ids);
315 dialog.Update(c, message);
316 dialog.SetSize(300,100);
320 for (
auto &
id : operationImplementationIDs) {
322 std::string label = std::to_string(
id) +
" : " + op.
name;
323 tree_->AppendItem(operationImplementations, label);
327 for (
auto &
id : operationImplementationResourceIDs) {
329 std::string label = std::to_string(
id) +
" : " + res.
name;
330 tree_->AppendItem(operationImplementationResources, label);
440 std::string parent =
tree_->GetItemParent(
tree_->GetSelection()).IsOk() ?
442 .ToStdString() :
"none";
443 return parent ==
"Operation Implementation Resources";
454 std::string parent =
tree_->GetItemParent(
tree_->GetSelection()).IsOk() ?
456 .ToStdString() :
"none";
457 return parent ==
"Operation Implementations";
618 std::istringstream iss(
tree_->GetItemText(
tree_->GetSelection())
636 std::istringstream iss(
tree_->GetItemText(
tree_->GetSelection())
784 wxTreeCtrl* ctrl =
new wxTreeCtrl();
785 std::string current = ctrl->GetItemText(e.GetItem().GetID()).ToStdString();
786 std::string parent = ctrl->GetItemParent(e.GetItem().GetID()).IsOk() ?
787 ctrl->GetItemText(ctrl->GetItemParent(e.GetItem().GetID())).ToStdString() :
811 std::istringstream iss(current);
816 std::istringstream iss(current);
833 tree_->SelectItem(event.GetItem());
834 wxMenu* popupMenu =
new wxMenu();
838 _T(
"Add &Implementation..."));
843 _T(
"Add &Implementation..."));
848 _T(
"Set Cost Function Plugin"));
851 popupMenu->AppendSeparator();
854 PopupMenu(popupMenu, event.GetPoint());
867 std::set<std::string> opNames;
873 opNames.insert(opName);
877 std::set<std::string>::const_iterator oIter = opNames.begin();
878 for (; oIter != opNames.end(); oIter++) {
880 archName.Append(_T(
" "));
894 const wxString fuArchPrefix =
898 const wxString rfArchPrefix =
902 const wxString fuEntryPrefix =
905 const wxString rfEntryPrefix =
908 const wxString busEntryPrefix =
911 const wxString socketEntryPrefix =
915 const wxString fuImplPrefix =
919 const wxString rfImplPrefix =
923 const wxString costPluginPrefix =
927 if (link.StartsWith(fuArchPrefix, &rest)) {
930 }
else if (link.StartsWith(rfArchPrefix, &rest)) {
933 }
else if (link.StartsWith(fuEntryPrefix, &rest)) {
936 }
else if (link.StartsWith(rfEntryPrefix, &rest)) {
939 }
else if (link.StartsWith(busEntryPrefix, &rest)) {
942 }
else if (link.StartsWith(socketEntryPrefix, &rest)) {
945 }
else if (link.StartsWith(fuImplPrefix, &rest)) {
948 }
else if (link.StartsWith(rfImplPrefix, &rest)) {
951 }
else if (link.StartsWith(costPluginPrefix, &rest)) {
END_EVENT_TABLE() using namespace IDF
int RowID
Type definition of row ID in relational databases.
static std::string toString(const T &source)
static int toInt(const T &source)
void displaySocketEntry(RowID id)
void setHDB(const HDB::HDBManager &hdb)
void displayRFArchitecture(RowID id)
void displayRFEntry(RowID id)
void displayCostFunctionPlugin(RowID id)
void displayRFImplementation(RowID id)
void displayBusEntry(RowID id)
void displayOperationImplementationResource(RowID id)
void displayFUImplementation(RowID id)
void displayFUArchitecture(RowID id)
void displayFUEntry(RowID id)
void displayOperationImplementation(RowID id)
void selectFUImplementation(int id)
std::map< RowID, wxTreeItemId > rfArchitectures_
Map of rf architecture RowIDs to tree item IDs.
bool isCostFunctionPluginSelected()
void selectBusEntry(int id)
std::map< RowID, wxTreeItemId > fuArchitectures_
Map of fu architecture RowIDs to tree item IDs.
void selectCostFunctionPlugin(int id)
RowID selectedRFImplementation()
bool isSocketEntrySelected()
wxTreeCtrl * tree_
Tree widget displayign the HDB hierarchy.
void selectRFEntry(int id)
RowID selectedFUImplementation()
std::map< RowID, wxTreeItemId > rfImplementations_
Map of rf implementation RowIDs to tree item IDs.
std::map< RowID, wxTreeItemId > costPlugins_
Map of cost function plugin RowIDs to tree item IDs.
std::map< RowID, wxTreeItemId > rfEntries_
Map of rf entry RowIDs to tree item IDs.
void selectSocketEntry(int id)
RowID selectedOperationImplementation()
bool isOperationImplementationResourceSelected()
void selectFUArchitecture(int id)
HDB::CachedHDBManager * manager_
HDB to display in the browser.
RowID selectedRFArchitecture()
RowID selectedFUArchitecture()
HDBBrowserInfoPanel * infoPanel_
Info panel widget for displaying the selected element information.
std::map< RowID, wxTreeItemId > fuEntries_
Map of fu entry RowIDs to tree item IDs.
void selectRFImplementation(int id)
bool isFUArchitectureSelected()
void onItemSelected(wxTreeEvent &event)
void onRMBClick(wxTreeEvent &event)
void selectFUEntry(int id)
wxString fuArchLabel(const TTAMachine::FunctionUnit &fu) const
RowID selectedOperationImplementationResource()
void selectRFArchitecture(int id)
bool isRFImplementationSelected()
std::map< RowID, wxTreeItemId > fuImplementations_
Map of fu implementation RowIDs to tree item IDs.
virtual ~HDBBrowserWindow()
bool isOperationImplementationSelected()
RowID selectedSocketEntry()
bool isBusEntrySelected()
void openLink(const wxString &link)
std::map< RowID, wxTreeItemId > socketEntries_
Map of socket entry RowIDs to tree item IDs.
std::map< RowID, wxTreeItemId > busEntries_
Map of bus entry RowIDs to tree item IDs.
RowID selectedCostFunctionPlugin()
bool isFUImplementationSelected()
void setHDBManager(HDB::CachedHDBManager &manager)
bool isRFArchitectureSelected()
@ COMMAND_SET_COST_PLUGIN
@ COMMAND_ADD_RF_IMPLEMENTATION
@ COMMAND_ADD_FU_IMPLEMENTATION
static const std::string OPERATION_IMPLEMENTATIONS
static const std::string RF_IMPLEMENTATIONS
static const std::string RF_IU_ENTRIES
static const std::string COST_PLUGINS
static const std::string FU_ENTRIES
static const std::string FU_ARCHITECTURES
static const std::string RF_ARCHITECTURES
static const std::string SOCKET_ENTRIES
static const std::string RF_ENTRIES
static const std::string OPERATION_IMPLEMENTATION_RESOURCES
static const std::string FU_IMPLEMENTATIONS
static const std::string BUS_ENTRIES
const FUArchitecture & fuArchitectureByIDConst(RowID id) const
TTAMachine::FunctionUnit & architecture() const
FUImplementation & implementation() const
virtual bool hasImplementation() const
FUArchitecture & architecture() const
virtual bool hasArchitecture() const
FUEntry * fuByEntryID(RowID id) const
std::set< RowID > rfArchitectureIDs() const
CostFunctionPlugin * costFunctionPluginByID(RowID pluginID) const
OperationImplementationResource OperationImplementationResourceByID(RowID id) const
std::set< RowID > OperationImplementationIDs() const
OperationImplementation OperationImplementationByID(RowID id) const
std::set< RowID > fuArchitectureIDs() const
std::set< RowID > socketEntryIDs() const
std::set< RowID > rfEntryIDs() const
std::set< RowID > costFunctionPluginIDs() const
std::set< RowID > busEntryIDs() const
RFEntry * rfByEntryID(RowID id) const
std::set< RowID > fuEntryIDs() const
std::set< RowID > OperationImplementationResourceIDs() const
std::string moduleName() const
virtual bool hasImplementation() const
RFArchitecture & architecture() const
virtual bool hasArchitecture() const
RFImplementation & implementation() const
virtual HWOperation * operation(const std::string &name) const
virtual int operationCount() const
const std::string & name() const
static wxString toWxString(const std::string &source)
static std::string toString(const wxString &source)