+
+
+
+ {
+ (midiBinding.bindingType === MidiBinding.BINDING_TYPE_NOTE) &&
+ (
+
+
+
+ )
+ }
+ {
+ (midiBinding.bindingType === MidiBinding.BINDING_TYPE_CONTROL) &&
+ (
+
+
+
+
+ )
+ }
+
{
+ if (this.props.listen) {
+ this.props.onListen(-2, "", false)
+ } else {
+ this.props.onListen(this.props.instanceId, this.props.midiBinding.symbol, false)
+ }
+ }}
+ size="large">
+ {this.props.listen ? (
+
+ ) : (
+
+ )}
+
+
+ );
+
+ }
+ });
+
+export default SystemMidiBindingView;
\ No newline at end of file
diff --git a/react/src/SystemMidiBindingsDialog.tsx b/react/src/SystemMidiBindingsDialog.tsx
new file mode 100644
index 0000000..ce9f417
--- /dev/null
+++ b/react/src/SystemMidiBindingsDialog.tsx
@@ -0,0 +1,338 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2022-2023 Robin E. R. Davies
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+import React, { SyntheticEvent } from 'react';
+import DialogEx from './DialogEx';
+import ResizeResponsiveComponent from './ResizeResponsiveComponent';
+import { PiPedalModel, PiPedalModelFactory, ListenHandle } from './PiPedalModel';
+import Typography from '@mui/material/Typography';
+import { Theme } from '@mui/material/styles';
+import { WithStyles } from '@mui/styles';
+import createStyles from '@mui/styles/createStyles';
+import withStyles from '@mui/styles/withStyles';
+import AppBar from '@mui/material/AppBar';
+import Toolbar from '@mui/material/Toolbar';
+import ArrowBackIcon from '@mui/icons-material/ArrowBack';
+import IconButton from '@mui/material/IconButton';
+import MidiBinding from './MidiBinding';
+import SystemMidiBindingView from './SystemMidiBindingView';
+import Snackbar from '@mui/material/Snackbar';
+
+const styles = (theme: Theme) => createStyles({
+ dialogAppBar: {
+ position: 'relative',
+ top: 0, left: 0
+ },
+ dialogTitle: {
+ marginLeft: theme.spacing(2),
+ flex: "1 1 auto",
+ },
+ pluginTable: {
+ border: "collapse",
+ width: "100%",
+
+ },
+ pluginHead: {
+ borderTop: "1pt #DDD solid", paddingLeft: 22, paddingRight: 22
+ },
+ bindingTd: {
+ verticalAlign: "top",
+ paddingLeft: 12, paddingBottom: 8
+ },
+ nameTd: {
+ paddingLeft: 16,
+ verticalAlign: "top",
+ paddingTop: 12
+ },
+});
+
+
+export interface SystemMidiBindingDialogProps extends WithStyles