| @@ -314,31 +314,36 @@ void RackWidget::pastePresetClipboardAction() { | |||||
| } | } | ||||
| static void RackWidget_updateAdjacent(RackWidget *that) { | static void RackWidget_updateAdjacent(RackWidget *that) { | ||||
| // TODO This can be better than O(n^2) | |||||
| for (widget::Widget *w : that->moduleContainer->children) { | for (widget::Widget *w : that->moduleContainer->children) { | ||||
| ModuleWidget *m = dynamic_cast<ModuleWidget*>(w); | |||||
| math::Vec pRight = m->box.getTopRight().div(RACK_GRID_SIZE).round(); | |||||
| bool found = false; | |||||
| math::Vec pLeft = w->box.pos.div(RACK_GRID_SIZE).round(); | |||||
| math::Vec pRight = w->box.getTopRight().div(RACK_GRID_SIZE).round(); | |||||
| ModuleWidget *mwLeft = NULL; | |||||
| ModuleWidget *mwRight = NULL; | |||||
| // Find adjacent modules | |||||
| for (widget::Widget *w2 : that->moduleContainer->children) { | for (widget::Widget *w2 : that->moduleContainer->children) { | ||||
| ModuleWidget *m2 = dynamic_cast<ModuleWidget*>(w2); | |||||
| if (m == m2) | |||||
| if (w2 == w) | |||||
| continue; | continue; | ||||
| math::Vec p2 = m2->box.pos.div(RACK_GRID_SIZE).round(); | |||||
| // Check if m is to the left of m2 | |||||
| if (pRight.isEqual(p2)) { | |||||
| m->module->rightModuleId = m2->module->id; | |||||
| m2->module->leftModuleId = m->module->id; | |||||
| found = true; | |||||
| math::Vec p2Left = w2->box.pos.div(RACK_GRID_SIZE).round(); | |||||
| math::Vec p2Right = w2->box.getTopRight().div(RACK_GRID_SIZE).round(); | |||||
| // Check if this is a left module | |||||
| if (p2Right.isEqual(pLeft)) { | |||||
| mwLeft = dynamic_cast<ModuleWidget*>(w2); | |||||
| break; | break; | ||||
| } | } | ||||
| } | |||||
| if (!found) { | |||||
| m->module->rightModuleId = -1; | |||||
| // Check if this is a right module | |||||
| if (p2Left.isEqual(pRight)) { | |||||
| mwRight = dynamic_cast<ModuleWidget*>(w2); | |||||
| break; | |||||
| } | |||||
| } | } | ||||
| ModuleWidget *mw = dynamic_cast<ModuleWidget*>(w); | |||||
| mw->module->rightModuleId = mwRight ? mwRight->module->id : -1; | |||||
| mw->module->leftModuleId = mwLeft ? mwLeft->module->id : -1; | |||||
| } | } | ||||
| } | } | ||||