midinous 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/midinous/init.rb +37 -6
- data/lib/midinous/points.rb +6 -1
- data/lib/midinous/proc_midi.rb +14 -4
- data/lib/midinous/style/midinous.glade +279 -2
- data/lib/midinous/style/ui.rb +36 -2
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 421b8db3f96cfe3ca0f044a7d7ab88b2a1fc3ba65b244143809b341313ca6a44
|
4
|
+
data.tar.gz: 40741dc16eea914d989591332706923924b7d4075df85fe5709539e09851b904
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddb259175deb80f193ff1e7cb644b116dc9065d47d409134cd2df7b70c74db1913ac385238b6df5d278c804d3e04e774267dfe6681a6c351114cb2184a1e565d
|
7
|
+
data.tar.gz: 3c5bc184140f2733320a0e98a9520820299f9c158dc86929469d34a13a284c1c4ed0c39a71517e5c1eca757f35f525139a7cb09918a781ea5c49fd1847d8ce2b
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Midinous combines generative features with a grid-based GUI to offer a supplemen
|
|
6
6
|
|
7
7
|
* [GTK3](http://www.gtk.org/) 3.3.6 or later
|
8
8
|
* Midinous is designed to run on 64-bit architectures
|
9
|
-
* You must have 64-bit Ruby version 2.5.5 installed with the devkit and MSYS2
|
9
|
+
* You must have 64-bit Ruby version 2.5.0 - 2.5.5 installed with the devkit and MSYS2
|
10
10
|
* It is recommended you use a virtual MIDI cable program for use with Midinous on Windows
|
11
11
|
|
12
12
|
## Install
|
data/lib/midinous/init.rb
CHANGED
@@ -34,6 +34,10 @@ class Init_Prog
|
|
34
34
|
apply_style(UI::prop_list_view,@provider)
|
35
35
|
apply_style(UI::file_chooser,@provider)
|
36
36
|
apply_style(UI::confirmer,@provider)
|
37
|
+
apply_style(UI::about_window,@provider)
|
38
|
+
apply_style(UI::notes_window,@provider)
|
39
|
+
apply_style(UI::scales_window,@provider)
|
40
|
+
apply_style(UI::hotkeys_window,@provider)
|
37
41
|
end
|
38
42
|
|
39
43
|
def grid_center #center the grid
|
@@ -78,6 +82,22 @@ module Event_Router
|
|
78
82
|
UI::confirmer.visible = false
|
79
83
|
true
|
80
84
|
end
|
85
|
+
UI::about_window.signal_connect("delete-event") do
|
86
|
+
UI::about_window.visible = false
|
87
|
+
true
|
88
|
+
end
|
89
|
+
UI::notes_window.signal_connect("delete-event") do
|
90
|
+
UI::notes_window.visible = false
|
91
|
+
true
|
92
|
+
end
|
93
|
+
UI::scales_window.signal_connect("delete-event") do
|
94
|
+
UI::scales_window.visible = false
|
95
|
+
true
|
96
|
+
end
|
97
|
+
UI::hotkeys_window.signal_connect("delete-event") do
|
98
|
+
UI::hotkeys_window.visible = false
|
99
|
+
true
|
100
|
+
end
|
81
101
|
|
82
102
|
#For key bindings
|
83
103
|
UI::midinous.signal_connect("key-press-event") { |obj, event| route_key(event) }
|
@@ -113,18 +133,29 @@ module Event_Router
|
|
113
133
|
#For menu items
|
114
134
|
UI::in_device_items.each_with_index {|i, idx| i.signal_connect("button-press-event") {UI.set_device(idx,"i")}}
|
115
135
|
UI::out_device_items.each_with_index {|o, idx| o.signal_connect("button-press-event") {UI.set_device(idx,"o")}}
|
136
|
+
UI::in_channel_items.each do |i|
|
137
|
+
i.signal_connect("button-press-event") do
|
138
|
+
Pm.in_chan = i.label.to_i
|
139
|
+
UI.regen_status
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
UI::help_about.signal_connect("button-press-event") {UI::about_window.visible = true}
|
144
|
+
UI::help_notes.signal_connect("button-press-event") {UI::notes_window.visible = true}
|
145
|
+
UI::help_scales.signal_connect("button-press-event") {UI::scales_window.visible = true}
|
146
|
+
UI::help_hotkeys.signal_connect("button-press-event") {UI::hotkeys_window.visible = true}
|
116
147
|
|
117
148
|
#For file operations
|
118
|
-
UI::file_new.signal_connect("button-press-event") {UI.confirm("new")}
|
119
|
-
UI::file_open.signal_connect("button-press-event") {UI.file_oper("open")}
|
120
|
-
UI::file_save.signal_connect("button-press-event") {UI.file_oper("save")}
|
121
|
-
UI::file_save_as.signal_connect("button-press-event") {UI.file_oper("saveas")}
|
122
|
-
UI::file_quit.signal_connect("button-press-event") {UI.confirm("quit")}
|
149
|
+
UI::file_new.signal_connect("button-press-event") {UI.confirm("new")}
|
150
|
+
UI::file_open.signal_connect("button-press-event") {UI.file_oper("open")}
|
151
|
+
UI::file_save.signal_connect("button-press-event") {UI.file_oper("save")}
|
152
|
+
UI::file_save_as.signal_connect("button-press-event") {UI.file_oper("saveas")}
|
153
|
+
UI::file_quit.signal_connect("button-press-event") {UI.confirm("quit")}
|
123
154
|
|
124
155
|
UI::confirmer_confirm.signal_connect("button-press-event"){UI.confirm_act("yes")}
|
125
156
|
UI::confirmer_cancel.signal_connect("button-press-event") {UI.confirm_act("no")}
|
126
157
|
|
127
|
-
UI::file_operation.signal_connect("button-press-event") {UI.file_oper_act("yes")}
|
158
|
+
UI::file_operation.signal_connect("button-press-event") {UI.file_oper_act("yes")}
|
128
159
|
UI::file_cancel.signal_connect("button-press-event") {UI.file_oper_act("no")}
|
129
160
|
UI::file_chooser.signal_connect("selection-changed") {UI.file_input_check("chooser")}
|
130
161
|
UI::file_name.signal_connect("changed") {UI.file_input_check("name")}
|
data/lib/midinous/points.rb
CHANGED
@@ -68,8 +68,13 @@ class Point_Logic
|
|
68
68
|
CC.nouspoints.find_all(&:selected).each {|n| n.path_mode = mode}
|
69
69
|
UI::canvas.queue_draw
|
70
70
|
end
|
71
|
-
def
|
71
|
+
def set_note_via_devc(note)
|
72
72
|
CC.nouspoints.find_all(&:selected).each {|n| n.note = note}
|
73
|
+
Pm.note_send(Pm.in_chan,note,100)
|
74
|
+
GLib::Timeout.add(1000) do
|
75
|
+
Pm.note_rlse(1,note)
|
76
|
+
false
|
77
|
+
end
|
73
78
|
populate_prop(CC.nouspoints)
|
74
79
|
end
|
75
80
|
def inc_note(inc)
|
data/lib/midinous/proc_midi.rb
CHANGED
@@ -41,11 +41,12 @@ class GuiListener < MIDIEye::Listener
|
|
41
41
|
end
|
42
42
|
|
43
43
|
class Proc_Midi
|
44
|
-
attr_accessor :out_list, :in_list
|
44
|
+
attr_accessor :out_list, :in_list, :in_chan
|
45
45
|
attr_reader :out_id, :in_id, :in, :midi_in
|
46
46
|
def initialize(oid,iid)
|
47
47
|
@out_list = []
|
48
48
|
@in_list = []
|
49
|
+
@in_chan = 1
|
49
50
|
|
50
51
|
@out_id = oid
|
51
52
|
@out_list = UniMIDI::Output.all
|
@@ -55,12 +56,19 @@ class Proc_Midi
|
|
55
56
|
@in_list = UniMIDI::Input.all
|
56
57
|
unless @in_list.empty?
|
57
58
|
@in = UniMIDI::Input.use(@in_id)
|
58
|
-
|
59
|
-
@midi_in.listen_for(:class => [MIDIMessage::NoteOn,MIDIMessage::NoteOff]) {|e| Pl.set_note(e[:message].note.clamp(0,127))}
|
60
|
-
@midi_in.gui_listen
|
59
|
+
set_listener
|
61
60
|
end
|
62
61
|
end
|
63
62
|
|
63
|
+
#Restart the listener
|
64
|
+
def set_listener
|
65
|
+
@midi_in = GuiListener.new(@in)
|
66
|
+
@midi_in.listen_for(:class => [MIDIMessage::NoteOn]) do |e|
|
67
|
+
Pl.set_note_via_devc(e[:message].note.clamp(0,127)) if e[:message].velocity <= 127
|
68
|
+
end
|
69
|
+
@midi_in.gui_listen
|
70
|
+
end
|
71
|
+
|
64
72
|
#Select the output device
|
65
73
|
def sel_out(id)
|
66
74
|
@out = UniMIDI::Output.use(id)
|
@@ -71,6 +79,8 @@ class Proc_Midi
|
|
71
79
|
def sel_in(id)
|
72
80
|
@in = UniMIDI::Input.use(id)
|
73
81
|
@in_id = id
|
82
|
+
@midi_in.close
|
83
|
+
set_listener
|
74
84
|
end
|
75
85
|
|
76
86
|
#Sends a note to an instrument
|
@@ -3,6 +3,233 @@
|
|
3
3
|
<interface>
|
4
4
|
<requires lib="gtk+" version="3.20"/>
|
5
5
|
<!-- interface-css-provider-path midinous_themes.style -->
|
6
|
+
<object class="GtkTextBuffer" id="about_text_1">
|
7
|
+
<property name="text">Midinous combines generative features with a grid-based GUI to offer a supplemental unique compositional experience
|
8
|
+
|
9
|
+
Copyright (C) 2019 James "Nornec" Ratliff
|
10
|
+
|
11
|
+
Midinous is free software: you can redistribute it and/or modify
|
12
|
+
it under the terms of the GNU General Public License as published by
|
13
|
+
the Free Software Foundation, either version 3 of the License, or
|
14
|
+
(at your option) any later version.
|
15
|
+
|
16
|
+
https://github.com/Nornec/Midinous
|
17
|
+
https://nornec.bandcamp/com
|
18
|
+
https://youtube.com/nornec
|
19
|
+
https://rubygems.org/gems/midinous</property>
|
20
|
+
</object>
|
21
|
+
<object class="GtkWindow" id="about_window">
|
22
|
+
<property name="can_focus">False</property>
|
23
|
+
<property name="title">About Midinous</property>
|
24
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
25
|
+
<property name="resizable">False</property>
|
26
|
+
<child>
|
27
|
+
<placeholder/>
|
28
|
+
</child>
|
29
|
+
<child>
|
30
|
+
<object class="GtkFixed">
|
31
|
+
<property name="visible">True</property>
|
32
|
+
<property name="can_focus">False</property>
|
33
|
+
<child>
|
34
|
+
<object class="GtkTextView">
|
35
|
+
<property name="width_request">100</property>
|
36
|
+
<property name="height_request">80</property>
|
37
|
+
<property name="left_margin">10</property>
|
38
|
+
<property name="right_margin">10</property>
|
39
|
+
<property name="top_margin">10</property>
|
40
|
+
<property name="bottom_margin">10</property>
|
41
|
+
<property name="visible">True</property>
|
42
|
+
<property name="can_focus">True</property>
|
43
|
+
<property name="editable">False</property>
|
44
|
+
<property name="cursor_visible">False</property>
|
45
|
+
<property name="buffer">about_text_1</property>
|
46
|
+
<property name="accepts_tab">False</property>
|
47
|
+
<property name="monospace">True</property>
|
48
|
+
</object>
|
49
|
+
</child>
|
50
|
+
</object>
|
51
|
+
</child>
|
52
|
+
</object>
|
53
|
+
<object class="GtkTextBuffer" id="help_text_1">
|
54
|
+
<property name="text">Note Octave
|
55
|
+
-2 -1 0 1 2 3 4 5 6 7 8
|
56
|
+
C 0 12 24 36 48 60 72 84 96 108 120
|
57
|
+
C# 1 13 25 37 49 61 73 85 97 109 121
|
58
|
+
D 2 14 26 38 50 62 74 86 98 110 122
|
59
|
+
D# 3 15 27 39 51 63 75 87 99 111 123
|
60
|
+
E 4 16 28 40 52 64 76 88 100 112 124
|
61
|
+
F 5 17 29 41 53 65 77 89 101 113 125
|
62
|
+
F# 6 18 30 42 54 66 78 90 102 114 126
|
63
|
+
G 7 19 31 43 55 67 79 91 103 115 127
|
64
|
+
G# 8 20 32 44 56 68 80 92 104 116 -
|
65
|
+
A 9 21 33 45 57 69 81 93 105 117 -
|
66
|
+
A# 10 22 34 46 58 70 82 94 106 118 -
|
67
|
+
B 11 23 35 47 59 71 83 95 107 119 -</property>
|
68
|
+
</object>
|
69
|
+
<object class="GtkWindow" id="notes_window">
|
70
|
+
<property name="can_focus">False</property>
|
71
|
+
<property name="title">Notes by Integer</property>
|
72
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
73
|
+
<property name="resizable">False</property>
|
74
|
+
<child>
|
75
|
+
<placeholder/>
|
76
|
+
</child>
|
77
|
+
<child>
|
78
|
+
<object class="GtkFixed">
|
79
|
+
<property name="visible">True</property>
|
80
|
+
<property name="can_focus">False</property>
|
81
|
+
<child>
|
82
|
+
<object class="GtkTextView">
|
83
|
+
<property name="width_request">219</property>
|
84
|
+
<property name="height_request">215</property>
|
85
|
+
<property name="left_margin">10</property>
|
86
|
+
<property name="right_margin">10</property>
|
87
|
+
<property name="top_margin">10</property>
|
88
|
+
<property name="bottom_margin">10</property>
|
89
|
+
<property name="visible">True</property>
|
90
|
+
<property name="can_focus">True</property>
|
91
|
+
<property name="editable">False</property>
|
92
|
+
<property name="cursor_visible">False</property>
|
93
|
+
<property name="buffer">help_text_1</property>
|
94
|
+
<property name="accepts_tab">False</property>
|
95
|
+
<property name="monospace">True</property>
|
96
|
+
</object>
|
97
|
+
</child>
|
98
|
+
</object>
|
99
|
+
</child>
|
100
|
+
</object>
|
101
|
+
<object class="GtkTextBuffer" id="help_text_2">
|
102
|
+
<property name="text">W = whole tone, H = Half tone
|
103
|
+
Scales and their relative intervals
|
104
|
+
Aeolian R-W-H-W-W-H-W-W
|
105
|
+
Altered R-H-W-H-W-W-W-W
|
106
|
+
Augmented R-3H-H-3H-H-3H-H
|
107
|
+
Blues R-3H-W-H-H-3H-W
|
108
|
+
Chromatic R-H-H-H-H-H-H-H-H-H-H-H-H
|
109
|
+
Dorian R-W-H-W-W-W-H-W
|
110
|
+
Flamenco R-H-3H-H-W-H-3H-H
|
111
|
+
Half Diminished R-W-H-W-H-W-W-W
|
112
|
+
Harmonic major R-W-W-H-W-H-3H-H
|
113
|
+
Harmonic minor R-W-H-W-W-H-3H-H
|
114
|
+
Hirajoshi R-2W-W-H-2W-H
|
115
|
+
Hungarian R-W-H-3H-H-H-3H-H
|
116
|
+
Insen R-H-2W-W-2W-W
|
117
|
+
Ionian R-W-W-H-W-W-W-H
|
118
|
+
Iwato R-H-2W-H-2W-W
|
119
|
+
Locrian R-H-W-W-H-W-W-W
|
120
|
+
Locrian Major R-W-W-H-H-W-W-W
|
121
|
+
Lydian R-W-W-W-H-W-W-H
|
122
|
+
Lydian Augmented R-W-W-W-W-H-W-H
|
123
|
+
Pentatonic Major R-W-W-3H-W-3H
|
124
|
+
Pentatonic Minor R-3H-W-W-3H-W
|
125
|
+
Melodic minor R-W-H-W-W-W-W-H
|
126
|
+
Mixolydian R-W-W-H-W-W-H-W
|
127
|
+
Octatonic Whole R-W-H-W-H-W-H-W-H
|
128
|
+
Octatonic Half R-H-W-H-W-H-W-H-W
|
129
|
+
Persian R-H-3H-H-H-W-3H-H
|
130
|
+
Phrygian R-H-W-W-W-H-W-W
|
131
|
+
Prometheus R-W-W-W-3H-H-W
|
132
|
+
Tritone R-H-3H-W-H-3H-W
|
133
|
+
Two-semitone Tritone R-H-H-4H-H-H
|
134
|
+
Ukrainian Dorian R-W-H-3H-H-W-H-W
|
135
|
+
Whole Tone R-W-W-W-W-W-W</property>
|
136
|
+
</object>
|
137
|
+
<object class="GtkWindow" id="scales_window">
|
138
|
+
<property name="can_focus">False</property>
|
139
|
+
<property name="title" translatable="yes">Scales and Intervals</property>
|
140
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
141
|
+
<property name="resizable">False</property>
|
142
|
+
<child>
|
143
|
+
<placeholder/>
|
144
|
+
</child>
|
145
|
+
<child>
|
146
|
+
<object class="GtkFixed">
|
147
|
+
<property name="visible">True</property>
|
148
|
+
<property name="can_focus">False</property>
|
149
|
+
<child>
|
150
|
+
<object class="GtkTextView">
|
151
|
+
<property name="width_request">267</property>
|
152
|
+
<property name="height_request">510</property>
|
153
|
+
<property name="left_margin">10</property>
|
154
|
+
<property name="right_margin">10</property>
|
155
|
+
<property name="top_margin">10</property>
|
156
|
+
<property name="bottom_margin">10</property>
|
157
|
+
<property name="visible">True</property>
|
158
|
+
<property name="can_focus">True</property>
|
159
|
+
<property name="editable">False</property>
|
160
|
+
<property name="cursor_visible">False</property>
|
161
|
+
<property name="buffer">help_text_2</property>
|
162
|
+
<property name="accepts_tab">False</property>
|
163
|
+
<property name="monospace">True</property>
|
164
|
+
</object>
|
165
|
+
</child>
|
166
|
+
</object>
|
167
|
+
</child>
|
168
|
+
</object>
|
169
|
+
<object class="GtkTextBuffer" id="help_text_3">
|
170
|
+
<property name="text" translatable="yes">[ -- decrement grid size/change time signature divisor -1
|
171
|
+
] -- increment grid size/ change time signature divisor +1
|
172
|
+
{ -- decrement time signature denominator (slows down play) - min 2
|
173
|
+
} -- increment time signature denominator (speeds up play) - max 16
|
174
|
+
delete -- deletes selected point(s)
|
175
|
+
home -- deletes paths entering selected point(s)
|
176
|
+
end -- deletes paths leaving selected point(s)
|
177
|
+
Page Up -- change path direction
|
178
|
+
Page Down -- change path direction
|
179
|
+
A -- Make starting point (need at least 1 to begin play)
|
180
|
+
T -- Built path - build a path between one or more points
|
181
|
+
Q -- Select Tool - Box select or single select points
|
182
|
+
W -- Point Place Tool - Places a point
|
183
|
+
E -- Move Tool - moves selected points based on a stencil
|
184
|
+
R -- Path Tool - Select source point, select target points, push build path or hit 'T'
|
185
|
+
< and > -- Cycle Play Mode - between robin, portal (random, split, if more than one path is leaving a point)
|
186
|
+
, and . -- Cycle starting path if more than one path is leaving a point
|
187
|
+
+ and - -- add or subtract 1 from the currently selected points' note
|
188
|
+
Num 6 -- play
|
189
|
+
Num 5 -- stop
|
190
|
+
space -- toggle play/stop
|
191
|
+
Ctrl+A -- select all
|
192
|
+
Ctrl+C -- copy selected points
|
193
|
+
Ctrl+X -- cut selected points
|
194
|
+
Ctrl+V -- paste copied/cut points
|
195
|
+
Ctrl+O -- Open
|
196
|
+
Ctrl+S -- Save
|
197
|
+
Shift+Ctrl+S -- Save As
|
198
|
+
Ctrl+N -- New
|
199
|
+
Ctrl+Q -- Quit</property>
|
200
|
+
</object>
|
201
|
+
<object class="GtkWindow" id="hotkeys_window">
|
202
|
+
<property name="can_focus">False</property>
|
203
|
+
<property name="title" translatable="yes">Hotkeys</property>
|
204
|
+
<property name="icon_name">accessories-calculator-symbolic</property>
|
205
|
+
<property name="resizable">False</property>
|
206
|
+
<child>
|
207
|
+
<placeholder/>
|
208
|
+
</child>
|
209
|
+
<child>
|
210
|
+
<object class="GtkFixed">
|
211
|
+
<property name="visible">True</property>
|
212
|
+
<property name="can_focus">False</property>
|
213
|
+
<child>
|
214
|
+
<object class="GtkTextView">
|
215
|
+
<property name="width_request">100</property>
|
216
|
+
<property name="height_request">80</property>
|
217
|
+
<property name="left_margin">10</property>
|
218
|
+
<property name="right_margin">10</property>
|
219
|
+
<property name="top_margin">10</property>
|
220
|
+
<property name="bottom_margin">10</property>
|
221
|
+
<property name="visible">True</property>
|
222
|
+
<property name="can_focus">True</property>
|
223
|
+
<property name="editable">False</property>
|
224
|
+
<property name="cursor_visible">False</property>
|
225
|
+
<property name="buffer">help_text_3</property>
|
226
|
+
<property name="accepts_tab">False</property>
|
227
|
+
<property name="monospace">True</property>
|
228
|
+
</object>
|
229
|
+
</child>
|
230
|
+
</object>
|
231
|
+
</child>
|
232
|
+
</object>
|
6
233
|
<object class="GtkDialog" id="confirmer">
|
7
234
|
<property name="title" translatable="yes">Confirmation</property>
|
8
235
|
<property name="icon_name">accessories-calculator-symbolic</property>
|
@@ -363,6 +590,29 @@
|
|
363
590
|
</object>
|
364
591
|
</child>
|
365
592
|
</object>
|
593
|
+
</child>
|
594
|
+
<child>
|
595
|
+
<object class="GtkMenuItem">
|
596
|
+
<property name="visible">True</property>
|
597
|
+
<property name="can_focus">False</property>
|
598
|
+
<property name="label" translatable="yes">Input _Channel</property>
|
599
|
+
<property name="use_underline">True</property>
|
600
|
+
<child type="submenu">
|
601
|
+
<object class="GtkMenu" id="input_channel_menu">
|
602
|
+
<property name="visible">True</property>
|
603
|
+
<property name="can_focus">False</property>
|
604
|
+
<!-- child>
|
605
|
+
<object class="GtkImageMenuItem" id="file_quit">
|
606
|
+
<property name="label">gtk-quit</property>
|
607
|
+
<property name="visible">True</property>
|
608
|
+
<property name="can_focus">False</property>
|
609
|
+
<property name="use_underline">True</property>
|
610
|
+
<property name="use_stock">True</property>
|
611
|
+
</object>
|
612
|
+
</child> -->
|
613
|
+
</object>
|
614
|
+
</child>
|
615
|
+
</object>
|
366
616
|
</child>
|
367
617
|
<child>
|
368
618
|
<object class="GtkMenuItem">
|
@@ -394,12 +644,39 @@
|
|
394
644
|
<property name="label" translatable="yes">_Help</property>
|
395
645
|
<property name="use_underline">True</property>
|
396
646
|
<child type="submenu">
|
397
|
-
<object class="GtkMenu">
|
647
|
+
<object class="GtkMenu" id="help_menu">
|
398
648
|
<property name="visible">True</property>
|
399
649
|
<property name="can_focus">False</property>
|
400
650
|
<child>
|
401
651
|
<object class="GtkImageMenuItem" id="help_about">
|
402
|
-
<property name="label">
|
652
|
+
<property name="label">_About</property>
|
653
|
+
<property name="visible">True</property>
|
654
|
+
<property name="can_focus">False</property>
|
655
|
+
<property name="use_underline">True</property>
|
656
|
+
<property name="use_stock">True</property>
|
657
|
+
</object>
|
658
|
+
</child>
|
659
|
+
<child>
|
660
|
+
<object class="GtkImageMenuItem" id="help_notes">
|
661
|
+
<property name="label">_Notes by Integer</property>
|
662
|
+
<property name="visible">True</property>
|
663
|
+
<property name="can_focus">False</property>
|
664
|
+
<property name="use_underline">True</property>
|
665
|
+
<property name="use_stock">True</property>
|
666
|
+
</object>
|
667
|
+
</child>
|
668
|
+
<child>
|
669
|
+
<object class="GtkImageMenuItem" id="help_scales">
|
670
|
+
<property name="label">_Scales and Intervals</property>
|
671
|
+
<property name="visible">True</property>
|
672
|
+
<property name="can_focus">False</property>
|
673
|
+
<property name="use_underline">True</property>
|
674
|
+
<property name="use_stock">True</property>
|
675
|
+
</object>
|
676
|
+
</child>
|
677
|
+
<child>
|
678
|
+
<object class="GtkImageMenuItem" id="help_hotkeys">
|
679
|
+
<property name="label">_Hotkeys</property>
|
403
680
|
<property name="visible">True</property>
|
404
681
|
<property name="can_focus">False</property>
|
405
682
|
<property name="use_underline">True</property>
|
data/lib/midinous/style/ui.rb
CHANGED
@@ -63,12 +63,14 @@ end
|
|
63
63
|
class UI_Elements
|
64
64
|
include Logic_Controls
|
65
65
|
# Construct a Gtk::Builder instance and load our UI description
|
66
|
-
attr_reader :menu_commands,:canvas_commands,:in_device_items
|
66
|
+
attr_reader :menu_commands,:canvas_commands,:in_device_items,
|
67
|
+
:out_device_items,:in_channel_items
|
67
68
|
def initialize
|
68
69
|
@current_file = nil
|
69
70
|
@operation_file = nil
|
70
71
|
@current_window = nil
|
71
72
|
@scale_iters = []
|
73
|
+
@in_channel_items = []
|
72
74
|
@in_device_items = []
|
73
75
|
@out_device_items = []
|
74
76
|
end
|
@@ -88,6 +90,18 @@ class UI_Elements
|
|
88
90
|
def confirmer
|
89
91
|
@builder.get_object("confirmer")
|
90
92
|
end
|
93
|
+
def about_window
|
94
|
+
@builder.get_object("about_window")
|
95
|
+
end
|
96
|
+
def notes_window
|
97
|
+
@builder.get_object("notes_window")
|
98
|
+
end
|
99
|
+
def scales_window
|
100
|
+
@builder.get_object("scales_window")
|
101
|
+
end
|
102
|
+
def hotkeys_window
|
103
|
+
@builder.get_object("hotkeys_window")
|
104
|
+
end
|
91
105
|
|
92
106
|
#Menus
|
93
107
|
def input_menu
|
@@ -96,6 +110,12 @@ class UI_Elements
|
|
96
110
|
def output_menu
|
97
111
|
@builder.get_object("output_menu")
|
98
112
|
end
|
113
|
+
def input_channel_menu
|
114
|
+
@builder.get_object("input_channel_menu")
|
115
|
+
end
|
116
|
+
def help_menu
|
117
|
+
@builder.get_object("help_menu")
|
118
|
+
end
|
99
119
|
|
100
120
|
#Menu Items
|
101
121
|
def file_new
|
@@ -115,6 +135,15 @@ class UI_Elements
|
|
115
135
|
end
|
116
136
|
def help_about
|
117
137
|
@builder.get_object("help_about")
|
138
|
+
end
|
139
|
+
def help_notes
|
140
|
+
@builder.get_object("help_notes")
|
141
|
+
end
|
142
|
+
def help_scales
|
143
|
+
@builder.get_object("help_scales")
|
144
|
+
end
|
145
|
+
def help_hotkeys
|
146
|
+
@builder.get_object("help_hotkeys")
|
118
147
|
end
|
119
148
|
|
120
149
|
#Drawing Areas
|
@@ -271,6 +300,10 @@ class UI_Elements
|
|
271
300
|
@builder.get_object("scale_display")
|
272
301
|
end
|
273
302
|
|
303
|
+
16.times.with_index {|i| @in_channel_items << Gtk::ImageMenuItem.new(label: (i+1).to_s)}
|
304
|
+
@in_channel_items.each {|i| input_channel_menu.append(i)}
|
305
|
+
input_channel_menu.show_all
|
306
|
+
|
274
307
|
Pm.in_list.each {|i| @in_device_items << Gtk::ImageMenuItem.new(label: i.name)}
|
275
308
|
@in_device_items.each {|i| input_menu.append(i)}
|
276
309
|
input_menu.show_all
|
@@ -291,7 +324,8 @@ class UI_Elements
|
|
291
324
|
|
292
325
|
def regen_status
|
293
326
|
unless Pm.in_list.empty?
|
294
|
-
status_area.text = "Using: Output[#{Pm.out_list[Pm.out_id].name}]
|
327
|
+
status_area.text = "Using: Output[#{Pm.out_list[Pm.out_id].name}] "\
|
328
|
+
"Input[#{Pm.in_list[Pm.in_id].name} Channel: #{Pm.in_chan}]"
|
295
329
|
else
|
296
330
|
status_area.text = "Using: Output[#{Pm.out_list[Pm.out_id].name}]"
|
297
331
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: midinous
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James "Nornec" Ratliff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gtk3
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Midinous combines generative features with a grid-based GUI to offer
|
56
|
-
a supplemental unique compositional experience
|
56
|
+
a supplemental and unique compositional experience
|
57
57
|
email: jaynornec@gmail.com
|
58
58
|
executables: []
|
59
59
|
extensions: []
|
@@ -85,15 +85,16 @@ require_paths:
|
|
85
85
|
- lib
|
86
86
|
required_ruby_version: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 2.5.0
|
91
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
92
|
requirements:
|
93
93
|
- - ">="
|
94
94
|
- !ruby/object:Gem::Version
|
95
95
|
version: '0'
|
96
|
-
requirements:
|
96
|
+
requirements:
|
97
|
+
- Virtual MIDI Cable (Windows)
|
97
98
|
rubyforge_project:
|
98
99
|
rubygems_version: 2.7.6.2
|
99
100
|
signing_key:
|