On Wednesday, November 20, 2013, davemds wrote:

> davemds pushed a commit to branch master.
>
>
> http://git.enlightenment.org/apps/espionage.git/commit/?id=d35bf71a0867f0178b229167795dacabf4161197
>
> commit d35bf71a0867f0178b229167795dacabf4161197
> Author: davemds <d...@gurumeditation.it <javascript:;>>
> Date:   Wed Nov 20 21:33:47 2013 +0100
>
>     Espionage: add the new signal inspector.
>
>     A new Pane at the bottom of the window show ALL the signals that
>     transit on both buses. Double clicking on a received signal you can
>     see its full content (parameters).
>
>     Now Espionage have more features than d-feet...efl beats gnome one
> more time :D


Just need better GUI and GFX, we know u can do it better




> ---
>  espionage/espionage.py | 139
> ++++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 120 insertions(+), 19 deletions(-)
>
> diff --git a/espionage/espionage.py b/espionage/espionage.py
> index ffd468a..b60ad00 100644
> --- a/espionage/espionage.py
> +++ b/espionage/espionage.py
> @@ -38,6 +38,7 @@ from efl.elementary.panes import Panes
>  from efl.elementary.popup import Popup
>  from efl.elementary.separator import Separator
>  from efl.elementary.table import Table
> +from efl.elementary.frame import Frame
>  from efl.elementary.genlist import Genlist, GenlistItem, GenlistItemClass
>  from efl.dbus_mainloop import DBusEcoreMainLoop
>
> @@ -48,6 +49,14 @@ class Options(object):
>          self.show_introspect_stuff = False
>          self.show_private_stuff = False
>          self.pretty_output = True
> +        self.scroll_on_signal = True
> +
> +
> +def prettify_if_needed(data):
> +    if options.pretty_output:
> +        return utf8_to_markup(json.dumps(data, indent=2))
> +    else:
> +        return utf8_to_markup(str(data))
>
>
>  ### connect to session and system buses, and set session as the current
> one
> @@ -548,21 +557,103 @@ class MethodRunner(Popup):
>          #      wrong params for example are raised later :/
>
>      def reply_handler(self, *rets):
> -        if rets:
> -            if options.pretty_output:
> -                s = utf8_to_markup(json.dumps(rets, indent=2))
> -            else:
> -                s = utf8_to_markup(str(rets))
> -        else:
> -            s = "Method executed successfully.<br>Nothing returned."
> -        self._return_entry.entry = s
> +        self._return_entry.entry = prettify_if_needed(rets) if rets \
> +                else "Method executed successfully.<br>Nothing returned."
>
>      def error_handler(self, *rets):
>          self._return_entry.entry = 'Error executing method'
>
>
> +### Signals receiver
> +class SignalItemClass(GenlistItemClass):
> +    def __init__(self):
> +        GenlistItemClass.__init__(self, item_style='default_style')
> +    def text_get(self, gl, part, data):
> +        return '<b>%s</>  iface: <i>%s</> path: <i>%s</> sender:
> <i>%s</>' % \
> +               (data['signal'], data['iface'], data['path'],
> data['sender'])
> +
> +class SignalReceiver(Frame):
> +    def __init__(self, parent):
> +        Frame.__init__(self, parent, text="Signals")
> +        self._parent = parent
> +
> +        vbox = Box(self)
> +        vbox.show()
> +        self.content = vbox
> +
> +        self.siglist = Genlist(self, homogeneous=True,
> mode=elm.ELM_LIST_SCROLL)
> +        self.siglist.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
> +        self.siglist.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
> +        self.siglist.callback_clicked_double_add(self.signal_clicked_cb)
> +        self.siglist.show()
> +        vbox.pack_end(self.siglist)
> +        self.itc = SignalItemClass()
> +
> +        hbox = Box(self, horizontal=True)
> +        hbox.size_hint_align = 0.0, 0.5
> +        hbox.show()
> +        vbox.pack_end(hbox)
> +
> +        bt = Button(self, text='Clear')
> +        bt.callback_clicked_add(lambda b: self.siglist.clear())
> +        hbox.pack_end(bt)
> +        bt.show()
> +
> +        def scroll_on_signal_clicked_cb(chk):
> +            options.scroll_on_signal = chk.state
> +        ck = Check(self, text='Scroll on signal')
> +        ck.state = options.scroll_on_signal
> +        ck.callback_changed_add(scroll_on_signal_clicked_cb)
> +        hbox.pack_end(ck)
> +        ck.show()
> +
> +        for b in session_bus, system_bus:
> +            b.add_signal_receiver(self.signal_cb, sender_keyword='sender',
> +                destination_keyword='dest', interface_keyword='iface',
> +                member_keyword='signal',path_keyword='path')
> +
> +    def signal_cb(self, *args, **kargs):
> +        # print('*** SIGNAL RECEIVED ***')
> +        # print(json.dumps(args, indent=2))
> +        # print(json.dumps(kargs, indent=2))
> +
> +        kargs['args'] = args
> +        item = self.siglist.item_append(self.itc, kargs)
> +        if options.scroll_on_signal is True:
> +            item.bring_in()
> +
> +        if self.siglist.items_count > 200:
> +            self.siglist.first_item.delete()
> +
> +    def signal_clicked_cb(self, gl, item):
> +        pp = Popup(self._parent)
> +        pp.part_text_set('title,text', 'Signal content')
> +
> +        en = Entry(self, text = prettify_if_needed(item.data['args']))
> +        en.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
> +        en.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
> +        en.size_hint_min = 800, 800 # TODO: this should be respected :/
> +        en.editable = False
> +        en.scrollable = True
> +        pp.content = en
> +
> +        bt = Button(pp, text="Close")
> +        bt.callback_clicked_add(lambda b: pp.delete())
> +        pp.part_content_set('button2', bt)
> +
> +        def prettify_clicked_cb(chk):
> +            options.pretty_output = chk.state
> +            en.text = prettify_if_needed(item.data['args'])
> +        ck = Check(pp, text="Prettify")
> +        ck.state = options.pretty_output
> +        ck.callback_changed_add(prettify_clicked_cb)
> +        pp.part_content_set('button1', ck)
> +
> +        pp.show()
> +
> +
>  ### The main window
> -class MyWin(StandardWindow):
> +class EspionageWin(StandardWindow):
>      def __init__(self):
>          StandardWindow.__init__(self, "espionage", "EFL DBus Spy -
> Espionage")
>
> @@ -602,19 +693,29 @@ class MyWin(StandardWindow):
>          tb.pack(chk, 2, 1, 1, 1)
>          chk.show()
>
> -        panes = Panes(self)
> -        panes.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
> -        panes.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
> -        panes.content_left_size = 1.0 / 3
> -        box.pack_end(panes)
> -        self.panes = panes
> -        panes.show()
> +        vpanes = Panes(self, horizontal=True)
> +        vpanes.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
> +        vpanes.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
> +        vpanes.content_left_size = 2.0 / 3
> +        box.pack_end(vpanes)
> +        vpanes.show()
> +
> +        hpanes = Panes(self)
> +        hpanes.size_hint_weight = EVAS_HINT_EXPAND, EVAS_HINT_EXPAND
> +        hpanes.size_hint_align = EVAS_HINT_FILL, EVAS_HINT_FILL
> +        hpanes.content_left_size = 1.0 / 3
> +        vpanes.part_content_set("left", hpanes)
> +        self.panes = hpanes
> +        hpanes.show()
>
>          self.names_list = NamesList(self)
> -        panes.part_content_set("left", self.names_list)
> +        hpanes.part_content_set("left", self.names_list)
>
>          self.detail_list = DetailList(self)
> -        panes.part_content_set("right", self.detail_list)
> +        hpanes.part_content_set("right", self.detail_list)
> +
> +        self.sigs_receiver = SignalReceiver(self)
> +        vpanes.part_content_set("right", self.sigs_receiver)
>
>          self.resize(700, 500)
>          self.show()
> @@ -639,7 +740,7 @@ class MyWin(StandardWindow):
>
>  def main():
>      elm.init()
> -    win = MyWin()
> +    win = EspionageWin()
>      elm.run()
>      elm.shutdown()
>      return 0
>
> --
>
>
>

-- 
Gustavo Sverzut Barbieri
--------------------------------------
Mobile: +55 (19) 9225-2202
Contact: http://www.gustavobarbieri.com.br/contact
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to