#!/usr/bin/env python
# -*- coding: utf-8 -*- 

#====================================
# qdocpy.py - muestra información de los módulos de python
#-------------------------------------------------------------------------------------
# FJA - fja@neocipres.com      Noviembre de 2014
#====================================

import sys
from apihelper1 import help
from PyQt4 import QtCore, QtGui
from ui_qdocpy import Ui_MainWindow

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        self.modulo = ""
        self.compTexto = 0
        self.listaM = []
        self.listaItem = QtGui.QListWidget(self.ui.lVModulos)
        
        QtCore.QObject.connect(self.ui.pBSalir, QtCore.SIGNAL("clicked()"), self, 
                                                QtCore.SLOT("close()"))
        QtCore.QObject.connect(self.ui.pBaceptar, QtCore.SIGNAL("clicked()"),
                                                self.pBaceptar_clicked)
        QtCore.QObject.connect(self.ui.cBCollapse, QtCore.SIGNAL("clicked()"),
                                                self.cBCollapse_clicked) 
        QtCore.QObject.connect(self.ui.lEModulo, QtCore.SIGNAL("returnPressed()"), 
                                                self.lEModulo_returnPressed)
        self.listaItem.clicked.connect(self.ItemClicked)
      
    @QtCore.pyqtSlot()
    def on_actionSalir_triggered(self):
        self.close()
        
    @QtCore.pyqtSlot()
    def on_actionAcerca_de_Qt_triggered(self):
        QtGui.QMessageBox.aboutQt(self, "Acerca de Qt")
    
    @QtCore.pyqtSlot()
    def on_actionAcerca_de_triggered(self):
        nomAp = QtCore.QString(self.tr("<p><b><BIG><BIG>qdocpy</BIG></BIG></b></p>"))
        desAp1 =QtCore.QString(self.tr(u"<p><b>Información sobre los módulos de python</b></p>"))
        desAp2 = QtCore.QString(self.tr("<p></p>"))
        autor = QtCore.QString(self.tr("<p><b>FJA</b> - fja@neocipres.com</p>"))
        version = QtCore.QString(self.tr(u"<p>Versión: 0.9.7</p>"))
        modificado = QtCore.QString(self.tr("<p>Noviembre de 2014  -  Modificado el 2 de Dic/2014</p>"))   
        licencia = QtCore.QString(self.tr(u"<p>Distribuido de acuerdo a los términos de la <a href= http://www.viti.es/gnu/licenses/gpl.html>licencia GNU/GPL</a></p>"))
        gnu = QtCore.QString(self.tr("<p><a href= http://www.gnu.org/home.es.html>Proyecto GNU</a></p>"))
        #otro =QtCore.QString(self.tr("<p><em> </em> </p>"))
        rep = lambda p: p[0]*p[1]
        separador = QtCore.QString(self.tr("<p><b>"+rep((80,"-"))+"</b></p>"))
        QtGui.QMessageBox.about(self ," Acerca de ...", nomAp+desAp1+desAp2+separador+autor+modificado+separador+version+licencia+gnu)
        
    @QtCore.pyqtSlot(QtGui.QListWidgetItem)
    def ItemClicked(self, index):
        self.modulo = index.data().toString()
        self.imprimeHoja()
        
    def imprimeHoja(self):
        self.ui.tEHoja.clear()
        self.ui.tEHoja.append(u"=============== Módulo: " + str(self.modulo)+" ===============\n\n")
        try:
            m = __import__( str(self.modulo) )
            texto = help(m, collapse = self.compTexto, imprime = 0) 
            for bloque in texto:
                self.ui.tEHoja.append(bloque) 
        except:
            newItem = 0
            self.ui.tEHoja.append("\n\t Error: "+ str( sys.exc_info() [0] )+ "\n")
        else:
            newItem = 1
            self.statusBar().showMessage(u" > Información sobre el módulo: "+str(self.modulo), 5000)
       
        return newItem
            
    def pBaceptar_clicked(self):
        self.modulo = self.ui.lEModulo.text()
        nuevo = self.imprimeHoja()
        estaM = 0
        if nuevo:
            for elemento in self.listaM:
                if elemento == self.modulo:
                    estaM = 1
                    break
        if not estaM and nuevo:
            self.listaM.append(self.modulo)
            self.listaItem.addItem(self.modulo)

    def cBCollapse_clicked(self):
        if self.ui.cBCollapse.isChecked():
            self.compTexto = 1
        else:
            self.compTexto = 0
        
    def lEModulo_returnPressed(self):
        self.pBaceptar_clicked()    
    
    def closeEvent(self, e):
        try:
            self.listaM.sort()
            dirH = QtCore.QDir.homePath()
            # lo mismo con: os.path.expanduser('~'), expandirá el nombre del directorio HOME del usuario actual. 
            f = open(str(dirH)+'/.modpy', 'w')
            for linea in self.listaM:
                f.write(str(linea)+"\n")
            f.close()
        except IOError, detalle:
            self.statusBar().showMessage(u" Error: " + str(detalle))
        
        else:
            e.accept()
       
    def showEvent(self, e):
        noI = e.spontaneous()
        if not noI:
            try:
                dirH = QtCore.QDir.homePath()
                f = open(str(dirH)+'/.modpy')
                linea = ""
                for linea in f.readlines():
                    if linea:
                        linea = linea.rstrip('\n')
                        self.listaM.append(linea)
                        self.listaItem.addItem(linea)
                f.close()
                    
            except IOError, detalle:
                self.statusBar().showMessage(u" Error: " + str(detalle), 5000)
            except:
                self.statusBar().show.Message(u"\n\t Error: "+ str( sys.exc_info() [0] )+ "\n", 5000)
                
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    ficha = MainWindow()
    ficha.show()
    sys.exit(app.exec_())