Skip to content

Commit b02c3d0

Browse files
Added input for instruments and fixed scroll buttons
1 parent 03956f6 commit b02c3d0

File tree

3 files changed

+45
-18
lines changed

3 files changed

+45
-18
lines changed

Algorithms/Sorting.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,13 @@ def quick_sort_method(arr, event, begin, end):
5757
arr.swap(i, low)
5858
low += 1
5959
if (event.is_set()):
60-
return
60+
return -1
6161

6262
arr.swap(low, pivot)
63-
quick_sort_method(arr, event, begin, low)
64-
quick_sort_method(arr, event, low+1, end)
63+
if (quick_sort_method(arr, event, begin, low) == -1):
64+
return -1
65+
if (quick_sort_method(arr, event, low+1, end) == -1):
66+
return -1
6567

6668
''' Merge Sort - O(nlogn)
6769
The array will be split into two even parts (not exactly even if the array has an odd number of elements)
@@ -77,8 +79,10 @@ def merge_sort(arr, event, aux = None):
7779
def merge_sort_method(arr, event, begin, end):
7880
if (begin+1 < end):
7981
mid = begin + ((end-begin)+1)//2
80-
merge_sort_method(arr, event, begin, mid)
81-
merge_sort_method(arr, event, mid, end)
82+
if (merge_sort_method(arr, event, begin, mid) == -1):
83+
return -1
84+
if (merge_sort_method(arr, event, mid, end) == -1):
85+
return -1
8286
arrL = arr.list[begin:mid]
8387
arrR = arr.list[mid:end]
8488
i = j = 0
@@ -91,21 +95,21 @@ def merge_sort_method(arr, event, begin, end):
9195
arr.replace(k, arrR[j])
9296
j += 1
9397
if (event.is_set()):
94-
return
98+
return -1
9599
k += 1
96100

97101
while i < len(arrL):
98102
arr.replace(k, arrL[i])
99103
i += 1
100104
k += 1
101105
if (event.is_set()):
102-
return
106+
return -1
103107
while j < len(arrR):
104108
arr.replace(k, arrR[j])
105109
j += 1
106110
k += 1
107111
if (event.is_set()):
108-
return
112+
return -1
109113

110114
''' Heap Sort (nlogn) - Also the implementation of the Priority Queue using the Heap Data Structure
111115
All elements of the array will be inserted into what is known as a "Heap".

UI/UI.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ def update(self):
171171
# self.scroll_bar[1] = sort scroll
172172
# Glitch where it will click the button behind it
173173
#print(len(self.list))
174-
if (self.scroll_bar != []):
174+
if (len(self.scroll_bar) == 2):
175+
#print(self.scroll_bar[0].can_press)
175176
if (self.window.display and self.handled != 1):
176177
#print("options extended")
177178
self.scroll_bar[0].set_unpressable()
@@ -196,7 +197,7 @@ def update(self):
196197
self.generate.set_unpressable()
197198
self.advanced.set_unpressable()
198199
self.handled = 3
199-
elif (self.handled != 0):
200+
elif (not self.window.display and not self.scroll_bar[0].extended and not self.scroll_bar[1].extended and self.handled != 0):
200201
#print("nothing extended")
201202

202203
self.scroll_bar[0].set_pressable()
@@ -300,7 +301,7 @@ def toggle_aux_array(self):
300301
def show_advanced(self):
301302
# Constants
302303
OPTIONS_WIDTH = 300
303-
OPTIONS_HEIGHT = 300
304+
OPTIONS_HEIGHT = 400
304305

305306
# Switch on options
306307
self.window.display = True
@@ -325,15 +326,19 @@ def show_advanced(self):
325326
self.options_group.add(Wrapper.Text(Wrapper.DefaultText.text("Array Size", Wrapper.FontSizes.SUB_TITLE_SIZE), (self.window.window.get_size()[0]/2, text_start + 100), self.window, False, Wrapper.Screen.NONE))
326327
self.size_textbox = Wrapper.TextBox(Wrapper.TextArgs(str(self.array.size), Wrapper.Fonts(Wrapper.FontSizes.BUTTON_SIZE).UBUNTU_FONT, True, "#000000"), (self.window.window.get_size()[0]/2, text_start + 150), (200, 50), lambda a : self.array.change_size(a), self.window, "", 1)
327328

329+
self.options_group.add(Wrapper.Text(Wrapper.DefaultText.text("Instrument", Wrapper.FontSizes.SUB_TITLE_SIZE), (self.window.window.get_size()[0]/2, text_start + 200), self.window, False, Wrapper.Screen.NONE))
330+
self.instrument_textbox = Wrapper.TextBox(Wrapper.TextArgs(str(self.midi.instrument), Wrapper.Fonts(Wrapper.FontSizes.BUTTON_SIZE).UBUNTU_FONT, True, "#000000"), (self.window.window.get_size()[0]/2, text_start + 250), (200, 50), lambda a : self.midi.change_instrument(a), self.window, "", 1)
328331
self.text_box_group.add(self.delay_textbox)
329332
self.text_box_group.add(self.size_textbox)
333+
self.text_box_group.add(self.instrument_textbox)
330334

331335
# Input (specifically buttons)
332336

333337
'''@args = options_group'''
334338
def close_window(self):
335339
self.delay_textbox.do_func()
336340
self.size_textbox.do_func()
341+
self.instrument_textbox.do_func()
337342
self.array_length = self.array.size
338343
self.options_group.empty()
339344
self.text_box_group.empty()

UI/Wrapper.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,13 +196,12 @@ def set_unpressable(self):
196196

197197
def update(self):
198198
self.player_input()
199-
#print(self.can_press_timer)
200-
if (self.can_press_timer != 0):
199+
if (self.can_press_timer > 0):
201200
self.can_press_timer += 0.1
202201
if (self.can_press_timer > 2):
203202
self.can_press = True
204203
self.timer_is_handled = True
205-
self.can_press_timer = 0
204+
self.can_press_timer = -10
206205

207206
class Text(Slide):
208207
''' Creates text
@@ -727,11 +726,14 @@ class Midi():
727726
def __init__(self):
728727
port = pygame.midi.get_default_output_id()
729728
self.player = pygame.midi.Output(port, 0)
730-
self.player.set_instrument(13) # Grand_piano
729+
self.instrument = 13
730+
self.player.set_instrument(self.instrument) # xylophone
731731

732+
'''
732733
self.notes = []
733734
for i in range(1, 128):
734735
self.notes.append(False)
736+
'''
735737
# Constants
736738
self.brief = .5
737739
self.MAX = 127
@@ -742,6 +744,22 @@ def play(self, note, volume = MAX, length = brief):
742744
self.queue.put((note, volume))
743745

744746
def update(self):
745-
if (not self.queue.empty()):
746-
pop = self.queue.get()
747-
self.player.note_off(pop[0], pop[1])
747+
while (not self.queue.empty()):
748+
#print(self.queue.qsize())
749+
pop = self.queue.get()
750+
self.player.note_off(pop[0], pop[1])
751+
752+
def change_instrument(self, instrument):
753+
#print("Bruh")
754+
try:
755+
instrument = int(instrument)
756+
except ValueError:
757+
print("Invalid Input")
758+
if (instrument >= 0 and instrument <= self.MAX):
759+
self.instrument = instrument
760+
self.player.set_instrument(instrument)
761+
else:
762+
self.instrument = 13
763+
self.player.set_instrument(instrument)
764+
#print(self.instrument)
765+
return self.instrument

0 commit comments

Comments
 (0)