1
1
<template >
2
- <QDialog ref =" dialogRef" persistent >
2
+ <QDialog ref =" dialogRef" auto-scroll @before-show = " initializeValues " >
3
3
<QLayout container view =" hHh lpr fFf" class =" q-dialog-plugin bg-background" >
4
4
<QHeader >
5
5
<QToolbar >
14
14
<QToolbarTitle >MIDIファイルのインポート</QToolbarTitle >
15
15
</QToolbar >
16
16
</QHeader >
17
- <QPageContainer class =" q-px-lg" >
17
+ <QPageContainer class =" q-px-lg q-py-md " >
18
18
<QFile
19
19
v-model =" midiFile"
20
- label =" MIDIファイルを指定 "
20
+ label =" MIDIファイル "
21
21
class =" q-my-sm"
22
22
accept =" .mid,.midi"
23
- :error-message =" fileError"
24
- :error =" !!fileError"
23
+ :error-message =" midiFileError"
24
+ :error =" !!midiFileError"
25
+ placeholder =" MIDIファイルを選択してください"
25
26
@input =" handleMidiFileChange"
26
27
/>
27
28
<QSelect
30
31
:options =" tracks"
31
32
emit-value
32
33
map-options
33
- label =" トラックを選択 "
34
+ label =" インポートするトラック "
34
35
/>
35
36
</QPageContainer >
36
37
<QFooter >
@@ -71,17 +72,20 @@ const { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent();
71
72
72
73
const store = useStore ();
73
74
75
+ // MIDIファイル
74
76
const midiFile = ref <File | null >(null );
75
- const midi = ref < Midi | null >( null );
76
- const fileError = computed (() => {
77
+ // MIDIファイルエラー
78
+ const midiFileError = computed (() => {
77
79
if (midiFile .value && ! midi .value ) {
78
80
return " MIDIファイルの読み込みに失敗しました" ;
79
81
} else if (midiFile .value && midi .value && ! midi .value .tracks .length ) {
80
82
return " トラックがありません" ;
81
83
}
82
84
return undefined ;
83
85
});
84
- const selectedTrack = ref <string | number | null >(null );
86
+ // MIDIデータ(tone.jsでパースしたもの)
87
+ const midi = ref <Midi | null >(null );
88
+ // トラック
85
89
const tracks = computed (() =>
86
90
midi .value
87
91
? midi .value .tracks .map ((track , index ) => ({
@@ -90,29 +94,29 @@ const tracks = computed(() =>
90
94
}))
91
95
: []
92
96
);
97
+ // 選択中のトラック
98
+ const selectedTrack = ref <string | number | null >(null );
93
99
94
- const resetMidiFile = () => {
100
+ // データ初期化
101
+ const initializeValues = () => {
95
102
midiFile .value = null ;
96
- };
97
-
98
- const resetValues = () => {
99
103
midi .value = null ;
100
104
selectedTrack .value = null ;
101
105
};
102
106
107
+ // MIDIファイル変更時
103
108
const handleMidiFileChange = (event : Event ) => {
104
109
const input = event .target as HTMLInputElement ;
105
110
if (! input .files ) return ;
111
+ midi .value = null ;
112
+ selectedTrack .value = null ;
106
113
const file = input .files [0 ];
107
114
const reader = new FileReader ();
108
115
reader .onload = (e ) => {
109
- resetValues ();
110
116
midi .value = new Midi (e .target ?.result as ArrayBuffer );
111
117
selectedTrack .value = 0 ;
112
118
};
113
119
reader .onerror = () => {
114
- resetMidiFile ();
115
- resetValues ();
116
120
throw new Error (" Failed to read MIDI file" );
117
121
};
118
122
reader .readAsArrayBuffer (file );
@@ -124,12 +128,8 @@ const handleImportTrack = () => {
124
128
trackIndex: selectedTrack .value as number ,
125
129
});
126
130
onDialogOK ();
127
- resetMidiFile ();
128
- resetValues ();
129
131
};
130
132
const handleCancel = () => {
131
133
onDialogCancel ();
132
- resetMidiFile ();
133
- resetValues ();
134
134
};
135
135
</script >
0 commit comments