import lib.screenful as screenful class Update: def __init__(self): self.message_queue = [] self.model = None self.view = None def update_model(self): entry_redraw = False reset = False # check if we need to reset the model for msg in self.message_queue: if msg.reset(): reset = True break if reset: self.model.pre_reset() # check if we need to signal the data change # and for entry redraw for msg in self.message_queue: if msg.data_change(): screenful.changed() entry_redraw = True break if msg.entry_redraw(): entry_redraw = True # do update for msg in self.message_queue: msg.update_model(self.model) msg.clear_args() if reset: self.model.post_reset() self.view.view(self.model, entry_redraw) self.message_queue = [] def schedule(self, msg): self.message_queue.append(msg) # for now, directly clearing message queue self.update_model() def set_model(self, model): self.model = model def set_view(self, view): self.view = view update = Update()