If you have many ports and want to sort ports position in alphanumerical order to make things clearer, for example:
MIDI 5, MIDI 1, MIDI 3, MIDI 4, MIDI 2
to
MIDI 1, MIDI 2, MIDI 3, MIDI 4, MIDI 5
you can change MODEPS sourcecode like this:
In /usr/lib/python3/dist-packages/modtools/utils.py replace the get_jack_hardware_ports def with:
def get_jack_hardware_ports(isAudio, isOutput):
port_data = charPtrPtrToStringList(utils.get_jack_hardware_ports(isAudio, isOutput))
sorted = {}
sorting = []
ports = []
for port_id in port_data:
port_alias = get_jack_port_alias(port_id)
sorted[port_alias] = port_id
sorting.append(port_alias)
sorting.sort()
for port_alias in sorting:
ports.append(sorted[port_alias])
return ports
In /usr/share/mod/html/js/pedalboard.js replace the positionHardwarePorts function with:
// Position the hardware ports as to be evenly distributed vertically in pedalboard.
// Output ports are positioned at left and input ports at right.
positionHardwarePorts: function () {
var self = $(this);
var height = self.height() - self.data('bottomMargin');
var adjust = function (elements, css) {
var top = height / (elements.length + 1);
var i, el;
elements.sort(function(e1, e2) {
var e1_audio = e1.hasClass('mod-audio-output') || e1.hasClass('mod-audio-input');
var e2_audio = e2.hasClass('mod-audio-output') || e2.hasClass('mod-audio-input');
var e1_midi = e1.hasClass('mod-midi-output') || e1.hasClass('mod-midi-input');
var e2_midi = e2.hasClass('mod-midi-output') || e2.hasClass('mod-midi-input');
var e1_cv = e1.hasClass('mod-cv-output') || e1.hasClass('mod-cv-input');
var e2_cv = e2.hasClass('mod-cv-output') || e2.hasClass('mod-cv-input');
// FIXME - there's got to be a better way..
if ((e1_audio && e2_audio) || (e1_midi && e2_midi) || (e1_cv && e2_cv)) {
return (parseInt(e1.attr('mod-port-index')) > parseInt(e2.attr('mod-port-index'))) ? 1 : -1;
} else if (e1_cv || e2_cv) {
return e1_cv ? 1 : -1;
} else {
return e1_midi ? 1 : -1;
}
});
let sorted = {};
let sorting = [];
for (let i = 0; i < elements.length; i++) {
let el = elements[i];
let type = (el.hasClass('mod-audio-output') || el.hasClass('mod-audio-input')) ? 0 : ((el.hasClass('mod-midi-output') || el.hasClass('mod-midi-input')) ? 1 : 2);
let name = type + "_" + el[0].title;
sorted[name] = i;
sorting.push(name);
}
sorting = sorting.sort();
let y = 0;
for (let index in sorting) {
let i = sorted[sorting[index]];
let el = elements[i];
el.css($.extend(css, {
top: top * (parseInt(index) + 1) - el.height() / 2
}));
y++;
}
};
adjust(self.data('hwInputs'), {
right: 0
});
adjust(self.data('hwOutputs'), {
left: 0
});
// Redraw all cables that connect to or from hardware ports
//self.data('connectionManager').iterateInstance(':system:', function (jack) {
self.data('connectionManager').iterate(function (jack) {
self.pedalboard('drawJack', jack);
});
},