@@ -1402,6 +1402,56 @@ void GOODFFrame::OnOrganTreeRightClicked(wxTreeEvent& event) {
14021402 event.Skip ();
14031403 return ;
14041404 }
1405+
1406+ if (parentId == tree_panels) {
1407+ // A panel was right clicked, should it be duplicated?
1408+ if (m_organ->getNumberOfPanels () < 1000 ) {
1409+ wxMessageDialog dlg (this , wxT (" Do you want to duplicate the right-clicked panel?" ), wxT (" Duplicate panel?" ), wxYES_NO|wxCENTRE);
1410+ if (dlg.ShowModal () == wxID_YES) {
1411+ int selectedPanelIndex = 0 ;
1412+ int numPanels = m_organTreeCtrl->GetChildrenCount (tree_panels, false );
1413+ wxTreeItemIdValue cookie;
1414+ for (int i = 0 ; i < numPanels; i++) {
1415+ wxTreeItemId currentId;
1416+ if (i == 0 )
1417+ currentId = m_organTreeCtrl->GetFirstChild (tree_panels, cookie);
1418+ else
1419+ currentId = m_organTreeCtrl->GetNextChild (tree_panels, cookie);
1420+ if (clickedId == currentId)
1421+ selectedPanelIndex = i;
1422+ }
1423+
1424+ GoPanel p = *(m_organ->getOrganPanelAt (selectedPanelIndex));
1425+ m_organ->addPanel (p);
1426+ wxTreeItemId thisPanel = m_organTreeCtrl->AppendItem (tree_panels, p.getName ());
1427+ // create the subitems for Displaymetrics, Images and GUIElements
1428+ m_organTreeCtrl->AppendItem (thisPanel, wxT (" Displaymetrics" ));
1429+ wxTreeItemId panelImages = m_organTreeCtrl->AppendItem (thisPanel, wxT (" Images" ));
1430+ for (unsigned i = 0 ; i < p.getNumberOfImages (); i++) {
1431+ wxString displayName = p.getImageAt (i)->getImageNameOnly ();
1432+ if (displayName == wxEmptyString)
1433+ displayName = wxT (" New Image" );
1434+ m_organTreeCtrl->AppendItem (panelImages, displayName);
1435+ }
1436+ wxTreeItemId panelGuiElements = m_organTreeCtrl->AppendItem (thisPanel, wxT (" GUI Elements" ));
1437+ for (int i = 0 ; i < p.getNumberOfGuiElements (); i++) {
1438+ m_organTreeCtrl->AppendItem (panelGuiElements, p.getGuiElementAt (i)->getDisplayName ());
1439+ }
1440+ m_organ->setModified (true );
1441+ m_organTreeCtrl->SelectItem (thisPanel);
1442+
1443+ } else {
1444+ event.Skip ();
1445+ return ;
1446+ }
1447+ } else {
1448+ wxMessageDialog msg (this , wxT (" Organ cannot have more than 1000 panels!" ), wxT (" Too many panels" ), wxOK|wxCENTRE|wxICON_EXCLAMATION);
1449+ msg.ShowModal ();
1450+ event.Skip ();
1451+ return ;
1452+ }
1453+ }
1454+
14051455 wxTreeItemId grandParentId = m_organTreeCtrl->GetItemParent (parentId);
14061456 if (grandParentId != tree_organ && m_organTreeCtrl->GetItemParent (grandParentId) == tree_panels) {
14071457 int selectedIndex = 0 ;
0 commit comments