예제 #1
0
    def init_ctrls(self, campos, padre=None):
        """ Pinta los campos indicados dentro de la ventana. Formato "campos":
        #-    INSERTAR PANELES:
            ['PANEL',nombre, xini, yini, tamanox, tamanoy,color, CAMPOS_HIJOS]
        #- INSERTAR ENTRADAS:
            ['ENTRY', alto_control, salto_a_-1, style_etiq, style_txt, LS_ENT]
               LS_ENT = [Nombre,etiq,xini,yini,formato,max,ancho,edi,
                               fcal,sobre,ade,dlsel,tip,cpan,style]
        """
        #ultx,ulty = 0,0     # Ultimas posiciones X e Y de un campo
        #sumax,sumay = 0,0   # Distancia a sumar para poner la proxima entrada si -1
        if padre==None: padre= self
        self._ctord = []

        for lnc in campos:
            tipo = lnc[0]

            #- INSERTAR PANELES
            # ['PANEL',nombre, xini, yini, tamanox, tamanoy,color,lista_hijos]
            if tipo=='PANEL':
                self.__Pon_Panel(padre, lnc)


            #- INSERTAR CAMPOS DE TEXTO
            # ['ENTRY', alto_control, salto_a_-1, style_etiq, style_txt, LS_ENT]
            #   LS_ENT = [Nombre,etiq,xini,yini,formato,max,ancho,edi,
            #                   fcal,sobre,ade,dlsel,tip,cpan,style]
            elif tipo=='ENTRYS':
                self.__Pon_Entradas(padre,lnc)


            #- INSERTAR LISTAS
            # ['LIST',nombre, xini, yini, tamanox, tamanoy, cols,
            #        acc_click, acc_dclick]
            elif tipo=='LIST':
                self.__Pon_Lista(padre,lnc)

            #- INSERTAR GRIDS
            elif tipo=='GRID':
                self.__Pon_Grid(padre, lnc)

            #- INSERTAR BOTONES
            elif tipo=='BUTTONS':
                self.__Pon_Botones(padre, lnc)
            #- INSERTAR CHECKBUTTON
            elif tipo=='CHECK':
                self.__Pon_Checks(padre,lnc)

            else:
                debug("Tipo " + str(tipo) + " no definido.")

        self.Refresh()
예제 #2
0
    def __Pon_Panel(self,padre,datos):
        """ Pinta en la Ventana el Panel indicado
        #- datos = datos_panel:
        ['PANEL',Id, xini, yini, tamanox, tamanoy, style, borde,
        Titulo(Si Pestaña)/AccionCambio(Si tabbox), CAMPOS_HIJOS]
        """
        tipo = datos[0]
        if tipo!='PANEL' and tipo!='TABBOX':
            return -1

        nombre = datos[1]
        xini,yini = int(datos[2]), int(datos[3])
        tamx,tamy = int(datos[4]), int(datos[5])
        estilo = datos[6]
        #borde = datos[7]
        #acciontb = datos[8]
        hijos = datos[-1]

        posic = wx.Point(xini,yini)
        if tamx==-1: tamx = padre.GetSize()[0]
        if tamy==-1:
            tamy = padre.GetSize()[1]
            if padre==self: tamy = tamy - 30    # Quitamos el tamaño del titulo

        tam = wx.Size(tamx, tamy)
        #-
        elem = wx.Panel(name=nombre, parent=padre, pos=posic, size=tam, style=wx.TAB_TRAVERSAL)
        #-
        # Si hay color de fondo, lo ponemos
        if estilo!='':
            stl = estilo.split('/')
            for ln in stl:
                if ln[:2]=='B-':
                    rgb = ln[2:].split(':')
                    elem.SetBackgroundColour(wx.Colour(int(rgb[0]), int(rgb[1]), int(rgb[2])))
                else:
                    pass    # Tener en cuenta otros tipos de estilo ???

        #- Ponemos en el diccionario de campos
        if not nombre in self._ct:
            self._ct[nombre]=elem
        else:
            debug('El control '+nombre+' se encuentra repetido.')
        #
        if hijos!=[]:
            self.init_ctrls(hijos,elem)
예제 #3
0
    def __Pon_NoteBook(self, padre, datos):
        """ Pinta en la Ventana un Panel para poner Pestaña (Tabbox)
        ['TABBOX',Id, xini, yini, tamanox,tamanoy, style, borde
        Titulo(Si pestaña)/Accion al cambio(Si Tabbox), CAMPOS_HIJOS]
        """
        tipo = datos[0]
        if tipo != 'TABBOX':
            return -1

        nombre = datos[1]
        xini, yini = int(datos[2]), int(datos[3])
        tamx, tamy = int(datos[4]), int(datos[5])
        #estilo = datos[6]
        #borde = datos[7]
        #acciontb = datos[8]
        hijos = datos[-1]

        posic = wx.Point(xini, yini)
        if tamx == -1: tamx = padre.GetSize()[0]
        if tamy == -1:
            tamy = padre.GetSize()[1] - self._statusbar.GetSize()[1]
            if padre == self: tamy = tamy - 30  # Quitamos el tamaño del titulo

        tam = wx.Size(tamx, tamy)
        #
        elem = wx.Notebook(name=nombre, parent=padre, pos=posic, size=tam)
        #
        if hijos != []:
            for hijo in hijos:
                p = self.__Pon_Panel(elem, hijo)
                elem.AddPage(p, hijo[8])

        #- Ponemos en el diccionario de campos
        if not nombre in self._ct:
            self._ct[nombre] = elem
        else:
            debug('El control ' + nombre + ' se encuentra repetido.')

        return elem
예제 #4
0
        tab=-1
        if actual._name in lsct:
            tab = lsct.index(actual._name)
        if tab>0:
            # Si tipo==Entry: SetFocus, Si tipo==Grid: SetCellCursor
            self._ct[lsct[tab-1]].SetFocus()


#############################################################
#
#
#
#
##############################################################
if __name__ == "__main__":
    debug('main')###
    ls_campos=[]
    #
    p1 = ['PANEL','P1',0,0,-1,-1,'B-236:44:26/RF','','',[]]
    hijosp1=[]
    hijosp1.append(['E1','Código',10,15,6,'%',7,'','','','','ar_ls','codigo del cliente','clientes',''])
    hijosp1.append(['E2','Nombre',-1,15,6,'l',10,'','','','','','','',''])
    p1[-1].append(['ENTRYS','EX',22,50,'F-255:255:0','B-0:0:0/F-255:255:255',hijosp1])


    # PANELES: ['PANEL',nombre, xini, yini, tamanox, tamanoy,color,lista_hijos]
    ls_campos.append(p1)

    app = wx.App(False)
    ventana = Dialogo(None)
    ventana.init_ctrls(ls_campos)
예제 #5
0
        if self.ShowModal() == wx.ID_OK:
            res = self._ct['LS'].GetValue()
        else:
            res = None

        self.Close()
        self.Destroy()
        return res


#############################################
#
#
#############################################
if __name__ == "__main__":
    app = wx.App(False)
    #frame = wx.Frame(None,title="Prueba de la Clase Grid")
    #frame.SetSize((800,600))
    #frame.CentreOnScreen()

    fichero = 'clientes'
    preguntas = []
    preguntas.append(['Nombre del Cliente', '=', '', 'CL_DENO'])
    preguntas.append(['Poblacion', '=', '', 'CL_POB'])

    dl = dl_select(None, fichero, preguntas)
    res = dl.res()
    debug('res Main', res)

    app.MainLoop()
예제 #6
0
    def Ejecuta_Accion(self, accion, argumentos=''):
        if accion == 'a_salir':
            if self.Modifica == 1:
                dlg = Men(
                    'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?',
                    'sn',
                    img='q')
                if dlg == 'n': return
            self.Modifica = 0
            self.Close()
            self.Destroy()
            #
        elif accion == 'a_carga_wins':
            if self.Modifica == 1:
                dlg = Men(
                    'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?',
                    'sn',
                    img='q')
                if dlg == 'n': return
            self.Modifica = 0
            """ Leer la lista de ventanas actuales """
            lis = []
            wins = db.btopen(self.fileName)
            for nm in wins.keys():
                datos = pickle.loads(wins[nm])
                lis.append([nm, datos[0]])  # Ventana, Descripcion
            wins.close()
            #
            self._ct['G1'].SetValue([])
            self.arbol.DeleteAllItems()

            self._ct['L1'].SetValue(lis)
            #
        elif accion == 'a_sele_win':
            #
            if self.Modifica == 1:
                dlg = Men(
                    'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?',
                    'sn',
                    img='q')
                if dlg == 'n': return
            self.Modifica = 0
            #
            sele = self._ct['L1'].GetValue()
            if sele == None:
                Men('No hay seleccionada ventana')
                return -1
            #
            wins = db.btopen(self.fileName)
            datos = pickle.loads(wins[sele])
            wins.close()
            #
            self.Datos_a_Arbol(datos)
            #
            self.wsele = sele
            self.titu.SetLabel(sele.upper())
            self.arbol.SelectItem(self.arbol.RootItem)

        elif accion == 'a_nuevo':
            if self.Modifica == 1:
                dlg = Men(
                    'Hay cambios en la ventana y no ha guardado.\n¿Desea Continuar?',
                    'sn',
                    img='q')
                if dlg == 'n': return
            self.Modifica = 0
            #
            nombre = Entra_dlg(self, '', 'Nombre de la ventana nueva:')
            if nombre == -1: return

            propgen = []  # Propiedades Generales de la ventana
            propgen.append('Ventana ' + nombre)  # Descripción
            propgen.append('')  # Nombre Ventana Padre
            propgen.append('')  # Icono Ventana
            propgen.append('')  # Titulo de la ventana
            propgen.append('800')  # Tamaño X
            propgen.append('600')  # Tamaño Y
            propgen.append('c')  # Pos X inicial (c=Centro)
            propgen.append('c')  # Pos Y inicial (c=Centro)
            propgen.append('')  # Nombre de la tabla Asociada
            propgen.append('')  # Campo que contiene Clave Tabla
            propgen.append('')  # Acción Cargar Ventana
            propgen.append('')  # Acción Despues de Leer
            propgen.append('')  # Boton a Ejecutar con FIN
            data = {}
            data[self.NOMBRE_ROOT] = propgen
            self.arbol.AddRoot(self.NOMBRE_ROOT)
            #
            dicc = db.btopen(self.fileName)
            datoswin = copy.deepcopy(propgen)
            datoswin.append([])  # Ningun elemento Hijo al empezar
            dicc[nombre] = pickle.dumps(datoswin)
            dicc.close()
            #
            self.Ejecuta_Accion('a_carga_wins')
            self._ct['L1'].Sel_Item(nombre)

        elif accion == 'a_borra':
            """ Borrar una tabla """
            sele = self._ct['L1'].GetValue()
            if sele == None:
                Men('Debe seleccionar la ventana a borrar')
                return -1
            dlg = Men('¿Está seguro de borrar la ventana ' + sele + '?',
                      'sn',
                      img='q')
            if dlg == 'n': return -1
            dicc = db.btopen(self.fileName)
            del dicc[sele]
            dicc.close()
            Men('Ventana Borrada')
            self.Ejecuta_Accion('a_carga_wins')

        elif accion == 'a_graba_cambio':
            arbol = self.arbol
            data = self.data
            grid = self._ct['G1']
            fila = grid.GetNRow() - 1
            nodo = arbol.GetSelection()
            if nodo.IsOk():
                idnodo = arbol.GetItemText(nodo)
                self.data[idnodo][fila] = grid.GetValue(fila, 1)
                self.Modifica = 1

        elif accion == 'a_graba':
            """ Grabar los datos de la ventana actual """

            win = self._ct['L1'].GetValue()
            if win == None:
                Men('No hay seleccionada ventana')
                return -1
            datos = self.Arbol_a_Datos()
            #
            dicc = db.btopen(self.fileName)
            dicc[win] = pickle.dumps(datos)
            dicc.close()
            #
            self.Modifica = 0
            Men('Ventana Guardada', img='i')
            #self.Ejecuta_Accion('a_carga_wins')
        elif accion == 'a_ejecuta':
            sele = self._ct['L1'].GetValue()
            if sele == None:
                Men('Debe seleccionar la ventana a ejecutar')
                return -1
            wins = db.btopen(self.fileName)
            datos = pickle.loads(wins[sele])
            wins.close()

            codigo = "#!/usr/bin/env python    " + "\n"
            codigo += "# -*- coding: iso-8859-1 -*-" + "\n"
            codigo += "import wx" + "\n"
            codigo += "import OC" + "\n"
            codigo += "# from OC.ui.Funciones import *" + "\n"

            codigo += "class " + sele + "(OC.ui.Ventana):" + "\n"
            codigo += "    def __init__(self):" + "\n"
            codigo += "        OC.ui.Ventana.__init__(self, None,'" + datos[
                3] + "',tam=(" + datos[4] + "," + datos[5] + "))" + "\n"
            ##
            codigo += "        ls_campos = " + str(datos[-1]) + "\n"
            #
            codigo += "        self.init_ctrls(ls_campos)" + "\n"

            codigo += "win = " + sele + "()"
            debug(codigo)
            exec(codigo)
            return 0

        elif accion == 'a_detalle_entradas':
            import dl_entrys
            dlg = dl_entrys.Detalle_Entrys(self)
            #dlg.ShowModal()
            print dlg.GetValue()
            dlg.Destroy()
            return 0

        else:
            return -999