mirror of
https://github.com/cyberboy666/r_e_c_u_r.git
synced 2025-12-11 19:00:04 +01:00
refacting data parts
This commit is contained in:
@@ -1,37 +1,35 @@
|
||||
from tkinter import Text, END
|
||||
import math
|
||||
import data_centre
|
||||
import time
|
||||
|
||||
|
||||
class Display(object):
|
||||
MAX_LINES = 10
|
||||
MENU_HEIGHT = 10
|
||||
SELECTOR_WIDTH = 0.47
|
||||
ROW_OFFSET = 6.0
|
||||
VIDEO_DISPLAY_TEXT = ' NOW [{}] {} NEXT [{}] {}'
|
||||
VIDEO_DISPLAY_BANNER_TEXT = ' {} {} {}'
|
||||
|
||||
def __init__(self, tk, video_driver):
|
||||
self.video_driver = video_driver
|
||||
self.display_mode = "LOOPER"
|
||||
def __init__(self, tk, video_driver, message_handler, data):
|
||||
self.tk = tk
|
||||
self.video_driver = video_driver
|
||||
self.message_handler = message_handler
|
||||
self.data = data
|
||||
|
||||
self.browser_data = data_centre.data()
|
||||
self.browser_start_index = 0
|
||||
self.browser_index = self.browser_start_index
|
||||
self.browser_list = self.browser_data.get_browser_data_for_display()
|
||||
self.settings_start_index = 0
|
||||
self.settings_index = self.settings_start_index
|
||||
self.settings_list = data_centre.get_all_settings_data_for_display()
|
||||
self.display_mode = "SAMPLER"
|
||||
self.top_menu_index = 0
|
||||
self.selected_list_index = self.top_menu_index
|
||||
self.browser_list = self.data.rewrite_browser_list()
|
||||
|
||||
self.display_text = self.create_display_text(self.tk)
|
||||
self.add_tags()
|
||||
self.update_screen()
|
||||
self.display_text = self._create_display_text(self.tk)
|
||||
self._add_tags()
|
||||
self._update_screen_every_second()
|
||||
|
||||
@staticmethod
|
||||
def create_display_text(tk):
|
||||
def _create_display_text(tk):
|
||||
return Text(tk, bg="black", fg="white", font=('courier', 13))
|
||||
|
||||
def add_tags(self):
|
||||
def _add_tags(self):
|
||||
self.display_text.tag_configure("SELECT", background="white", foreground="black")
|
||||
self.display_text.tag_configure("TITLE", background="black", foreground="red")
|
||||
self.display_text.tag_configure("DISPLAY_MODE", background="black", foreground="magenta")
|
||||
@@ -40,19 +38,19 @@ class Display(object):
|
||||
self.display_text.tag_configure("PLAYER_INFO", background="black", foreground="yellow")
|
||||
self.display_text.tag_configure("COLUMN_NAME", background="black", foreground="cyan")
|
||||
|
||||
def load_display(self):
|
||||
self.load_title()
|
||||
self.load_player()
|
||||
self.load_display_body()
|
||||
self.load_message()
|
||||
def _load_display(self):
|
||||
self._load_title()
|
||||
self._load_player()
|
||||
self._load_display_body()
|
||||
self._load_message()
|
||||
self.display_text.pack()
|
||||
|
||||
def load_title(self):
|
||||
def _load_title(self):
|
||||
self.display_text.insert(END, '================== r_e_c_u_r ================== \n')
|
||||
self.display_text.tag_add("TITLE", 1.19, 1.28)
|
||||
|
||||
def load_player(self):
|
||||
text, banner = self.get_text_for_video_display()
|
||||
def _load_player(self):
|
||||
text, banner = self._get_info_for_player()
|
||||
end_of_text = float("3." + str(len(text)))
|
||||
end_of_banner = float("3." + str(len(banner)))
|
||||
self.display_text.insert(END, text + '\n')
|
||||
@@ -60,88 +58,92 @@ class Display(object):
|
||||
self.display_text.insert(END, banner + '\n')
|
||||
self.display_text.tag_add("PLAYER_INFO", 3.0, end_of_banner)
|
||||
|
||||
def load_display_body(self):
|
||||
def _load_display_body(self):
|
||||
if self.display_mode == 'BROWSER':
|
||||
self.load_browser()
|
||||
self._load_browser()
|
||||
elif self.display_mode == 'SETTINGS':
|
||||
self.load_settings()
|
||||
self._load_settings()
|
||||
else:
|
||||
self.load_sampler()
|
||||
self._load_sampler()
|
||||
self.display_text.tag_add("COLUMN_NAME", 5.0, 6.0)
|
||||
print('selected_list_index:{}, top_menu_index:{}'.format(self.selected_list_index, self.top_menu_index))
|
||||
self._highlight_this_row(self.selected_list_index - self.top_menu_index)
|
||||
|
||||
def load_sampler(self):
|
||||
bank_info = data_centre.get_all_looper_data_for_display()
|
||||
def _load_sampler(self):
|
||||
bank_info = self.data.get_sampler_data()
|
||||
self.display_text.insert(END, '------------------ <SAMPLER> ------------------ \n')
|
||||
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
||||
self.display_text.insert(END, '{:^4} {:<22} {:<4} {:<4} {:<4} \n'.format(
|
||||
'bank', 'name', 'length', 'start', 'end'))
|
||||
for bank in bank_info:
|
||||
'slot', 'name', 'length', 'start', 'end'))
|
||||
for index, slot in enumerate(bank_info):
|
||||
self.display_text.insert(END, '{:^4} {:<22} {:<4} {:<4} {:<4} \n'.format(
|
||||
bank[0], bank[1][0:22], bank[2], bank[3], bank[4]))
|
||||
self.select_current_playing(self.video_driver.current_player.bank_number)
|
||||
index, slot['name'][0:22], self.format_time_value(slot['length']),
|
||||
self.format_time_value(slot['start']), self.format_time_value(slot['end'])))
|
||||
if self.video_driver.current_player.bank_number is '-':
|
||||
self.selected_list_index = 0
|
||||
else:
|
||||
self.selected_list_index = self.video_driver.current_player.bank_number
|
||||
|
||||
def load_message(self):
|
||||
if data_centre.current_message[1]:
|
||||
self.display_text.insert(END, '{:5}: {:38}'.format(data_centre.current_message[0], data_centre.current_message[1][0:38]))
|
||||
self.display_text.tag_add('{}_MESSAGE'.format(data_centre.current_message[0]), 16.0,16.0 + self.SELECTOR_WIDTH)
|
||||
print(data_centre.current_message[2])
|
||||
if data_centre.current_message[2]:
|
||||
self.clear_message()
|
||||
|
||||
def clear_message(self):
|
||||
data_centre.current_message[2] = False
|
||||
message_length = 4000
|
||||
self.tk.after(message_length, data_centre.clear_message)
|
||||
|
||||
def load_browser(self):
|
||||
line_count = 0
|
||||
def _load_browser(self):
|
||||
number_of_lines_displayed = 0
|
||||
self.display_text.insert(END, '------------------ <BROWSER> ------------------ \n')
|
||||
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
||||
self.display_text.insert(END, '{:40} {:5} \n'.format('path', 'bank'))
|
||||
|
||||
number_of_browser_items = len(self.browser_list)
|
||||
for index in range(number_of_browser_items):
|
||||
if line_count >= self.MAX_LINES:
|
||||
if number_of_lines_displayed >= self.MENU_HEIGHT:
|
||||
break
|
||||
if index >= self.browser_start_index:
|
||||
if index >= self.top_menu_index:
|
||||
path = self.browser_list[index]
|
||||
self.display_text.insert(END, '{:40} {:5} \n'.format(path[0][0:35], path[1]))
|
||||
line_count = line_count + 1
|
||||
self.display_text.insert(END, '{:40} {:5} \n'.format(path['name'][0:35], path['bank']))
|
||||
number_of_lines_displayed = number_of_lines_displayed + 1
|
||||
|
||||
for index in range(self.MAX_LINES - number_of_browser_items):
|
||||
for index in range(self.MENU_HEIGHT - number_of_browser_items):
|
||||
self.display_text.insert(END, '\n')
|
||||
|
||||
def load_settings(self):
|
||||
def _load_settings(self):
|
||||
line_count = 0
|
||||
settings_list = self.data.get_settings_data()
|
||||
self.display_text.insert(END, '------------------ <SETTINGS> ----------------- \n')
|
||||
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
||||
self.display_text.insert(END, '{:^25} {:^20} \n'.format('SETTING', 'VALUE'))
|
||||
number_of_settings_items = len(self.settings_list)
|
||||
number_of_settings_items = len(settings_list)
|
||||
for index in range(number_of_settings_items):
|
||||
if line_count >= self.MAX_LINES:
|
||||
if line_count >= self.MENU_HEIGHT:
|
||||
break
|
||||
if index >= self.settings_start_index:
|
||||
setting = self.settings_list[index]
|
||||
self.display_text.insert(END, '{:>25} {:<20} \n'.format(setting[0], setting[1][0:20]))
|
||||
if index >= self.top_menu_index:
|
||||
setting = settings_list[index]
|
||||
self.display_text.insert(END, '{:>25} {:<20} \n'.format(setting['name'], setting['value'][0:20]))
|
||||
line_count = line_count + 1
|
||||
|
||||
for index in range(self.MAX_LINES - number_of_settings_items):
|
||||
for index in range(self.MENU_HEIGHT - number_of_settings_items):
|
||||
self.display_text.insert(END, '\n')
|
||||
|
||||
def highlight_this_row(self, row):
|
||||
def _load_message(self):
|
||||
if self.message_handler.current_message[1]:
|
||||
self.display_text.insert(END, '{:5}: {:38}'.format(
|
||||
self.message_handler.current_message[0], self.message_handler.current_message[1][0:38]))
|
||||
self.display_text.tag_add('{}_MESSAGE'.format(
|
||||
self.message_handler.current_message[0]), 16.0,16.0 + self.SELECTOR_WIDTH)
|
||||
if self.message_handler.current_message[2]:
|
||||
self.message_handler.current_message[2] = False
|
||||
message_length = 4000
|
||||
self.tk.after(message_length, self.message_handler.clear_message)
|
||||
|
||||
def _highlight_this_row(self, row):
|
||||
self.display_text.tag_add("SELECT", self.ROW_OFFSET + row,
|
||||
self.ROW_OFFSET + self.SELECTOR_WIDTH + row)
|
||||
|
||||
def unhighlight_this_row(self, row):
|
||||
def _unhighlight_this_row(self, row):
|
||||
self.display_text.tag_remove("SELECT", self.ROW_OFFSET + row,
|
||||
self.ROW_OFFSET + self.SELECTOR_WIDTH + row)
|
||||
|
||||
def get_text_for_video_display(self):
|
||||
now_bank, now_status, next_bank, next_status, position, video_length, start, end = self.video_driver.get_info_for_video_display()
|
||||
def _get_info_for_player(self):
|
||||
now_bank, now_status, next_bank, next_status, position, video_length, start, end = self.video_driver.get_info_for_player_display()
|
||||
banner = self.create_video_display_banner(start, end, video_length, position)
|
||||
time_been = data_centre.convert_int_to_string_for_display(position - start)
|
||||
time_left = data_centre.convert_int_to_string_for_display(
|
||||
end - position)
|
||||
time_been = self.format_time_value(position - start)
|
||||
time_left = self.format_time_value(end - position)
|
||||
|
||||
return self.VIDEO_DISPLAY_BANNER_TEXT.format(time_been, banner, time_left), \
|
||||
self.VIDEO_DISPLAY_TEXT.format(now_bank, now_status, next_bank, next_status)
|
||||
@@ -165,75 +167,52 @@ class Display(object):
|
||||
|
||||
return ''.join(banner_list)
|
||||
|
||||
def _update_screen_every_second(self):
|
||||
self.refresh_display()
|
||||
self.tk.after(1000, self._update_screen_every_second)
|
||||
|
||||
def refresh_display(self):
|
||||
self.display_text.configure(state='normal')
|
||||
self.display_text.delete(1.0, END)
|
||||
self.load_display()
|
||||
self._load_display()
|
||||
self.display_text.configure(state='disable')
|
||||
if self.display_mode is 'BROWSER':
|
||||
self.highlight_this_row(self.browser_index)
|
||||
elif self.display_mode is 'SETTINGS':
|
||||
self.highlight_this_row(self.settings_index)
|
||||
self.display_text.focus_set()
|
||||
|
||||
def update_screen(self):
|
||||
self.refresh_display()
|
||||
self.tk.after(1000, self.update_screen)
|
||||
def navigate_menu(self, move_direction, number_items_in_list):
|
||||
last_list_index = number_items_in_list - 1
|
||||
bottom_menu_index = self.top_menu_index + self.MENU_HEIGHT - 1
|
||||
|
||||
def select_current_playing(self, bank_number):
|
||||
if bank_number != '-':
|
||||
self.display_text.tag_add("SELECT", self.ROW_OFFSET + bank_number,
|
||||
self.ROW_OFFSET + self.SELECTOR_WIDTH + bank_number)
|
||||
self._unhighlight_this_row(self.selected_list_index - self.top_menu_index)
|
||||
|
||||
def move_browser_down(self):
|
||||
last_index = len(self.browser_list) - 1
|
||||
if self.browser_index + self.browser_start_index >= last_index:
|
||||
return
|
||||
if self.browser_index >= self.MAX_LINES - 1:
|
||||
self.browser_start_index = self.browser_start_index + 1
|
||||
return
|
||||
self.unhighlight_this_row(self.browser_index)
|
||||
self.browser_index = self.browser_index + 1
|
||||
self.highlight_this_row(self.browser_index)
|
||||
if move_direction == 'down':
|
||||
if self.selected_list_index != last_list_index:
|
||||
if self.selected_list_index == bottom_menu_index:
|
||||
self.top_menu_index += 1
|
||||
self.selected_list_index += 1
|
||||
else:
|
||||
self.top_menu_index = 0
|
||||
self.selected_list_index = self.top_menu_index
|
||||
|
||||
def move_browser_up(self):
|
||||
if self.browser_index == 0:
|
||||
if self.browser_start_index > 0:
|
||||
self.browser_start_index = self.browser_start_index - 1
|
||||
return
|
||||
self.unhighlight_this_row(self.browser_index)
|
||||
self.browser_index = self.browser_index - 1
|
||||
self.highlight_this_row(self.browser_index)
|
||||
elif move_direction == 'up':
|
||||
if self.selected_list_index != 0:
|
||||
if self.selected_list_index == self.top_menu_index:
|
||||
self.top_menu_index -= 1
|
||||
self.selected_list_index -= 1
|
||||
else:
|
||||
self.selected_list_index = last_list_index
|
||||
self.top_menu_index = last_list_index - (self.MENU_HEIGHT - 1)
|
||||
if self.top_menu_index < 0:
|
||||
self.top_menu_index = 0
|
||||
|
||||
def browser_enter(self):
|
||||
is_file, name = data_centre.extract_file_type_and_name_from_browser_format(
|
||||
self.browser_list[self.browser_index + self.browser_start_index][0])
|
||||
if is_file:
|
||||
data_centre.create_new_bank_mapping_in_first_open(name)
|
||||
self._highlight_this_row(self.selected_list_index - self.top_menu_index)
|
||||
|
||||
return
|
||||
|
||||
@staticmethod
|
||||
def format_time_value(time_in_seconds):
|
||||
if time_in_seconds < 0:
|
||||
return ''
|
||||
elif time_in_seconds >= 6000:
|
||||
return '99:99'
|
||||
else:
|
||||
self.browser_data.update_open_folders(name)
|
||||
self.browser_data.rewrite_browser_list()
|
||||
self.browser_list = self.browser_data.get_browser_data_for_display()
|
||||
|
||||
def move_settings_down(self):
|
||||
last_index = len(self.settings_list) - 1
|
||||
if self.settings_index + self.settings_start_index >= last_index:
|
||||
return
|
||||
if self.settings_index >= self.MAX_LINES - 1:
|
||||
self.settings_start_index = self.settings_start_index + 1
|
||||
return
|
||||
self.unhighlight_this_row(self.settings_index)
|
||||
self.settings_index = self.settings_index + 1
|
||||
self.highlight_this_row(self.settings_index)
|
||||
|
||||
def move_settings_up(self):
|
||||
if self.settings_index == 0:
|
||||
if self.settings_start_index > 0:
|
||||
self.settings_start_index = self.settings_start_index - 1
|
||||
return
|
||||
self.unhighlight_this_row(self.settings_index)
|
||||
self.settings_index = self.settings_index - 1
|
||||
self.highlight_this_row(self.settings_index)
|
||||
|
||||
def settings_enter(self):
|
||||
data_centre.switch_settings(self.settings_index + self.settings_start_index)
|
||||
return time.strftime("%M:%S", time.gmtime(time_in_seconds))
|
||||
|
||||
Reference in New Issue
Block a user