From 5f5e931428df14ddb2021c67fbb4c6e996be5943 Mon Sep 17 00:00:00 2001 From: Ignacio Rodríguez Date: Wed, 15 May 2013 23:33:32 +0000 Subject: Ahora autocompleta todo. Signed-off-by: Ignacio Rodríguez --- diff --git a/WorkPanel.py b/WorkPanel.py index 9179230..0be1117 100644 --- a/WorkPanel.py +++ b/WorkPanel.py @@ -265,10 +265,29 @@ class AutoCompletado(GObject.Object, GtkSource.CompletionProvider): self.modulo = None self.nombre_modulo = None + self.ultimo_seleccionado = None + self.mods_gi = self.__get_modulos_gi() self.priority = 1 self.buffer = buffer - + + def do_activate_proposal(self, dato1, dato2): + """ + Cuando se selecciona y clickea + una posible solución + """ + + nombre = dato1.get_text() + if not self.modulo: + return + try: + self.ultimo_seleccionado = self.modulo.__getattribute__(nombre) + except: + try: + self.ultimo_seleccionado = self.modulo.__getattr__(nombre) + except: + print "Error al obtener el objeto clickeado." + def do_get_name(self): """ Devuelve el nombre del último @@ -286,7 +305,7 @@ class AutoCompletado(GObject.Object, GtkSource.CompletionProvider): """ self.modulo = None - + tema = Gtk.IconTheme.get_default() icono = tema.load_icon(Gtk.STOCK_DIALOG_INFO, 16, 0) @@ -294,45 +313,52 @@ class AutoCompletado(GObject.Object, GtkSource.CompletionProvider): ingresado = self.buffer.get_iter_at_mark(self.buffer.get_insert()) texto = self.buffer.get_text(inicio, ingresado, True) lineas = texto.splitlines() - + + tipo = str(type(self.ultimo_seleccionado)) + + if "class" in tipo or "module" in tipo or "function" in tipo: + self.resultados = [] + for Resultado in dir(self.ultimo_seleccionado): + self.resultados.append( + GtkSource.CompletionItem.new( + Resultado, + Resultado, + icono, + "Descripción - PygiHack")) + context.add_proposals(self, self.resultados, True) + return + if lineas: linea = lineas[-1] - else: linea = '' if ' ' in linea: modulo = linea.split(' ')[-1] - else: modulo = linea - if modulo and modulo[-1] == '.': - mod = '' + for x in modulo[:-1]: mod += x - + modulo = mod + self.nombre_modulo = modulo - try: + if modulo in self.mods_gi: mod = __import__("gi.repository.%s" % modulo) self.modulo = mod.importer.modules.get(modulo) - + try: + if modulo != 'gtk' and modulo != 'gobject': + self.modulo = __import__(modulo) except: - try: - if modulo != 'gtk' and modulo != 'gobject': - self.modulo = __import__(modulo) - - except: - pass - + pass + self.resultados = [] - + if self.modulo: - for Resultado in dir(self.modulo): - self.resultados.append( GtkSource.CompletionItem.new( Resultado, @@ -341,3 +367,19 @@ class AutoCompletado(GObject.Object, GtkSource.CompletionProvider): "Descripción - PygiHack")) context.add_proposals(self, self.resultados, True) + + def __get_modulos_gi(self): + """ + Devuelve una lista de modulos + de Gobject Introspection [Gi] + """ + + path_gi = "/usr/lib/girepository-1.0" + modulos_nuevos = [] + if os.path.exists(path_gi): + modulos = os.listdir(path_gi) + for modulo in modulos: + modulo = modulo.replace(".typelib", "") + modulo = modulo.rpartition("-") + modulos_nuevos.append(modulo[0]) + return modulos_nuevos \ No newline at end of file -- cgit v0.9.1