from github n01

# -*- coding: ISO-8859-15 -*-
  #
  # Fichero: avanzado.py
  # Copyright: Junta de Andalucia <devmaster@guadalinex.org>
  # Autor: Maria Dolores Perez Gutierrez y Nestor Chacon Manzano
  # Fecha: lun mar 27 17:01:15 CET 2006
  # Licencia: GPL v.2
  #
  # generated by wxGlade 0.3.5.1 on Tue Nov 22 13:33:24 2005
  #
  # Esta es la interfaz que muestra todos los detalles y que permite asimismo configurarlos
  # Hay secciones que requieren de mayores conocimientos por parte del usuario que si usa el asistente.
   
   
  from watcherMods import *
  import wx
  import wx.grid
  import wx.lib.buttons
   
  # internacionalizacion
  wx.Locale_AddCatalogLookupPathPrefix("/etc/acept/watcherCat/lang")
  locale = wx.Locale(wx.LANGUAGE_DEFAULT)
  a=locale.AddCatalog("acept")
  _=wx.GetTranslation
   
   
  class MyFrame1(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: MyFrame1.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  kwds["pos"]=wx.Point(0,0)
   
  wx.Frame.__init__(self, *args, **kwds)
  # Menu Bar
  self.frame_1_menubar = wx.MenuBar()
  self.SetMenuBar(self.frame_1_menubar)
  self.aplicacion = wx.Menu()
  self.salir = wx.MenuItem(self.aplicacion, 01, _("Salir"), _("Cierra el programa"), wx.ITEM_NORMAL)
  self.aplicacion.AppendItem(self.salir)
  self.frame_1_menubar.Append(self.aplicacion, _("Aplicacion"))
  self.usuarios = wx.Menu()
  self.horarios = wx.MenuItem(self.usuarios, 11, _("Horarios"), _("Configura el uso temporal de los recursos"), wx.ITEM_NORMAL)
  self.usuarios.AppendItem(self.horarios)
  self.contenidos = wx.MenuItem(self.usuarios, 12, _("Contenidos"), _("Configura el filtro de contenidos"), wx.ITEM_NORMAL)
  self.usuarios.AppendItem(self.contenidos)
  self.frame_1_menubar.Append(self.usuarios, _("Usuarios"))
  self.configurar = wx.Menu()
  self.servicios = wx.MenuItem(self.configurar, 21, _("Servicios"), _("Define nuevos servicios"), wx.ITEM_NORMAL)
  self.configurar.AppendItem(self.servicios)
  self.localizacion = wx.MenuItem(self.configurar, 22, _("Listas"), _("Configura diversos aspectos del filtro de contenidos"), wx.ITEM_NORMAL)
  self.configurar.AppendItem(self.localizacion)
  self.expresiones = wx.MenuItem(self.configurar, 23, _("Expresiones"), _("Configura el filtrado por expresiones regulares"), wx.ITEM_NORMAL)
  self.configurar.AppendItem(self.expresiones)
  self.frame_1_menubar.Append(self.configurar, _("Configurar"))
  self.estadisticas = wx.Menu()
  self.generar = wx.MenuItem(self.estadisticas, 31, _("Uso web"), _("Genera las estadisticas de uso"), wx.ITEM_NORMAL)
  self.apli = wx.MenuItem(self.estadisticas, 32, _("Servicios"), _("Genera las estadisticas de uso"), wx.ITEM_NORMAL)
  self.estadisticas.AppendItem(self.generar)
  self.estadisticas.AppendItem(self.apli)
  self.frame_1_menubar.Append(self.estadisticas, _("Estadisticas"))
  self.ayuda = wx.Menu()
  self.sobre = wx.MenuItem(self.ayuda, 42, _("Sobre ACEPT"), _("Datos acerca del programa"), wx.ITEM_NORMAL)
  self.ayuda.AppendItem(self.sobre)
  self.frame_1_menubar.Append(self.ayuda, _("Ayuda"))
  self.padre=self.GetParent()
  # Menu Bar end
  self.frame_1_statusbar = self.CreateStatusBar(1, 0)
  #self.bitmap=wx.StaticBitmap(self,-1,wx.Bitmap("/usr/share/acept/pixmaps/junta+caton.png",wx.BITMAP_TYPE_ANY))
  self.__set_properties()
  self.__do_layout()
   
  #Eventos del menu
  wx.EVT_MENU(self, 01, self.Menu01)
  wx.EVT_MENU(self, 11, self.Menu11)
  wx.EVT_MENU(self, 12, self.Menu12)
  wx.EVT_MENU(self, 21, self.Menu21)
  wx.EVT_MENU(self, 22, self.Menu22)
  wx.EVT_MENU(self, 23, self.Menu23)
  wx.EVT_MENU(self, 31, self.Menu31)
  wx.EVT_MENU(self, 32, self.Menu32)
  wx.EVT_MENU(self, 42, self.Menu42)
  wx.EVT_CLOSE(self,self.Menu01)
  # end wxGlade#
   
  def __set_properties(self):
  # begin wxGlade: MyFrame1.__set_properties
  self.SetTitle(_("Configuracion Avanzada"))
  self.frame_1_statusbar.SetStatusWidths([-1])
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  # statusbar fields
  frame_1_statusbar_fields = [""]
  for i in range(len(frame_1_statusbar_fields)):
  self.frame_1_statusbar.SetStatusText(frame_1_statusbar_fields[i], i)
  #self.SetSize((self.GetSize()[0]+20,self.GetSize()[1]))
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: MyFrame1.__do_layout
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_3 = wx.BoxSizer(wx.VERTICAL)
  sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_3.Add((20,20),1,0,0)
  sizer_4.Add((20,20),1,0,0)
  #sizer_4.Add(self.bitmap, 0, 0, 0)
  sizer_4.Add((20,20),1,0,0)
  sizer_3.Add(sizer_4, 0, wx.EXPAND, 0)
  sizer_3.Add((20,20),1,0,0)
  sizer_2.Add(sizer_3,1,wx.EXPAND,0)
  sizer_1.Add(sizer_2,1,wx.EXPAND,0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  self.Layout()
   
   
  # Segn que item de la barra de menus pulsen, se ejecuta una cosa u otra
   
  def Menu01(self, event):
  from os import system
  self.padre.Show()
  self.Destroy()
   
  def Menu11(self, event):
  if not child.horarios :
  child.horarios=True
  win=MyChild1(self, -1, "")
  win.Show()
   
  def Menu12(self, event):
  if not child.contenidos :
  child.contenidos=True
  win5=MyChild5(self, -1, "")
  win5.Show()
   
  def Menu21(self, event):
  if not child.servicios :
  child.servicios=True
  win2 = MyChild2(self, -1, "")
  win2.Show(True)
   
  def Menu22(self, event):
  if not child.listas :
  child.listas=True
  win3 = MyChild3(self, -1, "")
  win3.Show(True)
   
  def Menu23(self, event):
  if not child.expresiones :
  child.expresiones=True
  win4 = MyChild4(self, -1, "")
  win4.Show(True)
   
  def Menu31(self, event):
  if not child.uso_web :
  child.uso_web=True
  win5=MyChild8(self,-1,"")
  win5.Show(True)
   
  def Menu32(self, event):
  if not child.uso_web :
  child.uso_aplic=True
  win6=MyChild9(self,-1,"")
  win6.Show(True)
   
  def Menu42(self, event):
  msg=" "+_("ACEPT \n Asistente para el Control Electronico Paterno-MaTerno \n Desarrollado por Caton Sistemas Alternativos 2006\nCONSEJERIA DE INNOVACION Y CIENCIA - JUNTA DE ANDALUCIA.")
  dlg = wx.MessageDialog(self, msg,
  _('Sobre ACEPT'), wx.OK | wx.ICON_INFORMATION)
  #wxYES_NO | wxNO_DEFAULT | wxCANCEL | wxICON_INFORMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
   
  # end wxGlade
  # end of class MyFrame1
   
  # Todo lo que concierne a la configuracion de usuarios:
  # servicios permitidos, horarios y prorrogas
  class MyChild1(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: MyChild1.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL
  wx.Frame.__init__(self, *args, **kwds)
  self.notebook_1 = wx.Notebook(self, -1, style=0)
  self.notebook_1_pane_4 = wx.Panel(self.notebook_1, -1)
  self.notebook_1_pane_3 = wx.Panel(self.notebook_1, -1)
  self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1)
  self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1)
  self.combo_box_1 = wx.ComboBox(self, -1, choices=[""], style=wx.CB_DROPDOWN|wx.CB_READONLY)
  self.button_1 = wx.Button(self, -1, _("Aceptar"))
  self.button_2 = wx.Button(self, -1, _("Cancelar"))
  self.label_15 = wx.StaticText(self, -1, _("Usuarios a partir de \nla siguiente UID:"))
  self.text_ctrl_1 = wx.TextCtrl(self, -1, "1001")
  self.rellena_usuarios()
  self.bitmap_button_1_copy = wx.BitmapButton(self, -1, wx.Bitmap("/usr/share/acept/pixmaps/reload.png", wx.BITMAP_TYPE_ANY))
  self.label_2 = wx.StaticText(self.notebook_1_pane_1, -1, _("Dias"))
  self.label_3 = wx.StaticText(self.notebook_1_pane_1, -1, _("Permitir ?"))
  self.label_40 = wx.StaticText(self.notebook_1_pane_1, -1, _("Intervalo"))
  self.static_line_1 = wx.StaticLine(self.notebook_1_pane_1, -1)
  self.label_4 = wx.StaticText(self.notebook_1_pane_1, -1, _("Lunes"))
  self.checkbox_1 = wx.CheckBox(self.notebook_1_pane_1, -1, "")
  self.label_55 = wx.StaticText(self.notebook_1_pane_1, -1, _("de "))
  self.spin_ctrl_1 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_6 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_2 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_7 = wx.StaticText(self.notebook_1_pane_1, -1, _(" a "))
  self.spin_ctrl_3 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_8 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_4 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_4_copy_1 = wx.StaticText(self.notebook_1_pane_1, -1, _("Martes"))
  self.checkbox_1_copy = wx.CheckBox(self.notebook_1_pane_1, -1, "")
  self.label_5_copy = wx.StaticText(self.notebook_1_pane_1, -1, _("de "))
  self.spin_ctrl_1_copy = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_6_copy = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_2_copy = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_7_copy = wx.StaticText(self.notebook_1_pane_1, -1, _(" a "))
  self.spin_ctrl_3_copy = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_8_copy = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_4_copy = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_4_copy_2 = wx.StaticText(self.notebook_1_pane_1, -1, _("Miercoles"))
  self.checkbox_1_copy_1 = wx.CheckBox(self.notebook_1_pane_1, -1, "")
  self.label_5_copy_1 = wx.StaticText(self.notebook_1_pane_1, -1, _("de "))
  self.spin_ctrl_1_copy_1 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_6_copy_1 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_2_copy_1 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_7_copy_1 = wx.StaticText(self.notebook_1_pane_1, -1, _(" a "))
  self.spin_ctrl_3_copy_1 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_8_copy_1 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_4_copy_1 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_4_copy_3 = wx.StaticText(self.notebook_1_pane_1, -1, _("Jueves"))
  self.checkbox_1_copy_2 = wx.CheckBox(self.notebook_1_pane_1, -1, "")
  self.label_5_copy_2 = wx.StaticText(self.notebook_1_pane_1, -1, _("de "))
  self.spin_ctrl_1_copy_2 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_6_copy_2 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_2_copy_2 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_7_copy_2 = wx.StaticText(self.notebook_1_pane_1, -1, _(" a "))
  self.spin_ctrl_3_copy_2 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_8_copy_2 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_4_copy_2 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_4_copy_4 = wx.StaticText(self.notebook_1_pane_1, -1, _("Viernes"))
  self.checkbox_1_copy_3 = wx.CheckBox(self.notebook_1_pane_1, -1, "")
  self.label_5_copy_3 = wx.StaticText(self.notebook_1_pane_1, -1, _("de "))
  self.spin_ctrl_1_copy_3 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_6_copy_3 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_2_copy_3 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_7_copy_3 = wx.StaticText(self.notebook_1_pane_1, -1, _(" a "))
  self.spin_ctrl_3_copy_3 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_8_copy_3 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_4_copy_3 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_4_copy_5 = wx.StaticText(self.notebook_1_pane_1, -1, _("Sabado"))
  self.checkbox_1_copy_4 = wx.CheckBox(self.notebook_1_pane_1, -1, "")
  self.label_5_copy_4 = wx.StaticText(self.notebook_1_pane_1, -1, _("de "))
  self.spin_ctrl_1_copy_4 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_6_copy_4 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_2_copy_4 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_7_copy_4 = wx.StaticText(self.notebook_1_pane_1, -1, _(" a "))
  self.spin_ctrl_3_copy_4 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_8_copy_4 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_4_copy_4 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_4_copy_6 = wx.StaticText(self.notebook_1_pane_1, -1, _("Domingo"))
  self.checkbox_1_copy_5 = wx.CheckBox(self.notebook_1_pane_1, -1, "")
  self.label_5_copy_5 = wx.StaticText(self.notebook_1_pane_1, -1, _("de "))
  self.spin_ctrl_1_copy_5 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_6_copy_5 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_2_copy_5 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_7_copy_5 = wx.StaticText(self.notebook_1_pane_1, -1, _(" a "))
  self.spin_ctrl_3_copy_5 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=23, size=(45, 20))
  self.label_8_copy_5 = wx.StaticText(self.notebook_1_pane_1, -1, ":")
  self.spin_ctrl_4_copy_5 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=0, max=59, size=(45, 20))
  self.label_5 = wx.StaticText(self.notebook_1_pane_2, -1, _("Usuario sin limitaciones en los servicios?"))
  self.choice_1 = wx.Choice(self.notebook_1_pane_2, -1, choices=[_("No"), _("Si")])
  self.button_3 = wx.Button(self.notebook_1_pane_2, -1, _("Limpiar"))
  self.grid_1 = wx.grid.Grid(self.notebook_1_pane_2, -1, size=(1, 1))
  self.grid_2 = wx.grid.Grid(self.notebook_1_pane_3, -1, size=(1, 1))
  self.grid_3 = wx.grid.Grid(self.notebook_1_pane_4, -1, size=(1, 1))
  anno=int(fecha().split(" ")[-1])
  self.finaliza=True
  self.__set_properties()
  self.SetFocus()
  self.__do_layout()
  self.all=tod_serv(self.combo_box_1.GetValue())
  #si usuario seleccionado rellena campos segun su configuracion
  if self.combo_box_1.GetValue()!='':
  self.rellena()
  wx.EVT_BUTTON(self, self.button_1.GetId(), self.acepta)
  wx.EVT_BUTTON(self, self.button_2.GetId(), self.cancela)
  wx.EVT_BUTTON(self, self.button_3.GetId(), self.limpia)
  wx.EVT_BUTTON(self, self.bitmap_button_1_copy.GetId(), self.refresca_lista)
  wx.EVT_CLOSE(self,self.cancela)
  wx.EVT_COMBOBOX(self,self.combo_box_1.GetId(),self.recarga)
  wx.EVT_CHOICE(self,self.choice_1.GetId(),self.limit)
   
  wx.EVT_CHECKBOX(self,self.checkbox_1.GetId(),self.estado)
  wx.EVT_CHECKBOX(self,self.checkbox_1_copy.GetId(),self.estado)
  wx.EVT_CHECKBOX(self,self.checkbox_1_copy_1.GetId(),self.estado)
  wx.EVT_CHECKBOX(self,self.checkbox_1_copy_2.GetId(),self.estado)
  wx.EVT_CHECKBOX(self,self.checkbox_1_copy_3.GetId(),self.estado)
  wx.EVT_CHECKBOX(self,self.checkbox_1_copy_4.GetId(),self.estado)
  wx.EVT_CHECKBOX(self,self.checkbox_1_copy_5.GetId(),self.estado)
   
  wx.grid.EVT_GRID_CELL_CHANGE(self,self.obten_cadena)
  # end wxGlade
   
   
  def __set_properties(self):
  # begin wxGlade: MyChild1.__set_properties
  self.Hide()
  self.SetTitle(_("Horarios"))
   
  self.choice_1.SetSelection(0)
   
  # Crea las tablas que se van a mostrar de manera din�ica
  self.grid_1.CreateGrid(0, 5)
  self.grid_3.CreateGrid(0, 4)
  self.grid_2.CreateGrid(0, 5)
  attr=wx.grid.GridCellAttr()
  attr.SetReadOnly(True)
  self.grid_1.SetColAttr(0,attr)
  self.grid_1.SetColLabelValue(0, _("Servicio"))
  self.grid_1.SetColLabelValue(1, _("Limite Diario"))
  self.grid_1.SetColLabelValue(2, _("Limite Semanal"))
  self.grid_1.SetColLabelValue(3, _("Limite Mensual"))
  self.grid_1.SetColLabelValue(4, _("Servicio sin limites"))
  self.grid_1.AutoSize()
   
  attr2=wx.grid.GridCellAttr()
  attr2.SetReadOnly(True)
  self.grid_3.SetColAttr(0,attr2)
  self.grid_3.SetColLabelValue(0, _("Servicio"))
  self.grid_3.SetColLabelValue(1, _("Total Diario"))
  self.grid_3.SetColLabelValue(2, _("Total Semanal"))
  self.grid_3.SetColLabelValue(3, _("Total Mensual"))
  self.grid_3.AutoSize()
   
  attr3=wx.grid.GridCellAttr()
  attr3.SetReadOnly(True)
  self.grid_2.SetColAttr(0,attr3)
  self.grid_2.SetColLabelValue(0, _("Servicio"))
  self.grid_2.SetColLabelValue(1, _("Hora"))
  self.grid_2.SetColLabelValue(2, _("Dia"))
  self.grid_2.SetColLabelValue(3, _("Mes"))
  self.grid_2.SetColLabelValue(4, _("Anno"))
   
  lista_srv=servicios()[0]
  items=len(lista_srv)
  self.grid_1.AppendRows(items)
  self.grid_3.AppendRows(items)
  self.grid_2.AppendRows(items)
  year=int(fecha()[-4:])
   
  for i in range(items):
  self.grid_1.SetCellValue(i,0,lista_srv[i])
  self.grid_1.SetCellEditor(i,4,wx.grid.GridCellBoolEditor())
  self.grid_1.SetCellRenderer(i,4,wx.grid.GridCellBoolRenderer())
  self.grid_2.SetCellValue(i,0,lista_srv[i])
  self.grid_2.SetCellEditor(i,2,wx.grid.GridCellNumberEditor(1,31))
  self.grid_2.SetCellEditor(i,3,wx.grid.GridCellNumberEditor(1,12))
  self.grid_2.SetCellEditor(i,4,wx.grid.GridCellNumberEditor(year,year+5))
  self.grid_3.SetCellValue(i,0,lista_srv[i])
   
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: MyChild1.__do_layout
  sizer_3 = wx.BoxSizer(wx.VERTICAL)
  sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_18 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_22 = wx.BoxSizer(wx.VERTICAL)
  sizer_34 = wx.BoxSizer(wx.VERTICAL)
  sizer_23 = wx.BoxSizer(wx.VERTICAL)
  sizer_24 = wx.BoxSizer(wx.VERTICAL)
  sizer_32 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_33 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_30 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_31 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_28 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_29 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_25 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_26 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_27 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_19 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_20 = wx.BoxSizer(wx.VERTICAL)
  sizer_21 = wx.BoxSizer(wx.VERTICAL)
  sizer_13 = wx.BoxSizer(wx.VERTICAL)
  sizer_14 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_15 = wx.BoxSizer(wx.VERTICAL)
  sizer_16 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_17 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_9 = wx.BoxSizer(wx.VERTICAL)
  sizer_66 = wx.BoxSizer(wx.HORIZONTAL)
  grid_sizer_1 = wx.GridSizer(4, 2, 0, 0)
  sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_6 = wx.BoxSizer(wx.VERTICAL)
  sizer_41 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_7 = wx.BoxSizer(wx.VERTICAL)
  sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_5.Add((20, 20), 0, 0, 0)
  sizer_6.Add((20, 20), 0, 0, 0)
  sizer_6.Add(self.combo_box_1, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_6.Add((20, 20), 1, 0, 0)
  sizer_41.Add(self.label_15, 0, 0, 0)
  sizer_41.Add((20, 20), 0, 0, 0)
  sizer_41.Add(self.text_ctrl_1, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_41.Add((20, 20), 0, 0, 0)
  sizer_41.Add(self.bitmap_button_1_copy, 0, 0, 0)
  sizer_6.Add(sizer_41, 0, wx.EXPAND, 0)
  sizer_8.Add(self.button_1, 0, wx.ALIGN_BOTTOM, 0)
  sizer_8.Add((40, 10), 1, 0, 0)
  sizer_8.Add(self.button_2, 0, wx.ALIGN_BOTTOM, 0)
  sizer_7.Add(sizer_8, 1, wx.EXPAND, 0)
  sizer_7.Add((20, 20), 0, 0, 0)
  sizer_6.Add(sizer_7, 1, wx.EXPAND, 0)
  sizer_6.Add((20, 20), 1, 0, 0)
  sizer_5.Add(sizer_6, 1, wx.EXPAND, 0)
  sizer_5.Add((20, 20), 0, 0, 0)
  sizer_4.Add(sizer_5, 0, wx.EXPAND, 0)
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_11_copy_copy_1_copy_6 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1_copy_5 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1_copy_4 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1_copy_3 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1_copy_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1_copy_1 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11_copy_copy_1_copy.Add(self.label_2, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add(self.label_3, 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add(self.label_40, 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1_copy, 0, wx.EXPAND, 0)
  sizer_9.Add(self.static_line_1, 0, wx.EXPAND, 0)
  sizer_11_copy_copy_1.Add(self.label_4, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.checkbox_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add((10, 20), 1, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.label_55, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.spin_ctrl_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.label_6, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.spin_ctrl_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add((10, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.label_7, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.spin_ctrl_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.label_8, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add(self.spin_ctrl_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1, 1, wx.EXPAND, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.label_4_copy_1, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.checkbox_1_copy, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add((10, 20), 1, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.label_5_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.spin_ctrl_1_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.label_6_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.spin_ctrl_2_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add((10, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.label_7_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.spin_ctrl_3_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.label_8_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add(self.spin_ctrl_4_copy, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_1.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1_copy_1, 1, wx.EXPAND, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.label_4_copy_2, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.checkbox_1_copy_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add((10, 20), 1, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.label_5_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.spin_ctrl_1_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.label_6_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.spin_ctrl_2_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add((10, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.label_7_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.spin_ctrl_3_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.label_8_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add(self.spin_ctrl_4_copy_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_2.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1_copy_2, 1, wx.EXPAND, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.label_4_copy_3, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.checkbox_1_copy_2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add((10, 20), 1, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.label_5_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.spin_ctrl_1_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.label_6_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.spin_ctrl_2_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add((10, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.label_7_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.spin_ctrl_3_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.label_8_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add(self.spin_ctrl_4_copy_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_3.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1_copy_3, 1, wx.EXPAND, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.label_4_copy_4, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.checkbox_1_copy_3, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add((10, 20), 1, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.label_5_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.spin_ctrl_1_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.label_6_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.spin_ctrl_2_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add((10, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.label_7_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.spin_ctrl_3_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.label_8_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add(self.spin_ctrl_4_copy_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_4.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1_copy_4, 1, wx.EXPAND, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.label_4_copy_5, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.checkbox_1_copy_4, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add((10, 20), 1, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.label_5_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.spin_ctrl_1_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.label_6_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.spin_ctrl_2_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add((10, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.label_7_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.spin_ctrl_3_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.label_8_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add(self.spin_ctrl_4_copy_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_5.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1_copy_5, 1, wx.EXPAND, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.label_4_copy_6, 1, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.checkbox_1_copy_5, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add((10, 20), 1, wx.ALL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.label_5_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.spin_ctrl_1_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.label_6_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.spin_ctrl_2_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add((10, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.label_7_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add((10, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.spin_ctrl_3_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.label_8_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add(self.spin_ctrl_4_copy_5, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy_copy_1_copy_6.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  sizer_9.Add(sizer_11_copy_copy_1_copy_6, 1, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0)
  self.notebook_1_pane_1.SetAutoLayout(True)
  self.notebook_1_pane_1.SetSizer(sizer_9)
  sizer_9.Fit(self.notebook_1_pane_1)
  sizer_9.SetSizeHints(self.notebook_1_pane_1)
  sizer_1.Add(self.notebook_1, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  sizer_1.Fit(self)
  sizer_1.SetSizeHints(self)
  sizer_14.Add((20, 20), 0, 0, 0)
  sizer_15.Add((20, 20), 0, 0, 0)
  sizer_17.Add(self.label_5, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_17.Add((20, 20), 0, 0, 0)
  sizer_17.Add(self.choice_1, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_17.Add((20, 20), 1, 0, 0)
  sizer_17.Add(self.button_3, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_17.Add((20, 20), 0, 0, 0)
  sizer_16.Add(sizer_17, 1, wx.EXPAND, 0)
  sizer_15.Add(sizer_16, 1, wx.EXPAND, 0)
  sizer_15.Add((20, 20), 0, 0, 0)
  sizer_14.Add(sizer_15, 1, wx.EXPAND, 0)
  sizer_14.Add((20, 20), 0, 0, 0)
  sizer_13.Add(sizer_14, 0, wx.EXPAND, 0)
  sizer_13.Add(self.grid_1, 1, wx.EXPAND, 0)
  self.notebook_1_pane_2.SetAutoLayout(True)
  self.notebook_1_pane_2.SetSizer(sizer_13)
  sizer_13.Fit(self.notebook_1_pane_2)
  sizer_13.SetSizeHints(self.notebook_1_pane_2)
  sizer_18.Add(self.grid_2, 1, wx.EXPAND, 0)
  self.notebook_1_pane_3.SetAutoLayout(True)
  self.notebook_1_pane_3.SetSizer(sizer_18)
  sizer_66.Add(self.grid_3, 1, wx.EXPAND, 0)
  self.notebook_1_pane_4.SetAutoLayout(True)
  self.notebook_1_pane_4.SetSizer(sizer_66)
  sizer_18.Fit(self.notebook_1_pane_3)
  sizer_18.SetSizeHints(self.notebook_1_pane_3)
  self.notebook_1.AddPage(self.notebook_1_pane_1, _("Uso del pc"))
  self.notebook_1.AddPage(self.notebook_1_pane_2, _("Servicios"))
  self.notebook_1.AddPage(self.notebook_1_pane_4, _("Consumido"))
  self.notebook_1.AddPage(self.notebook_1_pane_3, _("Prorrogas"))
   
  # Esto es necesario para evitar un warning, a veces incluso un error mas grave
  # segun la version de la libreria que haya instalada en el sistema
  vers= wx.VERSION[0:2]
  if vers[0]<=2 and vers[1]<=4:
  sizer_4.Add(wx.NotebookSizer(self.notebook_1), 1, wx.EXPAND, 0)
  else:
  sizer_4.Add(self.notebook_1, 1, wx.EXPAND, 0)
   
  sizer_3.Add(sizer_4, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_3)
  sizer_3.Fit(self)
  sizer_3.SetSizeHints(self)
  self.Layout()
  self.control()
  # end wxGlade
   
  # Borra el contenido de las tablas
  def activar(self,a,b,c,d,e,f,g):
   
  self.spin_ctrl_1.Enable(a)
  self.spin_ctrl_2.Enable(a)
  self.spin_ctrl_3.Enable(a)
  self.spin_ctrl_4.Enable(a)
  self.spin_ctrl_1_copy.Enable(b)
  self.spin_ctrl_2_copy.Enable(b)
  self.spin_ctrl_3_copy.Enable(b)
  self.spin_ctrl_4_copy.Enable(b)
  self.spin_ctrl_1_copy_1.Enable(c)
  self.spin_ctrl_2_copy_1.Enable(c)
  self.spin_ctrl_3_copy_1.Enable(c)
  self.spin_ctrl_4_copy_1.Enable(c)
  self.spin_ctrl_1_copy_2.Enable(d)
  self.spin_ctrl_2_copy_2.Enable(d)
  self.spin_ctrl_3_copy_2.Enable(d)
  self.spin_ctrl_4_copy_2.Enable(d)
  self.spin_ctrl_1_copy_3.Enable(e)
  self.spin_ctrl_2_copy_3.Enable(e)
  self.spin_ctrl_3_copy_3.Enable(e)
  self.spin_ctrl_4_copy_3.Enable(e)
  self.spin_ctrl_1_copy_4.Enable(f)
  self.spin_ctrl_2_copy_4.Enable(f)
  self.spin_ctrl_3_copy_4.Enable(f)
  self.spin_ctrl_4_copy_4.Enable(f)
  self.spin_ctrl_1_copy_5.Enable(g)
  self.spin_ctrl_2_copy_5.Enable(g)
  self.spin_ctrl_3_copy_5.Enable(g)
  self.spin_ctrl_4_copy_5.Enable(g)
   
  if a==0:
  self.spin_ctrl_1.SetValue(0)
  self.spin_ctrl_2.SetValue(0)
  self.spin_ctrl_3.SetValue(0)
  self.spin_ctrl_4.SetValue(0)
  if b==0:
  self.spin_ctrl_1_copy.SetValue(0)
  self.spin_ctrl_2_copy.SetValue(0)
  self.spin_ctrl_3_copy.SetValue(0)
  self.spin_ctrl_4_copy.SetValue(0)
  if c==0:
  self.spin_ctrl_1_copy_1.SetValue(0)
  self.spin_ctrl_2_copy_1.SetValue(0)
  self.spin_ctrl_3_copy_1.SetValue(0)
  self.spin_ctrl_4_copy_1.SetValue(0)
  if d==0:
  self.spin_ctrl_1_copy_2.SetValue(0)
  self.spin_ctrl_2_copy_2.SetValue(0)
  self.spin_ctrl_3_copy_2.SetValue(0)
  self.spin_ctrl_4_copy_2.SetValue(0)
  if e==0:
  self.spin_ctrl_1_copy_3.SetValue(0)
  self.spin_ctrl_2_copy_3.SetValue(0)
  self.spin_ctrl_3_copy_3.SetValue(0)
  self.spin_ctrl_4_copy_3.SetValue(0)
  if f==0:
  self.spin_ctrl_1_copy_4.SetValue(0)
  self.spin_ctrl_2_copy_4.SetValue(0)
  self.spin_ctrl_3_copy_4.SetValue(0)
  self.spin_ctrl_4_copy_4.SetValue(0)
  if g==0:
  self.spin_ctrl_1_copy_5.SetValue(0)
  self.spin_ctrl_2_copy_5.SetValue(0)
  self.spin_ctrl_3_copy_5.SetValue(0)
  self.spin_ctrl_4_copy_5.SetValue(0)
   
  def estado(self,event):
  id=event.GetId()
  rango=self.checkbox_1.GetValue()
  rango_copy=self.checkbox_1_copy.GetValue()
  rango_copy_1=self.checkbox_1_copy_1.GetValue()
  rango_copy_2=self.checkbox_1_copy_2.GetValue()
  rango_copy_3=self.checkbox_1_copy_3.GetValue()
  rango_copy_4=self.checkbox_1_copy_4.GetValue()
  rango_copy_5=self.checkbox_1_copy_5.GetValue()
   
  if id==self.checkbox_1.GetId():
  self.spin_ctrl_1.SetValue(0)
  self.spin_ctrl_2.SetValue(0)
  self.spin_ctrl_3.SetValue(23)
  self.spin_ctrl_4.SetValue(59)
  elif id==self.checkbox_1_copy.GetId():
  self.spin_ctrl_1_copy.SetValue(0)
  self.spin_ctrl_2_copy.SetValue(0)
  self.spin_ctrl_3_copy.SetValue(23)
  self.spin_ctrl_4_copy.SetValue(59)
  elif id==self.checkbox_1_copy_1.GetId():
  self.spin_ctrl_1_copy_1.SetValue(0)
  self.spin_ctrl_2_copy_1.SetValue(0)
  self.spin_ctrl_3_copy_1.SetValue(23)
  self.spin_ctrl_4_copy_1.SetValue(59)
  elif id==self.checkbox_1_copy_2.GetId():
  self.spin_ctrl_1_copy_2.SetValue(0)
  self.spin_ctrl_2_copy_2.SetValue(0)
  self.spin_ctrl_3_copy_2.SetValue(23)
  self.spin_ctrl_4_copy_2.SetValue(59)
  elif id==self.checkbox_1_copy_3.GetId():
  self.spin_ctrl_1_copy_3.SetValue(0)
  self.spin_ctrl_2_copy_3.SetValue(0)
  self.spin_ctrl_3_copy_3.SetValue(23)
  self.spin_ctrl_4_copy_3.SetValue(59)
  elif id==self.checkbox_1_copy_4.GetId():
  self.spin_ctrl_1_copy_4.SetValue(0)
  self.spin_ctrl_2_copy_4.SetValue(0)
  self.spin_ctrl_3_copy_4.SetValue(23)
  self.spin_ctrl_4_copy_4.SetValue(59)
  elif id==self.checkbox_1_copy_5.GetId():
  self.spin_ctrl_1_copy_5.SetValue(0)
  self.spin_ctrl_2_copy_5.SetValue(0)
  self.spin_ctrl_3_copy_5.SetValue(23)
  self.spin_ctrl_4_copy_5.SetValue(59)
   
  self.activar(rango,rango_copy,rango_copy_1,rango_copy_2,rango_copy_3,rango_copy_4,rango_copy_5)
   
   
  def limpia(self,evt):
  if self.grid_1.IsEnabled():
  columnas=self.grid_1.GetNumberRows()
  for i in range(columnas):
  self.grid_1.SetCellValue(i,1,'')
  self.grid_1.SetCellValue(i,2,'')
  self.grid_1.SetCellValue(i,3,'')
  self.grid_1.SetCellValue(i,4,'0')
   
  # Comprueba si es un usuario con limitaciones o no
  def control(self):
  columnas=self.grid_1.GetNumberRows()
  todos=True
  for i in range(columnas):
  if self.grid_1.GetCellValue(i,4)=="0":
  todos=False
  if todos:
  self.choice_1.SetSelection(1)
  self.deshabilita()
   
  # Si el usuario no tiene limites deshabilita la edicion de estos
  # en caso contrario permite que se editen y rellena los campos
  def limit(self,event):
  if self.choice_1.GetSelection():
  self.all=True
  self.deshabilita()
   
  else:
  self.all=False
  self.habilita()
  if self.combo_box_1.GetValue()!='':
  self.rellena()
  self.grid_1.SetCellValue(0,4,"1")
   
  # Deja las tablas a 0 e impide su edicion
  def deshabilita(self):
  self.grid_1.Enable(False)
  self.grid_2.Enable(False)
  self.grid_3.Enable(False)
  for i in range(self.grid_1.GetNumberRows()):
  self.grid_1.SetCellValue(i,1,"")
  self.grid_1.SetCellValue(i,2,"")
  self.grid_1.SetCellValue(i,3,"")
  self.grid_2.SetCellValue(i,1,"")
  self.grid_2.SetCellValue(i,2,"")
  self.grid_2.SetCellValue(i,3,"")
  self.grid_2.SetCellValue(i,4,"")
  self.grid_3.SetCellValue(i,1,"")
  self.grid_3.SetCellValue(i,2,"")
  self.grid_3.SetCellValue(i,3,"")
   
  # Permite la edicion de las tablas
  def habilita(self):
  self.grid_1.Enable(True)
  self.grid_2.Enable(True)
  self.grid_3.Enable(True)
   
  # Funcion que llama a rellena ante un evento
  def recarga (self,event):
  self.all=tod_serv(self.combo_box_1.GetValue())
  if self.combo_box_1.GetValue()!='':
  self.rellena()
   
  # Funcion que lee el archivo de configuracion y rellena los valores necesarios en la interfaz grafica
  def rellena(self):
  self.checkbox_1.SetValue(False)
  self.checkbox_1_copy.SetValue(False)
  self.checkbox_1_copy_1.SetValue(False)
  self.checkbox_1_copy_2.SetValue(False)
  self.checkbox_1_copy_3.SetValue(False)
  self.checkbox_1_copy_4.SetValue(False)
  self.checkbox_1_copy_5.SetValue(False)
   
  us=self.combo_box_1.GetValue()
  if self.all:
  self.choice_1.SetSelection(1)
  self.deshabilita()
  else:
  self.choice_1.SetSelection(0)
  self.habilita()
   
  a=usr_srv(us)
  inicios,fines,dias=uso_pc(us)
  semana={0:0,1:0,2:0,3:0,4:0,5:0,6:0}
  items=len(dias)
  for i in range(items):
  hora_inicio=inicios[i][:2]
  minuto_inicio=inicios[i][2:]
  hora_fin=fines[i][:2]
  minuto_fin=fines[i][2:]
  dia=dias[i]
   
  if dia=='Mo':
  self.checkbox_1.SetValue(True)
  self.spin_ctrl_1.SetValue(int(hora_inicio))
  self.spin_ctrl_2.SetValue(int(minuto_inicio))
  self.spin_ctrl_3.SetValue(int(hora_fin))
  self.spin_ctrl_4.SetValue(int(minuto_fin))
  semana[0]=1
  elif dia=='Tu':
  self.checkbox_1_copy.SetValue(True)
  self.spin_ctrl_1_copy.SetValue(int(hora_inicio))
  self.spin_ctrl_2_copy.SetValue(int(minuto_inicio))
  self.spin_ctrl_3_copy.SetValue(int(hora_fin))
  self.spin_ctrl_4_copy.SetValue(int(minuto_fin))
  semana[1]=1
  elif dia=='We':
  self.checkbox_1_copy_1.SetValue(True)
  self.spin_ctrl_1_copy_1.SetValue(int(hora_inicio))
  self.spin_ctrl_2_copy_1.SetValue(int(minuto_inicio))
  self.spin_ctrl_3_copy_1.SetValue(int(hora_fin))
  self.spin_ctrl_4_copy_1.SetValue(int(minuto_fin))
  semana[2]=1
  elif dia=='Th':
  self.checkbox_1_copy_2.SetValue(True)
  self.spin_ctrl_1_copy_2.SetValue(int(hora_inicio))
  self.spin_ctrl_2_copy_2.SetValue(int(minuto_inicio))
  self.spin_ctrl_3_copy_2.SetValue(int(hora_fin))
  self.spin_ctrl_4_copy_2.SetValue(int(minuto_fin))
  semana[3]=1
  elif dia=='Fr':
  self.checkbox_1_copy_3.SetValue(True)
  self.spin_ctrl_1_copy_3.SetValue(int(hora_inicio))
  self.spin_ctrl_2_copy_3.SetValue(int(minuto_inicio))
  self.spin_ctrl_3_copy_3.SetValue(int(hora_fin))
  self.spin_ctrl_4_copy_3.SetValue(int(minuto_fin))
  semana[4]=1
  elif dia=='Sa':
  self.checkbox_1_copy_4.SetValue(True)
  self.spin_ctrl_1_copy_4.SetValue(int(hora_inicio))
  self.spin_ctrl_2_copy_4.SetValue(int(minuto_inicio))
  self.spin_ctrl_3_copy_4.SetValue(int(hora_fin))
  self.spin_ctrl_4_copy_4.SetValue(int(minuto_fin))
  semana[5]=1
  elif dia=='Su':
  self.checkbox_1_copy_5.SetValue(True)
  self.spin_ctrl_1_copy_5.SetValue(int(hora_inicio))
  self.spin_ctrl_2_copy_5.SetValue(int(minuto_inicio))
  self.spin_ctrl_3_copy_5.SetValue(int(hora_fin))
  self.spin_ctrl_4_copy_5.SetValue(int(minuto_fin))
  semana[6]=1
   
  self.activar(semana[0],semana[1],semana[2],semana[3],semana[4],semana[5],semana[6])
   
  dic_srv=serv_user(us)
  columnas=self.grid_1.GetNumberRows()
   
  for i in range(columnas):
  ser=str(self.grid_1.GetCellValue(i,0))
  if self.all:
  tiempos=['1']
  else:
  tiempos=dic_srv.get(us+"+"+ser)
   
  if tiempos:
  if tiempos[0]=='1':
  self.grid_1.SetCellValue(i,1,"")
  self.grid_1.SetCellValue(i,2,"")
  self.grid_1.SetCellValue(i,3,"")
  self.grid_1.SetCellValue(i,4,"1")
  self.grid_3.SetCellValue(i,1,"")
  self.grid_3.SetCellValue(i,2,"")
  self.grid_3.SetCellValue(i,3,"")
  self.grid_2.SetCellValue(i,1,"")
  self.grid_2.SetCellValue(i,2,"")
  self.grid_2.SetCellValue(i,3,"")
  self.grid_2.SetCellValue(i,4,"")
  else:
  self.grid_1.SetCellValue(i,1,tiempos[0])
  self.grid_1.SetCellValue(i,2,tiempos[1])
  self.grid_1.SetCellValue(i,3,tiempos[2])
  self.grid_1.SetCellValue(i,4,"0")
  self.grid_3.SetCellValue(i,1,tiempos[3])
  self.grid_3.SetCellValue(i,2,tiempos[4])
  self.grid_3.SetCellValue(i,3,tiempos[5])
  hora_pr=tiempos[6].split()[0]
  pr=tiempos[6].split()[1].split("/")
  dia_pr=pr[0]
  mes_pr=pr[1]
  anno_pr=pr[2]
  f_act=a=fecha().split()[3:]
  del f_act[1:3]
  if int(anno_pr+mes_pr+dia_pr)>=int(f_act[2]+f_act[1]+f_act[0]):
  self.grid_2.SetCellValue(i,1,hora_pr)
  self.grid_2.SetCellValue(i,2,dia_pr)
  self.grid_2.SetCellValue(i,3,mes_pr)
  self.grid_2.SetCellValue(i,4,anno_pr)
  else:
  self.grid_1.SetCellValue(i,1,"")
  self.grid_1.SetCellValue(i,2,"")
  self.grid_1.SetCellValue(i,3,"")
  if i==0 and dic_srv=={}:
  self.grid_1.SetCellValue(i,4,"1")
  else:
  self.grid_1.SetCellValue(i,4,"0")
  self.grid_3.SetCellValue(i,1,"")
  self.grid_3.SetCellValue(i,2,"")
  self.grid_3.SetCellValue(i,3,"")
  self.grid_2.SetCellValue(i,1,"")
  self.grid_2.SetCellValue(i,2,"")
  self.grid_2.SetCellValue(i,3,"")
  self.grid_2.SetCellValue(i,4,"")
   
   
  # Valida que la entrada en la casilla uid sea numerica
  def uid_min(self):
  numeros={"0":True, "1":1, "2":2, "3":3, "4":4, "5":5 ,"6":6, "7":7,"8":8,"9":9}
  posicion=self.text_ctrl_1.GetLineText(0)
  for i in posicion :
  if not numeros.get(i):
  return False
  return posicion
   
  # Lee los usuarios del sistema en /etc/passwd y crea una lista con ellos para mostrarlos
  def rellena_usuarios (self):
  uid.min=self.uid_min()
   
  self.combo_box_1.Clear()
   
  tmp_us=lista_usuarios(int(uid.min))
  for i in tmp_us:
  self.combo_box_1.Append(i)
   
   
  # funcion que llama a rellena_usuarios ante un evento
  def refresca_lista(self ,event):
  self.rellena_usuarios()
  self.rellena()
   
  def acepta(self,evt):
  self.grid_1.SaveEditControlValue()
  self.grid_2.SaveEditControlValue()
  self.grid_3.SaveEditControlValue()
  if self.finaliza :
  self.aceptar(evt)
   
  # Graba los cambios que se han realizado en el archivo de configuracion
  def aceptar( self, evt):
  from func import control_web_user
  from confSquid import lee_userblacklists, actualiza_userblacklists
  from inicSquid import inic_squid_user
   
  def formato_hora(horas,minutos):
  horas=str(horas)
  minutos=str(minutos)
  if len(horas)==1:
  horas="0"+horas
  if len(minutos)==1:
  minutos="0"+minutos
  return horas+minutos
   
  usuario=self.combo_box_1.GetValue()
  num_filas=self.grid_1.GetNumberRows()
  listas_squid=lee_userblacklists(usuario,archivo.configuracion)
  dias=""
  nodias=[]
  if self.checkbox_1.IsChecked():
  i1=self.spin_ctrl_1.GetValue()
  i2=self.spin_ctrl_2.GetValue()
  f1=self.spin_ctrl_3.GetValue()
  f2=self.spin_ctrl_4.GetValue()
  if (i1>f1) or (i1==f1 and i2>=f2):
  nodias.append("Lunes")
  else:
  d="Mo"
  inicio=formato_hora(self.spin_ctrl_1.GetValue(),self.spin_ctrl_2.GetValue())
  fin=formato_hora(self.spin_ctrl_3.GetValue(),self.spin_ctrl_4.GetValue())
  dias=dias+d+inicio+"-"+fin
  if self.checkbox_1_copy.IsChecked():
  i1=self.spin_ctrl_1_copy.GetValue()
  i2=self.spin_ctrl_2_copy.GetValue()
  f1=self.spin_ctrl_3_copy.GetValue()
  f2=self.spin_ctrl_4_copy.GetValue()
  if (i1>f1) or (i1==f1 and i2>=f2):
  nodias.append("Martes")
  else:
  d="Tu"
  inicio=formato_hora(self.spin_ctrl_1_copy.GetValue(),self.spin_ctrl_2_copy.GetValue())
  fin=formato_hora(self.spin_ctrl_3_copy.GetValue(),self.spin_ctrl_4_copy.GetValue())
  dias=dias+d+inicio+"-"+fin
  if self.checkbox_1_copy_1.IsChecked():
  i1=self.spin_ctrl_1_copy_1.GetValue()
  i2=self.spin_ctrl_2_copy_1.GetValue()
  f1=self.spin_ctrl_3_copy_1.GetValue()
  f2=self.spin_ctrl_4_copy_1.GetValue()
  if (i1>f1) or (i1==f1 and i2>=f2):
  nodias.append("Miercoles")
  else:
  d="We"
  inicio=formato_hora(self.spin_ctrl_1_copy_1.GetValue(),self.spin_ctrl_2_copy_1.GetValue())
  fin=formato_hora(self.spin_ctrl_3_copy_1.GetValue(),self.spin_ctrl_4_copy_1.GetValue())
  dias=dias+d+inicio+"-"+fin
  if self.checkbox_1_copy_2.IsChecked():
  i1=self.spin_ctrl_1_copy_2.GetValue()
  i2=self.spin_ctrl_2_copy_2.GetValue()
  f1=self.spin_ctrl_3_copy_2.GetValue()
  f2=self.spin_ctrl_4_copy_2.GetValue()
  if (i1>f1) or (i1==f1 and i2>=f2):
  nodias.append("Jueves")
  else:
  d="Th"
  inicio=formato_hora(self.spin_ctrl_1_copy_2.GetValue(),self.spin_ctrl_2_copy_2.GetValue())
  fin=formato_hora(self.spin_ctrl_3_copy_2.GetValue(),self.spin_ctrl_4_copy_2.GetValue())
  dias=dias+d+inicio+"-"+fin
  if self.checkbox_1_copy_3.IsChecked():
  i1=self.spin_ctrl_1_copy_3.GetValue()
  i2=self.spin_ctrl_2_copy_3.GetValue()
  f1=self.spin_ctrl_3_copy_3.GetValue()
  f2=self.spin_ctrl_4_copy_3.GetValue()
  if (i1>f1) or (i1==f1 and i2>=f2):
  nodias.append("Viernes")
  else:
  d="Fr"
  inicio=formato_hora(self.spin_ctrl_1_copy_3.GetValue(),self.spin_ctrl_2_copy_3.GetValue())
  fin=formato_hora(self.spin_ctrl_3_copy_3.GetValue(),self.spin_ctrl_4_copy_3.GetValue())
  dias=dias+d+inicio+"-"+fin
  if self.checkbox_1_copy_4.IsChecked():
  i1=self.spin_ctrl_1_copy_4.GetValue()
  i2=self.spin_ctrl_2_copy_4.GetValue()
  f1=self.spin_ctrl_3_copy_4.GetValue()
  f2=self.spin_ctrl_4_copy_4.GetValue()
  if (i1>f1) or (i1==f1 and i2>=f2):
  nodias.append("Sabado")
  else:
  d="Sa"
  inicio=formato_hora(self.spin_ctrl_1_copy_4.GetValue(),self.spin_ctrl_2_copy_4.GetValue())
  fin=formato_hora(self.spin_ctrl_3_copy_4.GetValue(),self.spin_ctrl_4_copy_4.GetValue())
  dias=dias+d+inicio+"-"+fin
  if self.checkbox_1_copy_5.IsChecked():
  i1=self.spin_ctrl_1_copy_5.GetValue()
  i2=self.spin_ctrl_2_copy_5.GetValue()
  f1=self.spin_ctrl_3_copy_5.GetValue()
  f2=self.spin_ctrl_4_copy_5.GetValue()
  if (i1>f1) or (i1==f1 and i2>=f2):
  nodias.append("Domingo")
  else:
  d="Su"
  inicio=formato_hora(self.spin_ctrl_1_copy_5.GetValue(),self.spin_ctrl_2_copy_5.GetValue())
  fin=formato_hora(self.spin_ctrl_3_copy_5.GetValue(),self.spin_ctrl_4_copy_5.GetValue())
  dias=dias+d+inicio+"-"+fin
   
  guarda_config=True
  if dias=="":
  msg=" "+_("El horario definido para")+" '"+usuario+"' "+_("no es valido")+"\n"+_(" Revise la configuracion.")
  dlg = wx.MessageDialog(self, msg,
  _('Configuracion no valida'), wx.OK | wx.ICON_EXCLAMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  guarda_config=False
  else:
  if len(nodias)>0:
  if len(nodias)==1:
  cad_msg='el '+nodias[0]
  fin_dlg=_("Este dia el acceso quedaria inhabilitado.")
  else:
  cad_msg=""
  for i in range(len(nodias)-1):
  cad_msg=cad_msg+nodias[i]+" "
  cad_msg=cad_msg+"y "+nodias[len(nodias)-1]
  fin_dlg=_("Estos dias el acceso quedaria inhabilitado.")
  msg_dlg=_(" El horario seleccionado para")+" "+cad_msg+" "+_("no es valido")+"\n "+fin_dlg+"\n\n"+_(" Desea guadar la configuracion de todos modos ?")
  dlg = wx.MessageDialog(self, msg_dlg, _('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_NO:
  guarda_config=False
   
  dlg.Destroy()
   
  if guarda_config:
  tabla=[]
  for i in range(9):
  tabla.append([])
   
  for i in range(num_filas):
   
  nom_serv=self.grid_1.GetCellValue(i,0) #nombre del servicio
  sin_lim=self.grid_1.GetCellValue(i,4) # servicio sin limites
  lim_d=self.grid_1.GetCellValue(i,1) #limite diario
  lim_s=self.grid_1.GetCellValue(i,2) #limite semanal
  lim_m=self.grid_1.GetCellValue(i,3) #limite mensual
  tot_d=self.grid_3.GetCellValue(i,1) #total consumo diario
  tot_s=self.grid_3.GetCellValue(i,2) #total consumo semanal
  tot_m=self.grid_3.GetCellValue(i,3) #total consumo mensual
   
  if lim_d=="" or lim_d==" ":
  lim_d=""
  lim_s=""
  lim_m=""
  if lim_s=="" or lim_s==" ":
  lim_d=""
  lim_s=""
  lim_m=""
  if lim_m=="" or lim_m==" ":
  lim_d=""
  lim_s=""
  lim_m=""
  if sin_lim !="0" and sin_lim!='':
  tabla[0].append(nom_serv)
  tabla[1].append('')
  tabla[2].append('')
  tabla[3].append('')
  tabla[4].append('')
  tabla[5].append('')
  tabla[6].append('')
  tabla[7].append('')
  tabla[8].append("SL")
  elif lim_d !="":
  if tot_d=="" or tot_d==" ":
  tot_d="00:00:00"
  tot_s="00:00:00"
  tot_m="00:00:00"
  if tot_s=="" or tot_s==" ":
  tot_d="00:00:00"
  tot_s="00:00:00"
  tot_m="00:00:00"
  if tot_s=="" or tot_s==" ":
  tot_d="00:00:00"
  tot_s="00:00:00"
  tot_m="00:00:00"
   
  hora_pr=self.grid_2.GetCellValue(i,1)
  dia_pr=str(self.grid_2.GetCellValue(i,2))
  mes_pr=str(self.grid_2.GetCellValue(i,3))
  anno_pr=str(self.grid_2.GetCellValue(i,4))
   
  if len(hora_pr)<8:
  hora_pr="00:00:00"
  if dia_pr==" " or dia_pr=="":
  dia_pr="00"
  if mes_pr==" " or mes_pr=="":
  mes_pr="00"
  if anno_pr==" " or anno_pr=="":
  anno_pr="00"
  if len(dia_pr)==1:
  dia_pr="0"+dia_pr
  if len(mes_pr)==1:
  mes_pr="0"+mes_pr
  if len(anno_pr)==1:
  anno_pr="0"+anno_pr
   
  tabla[0].append(nom_serv)
  tabla[1].append(lim_d)
  tabla[2].append(lim_s)
  tabla[3].append(lim_m)
  tabla[4].append(tot_d)
  tabla[5].append(tot_s)
  tabla[6].append(tot_m)
  tabla[7].append(hora_pr+" "+dia_pr+"/"+mes_pr+"/"+anno_pr) #prorroga
  tabla[8].append("")
   
  if self.grid_1.IsEnabled():
  todos=False
  else:
  todos=True
   
  avanz_usr(todos,usuario,tabla,listas_squid)
   
  time_conf=dias
  fija_horarios(usuario,time_conf)
   
  actualiza_userblacklists(usuario, listas_squid, archivo.configuracion)
  #se actualizan instancias de squid a modificaciones realizadas
  if (control_web_user(usuario,archivo.aceptlog)==1):
  inic_squid_user(usuario,archivo.aceptlog)
   
  msg=_("Guardados los cambios para ")+"'"+usuario+"'\n"+_("Desea salir de esta ventana?")
  dlg = wx.MessageDialog(self, msg, _('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  dlg.Destroy()
  child.horarios=False
  self.Destroy()
  else:
  dlg.Destroy()
  self.rellena()
   
  # Comprueba que no se han introducido valores por encima de los maximos
  def valida_fecha(self,fecha,col):
  letras=len(fecha)
  if letras==0:
  return True
  if fecha==" ":
  return True
  if letras<5 or letras >9:
  return False
   
  fecha=fecha.split(":")
  if len(fecha[0])>2 or len(fecha[1])>2 or len(fecha[2])>2:
  return False
  max=[59,23,167,743]
  try:
  if int(fecha[0])>max[col] or int(fecha[1])>max[0] or int(fecha[2])>max[0]:
  return False
  else:
  return True
  except:
  return False
   
  # Toma las horas que se introducen en las celdas pertinentes y las manda a una funcion
  # que comprueba si tienen el formato correcto, si no es asi la deja por defecto en "00:00:00" y
  # lanza un aviso
  def obten_cadena(self,evt):
   
  fila=evt.GetRow()
  columna=evt.GetCol()
  tiempo=True
   
  if self.grid_1.GetId()==evt.GetId():
  tabla=self.grid_1
  tb_name=_("servicios")
  elif self.grid_3.GetId()==evt.GetId():
  tabla=self.grid_3
  tb_name=_("consumido")
  else:
  tabla=self.grid_2
  tb_name=_("prorrogas")
   
  if tb_name==_("prorrogas") and columna !=1:
  valido=True
  tiempo=False
  elif tb_name==_("servicios") and columna==4:
  valido=True
  tiempo=False
  else:
  valido=self.valida_fecha(tabla.GetCellValue(fila,columna),columna)
   
  if not valido:
  dlg = wx.MessageDialog(self, _("La celda en la fila")+" "+str(fila)+_(", columna")+" "+str(columna)+" "+_("de la seccion")+" "+tb_name+"\n"+_("contiene un valor incorrecto"),
  _('Aviso ACEPT'), wx.OK | wx.ICON_HAND)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  tabla.SetCellValue(fila,columna,"00:00:00")
  self.finaliza=False
  elif tiempo :
  horario=tabla.GetCellValue(fila,columna)
  if len(horario)<8:
  h=horario.split(":")[0]
  m=horario.split(":")[1]
  s=horario.split(":")[2]
  if len(h)==1:
  h="0"+h
  if len(m)==1:
  m="0"+m
  if len(s)==1:
  s="0"+s
  tabla.SetCellValue(fila,columna,h+":"+m+":"+s)
   
  self.finaliza=True
   
  def cancela( self, evt):
   
  child.horarios=False
  self.Destroy()
  # end of class MyChild1
   
  # Esta ventana se encarga de la administracion de los servicios
  class MyChild2(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: MyChild2.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  self.notebook_1 = wx.Notebook(self, -1, style=0)
  self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1)
  self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1)
  self.button_1 = wx.Button(self, -1, _("Nuevo Servicio"))
  self.button_2 = wx.Button(self, -1, _("Modificar servicio"))
  self.button_3 = wx.Button(self, -1, _("Aceptar"))
  self.button_4 = wx.Button(self, -1, _("Salir"))
  self.label_1 = wx.StaticText(self.notebook_1_pane_1, -1, _("Nombre"))
  self.label_2 = wx.StaticText(self.notebook_1_pane_1, -1, _("Puertos"))
  self.text_ctrl_1 = wx.TextCtrl(self.notebook_1_pane_1, -1, "")
  self.text_ctrl_2 = wx.TextCtrl(self.notebook_1_pane_1, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY)
  self.static_line_1 = wx.StaticLine(self.notebook_1_pane_1, -1)
  self.label_16 = wx.StaticText(self.notebook_1_pane_1, -1, _("Puertos Tcp"))
  self.spin_ctrl_1 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=1, max=65535)
  self.button_5 = wx.Button(self.notebook_1_pane_1, -1, _("Insertar"))
  self.button_6 = wx.Button(self.notebook_1_pane_1, -1, _("Borrar"))
  self.button_7 = wx.Button(self.notebook_1_pane_1, -1, _("Limpiar"))
  self.checkbox_1 = wx.CheckBox(self.notebook_1_pane_1, -1, _("Rango ?"))
  self.spin_ctrl_3 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=1, max=65535)
  self.label_17 = wx.StaticText(self.notebook_1_pane_1, -1, _("Puertos Udp"))
  self.spin_ctrl_2 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=1, max=65535)
  self.button_8 = wx.Button(self.notebook_1_pane_1, -1, _("Insertar"))
  self.button_9 = wx.Button(self.notebook_1_pane_1, -1, _("Borrar"))
  self.button_10 = wx.Button(self.notebook_1_pane_1, -1, _("Limpiar"))
  self.checkbox_2 = wx.CheckBox(self.notebook_1_pane_1, -1, _("Rango ?"))
  self.spin_ctrl_4 = wx.SpinCtrl(self.notebook_1_pane_1, -1, "", min=1, max=65535)
  self.label_15_copy = wx.StaticText(self.notebook_1_pane_2, -1, _("Nombre"))
  self.label_21_copy = wx.StaticText(self.notebook_1_pane_2, -1, _("Puertos"))
  self.combo_box_3 = wx.ComboBox(self.notebook_1_pane_2, -1, choices=[], style=wx.CB_DROPDOWN|wx.CB_READONLY)
  self.text_ctrl_2_copy = wx.TextCtrl(self.notebook_1_pane_2, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY)
  self.static_line_2_copy = wx.StaticLine(self.notebook_1_pane_2, -1)
  self.label_16_copy = wx.StaticText(self.notebook_1_pane_2, -1, _("Puertos Tcp"))
  self.spin_ctrl_2_copy = wx.SpinCtrl(self.notebook_1_pane_2, -1, "", min=1, max=65535)
  self.button_5_copy = wx.Button(self.notebook_1_pane_2, -1, _("Insertar"))
  self.button_6_copy = wx.Button(self.notebook_1_pane_2, -1, _("Borrar"))
  self.button_7_copy = wx.Button(self.notebook_1_pane_2, -1, _("Limpiar"))
  self.checkbox_1_copy = wx.CheckBox(self.notebook_1_pane_2, -1, _("Rango ?"))
  self.spin_ctrl_4_copy = wx.SpinCtrl(self.notebook_1_pane_2, -1, "", min=1, max=65535)
  self.label_17_copy = wx.StaticText(self.notebook_1_pane_2, -1, _("Puertos Udp"))
  self.spin_ctrl_3_copy = wx.SpinCtrl(self.notebook_1_pane_2, -1, "", min=1, max=65535)
  self.button_8_copy = wx.Button(self.notebook_1_pane_2, -1, _("Insertar"))
  self.button_9_copy = wx.Button(self.notebook_1_pane_2, -1, _("Borrar"))
  self.button_10_copy = wx.Button(self.notebook_1_pane_2, -1, _("Limpiar"))
  self.checkbox_2_copy = wx.CheckBox(self.notebook_1_pane_2, -1, _("Rango ?"))
  self.spin_ctrl_5_copy = wx.SpinCtrl(self.notebook_1_pane_2, -1, "", min=1, max=65535)
  self.button_11 = wx.Button(self.notebook_1_pane_2, -1, _("Eliminar servicio"))
  #self.usuarios=MyChild1(None,-1,"")
  self.tcp=['']
  self.udp=['']
   
  self.__set_properties()
  self.SetFocus()
  self.__do_layout()
  # end wxGlade
   
  def __set_properties(self):
  # begin wxGlade: MyChild2.__set_properties
  self.SetTitle(_("Servicios"))
  self.notebook_1_pane_2.Hide()
  self.spin_ctrl_3.Enable(False)
  self.spin_ctrl_4.Enable(False)
  self.spin_ctrl_5_copy.Enable(False)
  self.spin_ctrl_4_copy.Enable(False)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
  self.lista_srv=servicios()[0]
  self.lista_srv.sort()
  self.combo_box_3.Append('')
  for i in self.lista_srv:
  self.combo_box_3.Append(i)
  # end wxGlade
   
  def __do_layout(self):
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_15 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16 = wx.BoxSizer(wx.VERTICAL)
  sizer_23_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_24 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_21 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_22 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_23 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_17 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_20 = wx.BoxSizer(wx.VERTICAL)
  sizer_18 = wx.BoxSizer(wx.VERTICAL)
  sizer_19 = wx.BoxSizer(wx.VERTICAL)
  sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_6 = wx.BoxSizer(wx.VERTICAL)
  sizer_13 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_12 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_10 = wx.BoxSizer(wx.VERTICAL)
  sizer_8 = wx.BoxSizer(wx.VERTICAL)
  sizer_9 = wx.BoxSizer(wx.VERTICAL)
  sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4 = wx.BoxSizer(wx.VERTICAL)
  sizer_3.Add((20, 20), 0, 0, 0)
  sizer_4.Add((20, 20), 1, 0, 0)
  sizer_4.Add(self.button_1, 0, wx.EXPAND, 0)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_4.Add(self.button_2, 0, wx.EXPAND, 0)
  sizer_4.Add((20, 20), 1, 0, 0)
  sizer_4.Add(self.button_3, 0, wx.EXPAND, 0)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_4.Add(self.button_4, 0, wx.EXPAND, 0)
  sizer_4.Add((20, 20), 1, 0, 0)
  sizer_3.Add(sizer_4, 0, wx.EXPAND, 0)
  sizer_3.Add((20, 20), 1, 0, 0)
  sizer_2.Add(sizer_3, 0, wx.EXPAND, 0)
  sizer_5.Add((10, 10), 0, 0, 0)
  sizer_8.Add(self.label_1, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_8.Add((10, 10), 0, 0, 0)
  sizer_9.Add((10, 10), 0, wx.ALL, 0)
  sizer_9.Add(self.label_2, 0, 0, 0)
  sizer_9.Add((20, 20), 1, 0, 0)
  sizer_8.Add(sizer_9, 1, wx.EXPAND, 0)
  sizer_7.Add(sizer_8, 0, wx.EXPAND, 0)
  sizer_7.Add((20, 20), 0, 0, 0)
  sizer_10.Add(self.text_ctrl_1, 0, wx.EXPAND, 0)
  sizer_10.Add((10, 10), 0, 0, 0)
  sizer_10.Add(self.text_ctrl_2, 1, wx.EXPAND, 0)
  sizer_10.Add((10, 10), 0, wx.ALL, 0)
  sizer_7.Add(sizer_10, 1, wx.EXPAND, 0)
  sizer_6.Add(sizer_7, 1, wx.EXPAND, 0)
  sizer_6.Add(self.static_line_1, 0, wx.EXPAND, 0)
  sizer_11.Add(self.label_16, 0, wx.ALIGN_BOTTOM, 0)
  sizer_11.Add((20, 20), 0, 0, 0)
  sizer_11.Add(self.spin_ctrl_1, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_12.Add((20, 20), 1, 0, 0)
  sizer_12.Add(self.button_5, 0, wx.ALIGN_BOTTOM, 0)
  sizer_12.Add((20, 20), 0, 0, 0)
  sizer_12.Add(self.button_6, 0, wx.ALIGN_BOTTOM, 0)
  sizer_12.Add((20, 20), 0, 0, 0)
  sizer_12.Add(self.button_7, 0, wx.ALIGN_BOTTOM, 0)
  sizer_12.Add((15, 15), 1, 0, 0)
  sizer_12.Add(self.checkbox_1, 0, wx.ALIGN_BOTTOM, 0)
  sizer_12.Add(self.spin_ctrl_3, 0, wx.ALIGN_BOTTOM, 0)
  sizer_11.Add(sizer_12, 1, wx.EXPAND, 0)
  sizer_6.Add(sizer_11, 0, wx.EXPAND, 0)
  sizer_6.Add((20, 20), 0, wx.ALL, 0)
  sizer_6.Add((10, 10), 0, 0, 0)
  sizer_13.Add(self.label_17, 0, 0, 0)
  sizer_13.Add((20, 20), 0, 0, 0)
  sizer_13.Add(self.spin_ctrl_2, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_14.Add((20, 20), 1, 0, 0)
  sizer_14.Add(self.button_8, 0, 0, 0)
  sizer_14.Add((20, 20), 0, 0, 0)
  sizer_14.Add(self.button_9, 0, 0, 0)
  sizer_14.Add((20, 20), 0, 0, 0)
  sizer_14.Add(self.button_10, 0, 0, 0)
  sizer_14.Add((15, 15), 1, 0, 0)
  sizer_14.Add(self.checkbox_2, 0, wx.ALIGN_BOTTOM, 0)
  sizer_14.Add(self.spin_ctrl_4, 0, wx.ALIGN_BOTTOM, 0)
  sizer_13.Add(sizer_14, 1, wx.EXPAND, 0)
  sizer_6.Add(sizer_13, 0, wx.EXPAND, 0)
  sizer_6.Add((20, 20), 0, 0, 0)
  sizer_6.Add((20, 20), 0, 0, 0)
  sizer_5.Add(sizer_6, 1, wx.EXPAND, 0)
  sizer_5.Add((20, 20), 0, 0, 0)
  self.notebook_1_pane_1.SetAutoLayout(True)
  self.notebook_1_pane_1.SetSizer(sizer_5)
  sizer_5.Fit(self.notebook_1_pane_1)
  sizer_5.SetSizeHints(self.notebook_1_pane_1)
  sizer_15.Add((10, 10), 0, 0, 0)
  sizer_18.Add(self.label_15_copy, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_18.Add((10, 10), 0, 0, 0)
  sizer_19.Add((10, 10), 0, wx.ALL, 0)
  sizer_19.Add(self.label_21_copy, 0, 0, 0)
  sizer_19.Add((20, 20), 1, 0, 0)
  sizer_18.Add(sizer_19, 1, wx.EXPAND, 0)
  sizer_17.Add(sizer_18, 0, wx.EXPAND, 0)
  sizer_17.Add((20, 20), 0, 0, 0)
  sizer_20.Add(self.combo_box_3, 0, wx.EXPAND, 0)
  sizer_20.Add((10, 10), 0, 0, 0)
  sizer_20.Add(self.text_ctrl_2_copy, 1, wx.EXPAND, 0)
  sizer_20.Add((10, 10), 0, wx.ALL, 0)
  sizer_17.Add(sizer_20, 1, wx.EXPAND, 0)
  sizer_16.Add(sizer_17, 1, wx.EXPAND, 0)
  sizer_16.Add(self.static_line_2_copy, 0, wx.EXPAND, 0)
  sizer_21.Add(self.label_16_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_21.Add((20, 20), 0, 0, 0)
  sizer_21.Add(self.spin_ctrl_2_copy, 0, wx.ALIGN_BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_22.Add((20, 20), 1, 0, 0)
  sizer_22.Add(self.button_5_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_22.Add((20, 20), 0, 0, 0)
  sizer_22.Add(self.button_6_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_22.Add((20, 20), 0, 0, 0)
  sizer_22.Add(self.button_7_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_22.Add((15, 15), 1, 0, 0)
  sizer_22.Add(self.checkbox_1_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_22.Add(self.spin_ctrl_4_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_21.Add(sizer_22, 1, wx.EXPAND, 0)
  sizer_16.Add(sizer_21, 0, wx.EXPAND, 0)
  sizer_16.Add((20, 20), 0, wx.ALL, 0)
  sizer_16.Add((10, 10), 0, 0, 0)
  sizer_23_copy.Add(self.label_17_copy, 0, 0, 0)
  sizer_23_copy.Add((20, 20), 0, 0, 0)
  sizer_23_copy.Add(self.spin_ctrl_3_copy, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_24.Add((20, 20), 1, 0, 0)
  sizer_24.Add(self.button_8_copy, 0, 0, 0)
  sizer_24.Add((20, 20), 0, 0, 0)
  sizer_24.Add(self.button_9_copy, 0, 0, 0)
  sizer_24.Add((20, 20), 0, 0, 0)
  sizer_24.Add(self.button_10_copy, 0, 0, 0)
  sizer_24.Add((15, 15), 1, 0, 0)
  sizer_24.Add(self.checkbox_2_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_24.Add(self.spin_ctrl_5_copy, 0, wx.ALIGN_BOTTOM, 0)
  sizer_23_copy.Add(sizer_24, 1, wx.EXPAND, 0)
  sizer_16.Add(sizer_23_copy, 0, wx.EXPAND, 0)
  sizer_16.Add((20, 20), 0, 0, 0)
  sizer_23.Add((20, 20), 1, 0, 0)
  sizer_23.Add(self.button_11, 0, 0, 0)
  sizer_16.Add(sizer_23, 0, wx.EXPAND, 0)
  sizer_16.Add((20, 20), 0, 0, 0)
  sizer_15.Add(sizer_16, 1, wx.EXPAND, 0)
  sizer_15.Add((20, 20), 0, 0, 0)
  self.notebook_1_pane_2.SetAutoLayout(True)
  self.notebook_1_pane_2.SetSizer(sizer_15)
  sizer_15.Fit(self.notebook_1_pane_2)
  sizer_15.SetSizeHints(self.notebook_1_pane_2)
  self.notebook_1.AddPage(self.notebook_1_pane_1, _("Nuevo Servicio"))
  self.notebook_1.AddPage(self.notebook_1_pane_2, _("Modificar Servicio"))
   
  # Segun la version de la libreria hace una cosa u otra
  vers= wx.VERSION[0:2]
  if vers[0]<=2 and vers[1]<=4:
  sizer_2.Add(wx.NotebookSizer(self.notebook_1), 1, wx.EXPAND, 0)
  else:
  sizer_2.Add(self.notebook_1, 1, wx.EXPAND, 0)
   
  sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  sizer_1.Fit(self)
  sizer_1.SetSizeHints(self)
  self.Layout()
  # end wxGlade
  wx.EVT_BUTTON(self, self.button_1.GetId(), self.cambia_panel)
  wx.EVT_BUTTON(self, self.button_2.GetId(), self.cambia_panel)
  wx.EVT_BUTTON(self, self.button_3.GetId(), self.acepta)
  wx.EVT_BUTTON(self, self.button_4.GetId(), self.cancela)
  wx.EVT_CHECKBOX(self,self.checkbox_1.GetId(),self.activa)
  wx.EVT_CHECKBOX(self,self.checkbox_2.GetId(),self.activa)
  wx.EVT_CHECKBOX(self,self.checkbox_1_copy.GetId(),self.activa)
  wx.EVT_CHECKBOX(self,self.checkbox_2_copy.GetId(),self.activa)
  wx.EVT_SPINCTRL(self,self.spin_ctrl_1.GetId(),self.rango1)
  wx.EVT_SPINCTRL(self,self.spin_ctrl_2.GetId(),self.rango2)
  wx.EVT_SPINCTRL(self,self.spin_ctrl_2_copy.GetId(),self.rango3)
  wx.EVT_SPINCTRL(self,self.spin_ctrl_3_copy.GetId(),self.rango4)
  wx.EVT_TEXT(self,self.combo_box_3.GetId(),self.puertos)
  wx.EVT_BUTTON(self, self.button_7.GetId(), self.limpia)
  wx.EVT_BUTTON(self, self.button_10.GetId(), self.limpia)
  wx.EVT_BUTTON(self, self.button_7_copy.GetId(), self.limpia)
  wx.EVT_BUTTON(self, self.button_10_copy.GetId(), self.limpia)
  wx.EVT_BUTTON(self, self.button_5_copy.GetId(), self.pon)
  wx.EVT_BUTTON(self, self.button_8_copy.GetId(), self.pon)
  wx.EVT_BUTTON(self, self.button_5.GetId(), self.pon)
  wx.EVT_BUTTON(self, self.button_8.GetId(), self.pon)
  wx.EVT_BUTTON(self, self.button_6_copy.GetId(), self.quita)
  wx.EVT_BUTTON(self, self.button_9_copy.GetId(), self.quita)
  wx.EVT_BUTTON(self, self.button_6.GetId(), self.quita)
  wx.EVT_BUTTON(self, self.button_9.GetId(), self.quita)
  wx.EVT_BUTTON(self, self.button_11.GetId(), self.elimina_srv)
  wx.EVT_TEXT(self,self.text_ctrl_1.GetId(),self.valida_nombre)
  wx.EVT_CLOSE(self,self.cancela)
   
  # Borra un servicio dado del archivo de configuracion
  def elimina_srv(self,evt):
  srv=self.combo_box_3.GetValue()
  if len(srv)==0:
  dlg = wx.MessageDialog(self, _("No hay ningun servicio seleccionado."),
  _('Aviso ACEPT'), wx.OK | wx.ICON_HAND)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  else:
  dlg = wx.MessageDialog(self, _("Esta seguro de que desea eleminar el servicio")+" "+srv+_("?"),
  _('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  elimina_srv(srv)
   
  self.combo_box_3.Clear()
  self.combo_box_3.SetValue('')
  self.text_ctrl_2_copy.Clear()
  self.lista_srv=servicios()[0]
  self.lista_srv.sort()
  self.combo_box_3.Append('')
  for i in self.lista_srv:
  self.combo_box_3.Append(i)
  dlg.Destroy()
  else:
  dlg.Destroy()
   
  #Comprueba que el nombre de un nuevo servicio no coincida con el de uno antiguo
  def valida_nombre(self,evt):
  prohibidas=['config','squid','servicios','usuarios','source','group','blacklists','activo','total_diario','total_semanal','total_mensual']
  for i in self.lista_srv:
  if i == self.text_ctrl_1.GetValue():
  dlg = wx.MessageDialog(self, _("El nombre de servicio ya existe!"),
  _('Aviso ACEPT'), wx.OK | wx.ICON_HAND)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  self.text_ctrl_1.Clear()
  try:
  ind=prohibidas.index(self.text_ctrl_1.GetValue())
  except ValueError:
  pass
  else:
  dlg = wx.MessageDialog(self, _(" Este nombre de servicio no es valido \n Se trata de una palabra reservada!"),
  _('Aviso ACEPT'), wx.OK | wx.ICON_HAND)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  self.text_ctrl_1.Clear()
   
   
  # Quita un puerto, o un rango de ellos de la definicion de un servicio
  def quita(self,evt):
   
  numeros=[]
  if evt.GetId()==self.button_6_copy.GetId():
  num=self.spin_ctrl_2_copy.GetValue()
  if self.checkbox_1_copy.IsChecked():
  lim=self.spin_ctrl_4_copy.GetValue()+1
  else:
  lim=num+1
  protocolo=self.tcp
  pizarra=self.text_ctrl_2_copy
  elif evt.GetId()==self.button_9_copy.GetId():
  num=self.spin_ctrl_3_copy.GetValue()
  if self.checkbox_2_copy.IsChecked():
  lim=self.spin_ctrl_5_copy.GetValue()+1
  else:
  lim=num+1
  protocolo=self.udp
  pizarra=self.text_ctrl_2_copy
  elif evt.GetId()==self.button_6.GetId():
  num=self.spin_ctrl_1.GetValue()
   
  if self.checkbox_1.IsChecked():
  lim=self.spin_ctrl_3.GetValue()+1
  else:
  lim=num+1
  protocolo=self.tcp
  pizarra=self.text_ctrl_2
  elif evt.GetId()==self.button_9.GetId():
  num=self.spin_ctrl_2.GetValue()
  if self.checkbox_2.IsChecked():
  lim=self.spin_ctrl_4.GetValue()+1
  else:
  lim=num+1
  protocolo=self.udp
  pizarra=self.text_ctrl_2
   
  items=len(protocolo)
  for i in range(items):
  if protocolo[i]=='':
  del protocolo[i]
   
  for i in range(num,lim):
  existe=False
  for j in protocolo:
  if int(j) == i :
  del protocolo[protocolo.index(j)]
   
  self.muestra_puertos(self.tcp,self.udp,pizarra)
   
   
  # Incorpora un puerto o un rango de ellos a la deficinicion de un servicio
  def pon(self,evt):
  numeros=[]
   
  if evt.GetId()==self.button_5_copy.GetId():
  num=self.spin_ctrl_2_copy.GetValue()
  if self.checkbox_1_copy.IsChecked():
  lim=self.spin_ctrl_4_copy.GetValue()+1
  else:
  lim=num+1
  protocolo=self.tcp
  pizarra=self.text_ctrl_2_copy
  elif evt.GetId()==self.button_8_copy.GetId():
  num=self.spin_ctrl_3_copy.GetValue()
  if self.checkbox_2_copy.IsChecked():
  lim=self.spin_ctrl_5_copy.GetValue()+1
  else:
  lim=num+1
  protocolo=self.udp
  pizarra=self.text_ctrl_2_copy
  elif evt.GetId()==self.button_5.GetId():
  num=self.spin_ctrl_1.GetValue()
   
  if self.checkbox_1.IsChecked():
  lim=self.spin_ctrl_3.GetValue()+1
  else:
  lim=num+1
  protocolo=self.tcp
  pizarra=self.text_ctrl_2
  elif evt.GetId()==self.button_8.GetId():
  num=self.spin_ctrl_2.GetValue()
  if self.checkbox_2.IsChecked():
  lim=self.spin_ctrl_4.GetValue()+1
  else:
  lim=num+1
  protocolo=self.udp
  pizarra=self.text_ctrl_2
   
  items=len(protocolo)
  for i in range(items):
  if protocolo[i]=='':
  del protocolo[i]
  for i in range(num,lim):
  existe=False
  for j in protocolo:
  if int(j) == i :
  existe=True
  if not existe:
  numeros.append(i)
  for i in numeros:
  protocolo.append(str(i))
  items=len(protocolo)
  for i in range(items):
  protocolo[i]=int(protocolo[i])
  protocolo.sort()
  for i in range(items):
  protocolo[i]=str(protocolo[i])
   
  self.muestra_puertos(self.tcp,self.udp,pizarra)
   
   
  # Borra todas los puertos de un servicio
  def limpia(self,evt):
  if evt.GetId()==self.button_7.GetId():
  self.tcp=['']
  pizarra=self.text_ctrl_2
  elif evt.GetId()==self.button_10.GetId():
  self.udp=['']
  pizarra=self.text_ctrl_2
  elif evt.GetId()==self.button_7_copy.GetId():
  self.tcp=['']
  pizarra=self.text_ctrl_2_copy
  elif evt.GetId()==self.button_10_copy.GetId():
  self.udp=['']
  pizarra=self.text_ctrl_2_copy
   
  self.muestra_puertos(self.tcp,self.udp,pizarra)
   
  # Lee los puertos de un servicio al seleccionarlo en la lista
  def puertos(self,evt):
  serv=self.combo_box_3.GetValue()
  if len(serv)>0:
  def_serv=servicios()
  indice=def_serv[0].index(serv)
  self.udp=def_serv[1][indice]
  self.tcp=def_serv[2][indice]
  iter=len(self.tcp)
  for i in range(iter):
  if self.tcp[i] != '':
  self.tcp[i]=self.tcp[i][2:]
   
  iter=len(self.udp)
  for i in range(iter):
  if self.udp[i] != '':
  self.udp[i]=self.udp[i][2:]
  self.muestra_puertos(self.tcp,self.udp,self.text_ctrl_2_copy)
   
  # Muestra en la interfaz grafica los puertos que componen un servicio
  def muestra_puertos(self,tcp,udp,pizarra):
  pizarra.Clear()
  pizarra.AppendText("Tcp: ")
  if tcp !=['']:
  for i in tcp:
  if i != tcp[-1]:
  pizarra.AppendText(i+", ")
  else:
  pizarra.AppendText(i)
   
  pizarra.AppendText("\nUdp: ")
  if udp !=['']:
  for i in udp:
  if i != udp[-1]:
  pizarra.AppendText(i+", ")
  else:
  pizarra.AppendText(i)
   
  # Los rango? comprueban el valor del puerto inicial, y si se selecciona "rango"
  # colocan el minimo como el valor ya seleccionado+1
  def rango1(self,evt):
  if self.spin_ctrl_3.IsEnabled():
  self.spin_ctrl_3.SetRange(self.spin_ctrl_1.GetValue()+1,65535)
   
  def rango2(self,evt):
  if self.spin_ctrl_4.IsEnabled():
  self.spin_ctrl_4.SetRange(self.spin_ctrl_2.GetValue()+1,65535)
   
  def rango3(self,evt):
  if self.spin_ctrl_4_copy.IsEnabled():
  self.spin_ctrl_4_copy.SetRange(self.spin_ctrl_2_copy.GetValue()+1,65535)
   
  def rango4(self,evt):
  if self.spin_ctrl_5_copy.IsEnabled():
  self.spin_ctrl_5_copy.SetRange(self.spin_ctrl_3_copy.GetValue()+1,65535)
   
  def activa(self,evt):
  if self.checkbox_1.IsChecked():
  self.spin_ctrl_3.Enable(True)
  self.spin_ctrl_3.SetRange(self.spin_ctrl_1.GetValue()+1,65535)
  else:
  self.spin_ctrl_3.Enable(False)
   
  if self.checkbox_2.IsChecked():
  self.spin_ctrl_4.Enable(True)
  self.spin_ctrl_4.SetRange(self.spin_ctrl_2.GetValue()+1,65535)
  else:
  self.spin_ctrl_4.Enable(False)
   
  if self.checkbox_1_copy.IsChecked():
  self.spin_ctrl_4_copy.Enable(True)
  self.spin_ctrl_4_copy.SetRange(self.spin_ctrl_2_copy.GetValue()+1,65535)
  else:
  self.spin_ctrl_4_copy.Enable(False)
   
  if self.checkbox_2_copy.IsChecked():
  self.spin_ctrl_5_copy.Enable(True)
  self.spin_ctrl_5_copy.SetRange(self.spin_ctrl_3_copy.GetValue()+1,65535)
  else:
  self.spin_ctrl_5_copy.Enable(False)
   
  # Muestra un panel u otro, segun se seleccione en los botones laterales
  def cambia_panel( self, evt):
   
  if evt.GetId() == self.button_1.GetId():
  self.notebook_1_pane_2.Hide()
  self.notebook_1_pane_1.Show()
  self.tcp=['']
  self.udp=['']
  self.text_ctrl_2_copy.Clear()
  else :
  self.notebook_1_pane_2.Show()
  self.notebook_1_pane_1.Hide()
  self.combo_box_3.SetValue(self.combo_box_3.GetValue())
  self.text_ctrl_2.Clear()
   
  def cancela( self, evt):
  child.servicios=False
  self.Destroy()
   
  # Graba los cambios realizados en el archivo de configuracion
  def acepta( self, evt):
   
  if self.notebook_1.GetSelection() == 0:
  servicio=self.text_ctrl_1.GetValue()
  else:
  servicio=self.combo_box_3.GetValue()
  reintenta=False
  sale=False
  if servicio != '':
  elimina_srv(servicio)
  status=crea_srv(servicio,self.tcp,self.udp)
  if status < 2:
  msg=_("Servicio ")+" '"+servicio+"' "+_("configurado correctamente")+"\n"+_("Desea salir de esta ventana?")
  dlg = wx.MessageDialog(self, msg,_('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  sale=True
  dlg.Destroy()
  else:
  sale=False
  dlg.Destroy()
  if self.notebook_1.GetSelection() == 0:
  self.text_ctrl_1.SetValue('')
  self.text_ctrl_2.Clear()
  else:
  self.text_ctrl_2_copy.Clear()
  self.combo_box_3.Clear()
  self.combo_box_3.SetValue('')
  self.lista_srv=servicios()[0]
  self.lista_srv.sort()
  self.combo_box_3.Append('')
  for i in self.lista_srv:
  self.combo_box_3.Append(i)
  self.combo_box_3.SetValue(self.combo_box_3.GetValue())
  else:
  msg=_("No hay puertos asignados al servicio!")+"\n"+_("Desea intentarlo de nuevo?")
  reintenta=True
  else:
  msg=_("No se ha seleccionado ningun servicio")+"\n"+_("Desea intentarlo de nuevo?")
  reintenta=True
   
  if reintenta:
  dlg = wx.MessageDialog(self, msg,_('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  dlg.Destroy()
  self.combo_box_3.Clear()
  self.combo_box_3.SetValue('')
  self.text_ctrl_2_copy.Clear()
  self.lista_srv=servicios()[0]
  self.lista_srv.sort()
  self.combo_box_3.Append('')
  for i in self.lista_srv:
  self.combo_box_3.Append(i)
  self.combo_box_3.SetValue(self.combo_box_3.GetValue())
  else:
  dlg.Destroy()
  child.servicios=False
  self.Destroy()
  else:
  if sale:
  child.servicios=False
  self.Destroy()
   
  # end of class MyChild2
   
   
  # Esta ventana se encarga de configurar las listas negras y sus componentes, de squid
  class MyChild3(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: MyChild3.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  self.label_1 = wx.StaticText(self, -1, _("Listas negras locales"))
  self.label_2 = wx.StaticText(self, -1, _("Fuentes de listas negras"))
  self.list_box_4_copy = wx.ListBox(self, -1, choices=[])
  self.button_1 = wx.Button(self, -1, _("Crear lista local"))
  self.button_2 = wx.Button(self, -1, _("Modificar lista local"))
  self.button_3 = wx.Button(self, -1, _("Eliminar lista local"))
  self.static_line_4 = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
  self.list_box_7 = wx.ListBox(self, -1, choices=[],style=wx.LB_MULTIPLE|wx.LB_SORT)
  self.button_4 = wx.Button(self, -1, _("Eliminar fuente"))
  self.label_3 = wx.StaticText(self, -1, _("Actualizar cada"))
  self.spin_ctrl_45 = wx.SpinCtrl(self, -1, "", min=0, max=365)
  self.label_4 = wx.StaticText(self, -1, _("Dias"))
  self.button_5 = wx.Button(self, -1, _("Actualizar ahora"))
  self.static_line_5 = wx.StaticLine(self, -1)
  self.label_5 = wx.StaticText(self, -1, _("Nueva fuente"))
  self.text_ctrl_1_copy = wx.TextCtrl(self, -1, "")
  self.button_6_copy = wx.Button(self, -1, _("Insertar"))
  self.button_7 = wx.Button(self, -1, _("Aceptar"))
  self.button_8 = wx.Button(self, -1, _("Cancelar"))
  self.crea=True
  self.modifica=True
  self.__set_properties()
  self.SetFocus()
  self.__do_layout()
  self.rellena_grupos()
   
  wx.EVT_BUTTON(self, self.button_1.GetId(), self.crea_grupo)
  wx.EVT_BUTTON(self, self.button_2.GetId(), self.aviso)
  wx.EVT_BUTTON(self, self.button_3.GetId(), self.aviso)
  wx.EVT_BUTTON(self, self.button_4.GetId(), self.elimina_fuente)
  wx.EVT_BUTTON(self, self.button_5.GetId(), self.actualiza)
  wx.EVT_BUTTON(self, self.button_6_copy.GetId(), self.inserta)
  wx.EVT_BUTTON(self, self.button_7.GetId(), self.acepta)
  wx.EVT_BUTTON(self, self.button_8.GetId(), self.cancela)
  wx.EVT_LISTBOX(self,self.list_box_4_copy.GetId(),self.lista_actual)
  wx.EVT_CLOSE(self,self.cancela)
   
  # end wxGlade
   
  def __set_properties(self):
  # begin wxGlade: MyChild3.__set_properties
  self.SetTitle(_("Listas"))
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: MyChild3.__do_layout
  sizer_15 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_12 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_13 = wx.BoxSizer(wx.VERTICAL)
  sizer_33 = wx.BoxSizer(wx.VERTICAL)
  sizer_36 = wx.BoxSizer(wx.VERTICAL)
  sizer_37 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_34_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_35 = wx.BoxSizer(wx.VERTICAL)
  sizer_14 = wx.BoxSizer(wx.VERTICAL)
  sizer_16 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_21 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_28 = wx.BoxSizer(wx.VERTICAL)
  sizer_29 = wx.BoxSizer(wx.VERTICAL)
  sizer_32 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_3 = wx.BoxSizer(wx.VERTICAL)
  sizer_4 = wx.BoxSizer(wx.VERTICAL)
  sizer_2.Add((20, 20), 0, 0, 0)
  sizer_3.Add(self.label_1, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_3.Add(self.list_box_4_copy, 1, 0, 0)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_4.Add(self.button_1, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_4.Add(self.button_2, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_4.Add(self.button_3, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_3.Add(sizer_4, 0, wx.EXPAND, 0)
  sizer_2.Add(sizer_3, 0, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_2.Add(sizer_9, 0, 0, 0)
  sizer_1.Add(sizer_2, 0, wx.EXPAND, 0)
  sizer_12.Add(self.static_line_4, 0, wx.EXPAND, 0)
  sizer_12.Add((20, 20), 0, 0, 0)
  sizer_16.Add(self.list_box_7, 1, wx.EXPAND, 0)
  sizer_16.Add((20, 20), 0, 0, 0)
  sizer_28.Add((20, 20), 0, 0, 0)
  sizer_28.Add(self.button_4, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_28.Add((20, 20), 1, wx.EXPAND, 0)
  sizer_29.Add(self.label_3, 0, 0, 0)
  sizer_32.Add(self.spin_ctrl_45, 0, wx.ALIGN_BOTTOM, 0)
  sizer_32.Add((20, 20), 0, wx.EXPAND, 0)
  sizer_32.Add(self.label_4, 0, wx.ALIGN_BOTTOM, 0)
  sizer_29.Add(sizer_32, 1, wx.EXPAND, 0)
  sizer_28.Add(sizer_29, 1, 0, 0)
  sizer_28.Add((20, 20), 1, 0, 0)
  sizer_28.Add(self.button_5, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_BOTTOM, 0)
  sizer_21.Add(sizer_28, 1, wx.EXPAND, 0)
  sizer_16.Add(sizer_21, 0, wx.LEFT|wx.EXPAND, 0)
  sizer_14.Add(self.label_2, 0, 0, 0)
  sizer_14.Add(sizer_16, 1, wx.EXPAND, 0)
  sizer_14.Add((20, 20), 0, 0, 0)
  sizer_13.Add(sizer_14, 1, wx.EXPAND, 0)
  sizer_35.Add((20, 20), 0, 0, 0)
  sizer_35.Add(self.static_line_5, 0, wx.EXPAND, 0)
  sizer_35.Add((20, 20), 0, 0, 0)
  sizer_33.Add(sizer_35, 0, wx.EXPAND, 0)
  sizer_34_copy.Add(self.text_ctrl_1_copy, 1, 0, 0)
  sizer_34_copy.Add((20, 20), 0, 0, 0)
  sizer_34_copy.Add(self.button_6_copy, 0, 0, 0)
  sizer_34_copy.Add((20, 20), 0, 0, 0)
  sizer_33.Add(self.label_5, 0, 0, 0)
  sizer_33.Add(sizer_34_copy, 0, wx.EXPAND, 0)
  sizer_36.Add((20, 20), 1, wx.EXPAND, 0)
  sizer_37.Add(self.button_7, 1, 0, 0)
  sizer_37.Add((20, 20), 1, 0, 0)
  sizer_37.Add(self.button_8, 1, 0, 0)
  sizer_36.Add(sizer_37, 1, wx.EXPAND, 0)
  sizer_36.Add((20, 20), 0, 0, 0)
  sizer_33.Add(sizer_36, 1, wx.EXPAND, 0)
  sizer_13.Add(sizer_33, 1, wx.EXPAND, 0)
  sizer_12.Add(sizer_13, 1, wx.EXPAND, 0)
  sizer_12.Add((20, 20), 0, 0, 0)
  sizer_1.Add(sizer_12, 1, wx.EXPAND, 0)
  sizer_15.Add(sizer_1, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_15)
  sizer_15.Fit(self)
  sizer_15.SetSizeHints(self)
  self.Layout()
  # end wxGlade
   
  # obtiene el nombre d ela lista negra seleccionada
  def lista_actual(self,event):
  bl_lst.nombre=self.list_box_4_copy.GetString(self.list_box_4_copy.GetSelections()[0])
   
  # Comprueba si se ha seleccionado una lista antes de realizar un cambio
  def aviso(self,event):
  if bl_lst.nombre=='':
  dlg = wx.MessageDialog(self, _("No ha seleccionado ninguna lista negra local!"),
  _('Aviso ACEPT'), wx.OK | wx.ICON_EXCLAMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  elif event.GetId()==self.button_3.GetId():
  self.elimina_lista_local()
  self.rellena_grupos()
  bl_lst.nombre=''
  elif event.GetId()==self.button_2.GetId():
  self.modifica_gr()
   
  # borra una lista del archivo de configuracion
  def elimina_lista_local(self):
  from confSquid import elimina_blacklist
  from inicSquid import apply_conf_squidguard
  from watcherSquid import establece_permisos
   
  dlg = wx.MessageDialog(self, _("Esta seguro de que desea eliminar la lista")+" "+bl_lst.nombre+_("?"),
  _('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  elimina_blacklist(bl_lst.nombre,archivo.configuracion)
  apply_conf_squidguard(archivo.aceptlog)
  dlg.Destroy()
  else:
  dlg.Destroy()
   
  # Elimina las fuentes de la interfaz grafica
  def elimina_fuente(self,event):
  if len(self.list_box_7.GetSelections())==0:
  dlg = wx.MessageDialog(self, _("No hay ninguna lista seleccionada para ser eliminada"),
  _('Aviso ACEPT'), wx.OK | wx.ICON_INFORMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  else:
  lista=[]
  for i in self.list_box_7.GetSelections():
  lista.append(self.list_box_7.GetString(i))
   
  items=self.list_box_7.GetCount()
  for i in range(items):
  for j in lista:
  if self.list_box_7.GetString(i)==j:
  self.list_box_7.Delete(i)
   
  # Incorpora a la interfaz grafica los grupos configurados
  def rellena_grupos(self):
  from confSquid import local_blacklists, lee_fuentes
  from func import consulta_campo
  local_blacklists=local_blacklists(archivo.configuracion)
  system_blacklists=lee_fuentes(archivo.configuracion)
  self.list_box_4_copy.Clear()
  self.list_box_7.Clear()
  for i in local_blacklists:
  self.list_box_4_copy.Append(i)
  for i in system_blacklists:
  self.list_box_7.Append(i)
  freq=consulta_campo('fr_update',archivo.aceptlog)
  self.spin_ctrl_45.SetValue(int(freq))
   
  # a�de una uri a la lista de uris que se usan para actualizar las listas negras
  def inserta(self,event):
  fuente=self.text_ctrl_1_copy.GetValue()
  if fuente:
  self.list_box_7.Append(fuente)
  items=self.list_box_7.GetCount()
  items=items-1
  max=items
  if items>0:
  for i in range(items):
  if i<=max:
  if self.list_box_7.GetString(i)==self.list_box_7.GetString(i+1):
  self.list_box_7.Delete(i)
  max=max-1
  if i>max:
  break
  self.text_ctrl_1_copy.Clear()
  else:
  dlg = wx.MessageDialog(self, _("No se ha introducido una URL"),
  _('Aviso ACEPT'), wx.OK | wx.ICON_INFORMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
   
  # muestra la interfaz para crear listas negras locales
  def crea_grupo(self, event):
  if self.crea:
  self.crea=False
  win=MyChild6(self, -1, "")
  win.Show()
   
  # Muestra la interfaz para modificar las listas negras locales
  def modifica_gr(self):
  if self.modifica:
  self.modifica=False
  win=MyChild7(self, -1, "")
  win.Show()
   
  # Hace que se descarguen las listas negras de las uris pertinentes las configura
  def actualiza(self,event):
  from watcherSquid import ublacklists,establece_permisos
  from confSquid import actualiza_fuentes
  from func_blacklists import revisa_blacklists
   
  padre=self.GetParent()
  self.Hide()
  self.Update()
  padre.Hide()
  padre.Update()
   
  fuentes=[]
  freq=self.spin_ctrl_45.GetValue()
  items=self.list_box_7.GetCount()
  for i in range(items):
  fuentes.append(self.list_box_7.GetString(i))
   
  actualiza_fuentes(fuentes,freq,archivo.configuracion)
  ####barra
  from os import system, kill
  from time import sleep
  f=open("/tmp/milog2","w")
  f.close()
  system('/usr/share/acept/barra.py "Configurando listas negras" &')
  sleep(5)
  pbl=ublacklists(archivo.configuracion)
  revisa_blacklists(archivo.configuracion)
  establece_permisos(archivo.configuracion)
  nproblems=len(pbl[0])
  if nproblems>0:
  msg1=" Problemas con la descarga de :"
  msg2=" Problemas con extraccion de :"
  nmsg1=len(msg1)
  nmsg2=len(msg2)
  for i in range(nproblems):
  if pbl[1][i]==0:
  msg1=msg1+'\n'+pbl[0][i]
  if pbl[1][i]==1:
  msg2=msg2+'\n'+pbl[0][i]
   
  msg_dlg=""
  if len(msg1)>nmsg1:
  msg_dlg=msg_dlg+msg1
  if len(msg2)>nmsg2:
  if len(msg_dlg)>0:
  msg_dlg=msg_dlg+'\n'
  msg_dlg=msg_dlg+msg2
   
  dlg = wx.MessageDialog(self, msg_dlg, _('Aviso ACEPT'), wx.OK | wx.ICON_INFORMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
   
  try:
  f=open("/tmp/bklprg","r")
  pid=f.read()
  kill(int(pid),9)
  system("rm /tmp/bklprg")
  except:
  pass
  dlg = wx.MessageDialog(self, _(" Finalizado proceso de actualizacion.\nLe recomendamos revisar las listas asignadas a los usuarios. "),
  _('Aviso ACEPT'), wx.OK | wx.ICON_INFORMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  padre.Show()
  self.Show()
   
  # Aplica los cambios a los archivos de configuracion
  def acepta(self,event):
  from confSquid import actualiza_fuentes
  from inicSquid import apply_conf_squidguard
   
  fuentes=[]
  freq=self.spin_ctrl_45.GetValue()
  items=self.list_box_7.GetCount()
  for i in range(items):
  fuentes.append(self.list_box_7.GetString(i))
   
  actualiza_fuentes(fuentes,freq,archivo.configuracion)
   
  apply_conf_squidguard(archivo.aceptlog)
   
  dlg = wx.MessageDialog(self, _(" Listado de fuentes actualizado.\n"+_("Desea salir de esta ventana?")),
  _('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  dlg.Destroy()
  self.cancela(self)
  else:
  dlg.Destroy()
   
   
  def cancela(self,event):
  child.listas=False
  self.Destroy()
   
  # end of class MyChild3
   
   
  class MyChild4(wx.Frame):
  def __init__(self, *args, **kwds):
  from os.path import isfile
  # begin wxGlade: MyFrame.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.label_2 = wx.StaticText(self, -1, " Texto")
  self.text_ctrl_2 = wx.TextCtrl(self, -1, "")
  self.button_1 = wx.Button(self, -1, "Incluir -->")
  self.button_1_copy = wx.Button(self, -1, "<-- Eliminar")
  self.button_1_copy_1 = wx.Button(self, -1, "Eliminar todo")
  self.static_line_1 = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
  self.label_1 = wx.StaticText(self, -1, "Expresiones", style=wx.ALIGN_CENTRE)
  self.text_ctrl_2.SetMinSize((183, 30))
  self.list_box_1 = wx.ListBox(self, -1, choices=[],style=wx.LB_SINGLE)
  #self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY)
  self.static_line_2 = wx.StaticLine(self, -1)
  self.button_5 = wx.Button(self, -1, "Aceptar")
  self.button_6 = wx.Button(self, -1, "Salir")
   
  # Lee el archivo /etc/acept/watcherCat/expresiones y rellena list_box_1
  if isfile("/etc/acept/watcherCat/expresiones/expressions"):
  f=open("/etc/acept/watcherCat/expresiones/expressions","r")
  lineas=f.read()
  lineas=lineas.replace("(","").replace(")","").replace("\n","")
  for i in lineas.split('|'):
  if len(i)>0:
  self.list_box_1.Append(i)
  else:
  from os.path import isdir
  if not isdir("/etc/acept/watcherCat/expresiones"):
  from os import mkdir
  mkdir("/etc/acept/watcherCat/expresiones")
   
  self.__set_properties()
  self.__do_layout()
   
  wx.EVT_BUTTON(self, self.button_1.GetId(),self.incluir)
  wx.EVT_BUTTON(self,self.button_1_copy.GetId(),self.elimina)
  wx.EVT_BUTTON(self, self.button_1_copy_1.GetId(),self.limpia_todo)
  wx.EVT_BUTTON(self, self.button_5.GetId(),self.aceptar)
  wx.EVT_BUTTON(self, self.button_6.GetId(),self.cancela)
  wx.EVT_CLOSE(self,self.cancela)
  # end wxGlade
   
  def elimina(self,event):
  fuente=self.list_box_1.GetSelection()
  self.list_box_1.Delete(fuente)
   
  def aceptar(self,event):
  from os.path import isdir
  from func import parse_file
  from func_blacklists import existe_grupo, append_grupo, revisa_grupo, revisa_blacklists, renuevadir
  from watcherSquid import compila_libreria, establece_permisos
  from inicSquid import apply_conf_squidguard
  from os import system, listdir, mkdir,kill
   
  padre=self.GetParent()
  self.Hide()
  self.Update()
  padre.Hide()
  padre.Update()
   
  items=self.list_box_1.GetCount()
  if items>0:
  if not isdir("/etc/acept/watcherCat/expresiones"):
  mkdir("/etc/acept/watcherCat/expresiones")
  f=open("/etc/acept/watcherCat/expresiones/expressions","w")
  f.write('(')
  for i in range(items):
  f.write(self.list_box_1.GetString(i))
  if i<items-1:
  f.write('|')
  f.write(')\n')
  f.close()
   
  system("cp -r /etc/acept/watcherCat/expresiones /var/lib/squidguard/db")
  xmldoc=parse_file(archivo.configuracion)
  grupos=xmldoc.getElementsByTagName('group')
  if existe_grupo("expresiones",grupos)==-1:
  append_grupo('expresiones','',xmldoc,archivo.configuracion,"/var/lib/squidguard/db/expresiones")
  else:
  revisa_grupo('expresiones','',xmldoc,archivo.configuracion,"/var/lib/squidguard/db/expresiones")
   
  compila_libreria("expresiones",archivo.aceptlog)
  revisa_blacklists(archivo.configuracion)
  renuevadir("/tmp/watch_blacklist", archivo.aceptlog)
  apply_conf_squidguard(archivo.aceptlog)
  establece_permisos(archivo.configuracion)
   
  mensaje="Proceso finalizado correctamente \n No olvide incorporar a los usuarios la lista expresiones."
  dlg = wx.MessageDialog(self, _(mensaje),
  _('Aviso ACEPT'), wx.OK | wx.ICON_INFORMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  padre.Show()
  child.expresiones=False
  self.Destroy()
   
   
  def incluir(self,event):
  fuente=self.text_ctrl_2.GetValue()
  if fuente:
  items=self.list_box_1.GetCount()
  items=items
  lista=[]
  existe=False
  for i in range(items):
  lista.append(self.list_box_1.GetString(i))
  for i in lista:
  if i==fuente:
  existe=True
  break
  if not existe:
  lista.append(fuente)
  lista.sort()
  self.list_box_1.Clear()
  for i in lista:
  self.list_box_1.Append(i)
   
  self.text_ctrl_2.Clear()
  else:
  dlg = wx.MessageDialog(self, _("No se ha introducido ninguna expresion"),
  _('Aviso ACEPT'), wx.OK | wx.ICON_INFORMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
   
   
  def limpia_todo(self,event):
  self.list_box_1.Clear()
   
  def oculta(self):
  from os import system
  from os.path import isfile
  self.Hide()
  padre=self.GetParent()
  padre.Hide()
   
  def cancela(self,event):
  child.expresiones=False
  self.Destroy()
   
  def __set_properties(self):
  # begin wxGlade: MyFrame.__set_properties
  self.SetTitle("Configurar expresiones regulares")
  self.text_ctrl_2.SetMinSize((183, 30))
  self.list_box_1.SetMinSize((300, 120))
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: MyFrame.__do_layout
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_3 = wx.BoxSizer(wx.VERTICAL)
  sizer_15 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_6_copy = wx.BoxSizer(wx.VERTICAL)
  sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4 = wx.BoxSizer(wx.VERTICAL)
  sizer_11_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_1 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_10 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_12 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_8 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_1.Add((10, 10), 0, wx.ADJUST_MINSIZE, 0)
  sizer_2.Add((10, 10), 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_8.Add((10, 10), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_4.Add(sizer_8, 0, wx.EXPAND, 0)
  sizer_9.Add(self.label_2, 1, wx.ALIGN_BOTTOM|wx.ADJUST_MINSIZE, 0)
  sizer_4.Add(sizer_9, 0, wx.EXPAND, 0)
  sizer_12.Add(self.text_ctrl_2, 1, wx.ADJUST_MINSIZE, 0)
  sizer_10.Add(sizer_12, 1, 0, 0)
  sizer_14.Add((55, 18), 0, wx.ADJUST_MINSIZE, 0)
  sizer_14.Add(self.button_1, 1, wx.ADJUST_MINSIZE, 0)
  sizer_10.Add(sizer_14, 1, wx.EXPAND, 0)
  sizer_4.Add(sizer_10, 0, wx.EXPAND, 0)
  sizer_4.Add((10, 10), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11.Add((10, 10), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_14_copy.Add((55, 18), 0, wx.ADJUST_MINSIZE, 0)
  sizer_14_copy.Add(self.button_1_copy, 1, wx.ADJUST_MINSIZE, 0)
  sizer_11.Add(sizer_14_copy, 1, wx.EXPAND, 0)
  sizer_4.Add(sizer_11, 0, wx.EXPAND, 0)
  sizer_4.Add((10, 10), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_11_copy.Add((10, 10), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_14_copy_1.Add((55, 18), 0, wx.ADJUST_MINSIZE, 0)
  sizer_14_copy_1.Add(self.button_1_copy_1, 1, wx.ADJUST_MINSIZE, 0)
  sizer_11_copy.Add(sizer_14_copy_1, 1, wx.EXPAND, 0)
  sizer_4.Add(sizer_11_copy, 0, wx.EXPAND, 0)
  sizer_4.Add((10, 10), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_5.Add(sizer_4, 1, wx.EXPAND, 0)
  sizer_7.Add((10, 10), 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_7.Add(self.static_line_1, 0, wx.EXPAND, 0)
  sizer_7.Add((10, 10), 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0)
  sizer_5.Add(sizer_7, 0, wx.EXPAND, 0)
  sizer_6_copy.Add(self.label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ADJUST_MINSIZE, 0)
  sizer_6_copy.Add(self.list_box_1, 1, wx.ADJUST_MINSIZE, 0)
  #sizer_6_copy.Add(self.text_ctrl_1, 1, wx.ADJUST_MINSIZE, 0)
  sizer_6_copy.Add((10, 10), 0, wx.ADJUST_MINSIZE, 0)
  sizer_5.Add(sizer_6_copy, 0, wx.EXPAND, 0)
  sizer_3.Add(sizer_5, 1, wx.EXPAND, 0)
  sizer_3.Add(self.static_line_2, 0, wx.EXPAND, 0)
  sizer_3.Add((10, 10), 0, wx.ADJUST_MINSIZE, 0)
  sizer_15.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_16.Add(self.button_5, 0, wx.ADJUST_MINSIZE, 0)
  sizer_16.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_16.Add(self.button_6, 0, wx.ADJUST_MINSIZE, 0)
  sizer_15.Add(sizer_16, 1, wx.EXPAND, 0)
  sizer_15.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
  sizer_3.Add(sizer_15, 0, wx.EXPAND, 0)
  sizer_3.Add((10, 10), 0, wx.ADJUST_MINSIZE, 0)
  sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
  sizer_2.Add((10, 10), 0, wx.ADJUST_MINSIZE, 0)
  sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  sizer_1.Fit(self)
  sizer_1.SetSizeHints(self)
  self.Layout()
  # end wxGlade
   
   
  # Esta ventana se encarga de asignar listas negras o blancas a usuarios determinados
  class MyChild5(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: MyChild5.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  self.label_18_copy_1 = wx.StaticText(self, -1, _("Usuarios"))
  self.list_box_14 = wx.ListBox(self, -1, choices=[],style=wx.LB_SINGLE)
  self.button_28 = wx.Button(self, -1, _("Aceptar"))
  self.button_29 = wx.Button(self, -1, _("Cancelar"))
  self.static_line_7 = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
  self.label_18 = wx.StaticText(self, -1, _("Listas negras del sistema"))
  self.label_19 = wx.StaticText(self, -1, _("Lista negra del usuario"))
  self.list_box_12 = wx.ListBox(self, -1, choices=[],style=wx.LB_EXTENDED|wx.LB_SORT)
  self.button_30_copy = wx.Button(self, -1, _("Insertar todo"))
  self.button_31_copy_copy = wx.Button(self, -1, "-->")
  self.button_32_copy = wx.Button(self, -1, "<--")
  self.button_33_copy = wx.Button(self, -1, _("Borrar todo"))
  self.list_box_13 = wx.ListBox(self, -1, choices=[],style=wx.LB_EXTENDED|wx.LB_SORT)
  self.static_line_8 = wx.StaticLine(self, -1)
  self.label_18_copy = wx.StaticText(self, -1, _("Introduzca un nuevo dominio"))
  self.label_19_copy = wx.StaticText(self, -1, _("Lista blanca del usuario"))
  self.text_ctrl_8 = wx.TextCtrl(self, -1, "")
  self.button_34_copy = wx.Button(self, -1, "-->")
  self.button_35_copy = wx.Button(self, -1, "<--")
  self.button_36_copy = wx.Button(self, -1, _("Borrar todo"))
  self.list_box_15 = wx.ListBox(self, -1, choices=[],style=wx.LB_MULTIPLE|wx.LB_SORT)
  self.rellena_usuarios()
  self.listas_negras()
  self.SetFocus()
  self.__set_properties()
  self.__do_layout()
   
  self.vieja_sel=(-1)
  self.viejo_last=False
  self.contador=-1
   
  wx.EVT_CLOSE(self,self.cancela)
  wx.EVT_BUTTON(self, self.button_30_copy.GetId(), self.in_todo)
  wx.EVT_BUTTON(self, self.button_31_copy_copy.GetId(), self.inserta_blacklist)
  wx.EVT_BUTTON(self, self.button_32_copy.GetId(), self.elimina_listanegra)
  wx.EVT_BUTTON(self, self.button_33_copy.GetId(), self.del_todo)
  wx.EVT_BUTTON(self, self.button_34_copy.GetId(), self.inserta_whitelist)
  wx.EVT_BUTTON(self, self.button_35_copy.GetId(), self.elimina_whitelist)
  wx.EVT_BUTTON(self, self.button_36_copy.GetId(), self.del_todo_bl)
  wx.EVT_BUTTON(self, self.button_28.GetId(), self.acepta)
  wx.EVT_BUTTON(self, self.button_29.GetId(), self.cancela)
  wx.EVT_LISTBOX(self,self.list_box_14.GetId(),self.datos_user)
  wx.EVT_LISTBOX(self,self.list_box_12.GetId(),self.l12)
  # end wxGlade
   
  def __set_properties(self):
  # begin wxGlade: MyChild5.__set_properties
  self.SetTitle(_("Contenidos"))
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: MyChild5.__do_layout
  sizer_73 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_74 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_76 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_80 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_81 = wx.BoxSizer(wx.VERTICAL)
  sizer_87 = wx.BoxSizer(wx.VERTICAL)
  sizer_88 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_89 = wx.BoxSizer(wx.VERTICAL)
  sizer_90_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_82 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_84 = wx.BoxSizer(wx.VERTICAL)
  sizer_90 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_75 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_77 = wx.BoxSizer(wx.VERTICAL)
  sizer_78 = wx.BoxSizer(wx.VERTICAL)
  sizer_79 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_85 = wx.BoxSizer(wx.VERTICAL)
  sizer_86 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_90_copy_1 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_90_copy_1.Add((20, 20), 0, 0, 0)
  sizer_90_copy_1.Add(self.label_18_copy_1, 1, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_85.Add(sizer_90_copy_1, 0, 0, 0)
  sizer_86.Add((20, 20), 0, 0, 0)
  sizer_86.Add(self.list_box_14, 1, wx.EXPAND, 0)
  sizer_85.Add(sizer_86, 1, wx.EXPAND, 0)
  sizer_77.Add(sizer_85, 1, wx.EXPAND, 0)
  sizer_78.Add((20, 20), 0, 0, 0)
  sizer_79.Add((20, 20), 1, 0, 0)
  sizer_79.Add(self.button_28, 0, 0, 0)
  sizer_79.Add((20, 20), 1, 0, 0)
  sizer_79.Add(self.button_29, 0, 0, 0)
  sizer_78.Add(sizer_79, 1, wx.EXPAND, 0)
  sizer_78.Add((20, 20), 0, 0, 0)
  sizer_77.Add(sizer_78, 0, wx.EXPAND, 0)
  sizer_75.Add(sizer_77, 1, wx.EXPAND, 0)
  sizer_75.Add((20, 20), 0, 0, 0)
  sizer_74.Add(sizer_75, 0, wx.EXPAND, 0)
  sizer_80.Add(self.static_line_7, 0, wx.EXPAND, 0)
  sizer_80.Add((20, 20), 0, 0, 0)
  sizer_90.Add(self.label_18, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_90.Add((20, 20), 1, 0, 0)
  sizer_90.Add(self.label_19, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_81.Add(sizer_90, 0, wx.EXPAND, 0)
  sizer_82.Add(self.list_box_12, 1, wx.EXPAND, 0)
  sizer_82.Add((20, 20), 0, 0, 0)
  sizer_84.Add((20, 20), 1, 0, 0)
  sizer_84.Add(self.button_30_copy, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_84.Add((20, 20), 1, 0, 0)
  sizer_84.Add(self.button_31_copy_copy, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_84.Add((20, 20), 0, 0, 0)
  sizer_84.Add(self.button_32_copy, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_84.Add((20, 20), 1, 0, 0)
  sizer_84.Add(self.button_33_copy, 0, wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_84.Add((20, 20), 1, 0, 0)
  sizer_82.Add(sizer_84, 0, wx.EXPAND, 0)
  sizer_82.Add((20, 20), 0, 0, 0)
  sizer_82.Add(self.list_box_13, 1, wx.EXPAND, 0)
  sizer_81.Add(sizer_82, 1, wx.EXPAND, 0)
  sizer_81.Add((20, 20), 0, 0, 0)
  sizer_81.Add(self.static_line_8, 0, wx.EXPAND, 0)
  sizer_90_copy.Add(self.label_18_copy, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_90_copy.Add((20, 20), 1, wx.EXPAND, 0)
  sizer_90_copy.Add(self.label_19_copy, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_87.Add(sizer_90_copy, 0, wx.EXPAND, 0)
  sizer_88.Add(self.text_ctrl_8, 1, 0, 0)
  sizer_88.Add((20, 20), 0, 0, 0)
  sizer_89.Add(self.button_34_copy, 0, 0, 0)
  sizer_89.Add((20, 20), 0, 0, 0)
  sizer_89.Add(self.button_35_copy, 0, 0, 0)
  sizer_89.Add((20, 20), 1, wx.EXPAND, 0)
  sizer_89.Add(self.button_36_copy, 0, 0, 0)
  sizer_88.Add(sizer_89, 0, wx.EXPAND, 0)
  sizer_88.Add((20, 20), 0, 0, 0)
  sizer_88.Add(self.list_box_15, 1, wx.EXPAND, 0)
  sizer_87.Add(sizer_88, 1, wx.EXPAND, 0)
  sizer_81.Add(sizer_87, 1, wx.EXPAND, 0)
  sizer_81.Add((20, 20), 0, 0, 0)
  sizer_80.Add(sizer_81, 1, wx.EXPAND, 0)
  sizer_80.Add((20, 20), 0, 0, 0)
  sizer_76.Add(sizer_80, 1, wx.EXPAND, 0)
  sizer_74.Add(sizer_76, 1, wx.EXPAND, 0)
  sizer_73.Add(sizer_74, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_73)
  sizer_73.Fit(self)
  sizer_73.SetSizeHints(self)
  self.Layout()
  # end wxGlade
   
   
  def l12(self,event):
  try:
  nueva_sel=self.list_box_12.GetSelections()
  self.contador=self.contador+1
  last=-1
  if self.contador>0 and self.vieja_sel!=(-1):
  self.contador=1
  items=len(self.vieja_sel)
  for i in range(items):
  if self.vieja_sel[i]!=nueva_sel[i]:
  last=i
  break
  if self.viejo_last:
  if self.vieja_sel[self.viejo_last] == nueva_sel[last]:
  self.list_box_12.Deselect(self.vieja_sel[self.viejo_last])
   
  if self.contador>0:
  self.viejo_last=-1
  self.vieja_sel=self.list_box_12.GetSelections()
  except:
  self.vieja_sel=self.list_box_12.GetSelections()
   
  # quita una lista negra al usuario seleccionado
  def elimina_listanegra(self,event):
  lista=[]
  for i in self.list_box_13.GetSelections():
  lista.append(self.list_box_13.GetString(i))
   
  items=self.list_box_13.GetCount()
  for i in range(items):
  for j in lista:
  if self.list_box_13.GetString(i)==j:
  self.list_box_13.Delete(i)
   
  # quita una lista blanca al usuario seleccionado
  def elimina_whitelist(self,event):
  lista=[]
  for i in self.list_box_15.GetSelections():
  lista.append(self.list_box_15.GetString(i))
   
  items=self.list_box_15.GetCount()
  for i in range(items):
  for j in lista:
  if self.list_box_15.GetString(i)==j:
  self.list_box_15.Delete(i)
   
  # a�de una lista blanca al usuario seleccionado
  def inserta_whitelist(self,event):
  self.list_box_15.Append(self.text_ctrl_8.GetValue())
  self.text_ctrl_8.Clear()
  items=self.list_box_15.GetCount()
  items=items-1
  max=items
  if items>0:
  for i in range(items):
  if i<=max:
  if self.list_box_15.GetString(i)==self.list_box_15.GetString(i+1):
  self.list_box_15.Delete(i)
  max=max-1
  if i>max:
  break
   
  # a�de una lista negra al usuario seleccionado
  def inserta_blacklist(self,event):
  for i in self.list_box_12.GetSelections():
  self.list_box_13.Append(self.list_box_12.GetString(i))
   
  items=self.list_box_13.GetCount()
  items=items-1
  max=items
  if items>0:
  for i in range(items):
  if i<=max:
  if self.list_box_13.GetString(i)==self.list_box_13.GetString(i+1):
  self.list_box_13.Delete(i)
  max=max-1
  if i>max:
  break
  # borra todas las listas negras del usuario
  def del_todo(self,event):
  self.list_box_13.Clear()
   
  # borra todas las listas blancas del usuario
  def del_todo_bl(self,event):
  self.list_box_15.Clear()
   
  # inserta todas las listas negras a un usuario
  def in_todo(self,event):
  self.list_box_13.Clear()
  items=self.list_box_12.GetCount()
  for i in range(items):
  self.list_box_13.Append(self.list_box_12.GetString(i))
   
  # Lee las listas negras del sistema
  def listas_negras(self):
  from confSquid import listado_blacklists
  listas=listado_blacklists(archivo.configuracion)
  for i in listas:
  self.list_box_12.Append(i)
   
  # Toma los datos de la configuracion del usuario seleccionado
  def datos_user(self,event):
  from confSquid import lee_userblacklists, lee_whitelist
  usr=self.list_box_14.GetString(self.list_box_14.GetSelections()[0])
  if len(self.list_box_12.GetSelections())>0:
  for i in range(self.list_box_12.GetCount()):
  self.list_box_12.SetSelection(i,False)
  self.list_box_13.Clear()
  self.list_box_15.Clear()
  self.text_ctrl_8.Clear()
  lis_ngr=lee_userblacklists(usr,archivo.configuracion)
  lis_bl=lee_whitelist(usr,archivo.configuracion)
  for i in lis_ngr:
  self.list_box_13.Append(i)
  for i in lis_bl:
  self.list_box_15.Append(i)
   
  # lee los usuarios del sistema
  def rellena_usuarios (self):
  self.list_box_14.Clear()
  tmp_us=lista_usuarios(int(uid.min))
  for i in tmp_us:
  self.list_box_14.Append(i)
  # Graba cambios de filtrado de contenido para usuario en el archivo de configuracion
  def acepta (self,event):
  from confSquid import actualiza_userblacklists, actualiza_whitelist
   
  def guarda (user):
  from func import control_web_user
  from inicSquid import inic_squid_user, inic_sarg_user, apply_conf_squidguard_user, inic_direct_user
   
  #Se vierten cambios realizados para usuario
  if control_web_user(user,archivo.aceptlog)==1:
  inic_squid_user(user,archivo.aceptlog)
  inic_sarg_user(user,archivo.aceptlog)
  apply_conf_squidguard_user(user,archivo.aceptlog)
  inic_direct_user(user,archivo.aceptlog)
   
  if self.list_box_14.GetSelections():
  usr=self.list_box_14.GetString(self.list_box_14.GetSelections()[0])
  msg=_("Guardados los cambios para ")+"'"+usr+"'\n"+_("Desea salir de esta ventana?")
  listas_negras=[]
  lista_blanca=[]
  items_ng=self.list_box_13.GetCount()
  for i in range(items_ng):
  listas_negras.append(self.list_box_13.GetString(i))
  items_bl=self.list_box_15.GetCount()
  for i in range(items_bl):
  lista_blanca.append(self.list_box_15.GetString(i))
   
  if len(self.list_box_12.GetSelections())>0:
  for i in range(self.list_box_12.GetCount()):
  self.list_box_12.SetSelection(i,False)
   
  nodo_usuario(usr)
  actualiza_userblacklists(usr,listas_negras,archivo.configuracion)
  actualiza_whitelist(usr,lista_blanca,archivo.configuracion)
  guarda(usr)
   
  dlg = wx.MessageDialog(self, msg,_('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  dlg.Destroy()
  self.cancela(self)
  else:
  dlg.Destroy()
  else:
  msg=_("No ha seleccionado ningun usuario!")+"\n"+_("Desea intentarlo de nuevo?")
   
  dlg = wx.MessageDialog(self, msg,_('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  if dlg.ShowModal()==wx.ID_YES:
  dlg.Destroy()
  else:
  dlg.Destroy()
  self.cancela(self)
   
   
  def cancela (self, event):
  child.contenidos=False
  self.Destroy()
   
  # end of class MyChild5
   
   
  # Interfaz para la creacion de una lista local
  class MyChild6(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: Mychild6.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  self.label_1_copy = wx.StaticText(self, -1, _("Nombre"))
  self.text_ctrl_2 = wx.TextCtrl(self, -1, "")
  self.label_2 = wx.StaticText(self, -1, _("URL"))
  self.text_ctrl_4 = wx.TextCtrl(self, -1, "")
  self.button_1 = wx.Button(self, -1, "-->")
  self.button_2 = wx.Button(self, -1, "<--")
  self.button_3 = wx.Button(self, -1, _("Eliminar todo"))
  self.label_3 = wx.StaticText(self, -1, _("Lista de dominios"))
  self.list_box_3 = wx.ListBox(self, -1, choices=[],style=wx.LB_MULTIPLE|wx.LB_SORT)
  self.button_8 = wx.Button(self, -1, _("Aceptar"))
  self.button_9 = wx.Button(self, -1, _("Cancelar"))
  self.padre=self.GetParent()
  self.__set_properties()
  self.__do_layout()
  wx.EVT_CLOSE(self,self.cancela)
  wx.EVT_BUTTON(self, self.button_1.GetId(), self.inserta)
  wx.EVT_BUTTON(self, self.button_2.GetId(), self.borra)
  wx.EVT_BUTTON(self, self.button_3.GetId(), self.borra_todo)
  wx.EVT_BUTTON(self, self.button_8.GetId(), self.acepta)
  wx.EVT_BUTTON(self, self.button_9.GetId(), self.cancela)
  # end wxGlade
   
  def __set_properties(self):
  # begin wxGlade: Mychild6.__set_properties
  self.SetTitle(_("Crear lista local"))
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: Mychild6.__do_layout
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_2 = wx.BoxSizer(wx.VERTICAL)
  sizer_8 = wx.BoxSizer(wx.VERTICAL)
  sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_13 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14 = wx.BoxSizer(wx.VERTICAL)
  sizer_15 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_19 = wx.BoxSizer(wx.VERTICAL)
  sizer_10 = wx.BoxSizer(wx.VERTICAL)
  sizer_17 = wx.BoxSizer(wx.VERTICAL)
  sizer_18 = wx.BoxSizer(wx.VERTICAL)
  sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4 = wx.BoxSizer(wx.VERTICAL)
  sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_6.Add((20, 20), 0, 0, 0)
  sizer_6.Add(self.label_1_copy, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_5.Add(sizer_6, 0, wx.EXPAND, 0)
  sizer_7.Add((20, 20), 0, 0, 0)
  sizer_7.Add(self.text_ctrl_2, 1, 0, 0)
  sizer_7.Add((20, 20), 0, 0, 0)
  sizer_5.Add(sizer_7, 1, wx.EXPAND, 0)
  sizer_4.Add(sizer_5, 1, wx.EXPAND, 0)
  sizer_3.Add(sizer_4, 1, wx.EXPAND, 0)
  sizer_2.Add(sizer_3, 0, wx.EXPAND, 0)
  sizer_8.Add((20, 20), 0, 0, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_18.Add(self.label_2, 0, 0, 0)
  sizer_18.Add(self.text_ctrl_4, 0, wx.EXPAND, 0)
  sizer_18.Add((20, 20), 0, 0, 0)
  sizer_17.Add(sizer_18, 0, wx.EXPAND, 0)
  sizer_9.Add(sizer_17, 1, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_10.Add(self.button_1, 0, 0, 0)
  sizer_10.Add((20, 20), 0, 0, 0)
  sizer_10.Add(self.button_2, 0, 0, 0)
  sizer_10.Add((20, 20), 1, 0, 0)
  sizer_10.Add(self.button_3, 0, 0, 0)
  sizer_9.Add(sizer_10, 0, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_19.Add(self.label_3, 0, 0, 0)
  sizer_19.Add(self.list_box_3, 1, wx.EXPAND, 0)
  sizer_14.Add(sizer_19, 1, wx.EXPAND, 0)
  sizer_14.Add((20, 20), 0, 0, 0)
  sizer_16.Add(self.button_8, 0, 0, 0)
  sizer_16.Add((20, 20), 1, wx.EXPAND, 0)
  sizer_16.Add(self.button_9, 0, 0, 0)
  sizer_15.Add(sizer_16, 1, wx.EXPAND, 0)
  sizer_14.Add(sizer_15, 0, wx.EXPAND, 0)
  sizer_13.Add(sizer_14, 1, wx.EXPAND, 0)
  sizer_9.Add(sizer_13, 1, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_8.Add(sizer_9, 1, wx.EXPAND, 0)
  sizer_8.Add((20, 20), 0, 0, 0)
  sizer_2.Add(sizer_8, 1, wx.EXPAND, 0)
  sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  sizer_1.Fit(self)
  sizer_1.SetSizeHints(self)
  self.Layout()
  # end wxGlade
   
  # inserta una uri a la lista
  def inserta(self,event):
  uri=self.text_ctrl_4.GetValue()
  if uri:
  self.list_box_3.Append(uri)
  self.text_ctrl_4.Clear()
  items=self.list_box_3.GetCount()
  items=items-1
  max=items
  if items>0:
  for i in range(items):
  if i<=max:
  if self.list_box_3.GetString(i)==self.list_box_3.GetString(i+1):
  self.list_box_3.Delete(i)
  max=max-1
  if i>max:
  break
   
  # borra una uri de la lista
  def borra(self,event):
  lista=[]
  for i in self.list_box_3.GetSelections():
  lista.append(self.list_box_3.GetString(i))
   
  items=self.list_box_3.GetCount()
  for i in range(items):
  for j in lista:
  if self.list_box_3.GetString(i)==j:
  self.list_box_3.Delete(i)
   
  # borra todas las uris de la lista
  def borra_todo(self,event):
  self.list_box_3.Clear()
   
  # Aplica los cambios
  def acepta ( self, event):
  from confSquid import inserta_blacklist
  from inicSquid import apply_conf_squidguard
  from watcherSquid import compila_libreria, establece_permisos
   
  nombre=self.text_ctrl_2.GetValue()
  if nombre:
  msg=("Lista creada correctamente")+"\n"
  lst_dom=[]
  for i in range(self.list_box_3.GetCount()):
  lst_dom.append(self.list_box_3.GetString(i))
  if lst_dom:
  inserta_blacklist(nombre,lst_dom,archivo.configuracion)
  compila_libreria(nombre,archivo.aceptlog)
  apply_conf_squidguard(archivo.aceptlog)
  establece_permisos(archivo.configuracion)
  icon=wx.ICON_INFORMATION
  else:
  msg=_("No hay urls en la lista de dominos")+"\n"
  icon=wx.ICON_EXCLAMATION
  else:
  msg=_("La Lista no tiene nombre")+"\n"
  icon=wx.ICON_EXCLAMATION
   
  dlg = wx.MessageDialog(self, msg,
  _('Aviso ACEPT'), wx.OK | icon)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  self.cancela(self)
   
  def cancela ( self, event):
  self.padre.crea=True
  self.padre.rellena_grupos()
  self.Destroy()
   
  # end of class Mychild6
   
  # Interfaz para la modificacion de una lista local
  class MyChild7(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: Mychild7.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  self.label_1_copy = wx.StaticText(self, -1, _("Nombre"))
  self.text_ctrl_2 = wx.TextCtrl(self, -1, "",style=wx.TE_READONLY)
  self.label_2 = wx.StaticText(self, -1, _("URL"))
  self.text_ctrl_4 = wx.TextCtrl(self, -1, "")
  self.button_1 = wx.Button(self, -1, "-->")
  self.button_2 = wx.Button(self, -1, "<--")
  self.button_3 = wx.Button(self, -1, _("Eliminar todo"))
  self.label_3 = wx.StaticText(self, -1, _("Lista de dominios"))
  self.list_box_3 = wx.ListBox(self, -1, choices=[],style=wx.LB_MULTIPLE|wx.LB_SORT)
  self.button_8 = wx.Button(self, -1, _("Aceptar"))
  self.button_9 = wx.Button(self, -1, _("Cancelar"))
  self.padre=self.GetParent()
  self.__set_properties()
  self.__do_layout()
  self.rellena()
  wx.EVT_CLOSE(self,self.cancela)
  wx.EVT_BUTTON(self, self.button_1.GetId(), self.inserta)
  wx.EVT_BUTTON(self, self.button_2.GetId(), self.borra)
  wx.EVT_BUTTON(self, self.button_3.GetId(), self.borra_todo)
  wx.EVT_BUTTON(self, self.button_8.GetId(), self.acepta)
  wx.EVT_BUTTON(self, self.button_9.GetId(), self.cancela)
  # end wxGlade
   
  def __set_properties(self):
  # begin wxGlade: Mychild7.__set_properties
  self.SetTitle(_("Modificar lista local"))
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: Mychild7.__do_layout
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_2 = wx.BoxSizer(wx.VERTICAL)
  sizer_8 = wx.BoxSizer(wx.VERTICAL)
  sizer_9 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_13 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14 = wx.BoxSizer(wx.VERTICAL)
  sizer_15 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_19 = wx.BoxSizer(wx.VERTICAL)
  sizer_10 = wx.BoxSizer(wx.VERTICAL)
  sizer_17 = wx.BoxSizer(wx.VERTICAL)
  sizer_18 = wx.BoxSizer(wx.VERTICAL)
  sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4 = wx.BoxSizer(wx.VERTICAL)
  sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4.Add((20, 20), 0, 0, 0)
  sizer_6.Add((20, 20), 0, 0, 0)
  sizer_6.Add(self.label_1_copy, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_5.Add(sizer_6, 0, wx.EXPAND, 0)
  sizer_7.Add((20, 20), 0, 0, 0)
  sizer_7.Add(self.text_ctrl_2, 1, 0, 0)
  sizer_7.Add((20, 20), 0, 0, 0)
  sizer_5.Add(sizer_7, 1, wx.EXPAND, 0)
  sizer_4.Add(sizer_5, 1, wx.EXPAND, 0)
  sizer_3.Add(sizer_4, 1, wx.EXPAND, 0)
  sizer_2.Add(sizer_3, 0, wx.EXPAND, 0)
  sizer_8.Add((20, 20), 0, 0, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_18.Add(self.label_2, 0, 0, 0)
  sizer_18.Add(self.text_ctrl_4, 0, wx.EXPAND, 0)
  sizer_18.Add((20, 20), 0, 0, 0)
  sizer_17.Add(sizer_18, 0, wx.EXPAND, 0)
  sizer_9.Add(sizer_17, 1, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_10.Add(self.button_1, 0, 0, 0)
  sizer_10.Add((20, 20), 0, 0, 0)
  sizer_10.Add(self.button_2, 0, 0, 0)
  sizer_10.Add((20, 20), 1, 0, 0)
  sizer_10.Add(self.button_3, 0, 0, 0)
  sizer_9.Add(sizer_10, 0, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_19.Add(self.label_3, 0, 0, 0)
  sizer_19.Add(self.list_box_3, 1, wx.EXPAND, 0)
  sizer_14.Add(sizer_19, 1, wx.EXPAND, 0)
  sizer_14.Add((20, 20), 0, 0, 0)
  sizer_16.Add(self.button_8, 0, 0, 0)
  sizer_16.Add((20, 20), 1, wx.EXPAND, 0)
  sizer_16.Add(self.button_9, 0, 0, 0)
  sizer_15.Add(sizer_16, 1, wx.EXPAND, 0)
  sizer_14.Add(sizer_15, 0, wx.EXPAND, 0)
  sizer_13.Add(sizer_14, 1, wx.EXPAND, 0)
  sizer_9.Add(sizer_13, 1, wx.EXPAND, 0)
  sizer_9.Add((20, 20), 0, 0, 0)
  sizer_8.Add(sizer_9, 1, wx.EXPAND, 0)
  sizer_8.Add((20, 20), 0, 0, 0)
  sizer_2.Add(sizer_8, 1, wx.EXPAND, 0)
  sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  sizer_1.Fit(self)
  sizer_1.SetSizeHints(self)
  self.Layout()
  # end wxGlade
   
  # Lee las caracteristicas de la lista a modificar y las muestra
  def rellena(self): #
  from confSquid import lee_blacklist
  self.text_ctrl_2.SetValue(bl_lst.nombre)
  blists=lee_blacklist(bl_lst.nombre,archivo.configuracion)
  for i in blists: #
  self.list_box_3.Append(i)
  #
  #
   
  # a�de una uri a la lista
  def inserta(self,event):
  uri=self.text_ctrl_4.GetValue()
  if uri:
  self.list_box_3.Append(uri)
  self.text_ctrl_4.Clear()
  items=self.list_box_3.GetCount()
  items=items-1
  max=items
  if items>0:
  for i in range(items):
  if i<=max:
  if self.list_box_3.GetString(i)==self.list_box_3.GetString(i+1):
  self.list_box_3.Delete(i)
  max=max-1
  if i>max:
  break
   
  # Borra una uri a la lista
  def borra(self,event):
  lista=[]
  for i in self.list_box_3.GetSelections():
  lista.append(self.list_box_3.GetString(i))
   
  items=self.list_box_3.GetCount()
  for i in range(items):
  for j in lista:
  if self.list_box_3.GetString(i)==j:
  self.list_box_3.Delete(i)
   
  # borra todas las uris d ela lista
  def borra_todo(self,event):
  self.list_box_3.Clear()
   
  # Aplica los cambios
  def acepta ( self, event):
  from confSquid import inserta_blacklist
  from inicSquid import apply_conf_squidguard
  from watcherSquid import compila_libreria, establece_permisos
   
  nombre=self.text_ctrl_2.GetValue()
  if nombre:
  msg=_("Lista modificada correctamente")+"\n"
  lst_dom=[]
  for i in range(self.list_box_3.GetCount()):
  lst_dom.append(self.list_box_3.GetString(i))
  if lst_dom:
  inserta_blacklist(nombre,lst_dom,archivo.configuracion)
  compila_libreria(nombre,archivo.aceptlog)
  apply_conf_squidguard(archivo.aceptlog)
  establece_permisos(archivo.configuracion)
  icon=wx.ICON_INFORMATION
  else:
  msg=_("No hay urls en la lista de dominos")+"\n"
  icon=wx.ICON_EXCLAMATION
  else:
  msg=_("La Lista no tiene nombre")+"\n"
  icon=wx.ICON_EXCLAMATION
   
  dlg = wx.MessageDialog(self, msg,
  _('Aviso ACEPT'), wx.OK | icon)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  dlg.Destroy()
  self.cancela(self)
   
  def cancela ( self, event):
  self.padre.modifica=True
  self.Destroy()
   
  # end of class Mychild7
   
  # estadisticas
  class MyChild8(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: MyChild8.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  self.label_2 = wx.StaticText(self, -1, _("Los registros se almacenan automaticamente"))
  self.label_3 = wx.StaticText(self, -1, _("Cada"))
  self.spin_ctrl_1 = wx.SpinCtrl(self, -1, "", min=1, max=100)
  self.label_4 = wx.StaticText(self, -1, _("Dias"))
  self.button_1 = wx.Button(self, -1, _("Salvar"))
  self.static_line_2 = wx.StaticLine(self, -1)
  self.label_5 = wx.StaticText(self, -1, _("Configurar consulta"), style=wx.ALIGN_CENTRE)
  self.label_6_copy_2 = wx.StaticText(self, -1, _("Consultar"))
  self.label_6_copy_3 = wx.StaticText(self, -1, _("Usuario"))
  self.label_6_copy_4 = wx.StaticText(self, -1, _("Periodo"))
  self.label_6_copy_5 = wx.StaticText(self, -1, _("Palabra clave"))
  self.combo_box_2 = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
  self.combo_box_3 = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
  self.combo_box_4 = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
  self.text_ctrl_2 = wx.TextCtrl(self, -1, "")
  self.static_line_1 = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
  self.label_7 = wx.StaticText(self, -1, _("Resultados de la consulta"), style=wx.ALIGN_CENTRE)
  self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY)
  self.button_2 = wx.Button(self, -1, _("Consultar"))
  self.button_3 = wx.Button(self, -1, _("Guardar como"))
  self.button_4 = wx.Button(self, -1, _("Cerrar"))
   
  self.__set_properties()
  self.__do_layout()
  wx.EVT_BUTTON(self, self.button_1.GetId(), self.guarda_intervalo)
  wx.EVT_BUTTON(self, self.button_2.GetId(), self.consulta)
  wx.EVT_BUTTON(self, self.button_3.GetId(), self.guarda)
  wx.EVT_COMBOBOX(self,self.combo_box_2.GetId(),self.recarga)
  wx.EVT_COMBOBOX(self,self.combo_box_3.GetId(),self.user_period)
  wx.EVT_CLOSE(self,self.cierra)
  wx.EVT_BUTTON(self, self.button_4.GetId(), self.cierra)
  # end wxGlade
   
  def __set_properties(self):
  # begin wxGlade: MyChild8.__set_properties
  self.SetTitle(_("Registros de navegacion web"))
  self.combo_box_2.Append("")
  self.combo_box_2.Append(_("Numero de paginas visitadas por usuario"))
  self.combo_box_2.Append(_("Trafico por usuario"))
  self.combo_box_2.Append(_("Paginas visitadas ordenadas por usuario"))
  self.combo_box_2.Append(_("Paginas visitadas ordenadas por url"))
  self.combo_box_2.Append(_("Paginas visitadas ordenadas cronologicamente"))
  self.combo_box_2.Append(_("Paginas visitadas por numero de visitas"))
  self.combo_box_2.Append(_("Paginas visitadas ordenadas por trafico"))
  self.combo_box_2.Append(_("Busqueda por palabras clave en las url"))
  self.combo_box_2.SetSelection(0)
  self.combo_box_3.SetSelection(-1)
  self.combo_box_4.SetSelection(-1)
  self.combo_box_3.Enable(False)
  self.combo_box_4.Enable(False)
  self.text_ctrl_2.Enable(False)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
  self.intervalo_dias()
   
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: MyChild8.__do_layout
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_3 = wx.BoxSizer(wx.VERTICAL)
  sizer_17 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4 = wx.BoxSizer(wx.VERTICAL)
  sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_18 = wx.BoxSizer(wx.VERTICAL)
  sizer_19 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_9 = wx.BoxSizer(wx.VERTICAL)
  sizer_12 = wx.BoxSizer(wx.VERTICAL)
  sizer_15 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16_copy = wx.BoxSizer(wx.VERTICAL)
  sizer_14_copy_5_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_4_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_3_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_2_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16 = wx.BoxSizer(wx.VERTICAL)
  sizer_14_copy_5 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_4 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_3 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_10 = wx.BoxSizer(wx.VERTICAL)
  sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_2.Add((20, 20), 0, 0, 0)
  sizer_3.Add((20, 20), 0, 0, 0)
  sizer_10.Add(self.label_2, 0, 0, 0)
  sizer_10.Add((10, 10), 0, 0, 0)
  sizer_11.Add(self.label_3, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_11.Add((10, 10), 0, 0, 0)
  sizer_11.Add(self.spin_ctrl_1, 0, 0, 0)
  sizer_11.Add((10, 10), 0, wx.ALL, 0)
  sizer_11.Add(self.label_4, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_11.Add((15, 15), 0, 0, 0)
  sizer_11.Add(self.button_1, 0, 0, 0)
  sizer_10.Add(sizer_11, 0, wx.EXPAND, 0)
  sizer_10.Add((10, 10), 0, 0, 0)
  sizer_10.Add(self.static_line_2, 0, wx.EXPAND, 0)
  sizer_9.Add(sizer_10, 0, wx.EXPAND, 0)
  sizer_9.Add((15, 15), 0, 0, 0)
  sizer_12.Add(self.label_5, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 0)
  sizer_16.Add((10, 10), 1, wx.EXPAND, 0)
  sizer_14_copy_2.Add(self.label_6_copy_2, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_14_copy_2.Add((5, 22), 0, 0, 0)
  sizer_16.Add(sizer_14_copy_2, 0, wx.EXPAND, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_14_copy_3.Add(self.label_6_copy_3, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_14_copy_3.Add((5, 22), 0, 0, 0)
  sizer_16.Add(sizer_14_copy_3, 0, wx.EXPAND, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_14_copy_4.Add(self.label_6_copy_4, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_14_copy_4.Add((5, 22), 0, 0, 0)
  sizer_16.Add(sizer_14_copy_4, 0, wx.EXPAND, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_14_copy_5.Add(self.label_6_copy_5, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_14_copy_5.Add((5, 22), 0, 0, 0)
  sizer_16.Add(sizer_14_copy_5, 0, wx.EXPAND, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_15.Add(sizer_16, 0, wx.EXPAND, 0)
  sizer_15.Add((10, 10), 0, 0, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_14_copy_2_copy.Add(self.combo_box_2, 1, 0, 0)
  sizer_16_copy.Add(sizer_14_copy_2_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_14_copy_3_copy.Add(self.combo_box_3, 1, 0, 0)
  sizer_16_copy.Add(sizer_14_copy_3_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_14_copy_4_copy.Add(self.combo_box_4, 1, 0, 0)
  sizer_16_copy.Add(sizer_14_copy_4_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_14_copy_5_copy.Add(self.text_ctrl_2, 1, wx.EXPAND, 0)
  sizer_16_copy.Add(sizer_14_copy_5_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_15.Add(sizer_16_copy, 1, wx.EXPAND, 0)
  sizer_12.Add(sizer_15, 1, wx.EXPAND, 0)
  sizer_9.Add(sizer_12, 1, wx.EXPAND, 0)
  sizer_7.Add(sizer_9, 0, wx.EXPAND, 0)
  sizer_7.Add((10, 10), 0, 0, 0)
  sizer_7.Add(self.static_line_1, 0, wx.EXPAND, 0)
  sizer_7.Add((10, 10), 0, 0, 0)
  sizer_19.Add((5, 10), 1, 0, 0)
  sizer_19.Add(self.label_7, 0, 0, 0)
  sizer_19.Add((5, 8), 1, 0, 0)
  sizer_18.Add(sizer_19, 0, wx.EXPAND, 0)
  sizer_18.Add((10, 10), 0, wx.EXPAND, 0)
  sizer_18.Add(self.text_ctrl_1, 1, wx.EXPAND, 0)
  sizer_7.Add(sizer_18, 1, wx.EXPAND, 0)
  sizer_6.Add(sizer_7, 1, wx.EXPAND, 0)
  sizer_4.Add(sizer_6, 1, wx.EXPAND, 0)
  sizer_3.Add(sizer_4, 1, wx.EXPAND, 0)
  sizer_3.Add((20, 20), 0, 0, 0)
  sizer_17.Add(self.button_2, 1, 0, 0)
  sizer_17.Add((20, 20), 1, 0, 0)
  sizer_17.Add(self.button_3, 1, 0, 0)
  sizer_17.Add((20, 20), 1, 0, 0)
  sizer_17.Add(self.button_4, 1, 0, 0)
  sizer_3.Add(sizer_17, 0, wx.EXPAND, 0)
  sizer_3.Add((20, 20), 0, 0, 0)
  sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
  sizer_2.Add((20, 20), 0, 0, 0)
  sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  sizer_1.Fit(self)
  sizer_1.SetSizeHints(self)
  self.Layout()
  # end wxGlade
   
  def consulta(self,event):
  from confSquid import mostrar_reg_nav
  valores={0:"limpia",1:"A",2:"B",3:"C",4:"D",5:"E",6:"F",7:"G",8:"H"}
  seleccion=valores.get(self.combo_box_2.GetSelection())
  usuario=self.combo_box_3.GetValue()
  periodo=self.combo_box_4.GetValue()
  clave=self.text_ctrl_2.GetValue()
  if seleccion!="limpia":
  salida=mostrar_reg_nav(seleccion,usuario,periodo,archivo.configuracion,clave)
  self.text_ctrl_1.Clear()
  for i in salida:
  self.text_ctrl_1.AppendText(i)
  self.text_ctrl_1.AppendText("\n")
   
  def guarda(self,event):
  from os.path import exists
   
  def escribe(path,contenido):
  f=open(path,"w")
  f.write(contenido)
  f.close()
   
  wildcard=_("Archivos de texto")+" (*.txt)|*.txt|"
  dlg=wx.FileDialog(self,_("Salvar el informe en..."),"","",wildcard,wx.SAVE)
  dlg.SetFilterIndex(2)
  if dlg.ShowModal()==wx.ID_OK:
  path=dlg.GetPath()
  if exists(path):
  dlg2 = wx.MessageDialog(self, _("El Archivo indicado ya existe\n Desea sobreescribirlo?"),
  _('Aviso ACEPT'), wx.YES_NO | wx.ICON_QUESTION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg2.SetIcon(_icon)
  if dlg2.ShowModal()==wx.ID_YES:
  escribe(path,self.text_ctrl_1.GetValue())
  dlg2.Destroy()
  else:
  escribe(path,self.text_ctrl_1.GetValue())
   
  dlg.Destroy()
   
  def recarga(self,event):
  from confSquid import extrae_periodos
  from func import users_control_web
  valores={0:"limpia",1:"A",2:"B",3:"C",4:"D",5:"E",6:"F",7:"G",8:"H"}
  seleccion=valores.get(self.combo_box_2.GetSelection())
   
  if seleccion=="A" or seleccion=="B" or seleccion=="C":
  self.combo_box_4.Clear()
  self.combo_box_4.Enable(True)
  self.combo_box_3.Clear()
  self.combo_box_3.Enable(False)
  self.text_ctrl_2.Clear()
  self.text_ctrl_2.Enable(False)
  entradas=extrae_periodos(archivo.configuracion)
  for i in entradas:
  self.combo_box_4.Append(i)
  elif seleccion=="limpia":
  self.combo_box_3.Clear()
  self.combo_box_4.Clear()
  self.text_ctrl_2.Clear()
  self.combo_box_3.Enable(False)
  self.combo_box_4.Enable(False)
  self.text_ctrl_2.Enable(False)
  elif seleccion=="H":
  self.combo_box_3.Clear()
  self.combo_box_4.Clear()
  self.combo_box_3.Enable(True)
  self.combo_box_4.Enable(True)
  self.text_ctrl_2.Enable(True)
  users=users_control_web(archivo.aceptlog)
  self.combo_box_3.Append("Todos")
  for i in users:
  self.combo_box_3.Append(i)
  entradas=extrae_periodos(archivo.configuracion)
  for i in entradas:
  self.combo_box_4.Append(i)
   
  else:
  self.combo_box_3.Clear()
  self.combo_box_4.Clear()
  self.combo_box_3.Enable(True)
  self.combo_box_4.Enable(True)
  self.text_ctrl_2.Enable(True)
  self.text_ctrl_2.Clear()
  self.text_ctrl_2.Enable(False)
  users=users_control_web(archivo.aceptlog)
  self.combo_box_3.Append(_("Todos"))
  for i in users:
  self.combo_box_3.Append(i)
  entradas=extrae_periodos(archivo.configuracion)
  for i in entradas:
  self.combo_box_4.Append(i)
  #rellena combo_box 3 y 4
   
  def user_period(self,event):
  from confSquid import extrae_periodos,extrae_periodos_user
  user=self.combo_box_3.GetValue()
  self.combo_box_4.Clear()
  if user!=_("Todos"):
  entradas=extrae_periodos_user(user,archivo.configuracion)
  for i in entradas:
  self.combo_box_4.Append(i)
  else:
  entradas=extrae_periodos(archivo.configuracion)
  for i in entradas:
  self.combo_box_4.Append(i)
   
  def guarda_intervalo(self,event):
  from func import actualiza_campo
  actualiza_campo('fr_recol',str(self.spin_ctrl_1.GetValue()),archivo.aceptlog)
   
  def intervalo_dias(self):
  from func import consulta_campo
  self.spin_ctrl_1.SetValue(int(consulta_campo('fr_recol',archivo.aceptlog)))
   
   
  def cierra(self,event):
  import os,os.path
  for item in os.listdir('/var/log/acept/squid/var/rg'):
  file=os.path.join('/var/log/acept/squid/var/rg',item)
  os.remove(file)
  child.uso_web=False
  self.Destroy()
   
  # end of class MyChild8
   
  # estadisticas
  class MyChild9(wx.Frame):
  def __init__(self, *args, **kwds):
  # begin wxGlade: MyChild9.__init__
  kwds["style"] = wx.DEFAULT_FRAME_STYLE
  wx.Frame.__init__(self, *args, **kwds)
  self.label_2 = wx.StaticText(self, -1, _("Opciones de la consulta"))
  self.static_line_2 = wx.StaticLine(self, -1)
  self.label_6_copy_2 = wx.StaticText(self, -1, _("Consultar"))
  self.label_6_copy_3 = wx.StaticText(self, -1, _("Intervalo de tiempo"))
  self.label_6_copy_4 = wx.StaticText(self, -1, _("Periodo"))
  self.combo_box_2 = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
  self.combo_box_3 = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
  self.combo_box_4 = wx.ComboBox(self, -1, choices=[], style=wx.CB_DROPDOWN)
  self.static_line_1 = wx.StaticLine(self, -1, style=wx.LI_VERTICAL)
  self.label_7 = wx.StaticText(self, -1, _("Resultados de la consulta"), style=wx.ALIGN_CENTRE)
  self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY)
  self.button_2 = wx.Button(self, -1, _("Consultar"))
  self.button_4 = wx.Button(self, -1, _("Cerrar"))
   
  self.__set_properties()
  self.__do_layout()
  self.rellena()
  wx.EVT_BUTTON(self, self.button_2.GetId(), self.consulta)
  wx.EVT_COMBOBOX(self,self.combo_box_3.GetId(),self.recarga)
  wx.EVT_CLOSE(self,self.cierra)
  wx.EVT_BUTTON(self, self.button_4.GetId(), self.cierra)
  # end wxGlade
   
  def __set_properties(self):
  # begin wxGlade: MyChild9.__set_properties
  self.SetTitle(_("Registros del uso de Servicios"))
  self.combo_box_2.Append(_("Servicios utilizados por tiempo de uso"))
  self.combo_box_2.Append(_("Servicios utilizados por usuario"))
  self.combo_box_2.Append(_("Servicios utilizados por usuario y tiempo de uso"))
  self.combo_box_3.Append(_("Mensual"))
  self.combo_box_3.Append(_("Semanal"))
  self.combo_box_2.SetSelection(0)
  self.combo_box_3.SetSelection(0)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/fondo_junta.gif", wx.BITMAP_TYPE_ANY))
  self.SetIcon(_icon)
  self.Centre
   
  # end wxGlade
   
  def __do_layout(self):
  # begin wxGlade: MyChild9.__do_layout
  sizer_1 = wx.BoxSizer(wx.VERTICAL)
  sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_3 = wx.BoxSizer(wx.VERTICAL)
  sizer_17 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_4 = wx.BoxSizer(wx.VERTICAL)
  sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_7 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_18 = wx.BoxSizer(wx.VERTICAL)
  sizer_19 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_9 = wx.BoxSizer(wx.VERTICAL)
  sizer_12 = wx.BoxSizer(wx.VERTICAL)
  sizer_15 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16_copy = wx.BoxSizer(wx.VERTICAL)
  sizer_14_copy_5_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_4_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_3_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_2_copy = wx.BoxSizer(wx.HORIZONTAL)
  sizer_16 = wx.BoxSizer(wx.VERTICAL)
  sizer_14_copy_4 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_3 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_14_copy_2 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_10 = wx.BoxSizer(wx.VERTICAL)
  sizer_11 = wx.BoxSizer(wx.HORIZONTAL)
  sizer_2.Add((20, 20), 0, 0, 0)
  sizer_3.Add((20, 20), 0, 0, 0)
  sizer_10.Add(self.label_2, 0, 0, 0)
  sizer_11.Add((10, 10), 0, 0, 0)
  sizer_11.Add((10, 10), 0, wx.ALL, 0)
  sizer_11.Add((15, 15), 0, 0, 0)
  sizer_10.Add(sizer_11, 0, wx.EXPAND, 0)
  sizer_10.Add(self.static_line_2, 0, wx.EXPAND, 0)
  sizer_9.Add(sizer_10, 0, wx.EXPAND, 0)
  sizer_9.Add((15, 15), 0, 0, 0)
  sizer_16.Add((10, 10), 1, wx.EXPAND, 0)
  sizer_14_copy_2.Add(self.label_6_copy_2, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_14_copy_2.Add((5, 22), 0, 0, 0)
  sizer_16.Add(sizer_14_copy_2, 0, wx.EXPAND, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_14_copy_3.Add(self.label_6_copy_3, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_14_copy_3.Add((5, 22), 0, 0, 0)
  sizer_16.Add(sizer_14_copy_3, 0, wx.EXPAND, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_14_copy_4.Add(self.label_6_copy_4, 0, wx.ALIGN_CENTER_VERTICAL, 0)
  sizer_14_copy_4.Add((5, 22), 0, 0, 0)
  sizer_16.Add(sizer_14_copy_4, 0, wx.EXPAND, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_16.Add((10, 10), 1, 0, 0)
  sizer_15.Add(sizer_16, 0, wx.EXPAND, 0)
  sizer_15.Add((10, 10), 0, 0, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_14_copy_2_copy.Add(self.combo_box_2, 1, 0, 0)
  sizer_16_copy.Add(sizer_14_copy_2_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_14_copy_3_copy.Add(self.combo_box_3, 1, 0, 0)
  sizer_16_copy.Add(sizer_14_copy_3_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_14_copy_4_copy.Add(self.combo_box_4, 1, 0, 0)
  sizer_16_copy.Add(sizer_14_copy_4_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_16_copy.Add(sizer_14_copy_5_copy, 0, wx.EXPAND, 0)
  sizer_16_copy.Add((10, 10), 1, 0, 0)
  sizer_15.Add(sizer_16_copy, 1, wx.EXPAND, 0)
  sizer_12.Add(sizer_15, 1, wx.EXPAND, 0)
  sizer_9.Add(sizer_12, 1, wx.EXPAND, 0)
  sizer_7.Add(sizer_9, 0, wx.EXPAND, 0)
  sizer_7.Add((10, 10), 0, 0, 0)
  sizer_7.Add(self.static_line_1, 0, wx.EXPAND, 0)
  sizer_7.Add((10, 10), 0, 0, 0)
  sizer_19.Add((5, 10), 1, 0, 0)
  sizer_19.Add(self.label_7, 0, 0, 0)
  sizer_19.Add((5, 8), 1, 0, 0)
  sizer_18.Add(sizer_19, 0, wx.EXPAND, 0)
  sizer_18.Add((10, 10), 0, wx.EXPAND, 0)
  sizer_18.Add(self.text_ctrl_1, 1, wx.EXPAND, 0)
  sizer_7.Add(sizer_18, 1, wx.EXPAND, 0)
  sizer_6.Add(sizer_7, 1, wx.EXPAND, 0)
  sizer_4.Add(sizer_6, 1, wx.EXPAND, 0)
  sizer_3.Add(sizer_4, 1, wx.EXPAND, 0)
  sizer_3.Add((20, 20), 0, 0, 0)
  sizer_17.Add(self.button_2, 1, 0, 0)
  sizer_17.Add((20, 20), 1, 0, 0)
  sizer_17.Add((20, 20), 1, 0, 0)
  sizer_17.Add(self.button_4, 1, 0, 0)
  sizer_3.Add(sizer_17, 0, wx.EXPAND, 0)
  sizer_3.Add((20, 20), 0, 0, 0)
  sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
  sizer_2.Add((20, 20), 0, 0, 0)
  sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
  self.SetAutoLayout(True)
  self.SetSizer(sizer_1)
  sizer_1.Fit(self)
  sizer_1.SetSizeHints(self)
  self.Layout()
  # end wxGlade
   
  def consulta(self,event):
  from confSquid import mostrar_uso_aplicaciones
  valores={0:"A",1:"B",2:"C"}
  valores2={0:"m",1:"s"}
  consulta=valores.get(self.combo_box_2.GetSelection())
  tipo=valores2.get(self.combo_box_3.GetSelection())
  if len(self.combo_box_4.GetValue())==0:
  dlg = wx.MessageDialog(self, _("Seleccione el periodo para el que desea realizar la consulta"), _('Aviso ACEPT'),wx.OK | wx.ICON_EXCLAMATION)
  _icon = wx.EmptyIcon()
  _icon.CopyFromBitmap(wx.Bitmap("/usr/share/acept/pixmaps/aviso.png", wx.BITMAP_TYPE_ANY))
  dlg.SetIcon(_icon)
  dlg.ShowModal()
  else:
  periodo=self.combo_box_4.GetValue()
  salida=mostrar_uso_aplicaciones(consulta,'Todos',tipo,periodo,archivo.configuracion)
  self.text_ctrl_1.Clear()
  for i in salida:
  if consulta=='C':
  for j in range(len(salida[i])):
  self.text_ctrl_1.AppendText(i)
  self.text_ctrl_1.AppendText('\t ')
  self.text_ctrl_1.AppendText(salida[i][j])
  self.text_ctrl_1.AppendText("\n")
  else:
  self.text_ctrl_1.AppendText(i)
  self.text_ctrl_1.AppendText('\t ')
  if consulta=='B':
  for j in range(len(salida[i])):
  self.text_ctrl_1.AppendText(salida[i][j])
  self.text_ctrl_1.AppendText(' ')
  else:
  self.text_ctrl_1.AppendText(salida[i])
   
  self.text_ctrl_1.AppendText("\n")
   
  def recarga(self,event):
  self.rellena()
   
  def rellena(self):
  from confSquid import extrae_periodos_uso_aplic
  valores={0:"m",1:"s"}
  seleccion=valores.get(self.combo_box_3.GetSelection())
  periodos=extrae_periodos_uso_aplic(seleccion)
  self.combo_box_4.Clear()
  for i in periodos:
  self.combo_box_4.Append(i)
   
   
  def cierra(self,event):
  child.uso_aplic=False
  self.Destroy()
posted @ 2017-02-12 18:40  ZRHW菜鸟  阅读(328)  评论(0编辑  收藏  举报