robertiii
Apr 21, 2020 - 18:27
I cannot get the second table to reload with data from the first tableview on did select.
import ui
import json
import time
songList = []
libraryData = []
serviceData = []
previewData = []
liveData = []
def getJsonSongs():
with open('songs.json') as in_file:
new_dict = json.load(in_file)
for song in new_dict:
songList.append(song)
def setLibrarySongs():
for song in songList:
libraryData.append(song)
getJsonSongs()
setLibrarySongs()
class libraryTable(object): #also acts as the data_source. Can be separate, but this is easier.
def __init__(self,items):
self.items = items
self.currentNumLines = len(items)
self.currentTitle = None
self.currentRow = None
def tableview_did_select(self, tableview, section, row):
# Called when a row was selected.
serviceData.append(self.items[row])
servTable.reload()
tableview.reload()
def tableview_did_deselect(self, tableview, section, row):
# Called when a row was de-selected (in multiple selection mode).
pass
def tableview_title_for_delete_button(self, tableview, section, row):
# Return the title for the 'swipe-to-***' button.
return 'Delete' # or 'bye bye' or 'begone!!!'
def tableview_number_of_sections(self, tableview):
# Return the number of sections (defaults to 1). Someone else can mess with
# sections and section logic
return 1
def tableview_number_of_rows(self, tableview, section):
# Return the number of rows in the section
return self.currentNumLines #needed to be in sync with displayed version,
def tableview_cell_for_row(self, tableview, section, row):
# Create and return a cell for the given section/row
cell = ui.TableViewCell()
cell.text_label.text = self.items[row]['title']
# or you could comment out the line above and use
#
#if self.items[row]['accessory_type'] == 'checkmark':
# cell.text_label.font = ('<system-bold>',20)
# or
# cell.text_label.text_color = '#FF0000'
#
# for emphasis instead
#
return cell
def tableview_can_delete(self, tableview, section, row):
# Return True if the user should be able to delete the given row.
return True # you can use logic to lock out specific ("pinned" entries)
def tableview_can_move(self, tableview, section, row):
# Return True if a reordering control should be shown for the given row (in editing mode).
return True # see above
def tableview_delete(self, tableview, section, row):
# Called when the user confirms deletion of the given row.
self.currentNumLines -=1 # see above regarding hte "syncing"
tableview.delete_rows((row,)) # this animates the deletion could also 'tableview.reload_data()'
del self.items[row]
def tableview_move_row(self, tableview, from_section, from_row, to_section, to_row):
# Called when the user moves a row with the reordering control (in editing mode).
self.items = listShuffle(self.items,from_row,to_row)
# cynchronizes what is displayed with the underlying list
class serviceTable(object): #also acts as the data_source. Can be separate, but this is easier.
def __init__(self,items):
self.items = items
self.currentNumLines = len(items)
self.currentTitle = None
self.currentRow = None
def tableview_did_select(self, tableview, section, row):
# Called when a row was selected.
selectedItem = self.items[row]['title']
serviceData.append(listForTable([selectedItem]))
servTable.reload()
def tableview_did_deselect(self, tableview, section, row):
# Called when a row was de-selected (in multiple selection mode).
pass
def tableview_title_for_delete_button(self, tableview, section, row):
# Return the title for the 'swipe-to-***' button.
return 'Delete' # or 'bye bye' or 'begone!!!'
def tableview_number_of_sections(self, tableview):
# Return the number of sections (defaults to 1). Someone else can mess with
# sections and section logic
return 1
def tableview_number_of_rows(self, tableview, section):
# Return the number of rows in the section
return self.currentNumLines #needed to be in sync with displayed version,
def tableview_cell_for_row(self, tableview, section, row):
# Create and return a cell for the given section/row
cell = ui.TableViewCell()
cell.text_label.text = self.items[row]['title']
# or you could comment out the line above and use
#
#if self.items[row]['accessory_type'] == 'checkmark':
# cell.text_label.font = ('<system-bold>',20)
# or
# cell.text_label.text_color = '#FF0000'
#
# for emphasis instead
#
return cell
def tableview_can_delete(self, tableview, section, row):
# Return True if the user should be able to delete the given row.
return True # you can use logic to lock out specific ("pinned" entries)
def tableview_can_move(self, tableview, section, row):
# Return True if a reordering control should be shown for the given row (in editing mode).
return True # see above
def tableview_delete(self, tableview, section, row):
# Called when the user confirms deletion of the given row.
self.currentNumLines -=1 # see above regarding hte "syncing"
tableview.delete_rows((row,)) # this animates the deletion could also 'tableview.reload_data()'
del self.items[row]
def tableview_move_row(self, tableview, from_section, from_row, to_section, to_row):
# Called when the user moves a row with the reordering control (in editing mode).
self.items = listShuffle(self.items,from_row,to_row)
# cynchronizes what is displayed with the underlying list
libDel = libraryTable(libraryData)
servDel = serviceTable(serviceData)
control = ui.load_view()
control.name = "Church Presentation App"
libTable = control['libraryTable']
servTable = control['serviceTable']
libTable.delegate = libTable.data_source = libDel
servTable.delegate = servTable.data_source = servDel
nav = ui.NavigationView(control)
nav.present('fullscreen',hide_title_bar=True)