| 586 | } |
| 587 | |
| 588 | void appendContextMenu(Menu* menu) override { |
| 589 | Marbles* module = dynamic_cast<Marbles*>(this->module); |
| 590 | |
| 591 | struct ScaleItem : MenuItem { |
| 592 | Marbles* module; |
| 593 | int scale; |
| 594 | void onAction(const event::Action& e) override { |
| 595 | module->x_scale = scale; |
| 596 | } |
| 597 | }; |
| 598 | |
| 599 | menu->addChild(new MenuSeparator); |
| 600 | menu->addChild(createMenuLabel("Scales")); |
| 601 | const std::string scaleLabels[] = { |
| 602 | "Major", |
| 603 | "Minor", |
| 604 | "Pentatonic", |
| 605 | "Pelog", |
| 606 | "Raag Bhairav That", |
| 607 | "Raag Shri", |
| 608 | }; |
| 609 | for (int i = 0; i < (int) LENGTHOF(scaleLabels); i++) { |
| 610 | ScaleItem* item = createMenuItem<ScaleItem>(scaleLabels[i], CHECKMARK(module->x_scale == i)); |
| 611 | item->module = module; |
| 612 | item->scale = i; |
| 613 | menu->addChild(item); |
| 614 | } |
| 615 | |
| 616 | struct XClockSourceInternal : MenuItem { |
| 617 | Marbles* module; |
| 618 | int source; |
| 619 | void onAction(const event::Action& e) override { |
| 620 | module->x_clock_source_internal = source; |
| 621 | } |
| 622 | }; |
| 623 | |
| 624 | menu->addChild(new MenuSeparator); |
| 625 | menu->addChild(createMenuLabel("Internal X clock source")); |
| 626 | const std::string sourceLabels[] = { |
| 627 | "T₁ → X₁, T₂ → X₂, T₃ → X₃", |
| 628 | "T₁ → X₁, X₂, X₃", |
| 629 | "T₂ → X₁, X₂, X₃", |
| 630 | "T₃ → X₁, X₂, X₃", |
| 631 | }; |
| 632 | for (int i = 0; i < (int) LENGTHOF(sourceLabels); i++) { |
| 633 | XClockSourceInternal* item = createMenuItem<XClockSourceInternal>(sourceLabels[i], CHECKMARK(module->x_clock_source_internal == i)); |
| 634 | item->module = module; |
| 635 | item->source = i; |
| 636 | menu->addChild(item); |
| 637 | } |
| 638 | |
| 639 | struct YDividerIndexItem : MenuItem { |
| 640 | Marbles* module; |
| 641 | int index; |
| 642 | void onAction(const event::Action& e) override { |
| 643 | module->y_divider_index = index; |
| 644 | } |
| 645 | }; |
nothing calls this directly
no outgoing calls
no test coverage detected