public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: sci-electronics/gresistor/, sci-electronics/gresistor/files/
@ 2016-05-15 10:47 David Seifert
  0 siblings, 0 replies; only message in thread
From: David Seifert @ 2016-05-15 10:47 UTC (permalink / raw
  To: gentoo-commits

commit:     56dfa7b9835766faf6f12ce8e4447343b91cfef9
Author:     David Seifert <soap <AT> gentoo <DOT> org>
AuthorDate: Sun May 15 10:46:32 2016 +0000
Commit:     David Seifert <soap <AT> gentoo <DOT> org>
CommitDate: Sun May 15 10:46:53 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=56dfa7b9

sci-electronics/gresistor: Version bump

* EAPI=6

Package-Manager: portage-2.2.28

 sci-electronics/gresistor/Manifest                |   1 +
 sci-electronics/gresistor/files/SimpleGladeApp.py | 341 ++++++++++++++++++++++
 sci-electronics/gresistor/gresistor-0.0.2.ebuild  |  36 +++
 3 files changed, 378 insertions(+)

diff --git a/sci-electronics/gresistor/Manifest b/sci-electronics/gresistor/Manifest
index f3b19b7..6f0e128 100644
--- a/sci-electronics/gresistor/Manifest
+++ b/sci-electronics/gresistor/Manifest
@@ -1 +1,2 @@
 DIST gresistor-0.0.1.tar.gz 25038 SHA256 c343a0cb05422d216eca7941ac11987165630f21516a430e679ac41459c3c4c2 SHA512 9d0165894e86ca4cdd63585a7e370045abdadef5089a4fbf7412ac31062ce4e4fdec934d3302f17a76ed1dc449bd5521682bc57d817a3fea88ac8afde8113ca2 WHIRLPOOL 8b4bca5298ff86aa0c938b0b0fd29963f481ffe10201a29e280020f0a7eacf27b2e3fdd03c813c620b82d4095199f17e04feb44c94cc8b14379a9be72742a21e
+DIST gresistor-0.0.2.tar.gz 10240 SHA256 6e9032d501b53adddc869eb32478a3e2052de1a90ca27409cd9c1102da4e5e96 SHA512 263483f5712a48f2095bddf620520233e2843c64c1a03a7924cecb856de8fdcac601100cda4dc9f1943ff7753ffaaab04e25032416dd9438fe3f17d7d6681072 WHIRLPOOL 680ea863910a0b0771b36ba84e694ded608badc445346cd292256b2f8d6d1cdd1e71a62d4000d05d9902963443b43dd76f83a0c0a71c6d01f3287cfea7baf0ae

diff --git a/sci-electronics/gresistor/files/SimpleGladeApp.py b/sci-electronics/gresistor/files/SimpleGladeApp.py
new file mode 100644
index 0000000..90c598c
--- /dev/null
+++ b/sci-electronics/gresistor/files/SimpleGladeApp.py
@@ -0,0 +1,341 @@
+"""
+ SimpleGladeApp.py
+ Module that provides an object oriented abstraction to pygtk and libglade.
+ Copyright (C) 2004 Sandino Flores Moreno
+"""
+
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+
+import os
+import sys
+import re
+
+import tokenize
+import gtk
+import gtk.glade
+import weakref
+import inspect
+
+__version__ = "1.0"
+__author__ = 'Sandino "tigrux" Flores-Moreno'
+
+def bindtextdomain(app_name, locale_dir=None):
+    """    
+    Bind the domain represented by app_name to the locale directory locale_dir.
+    It has the effect of loading translations, enabling applications for different
+    languages.
+
+    app_name:
+        a domain to look for translations, tipically the name of an application.
+
+    locale_dir:
+        a directory with locales like locale_dir/lang_isocode/LC_MESSAGES/app_name.mo
+        If omitted or None, then the current binding for app_name is used.
+    """    
+    try:
+        import locale
+        import gettext
+        locale.setlocale(locale.LC_ALL, "")
+        gtk.glade.bindtextdomain(app_name, locale_dir)
+        gettext.install(app_name, locale_dir, unicode=1)
+    except (IOError,locale.Error), e:
+        print "Warning", app_name, e
+        __builtins__.__dict__["_"] = lambda x : x
+
+
+class SimpleGladeApp:
+
+    def __init__(self, path, root=None, domain=None, **kwargs):
+        """
+        Load a glade file specified by glade_filename, using root as
+        root widget and domain as the domain for translations.
+
+        If it receives extra named arguments (argname=value), then they are used
+        as attributes of the instance.
+
+        path:
+            path to a glade filename.
+            If glade_filename cannot be found, then it will be searched in the
+            same directory of the program (sys.argv[0])
+
+        root:
+            the name of the widget that is the root of the user interface,
+            usually a window or dialog (a top level widget).
+            If None or ommited, the full user interface is loaded.
+
+        domain:
+            A domain to use for loading translations.
+            If None or ommited, no translation is loaded.
+
+        **kwargs:
+            a dictionary representing the named extra arguments.
+            It is useful to set attributes of new instances, for example:
+                glade_app = SimpleGladeApp("ui.glade", foo="some value", bar="another value")
+            sets two attributes (foo and bar) to glade_app.
+        """        
+        if os.path.isfile(path):
+            self.glade_path = path
+        else:
+            glade_dir = os.path.dirname( sys.argv[0] )
+            self.glade_path = os.path.join(glade_dir, path)
+        for key, value in kwargs.items():
+            try:
+                setattr(self, key, weakref.proxy(value) )
+            except TypeError:
+                setattr(self, key, value)
+        self.glade = None
+        self.install_custom_handler(self.custom_handler)
+        self.glade = self.create_glade(self.glade_path, root, domain)
+        if root:
+            self.main_widget = self.get_widget(root)
+        else:
+            self.main_widget = None
+        self.normalize_names()
+        self.add_callbacks(self)
+        self.new()
+
+    def __repr__(self):
+        class_name = self.__class__.__name__
+        if self.main_widget:
+            root = gtk.Widget.get_name(self.main_widget)
+            repr = '%s(path="%s", root="%s")' % (class_name, self.glade_path, root)
+        else:
+            repr = '%s(path="%s")' % (class_name, self.glade_path)
+        return repr
+
+    def new(self):
+        """
+        Method called when the user interface is loaded and ready to be used.
+        At this moment, the widgets are loaded and can be refered as self.widget_name
+        """
+        pass
+
+    def add_callbacks(self, callbacks_proxy):
+        """
+        It uses the methods of callbacks_proxy as callbacks.
+        The callbacks are specified by using:
+            Properties window -> Signals tab
+            in glade-2 (or any other gui designer like gazpacho).
+
+        Methods of classes inheriting from SimpleGladeApp are used as
+        callbacks automatically.
+
+        callbacks_proxy:
+            an instance with methods as code of callbacks.
+            It means it has methods like on_button1_clicked, on_entry1_activate, etc.
+        """        
+        self.glade.signal_autoconnect(callbacks_proxy)
+
+    def normalize_names(self):
+        """
+        It is internally used to normalize the name of the widgets.
+        It means a widget named foo:vbox-dialog in glade
+        is refered self.vbox_dialog in the code.
+
+        It also sets a data "prefixes" with the list of
+        prefixes a widget has for each widget.
+        """
+        for widget in self.get_widgets():
+            widget_name = gtk.Widget.get_name(widget)
+            prefixes_name_l = widget_name.split(":")
+            prefixes = prefixes_name_l[ : -1]
+            widget_api_name = prefixes_name_l[-1]
+            widget_api_name = "_".join( re.findall(tokenize.Name, widget_api_name) )
+            gtk.Widget.set_name(widget, widget_api_name)
+            if hasattr(self, widget_api_name):
+                raise AttributeError("instance %s already has an attribute %s" % (self,widget_api_name))
+            else:
+                setattr(self, widget_api_name, widget)
+                if prefixes:
+                    gtk.Widget.set_data(widget, "prefixes", prefixes)
+
+    def add_prefix_actions(self, prefix_actions_proxy):
+        """
+        By using a gui designer (glade-2, gazpacho, etc)
+        widgets can have a prefix in theirs names
+        like foo:entry1 or foo:label3
+        It means entry1 and label3 has a prefix action named foo.
+
+        Then, prefix_actions_proxy must have a method named prefix_foo which
+        is called everytime a widget with prefix foo is found, using the found widget
+        as argument.
+
+        prefix_actions_proxy:
+            An instance with methods as prefix actions.
+            It means it has methods like prefix_foo, prefix_bar, etc.
+        """        
+        prefix_s = "prefix_"
+        prefix_pos = len(prefix_s)
+
+        is_method = lambda t : callable( t[1] )
+        is_prefix_action = lambda t : t[0].startswith(prefix_s)
+        drop_prefix = lambda (k,w): (k[prefix_pos:],w)
+
+        members_t = inspect.getmembers(prefix_actions_proxy)
+        methods_t = filter(is_method, members_t)
+        prefix_actions_t = filter(is_prefix_action, methods_t)
+        prefix_actions_d = dict( map(drop_prefix, prefix_actions_t) )
+
+        for widget in self.get_widgets():
+            prefixes = gtk.Widget.get_data(widget, "prefixes")
+            if prefixes:
+                for prefix in prefixes:
+                    if prefix in prefix_actions_d:
+                        prefix_action = prefix_actions_d[prefix]
+                        prefix_action(widget)
+
+    def custom_handler(self,
+            glade, function_name, widget_name,
+            str1, str2, int1, int2):
+        """
+        Generic handler for creating custom widgets, internally used to
+        enable custom widgets (custom widgets of glade).
+
+        The custom widgets have a creation function specified in design time.
+        Those creation functions are always called with str1,str2,int1,int2 as
+        arguments, that are values specified in design time.
+
+        Methods of classes inheriting from SimpleGladeApp are used as
+        creation functions automatically.
+
+        If a custom widget has create_foo as creation function, then the
+        method named create_foo is called with str1,str2,int1,int2 as arguments.
+        """
+        try:
+            handler = getattr(self, function_name)
+            return handler(str1, str2, int1, int2)
+        except AttributeError:
+            return None
+
+    def gtk_widget_show(self, widget, *args):
+        """
+        Predefined callback.
+        The widget is showed.
+        Equivalent to widget.show()
+        """
+        widget.show()
+
+    def gtk_widget_hide(self, widget, *args):
+        """
+        Predefined callback.
+        The widget is hidden.
+        Equivalent to widget.hide()
+        """
+        widget.hide()
+
+    def gtk_widget_grab_focus(self, widget, *args):
+        """
+        Predefined callback.
+        The widget grabs the focus.
+        Equivalent to widget.grab_focus()
+        """
+        widget.grab_focus()
+
+    def gtk_widget_destroy(self, widget, *args):
+        """
+        Predefined callback.
+        The widget is destroyed.
+        Equivalent to widget.destroy()
+        """
+        widget.destroy()
+
+    def gtk_window_activate_default(self, window, *args):
+        """
+        Predefined callback.
+        The default widget of the window is activated.
+        Equivalent to window.activate_default()
+        """
+        widget.activate_default()
+
+    def gtk_true(self, *args):
+        """
+        Predefined callback.
+        Equivalent to return True in a callback.
+        Useful for stopping propagation of signals.
+        """
+        return True
+
+    def gtk_false(self, *args):
+        """
+        Predefined callback.
+        Equivalent to return False in a callback.
+        """
+        return False
+
+    def gtk_main_quit(self, *args):
+        """
+        Predefined callback.
+        Equivalent to self.quit()
+        """
+        self.quit()
+
+    def main(self):
+        """
+        Starts the main loop of processing events.
+        The default implementation calls gtk.main()
+
+        Useful for applications that needs a non gtk main loop.
+        For example, applications based on gstreamer needs to override
+        this method with gst.main()
+
+        Do not directly call this method in your programs.
+        Use the method run() instead.
+        """
+        gtk.main()
+
+    def quit(self):
+        """
+        Quit processing events.
+        The default implementation calls gtk.main_quit()
+        
+        Useful for applications that needs a non gtk main loop.
+        For example, applications based on gstreamer needs to override
+        this method with gst.main_quit()
+        """
+        gtk.main_quit()
+
+    def run(self):
+        """
+        Starts the main loop of processing events checking for Control-C.
+
+        The default implementation checks wheter a Control-C is pressed,
+        then calls on_keyboard_interrupt().
+
+        Use this method for starting programs.
+        """
+        try:
+            self.main()
+        except KeyboardInterrupt:
+            self.on_keyboard_interrupt()
+
+    def on_keyboard_interrupt(self):
+        """
+        This method is called by the default implementation of run()
+        after a program is finished by pressing Control-C.
+        """
+        pass
+
+    def install_custom_handler(self, custom_handler):
+        gtk.glade.set_custom_handler(custom_handler)
+
+    def create_glade(self, glade_path, root, domain):
+        return gtk.glade.XML(self.glade_path, root, domain)
+
+    def get_widget(self, widget_name):
+        return self.glade.get_widget(widget_name)
+
+    def get_widgets(self):
+        return self.glade.get_widget_prefix("")        

diff --git a/sci-electronics/gresistor/gresistor-0.0.2.ebuild b/sci-electronics/gresistor/gresistor-0.0.2.ebuild
new file mode 100644
index 0000000..b5686b7
--- /dev/null
+++ b/sci-electronics/gresistor/gresistor-0.0.2.ebuild
@@ -0,0 +1,36 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+PYTHON_COMPAT=( python2_7 )
+DISTUTILS_SINGLE_IMPL=1
+
+inherit distutils-r1 eutils
+
+DESCRIPTION="Translate a resistor color codes into a readable value"
+HOMEPAGE="https://sourceforge.net/projects/gresistor/"
+SRC_URI="mirror://sourceforge/gresistor/${P}.tar.gz"
+
+LICENSE="|| ( GPL-3 LGPL-3 )"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+DEPEND="
+	dev-python/pygtk:2[${PYTHON_USEDEP}]
+	x11-libs/gtk+:2
+	gnome-base/libglade:2.0[${PYTHON_USEDEP}]"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+	sed -i -e 's/Version=0.0.2/Version=1.0/g' ${PN}.desktop || die
+	distutils-r1_src_prepare
+}
+
+src_install() {
+	distutils-r1_src_install
+	python_domodule "${FILESDIR}/SimpleGladeApp.py"
+	domenu ${PN}.desktop
+}


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-05-15 10:47 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-15 10:47 [gentoo-commits] repo/gentoo:master commit in: sci-electronics/gresistor/, sci-electronics/gresistor/files/ David Seifert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox