package org.herac.tuxguitar.jack.settings; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.herac.tuxguitar.gui.TuxGuitar; import org.herac.tuxguitar.gui.util.DialogUtils; import org.herac.tuxguitar.jack.synthesizer.JackOutputPortRouter; public class JackSettingsDialog { private static final int TAB_HEIGHT = 350; private static final int TAB_WIDTH = 550; private JackSettings settings; public JackSettingsDialog(JackSettings settings) { this.settings = settings; } protected void addChannelRoutingItem(Table table, int[] route) { TableItem item = new TableItem(table, SWT.NONE); this.addChannelRoutingItem(item, route); } protected void addChannelRoutingItem(TableItem item, int[] route) { if (route.length == 3) { String[] text = new String[3]; text[0] = (TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.channel-router.src-channel.item", new String[] { Integer.toString(route[0]) })); if (route[1] >= 0) { text[1] = (TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.channel-router.dst-channel.item", new String[] { Integer.toString(route[1]) })); } else { text[1] = (TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.default")); } if (route[2] >= 0) { text[2] = (TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.channel-router.dst-program.item", new String[] { Integer.toString(route[2]) })); } else { text[2] = (TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.default")); } item.setText(text); item.setData(route); } } protected void addProgramRoutingItem(Table table, int[] route) { TableItem item = new TableItem(table, SWT.NONE); this.addProgramRoutingItem(item, route); } protected void addProgramRoutingItem(TableItem item, int[] route) { if (route.length == 4) { String[] text = new String[4]; if (route[0] < 128) { text[0] = (TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.program-router.src-program.item", new String[] { Integer.toString(route[0]) })); } else { text[0] = (TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.percussion")); } if (route[1] > 0) { text[1] = (TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated")); } else { text[1] = (TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.default")); } if (route[2] >= 0) { text[2] = (TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.program-router.dst-channel.item", new String[] { Integer.toString(route[2]) })); } else { text[2] = (TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.default")); } if (route[3] >= 0) { text[3] = (TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.program-router.dst-program.item", new String[] { Integer.toString(route[3]) })); } else { text[3] = (TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.default")); } item.setText(text); item.setData(route); } } public void editChannelRoutingItem(Shell parent, final TableItem item) { final int[] route = (int[]) item.getData(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM); dialog.setLayout(new GridLayout(1, false)); dialog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); dialog .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.options")); // ---------------------------------------------------------------------- Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.options")); Label channel = new Label(group, SWT.NULL); channel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true)); channel .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel") + ":"); Label channelValue = new Label(group, SWT.NULL); channelValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true)); channelValue .setText(TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.channel-router.src-channel.item", new String[] { Integer.toString(route[0]) })); Label channelRoute = new Label(group, SWT.NULL); channelRoute .setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true)); channelRoute .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel") + ":"); final Combo channelRouteValue = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); channelRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); channelRouteValue .add(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.default")); for (int i = 0; i < 16; i++) { channelRouteValue .add(TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.channel-router.dst-channel.item", new String[] { Integer.toString(i) })); } channelRouteValue.select(route[1] + 1); Label programRoute = new Label(group, SWT.NULL); programRoute .setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true)); programRoute .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program") + ":"); final Combo programRouteValue = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); programRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); programRouteValue .add(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.default")); for (int i = 0; i < 127; i++) { programRouteValue .add(TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.channel-router.dst-program.item", new String[] { Integer.toString(i) })); } programRouteValue.select(route[2] + 1); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2, false)); buttons.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { route[1] = channelRouteValue.getSelectionIndex() - 1; route[2] = programRouteValue.getSelectionIndex() - 1; addChannelRoutingItem(item, route); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton(buttonCancel); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } public void editProgramRoutingItem(Shell parent, final TableItem item) { final int[] route = (int[]) item.getData(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM); dialog.setLayout(new GridLayout(1, false)); dialog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); dialog .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.options")); // ---------------------------------------------------------------------- Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN); group.setLayout(new GridLayout(2, false)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); group .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.options")); Label program = new Label(group, SWT.NULL); program.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true)); program .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.src-program") + ":"); Label programValue = new Label(group, SWT.NULL); programValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true)); if (route[0] < 128) { programValue .setText(TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.program-router.src-program.item", new String[] { Integer.toString(route[0]) })); } else { programValue .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.percussion")); } Label programPort = new Label(group, SWT.NULL); programPort.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true)); programPort .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port") + ":"); final Combo programPortValue = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); programPortValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); programPortValue .add(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.default")); programPortValue .add(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated")); programPortValue.select(route[1]); Label channelRoute = new Label(group, SWT.NULL); channelRoute .setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true)); channelRoute .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel") + ":"); final Combo channelRouteValue = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); channelRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); channelRouteValue .add(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.default")); for (int i = 0; i < 16; i++) { channelRouteValue .add(TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.program-router.dst-channel.item", new String[] { Integer.toString(i) })); } channelRouteValue.select(route[2] + 1); Label programRoute = new Label(group, SWT.NULL); programRoute .setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true)); programRoute .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program") + ":"); final Combo programRouteValue = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); programRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); programRouteValue .add(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.default")); for (int i = 0; i < 128; i++) { programRouteValue .add(TuxGuitar .getProperty( "jack.settings.dialog.options.midi-port.program-router.dst-program.item", new String[] { Integer.toString(i) })); } programRouteValue.select(route[3] + 1); // ------------------BUTTONS-------------------------- Composite buttons = new Composite(dialog, SWT.NONE); buttons.setLayout(new GridLayout(2, false)); buttons.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { route[1] = programPortValue.getSelectionIndex(); route[2] = channelRouteValue.getSelectionIndex() - 1; route[3] = programRouteValue.getSelectionIndex() - 1; addProgramRoutingItem(item, route); dialog.dispose(); } }); Button buttonCancel = new Button(buttons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton(buttonCancel); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK); } protected GridData getButtonData() { GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); data.minimumWidth = 80; data.minimumHeight = 25; return data; } // ----------------------------------------------------------------------------------------------------// // PROGRAM ROUTING // ------------------------------------------------------------------------------------// // ----------------------------------------------------------------------------------------------------// protected int[][] getChannelRoutingSettings() { int[][] channelsRoute = new int[16][]; for (int i = 0; i < channelsRoute.length; i++) { channelsRoute[i] = new int[3]; channelsRoute[i][0] = i; channelsRoute[i][1] = this.settings.getConfig().getIntConfigValue( "jack.midi.port.channel-routing.to-channel-" + i, -1); channelsRoute[i][2] = this.settings.getConfig().getIntConfigValue( "jack.midi.port.channel-routing.to-program-" + i, -1); } return channelsRoute; } protected int[][] getProgramRoutingSettings() { int[][] routing = new int[129][]; for (int i = 0; i < routing.length; i++) { routing[i] = new int[4]; routing[i][0] = i; routing[i][1] = this.settings.getConfig().getIntConfigValue( "jack.midi.port.program-routing.port-" + i, 0); routing[i][2] = this.settings.getConfig().getIntConfigValue( "jack.midi.port.program-routing.to-channel-" + i, -1); routing[i][3] = this.settings.getConfig().getIntConfigValue( "jack.midi.port.program-routing.to-program-" + i, -1); } return routing; } protected void loadChannelRoutingItems(Table table, int[][] routing) { for (int i = 0; i < routing.length; i++) { this.addChannelRoutingItem(table, routing[i]); } } protected void loadProgramRoutingItems(Table table, int[][] routing) { for (int i = 0; i < routing.length; i++) { this.addProgramRoutingItem(table, routing[i]); } } public void open(Shell parent) { final int[][] channelRouting = getChannelRoutingSettings(); final int[][] programRouting = getProgramRoutingSettings(); final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setText(TuxGuitar.getProperty("jack.settings.dialog")); dialog.setLayout(new GridLayout()); dialog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final TabFolder tabFolder = new TabFolder(dialog, SWT.TOP); tabFolder.setLayout(new FormLayout()); final TabItem[] routingTabs = new TabItem[2]; // ---------------------------------------------------------------------- int synthRouteType = this.settings.getConfig().getIntConfigValue( "jack.midi.ports.type", JackOutputPortRouter.CREATE_UNIQUE_PORT); Composite tabControl = new Composite(tabFolder, SWT.NONE); tabControl.setLayout(new GridLayout()); tabControl.setLayoutData(new FormData(TAB_WIDTH, TAB_HEIGHT)); TabItem tabItem = new TabItem(tabFolder, SWT.None); tabItem.setText(TuxGuitar.getProperty("jack.settings.dialog.options")); tabItem.setControl(tabControl); Group groupSynth = new Group(tabControl, SWT.SHADOW_ETCHED_IN); groupSynth.setLayout(new GridLayout(1, false)); groupSynth.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); groupSynth.setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port")); final Button buttonSynthRouteType1 = new Button(groupSynth, SWT.RADIO); final Button buttonSynthRouteType2 = new Button(groupSynth, SWT.RADIO); final Button buttonSynthRouteType3 = new Button(groupSynth, SWT.RADIO); buttonSynthRouteType1.setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.type.single")); buttonSynthRouteType2 .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.type.multiple-by-channel")); buttonSynthRouteType3 .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.type.multiple-by-program")); if (synthRouteType == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL) { buttonSynthRouteType2.setSelection(true); routingTabs[0] = openChannelRoutingTab(tabFolder, channelRouting); } else if (synthRouteType == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM) { buttonSynthRouteType3.setSelection(true); routingTabs[1] = openProgramRoutingTab(tabFolder, programRouting); } else { buttonSynthRouteType1.setSelection(true); } final SelectionListener routeTypeListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { boolean channelRoutingTabsEnabled = buttonSynthRouteType2 .getSelection(); boolean programRoutingTabsEnabled = buttonSynthRouteType3 .getSelection(); if (channelRoutingTabsEnabled && routingTabs[0] == null) { routingTabs[0] = openChannelRoutingTab(tabFolder, channelRouting); } else if (!channelRoutingTabsEnabled && routingTabs[0] != null) { routingTabs[0].dispose(); routingTabs[0] = null; } if (programRoutingTabsEnabled && routingTabs[1] == null) { routingTabs[1] = openProgramRoutingTab(tabFolder, programRouting); } else if (!programRoutingTabsEnabled && routingTabs[1] != null) { routingTabs[1].dispose(); routingTabs[1] = null; } } }; buttonSynthRouteType1.addSelectionListener(routeTypeListener); buttonSynthRouteType2.addSelectionListener(routeTypeListener); buttonSynthRouteType3.addSelectionListener(routeTypeListener); // ------------------BUTTONS-------------------------- Composite compositeButtons = new Composite(dialog, SWT.NONE); compositeButtons.setLayout(new GridLayout(2, false)); compositeButtons .setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, true)); final Button buttonOK = new Button(compositeButtons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("ok")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int type = JackOutputPortRouter.CREATE_UNIQUE_PORT; if (buttonSynthRouteType2.getSelection()) { type = JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL; } else if (buttonSynthRouteType3.getSelection()) { type = JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM; } saveChanges(type, channelRouting, programRouting); dialog.dispose(); } }); Button buttonCancel = new Button(compositeButtons, SWT.PUSH); buttonCancel.setText(TuxGuitar.getProperty("cancel")); buttonCancel.setLayoutData(getButtonData()); buttonCancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { dialog.dispose(); } }); dialog.setDefaultButton(buttonOK); DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT); } // ----------------------------------------------------------------------------------------------------// // CHANNEL ROUTING // ------------------------------------------------------------------------------------// // ----------------------------------------------------------------------------------------------------// public TabItem openChannelRoutingTab(TabFolder tabFolder, int[][] routing) { Composite tabControl = new Composite(tabFolder, SWT.NONE); tabControl.setLayout(new GridLayout()); tabControl.setLayoutData(new FormData(TAB_WIDTH, TAB_HEIGHT)); TabItem tabItem = new TabItem(tabFolder, SWT.None); tabItem .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.options")); tabItem.setControl(tabControl); Composite composite = new Composite(tabControl, SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final Table table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.setHeaderVisible(true); TableColumn srcChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstProgramColumn = new TableColumn(table, SWT.LEFT); srcChannelColumn .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel")); dstChannelColumn .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel")); dstProgramColumn .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program")); srcChannelColumn.setWidth(166); dstChannelColumn.setWidth(166); dstProgramColumn.setWidth(166); loadChannelRoutingItems(table, routing); // -------------------------------------------------------// Composite buttons = new Composite(composite, SWT.NONE); buttons.setLayout(new GridLayout(1, false)); buttons.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true, false)); final Button buttonEdit = new Button(buttons, SWT.PUSH); buttonEdit.setText(TuxGuitar.getProperty("edit")); buttonEdit.setLayoutData(getButtonData()); buttonEdit.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int index = table.getSelectionIndex(); if (index >= 0 && index < table.getItemCount()) { editChannelRoutingItem(table.getShell(), table.getItem(index)); } } }); // -------------------------------------------------------// return tabItem; } public TabItem openProgramRoutingTab(TabFolder tabFolder, int[][] routing) { Composite tabControl = new Composite(tabFolder, SWT.NONE); tabControl.setLayout(new GridLayout()); tabControl.setLayoutData(new FormData(TAB_WIDTH, TAB_HEIGHT)); TabItem tabItem = new TabItem(tabFolder, SWT.None); tabItem .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.options")); tabItem.setControl(tabControl); Composite composite = new Composite(tabControl, SWT.NONE); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final Table table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.setHeaderVisible(true); TableColumn srcChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstPortColumn = new TableColumn(table, SWT.LEFT); TableColumn dstChannelColumn = new TableColumn(table, SWT.LEFT); TableColumn dstProgramColumn = new TableColumn(table, SWT.LEFT); srcChannelColumn .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.src-program")); dstPortColumn .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port")); dstChannelColumn .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel")); dstProgramColumn .setText(TuxGuitar .getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program")); srcChannelColumn.setWidth(125); dstPortColumn.setWidth(125); dstChannelColumn.setWidth(125); dstProgramColumn.setWidth(125); loadProgramRoutingItems(table, routing); // -------------------------------------------------------// Composite buttons = new Composite(composite, SWT.NONE); buttons.setLayout(new GridLayout(1, false)); buttons.setLayoutData(new GridData(SWT.RIGHT, SWT.BOTTOM, true, false)); final Button buttonOK = new Button(buttons, SWT.PUSH); buttonOK.setText(TuxGuitar.getProperty("edit")); buttonOK.setLayoutData(getButtonData()); buttonOK.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int index = table.getSelectionIndex(); if (index >= 0 && index < table.getItemCount()) { editProgramRoutingItem(table.getShell(), table.getItem(index)); } } }); // -------------------------------------------------------// return tabItem; } protected void saveChanges(int type, int[][] channelRouting, int[][] programRouting) { if (type == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL) { this.setChannelRoutingSettings(channelRouting); } else if (type == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM) { this.setProgramRoutingSettings(programRouting); } this.settings.getConfig().setProperty("jack.midi.ports.type", type); this.settings.notifyChanges(); } protected void setChannelRoutingSettings(int[][] channelsRoute) { for (int i = 0; i < channelsRoute.length; i++) { if (channelsRoute[i].length == 3) { this.settings.getConfig().setProperty( "jack.midi.port.channel-routing.to-channel-" + channelsRoute[i][0], channelsRoute[i][1]); this.settings.getConfig().setProperty( "jack.midi.port.channel-routing.to-program-" + channelsRoute[i][0], channelsRoute[i][2]); } } } protected void setProgramRoutingSettings(int[][] routing) { for (int i = 0; i < routing.length; i++) { if (routing[i].length == 4) { this.settings.getConfig().setProperty( "jack.midi.port.program-routing.port-" + routing[i][0], routing[i][1]); this.settings.getConfig().setProperty( "jack.midi.port.program-routing.to-channel-" + routing[i][0], routing[i][2]); this.settings.getConfig().setProperty( "jack.midi.port.program-routing.to-program-" + routing[i][0], routing[i][3]); } } } }