Mar-13-2018, 11:17 PM
This is almost totally finished.
what remains to be done:
add volume, book and chapter to self.pages, so that when a chapter is selected,
the keys for fetching the audio file are at your fingertips.
then code for actually playing the audio file
There is already a method that will return a path to the mp3 file:
You can finish if you like, or wait until my tomorrow. EST time zone
code (not on github yet)
what remains to be done:
add volume, book and chapter to self.pages, so that when a chapter is selected,
the keys for fetching the audio file are at your fingertips.
then code for actually playing the audio file
There is already a method that will return a path to the mp3 file:
get_mp3_filepath(self, volume, book, chapter)here's the code as it stands. I'm taking the rest of the evening off.
You can finish if you like, or wait until my tomorrow. EST time zone
code (not on github yet)
import BiblePaths import json import wx class BibleNB: def __init__(self, parent, id = wx.ID_ANY, title = "Bible for the Blind", xpos=20, ypos=20, width=1200, height=600, style=wx.DEFAULT_FRAME_STYLE): self.bpath = BiblePaths.BiblePaths() self.app = wx.App() self.frame = wx.Frame(None, id=wx.ID_ANY, title=title, pos=(xpos, ypos), size=(width, height), style=style) self.app.Bind(wx.EVT_CLOSE, self.OnClose) self.app.SetTopWindow(self) with self.bpath.IndexedBible.open() as f: self.bible = json.load(f) self.ot = 'Old Testament' self.nt = 'New Testament' self.book_list = self.get_book_list() self.chapter_list = None # dictionary to hold all notebook pages self.pages = {} self.current_page = None # Button position and dimensions self.button_width = 110 self.button_height = 36 self.button_hover_color = '#87ceeb' self.button_normal_color = '#f8fcfe' self.left_x = 5 self.upper_left_y = 5 self.x_increment = 150 self.y_increment = 55 self.x_max = width self.create_application() self.frame.Show() self.app.MainLoop() def get_book_list(self): book_list = [] for key, value in self.bible.items(): for key1, value1 in value.items(): if key == self.ot: book_list.append(['OT', key1]) else: book_list.append(['NT', key1]) return book_list def create_application(self): self.create_notebook() self.create_index_page() self.create_book_pages() def create_notebook(self): self.nb = wx.Notebook(self.frame, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name=wx.NotebookNameStr) self.nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged) self.nb.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging) def set_page(self, event): self.nb.SetSelection(self.pages['Index']['panel']) event.skip() def add_page(self, title): self.pages[title] = {} self.pages[title]['panel'] = wx.Panel(self.nb, id=wx.ID_ANY, style=wx.CLIP_CHILDREN) self.nb.AddPage(self.pages[title]['panel'], text=title) return self.pages[title] def add_buttons(self, page, title, button_list): xpos = self.left_x ypos = self.upper_left_y page['buttons'] = {} for btn in button_list: if isinstance(btn, list): button_name = f'{btn[0]} {btn[1]}' else: button_name = btn bloc = page['buttons'][button_name] = wx.Button(page['panel'], id=wx.ID_ANY, label=button_name, pos=(xpos, ypos), size=(self.button_width, self.button_height), name=f'btn_{button_name}') bloc.name = [button_name, page] xpos += self.x_increment if xpos >= self.x_max: ypos += self.y_increment xpos = self.left_x bloc.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow, bloc) bloc.Bind(wx.EVT_LEAVE_WINDOW, self.OnExitWindow, bloc) bloc.Bind(wx.EVT_BUTTON, self.OnClick, bloc) # self.page['buttons'][button_name].Bind(wx.EVT_BUTTON, self.set_page) def OnEnterWindow(self, event): namelist = event.GetEventObject().name name = namelist[0] page = namelist[1] page['buttons'][name].SetBackgroundColour(self.button_hover_color) def OnExitWindow(self, event): namelist = event.GetEventObject().name name = namelist[0] page = namelist[1] page['buttons'][name].SetBackgroundColour(self.button_normal_color) def OnClick(self, event): namelist = event.GetEventObject().name # print(self.pages) name = namelist[0] page = namelist[1] # print(f'name: {name}') def get_mp3_filepath(self, volume, book, chapter): mp3path = self.bible[volume][book][chapter]['mp3path'] print(f'mp3path: {mp3path}') fullpath = self.bpath.KingJamesAudiopath / mp3path[0] / mp3path[1] return fullpath def get_chapter_list(self, item): if item[0] == 'OT': volume = 'Old Testament' else: volume = 'New Testament' chapter_list = [] for key, value in self.bible[volume][item[1]].items(): if str(key).startswith('chap'): continue chapter_list.append(key) return chapter_list def create_index_page(self): self.current_page = self.add_page('Index') index_button_labels = [] for item in self.book_list: index_button_labels.append(f'{item[0]}-{item[1]}') self.add_buttons(self.current_page, 'Index', index_button_labels) def create_book_pages(self): for item in self.book_list: title = item[1] self.current_page = self.add_page(item[1]) chapter_list = self.get_chapter_list(item) self.add_buttons(self.current_page, title, chapter_list) def OnPageChanged(self, event): pass def OnPageChanging(self, event): pass def OnClose(self): self.app.Destroy() if __name__ == '__main__': BibleNB(None, width=1200)