On Thu, 8 Nov 2018 08:47:39 -0800 (PST) "Edward K. Ream" <edream...@gmail.com> wrote:
> On Thursday, November 8, 2018 at 7:04:05 AM UTC-6, Edward K. Ream > wrote: > > *How to communicate between components?* I'd evaluate the emit / react ( / action) framework too - avoids having to have everything know about everything else. Cheers -Terry > [big snip] > > Happily, flexx properties provide everything needed. Apparently, > > properties must be used to communicate even between different > > flx.Widgets. That is, the ivars of one widget are not accessible to > > other flx.Widgets. So the example code above might better be > > rewritten this way: > > > > class LeoMainWindow(flx.Widget): > > > > """ > > Leo's main window, that is, root.main_window. > > > > Each property x below is accessible as root.main_window.x. > > """ > > > > body = flx.AnyProp(settable=True) > > log = flx.AnyProp(settable=True) > > minibuffer = flx.AnyProp(settable=True) > > status_line = flx.AnyProp(settable=True) > > tree = flx.AnyProp(settable=True) > > > > def init(self, body, outline): > > with flx.VBox(): > > with flx.HBox(flex=1): > > tree = LeoTree(outline, flex=1) > > log = LeoLog(flex=1) > > body = LeoBody(body, flex=1) > > minibuffer = LeoMiniBuffer() > > status_line = LeoStatusLine() > > self._mutate_body(body) > > self._mutate_log(log) > > self._mutate_minibuffer(minibuffer) > > self._mutate_status_line(status_line) > > self._mutate_tree(tree) > > > > I buried the lede big time here. I wanted to emphasize that *all* > flx.Widgets have a root ivar > <https://flexx.readthedocs.io/en/stable/guide/widgets_components.html#the-root-component>, > > which is the LeoApp instance. So it's easy to add to the log > widget! For example, here is the event handler in the LeoTree class: > > @flx.reaction( > 'tree.children**.checked', > 'tree.children**.selected', > 'tree.children**.collapsed', > ) > def on_event(self, *events): > > log = self.root.main_window.log > for ev in events: > id_ = ev.source.title or ev.source.text > kind = '' if ev.new_value else 'un-' > s = kind + ev.type > log.put('%s: %s' % (lpad(s, 15), id_)) > > Recall that pscript does not support features such as "10%s" which is > why the code above does padding by hand using the global lpad > function. Finally, here is log.put: > > def put(self, s): > self.ace.setValue(self.ace.getValue() + '\n' + s) > > Edward > -- You received this message because you are subscribed to the Google Groups "leo-editor" group. To unsubscribe from this group and stop receiving emails from it, send an email to leo-editor+unsubscr...@googlegroups.com. To post to this group, send email to leo-editor@googlegroups.com. Visit this group at https://groups.google.com/group/leo-editor. For more options, visit https://groups.google.com/d/optout.