void CtrlrPanelCanvas::pasteGroupComponent(const ValueTree &groupTree, const int destinationX, const int destinationY) { if (groupTree.hasType ("groupTree")) { CtrlrComponent *parent = addNewComponent (groupTree.getChild(0), 0, true); if (destinationX >= 0 && destinationY >= 0) parent->setTopLeftPosition (destinationX, destinationY); else parent->setTopLeftPosition (parent->getX()+(parent->getWidth()/2), parent->getY()+(parent->getHeight()/2)); CtrlrGroup *group = dynamic_cast<CtrlrGroup*>(parent); CtrlrTabsComponent *tabs = dynamic_cast<CtrlrTabsComponent*>(parent); for (int i=0; i<groupTree.getChild(0).getNumChildren(); i++) { if (groupTree.getChild(0).getChild(i).hasType(Ids::modulator)) { CtrlrComponent *child = addNewComponent (groupTree.getChild(0).getChild(i), 0, true); if (group && child) { group->setOwned(child, true); } if (tabs && child) { tabs->setOwned(child, child->getProperty(Ids::componentTabId), true); } } } } }
void CtrlrPanelCanvas::handleRightClickOnCanvas(const MouseEvent &e) { const bool em = getOwner().getProperty(Ids::uiPanelEditMode); if (!em) { PopupMenu m = getRightClickComponentMenu(e); handleComponentPopupMenu(e, m.show()); return; } PopupMenu m; if (em) { m = CtrlrComponentTypeManager::getComponentMenu(em); getEditMenu(m); } else { m = getRightClickComponentMenu(e); } const int ret = m.show(); if (ret >= 4096) { handleComponentPopupMenu(e, ret); } else if (ret == 1024) { getOwner().setProperty (Ids::uiPanelEditMode, !em); getOwner().editModeChanged(); } else if (ret < 1024 && ret > 10) { PopupMenu::MenuItemIterator iterator((const PopupMenu &)m); while (iterator.next()) { if (iterator.getItem().subMenu) { PopupMenu::MenuItemIterator iterator2(*iterator.getItem().subMenu); while (iterator2.next()) { if (iterator2.getItem().itemID == ret) { addNewComponent (iterator2.getItem().text, e.getPosition(), e.eventComponent); } } } } } else if (ret >= 2048 && ret < 4096) { handleEditMenu (ret, e); } }
bool BOARD_NETLIST_UPDATER::UpdateNetlist( NETLIST& aNetlist ) { wxString msg; m_errorCount = 0; m_warningCount = 0; if( !m_isDryRun ) { m_board->SetStatus( 0 ); } for( int i = 0; i < (int) aNetlist.GetCount(); i++ ) { COMPONENT* component = aNetlist.GetComponent( i ); MODULE* footprint = NULL; msg.Printf( _( "Processing component \"%s:%s:%s\".\n" ), GetChars( component->GetReference() ), GetChars( component->GetTimeStamp() ), GetChars( component->GetFPID().Format() ) ); m_reporter->Report( msg, REPORTER::RPT_INFO ); if( aNetlist.IsFindByTimeStamp() ) footprint = m_board->FindModule( component->GetTimeStamp(), true ); else footprint = m_board->FindModule( component->GetReference() ); if( footprint ) // An existing footprint. { MODULE* newFootprint = replaceComponent( aNetlist, footprint, component ); if( newFootprint ) footprint = newFootprint; } else { footprint = addNewComponent( component ); } if( footprint ) { updateComponentParameters( footprint, component ); updateComponentPadConnections( footprint, component ); } } //aNetlist.GetDeleteExtraFootprints() if( m_deleteUnusedComponents ) deleteUnusedComponents( aNetlist ); if( m_deleteSinglePadNets ) deleteSinglePadNets(); if( !m_isDryRun ) { m_commit.Push( _( "Update netlist" ) ); m_frame->Compile_Ratsnest( NULL, false ); m_board->GetRatsnest()->ProcessBoard(); testConnectivity( aNetlist ); } // Update the ratsnest m_reporter->Report( wxT( "" ), REPORTER::RPT_ACTION ); m_reporter->Report( wxT( "" ), REPORTER::RPT_ACTION ); msg.Printf( _( "Total warnings: %d, errors: %d." ), m_warningCount, m_errorCount ); m_reporter->Report( msg, REPORTER::RPT_ACTION ); if( m_errorCount ) { m_reporter->Report( _( "Errors occured during the netlist update. Unless you " "fix them, your board will not be consistent with the schematics." ), REPORTER::RPT_ERROR ); return false; } else { m_reporter->Report( _( "Netlist update successful!" ), REPORTER::RPT_ACTION ); } return true; }