def Init(self): self.db = xdb.DB() # définition de l'OLV self.ctrlOlv = None # boutons de bas d'écran - infos: texte ou objet window. Les infos sont placées en bas à gauche self.txtInfo = "Ici de l'info apparaîtra selon le contexte de la grille de saisie" lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)), self.txtInfo ] dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos} # lancement de l'écran en blocs principaux if self.sens == 'entrees': self.pnlBandeau = xbandeau.Bandeau( self, TITRE[self.sens], INTRO[self.sens], hauteur=20, nomImage="xpy/Images/80x80/Entree.png", sizeImage=(60, 40)) self.pnlBandeau.SetBackgroundColour(wx.Colour(220, 250, 220)) else: self.pnlBandeau = xbandeau.Bandeau( self, TITRE[self.sens], INTRO[self.sens], hauteur=20, nomImage="xpy/Images/80x80/Sortie.png", sizeImage=(60, 40)) self.pnlBandeau.SetBackgroundColour(wx.Colour(250, 220, 220)) self.pnlParams = PNL_params(self) self.pnlOlv = PNL_corps(self, self.dicOlv) self.pnlPied = PNL_pied(self, dicPied) self.ctrlOlv = self.pnlOlv.ctrlOlv # charger les valeurs de pnl_params self.pnlParams.SetOneSet('fournisseur', values=nust.SqlFournisseurs(self.db), codeBox='param2') self.lstAnalytiques = nust.SqlAnalytiques(self.db, 'ACTIVITES') self.valuesAnalytiques = [ '', ] + [nust.MakeChoiceActivite(x) for x in self.lstAnalytiques] self.codesAnalytiques = [x[:2] for x in self.valuesAnalytiques] self.codesAnalytiques[0] = '00' if len(self.codesAnalytiques) == 1: wx.MessageBox( "Aucune activité définie!\n\nLes affectations analytiques ne seront pas possibles par camp" ) self.pnlParams.SetOneSet('analytique', values=self.valuesAnalytiques, codeBox='param2') self.SetAnalytique('00') self.pnlParams.SetOneValue('origine', valeur=DICORIGINES[self.sens]['values'][0], codeBox='param1') self.Bind(wx.EVT_CLOSE, self.OnClose)
def Init(self): # boutons de bas d'écran - infos: texte ou objet window. Les infos sont placées en bas à gauche lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),lINFO_OLV] dicPied = {'lstBtns': lGetBoutons(self), "lstInfos": lstInfos} # lancement de l'écran en blocs principaux self.pnlBandeau = xbandeau.Bandeau(self,lTITRE,lINTRO,nomImage="xpy/Images/32x32/Matth.png") self.pnlParams = Pnl_params(self) self.pnlOlv = Pnl_corps(self, self.dicOlv) self.pnlPied = Pnl_pied(self, dicPied) self.ctrlOlv = self.pnlOlv.ctrlOlv self.Bind(wx.EVT_CLOSE,self.OnFermer) # placement des données if self.IDimmo: self.noegest.GetEnsemble(self.IDimmo,self.dicOlv['lstChmpEns'],self.pnlParams) self.noegest.GetComposants(self.IDimmo,self.dicOlv['lstChamps']) for object in self.ctrlOlv.modelObjects: self.noegest.ValideLigComp(object) self.ctrlOlv._FormatAllRows() self.ctrlOlv.Refresh() # conservation des originaux self.modelOriginal = [deepcopy(x) for x in self.ctrlOlv.modelObjects if not hasattr(x,'vierge')] self.ddParamsOriginal = self.pnlParams.GetValues() if self.IDimmo: self.pnlParams.SetOneValue('mode','Modification',codeBox='infos') else: self.pnlParams.SetOneValue('mode','Création',codeBox='infos') self.pnlParams.Refresh()
def __init__(self, ID, mode='familles', titre="", **kwds): minSize = (400, 200) kw = {'size': (1200, 400), 'pos': (55, 180)} super().__init__(None, **kw) self.mode = mode self.IDref = ID if not ID: raise ("pas d'ID %s reçu!" % mode) self.famNoPub, self.famNoMel = False, False intro = "Vous pouvez saisir dans la liste sans pouvoir ajouter ni retrancher une ligne, " intro += "le changement de nom ou de catérorie se fait dans NOETHYS." self.bandeau = xbandeau.Bandeau(self, titre=titre, texte=intro, hauteur=15, nomImage="xpy/Images/32x32/Matth.png") # appel des paramètes de l'OLV et chargement des données initiales, corrigées dans self.lstDonnees if mode == 'familles': self.dicOlv = GetDicOlvFam() self.dicOlv['lstDonnees'] = self.GetCoordonnees() else: self.dicOlv = GetDicOlvInd() self.dicOlv['lstDonnees'] = self.GetCoordIndividu() # pnl et pnlPied sont reconnus par le Size de DLG_vide self.pnl = PNL_corps(self, self.dicOlv, **kwds) self.ctrl = self.pnl.ctrlOlv self.pnlPied = PNL_pied(self) self.SetMinSize(minSize) if self.mode == 'familles': self.SetCheckFamNo() self.Sizer()
def __init__(self, *args, **kwd): titre = kwd.pop('titre', "Ici mon titre") intro = kwd.pop('intro', "et mes explications") lstDonnees = kwd.pop('lstDonnees', [("a", 2), ("b", 10), ("c", "jj")]) lstColonnes = kwd.pop('lstColonnes', ["col1", "col2"]) lstWnomsCol = [len(x) * 6 for x in lstColonnes] self.lstWcol = kwd.pop('lstWcol', lstWnomsCol) self.lstSetters = kwd.pop('lstSetters', None) self.withCheck = kwd.pop('withCheck', False) self.columnSort = kwd.pop('columnSort', 1) size = kwd.pop('size', (600, 600)) wx.Dialog.__init__(self, None, -1, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX) self.SetMinSize(size) mess = None if not lstDonnees or len(lstDonnees) == 0: mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' vide" if (not lstDonnees[0]) or (not isinstance(lstDonnees[0], (tuple, list))): mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' contenant un type :%s" % type( lstDonnees[0]) if mess: wx.MessageBox(mess) self.EndModal(wx.ID_ABORT) if len(lstColonnes) != len(lstDonnees[0]): lstColonnes = [] for i in range(len(lstDonnees[0])): lstColonnes.append("col " + str(i)) self.lstDonnees = lstDonnees self.SetTitle("xchoixListe.DialogAffiche") self.choix = None self.lstColonnes = lstColonnes self.nbColonnes = len(lstColonnes) # Bandeau self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro, hauteur=18, nomImage="xpy/Images/32x32/Python.png") # Boutons bmpabort = wx.Bitmap("xpy/Images/32x32/Annuler.png") self.bouton_annuler = wx.Button(self, id=wx.ID_CANCEL, label=(u"Abandon")) self.bouton_annuler.SetBitmap(bmpabort) bmpok = wx.Bitmap("xpy/Images/32x32/Valider.png") self.bouton_fermer = wx.Button(self, id=-1, label=(u"Valider")) self.bouton_fermer.SetBitmap(bmpok) self.bouton_fermer.SetToolTip(u"Cliquez ici pour valider votre choix") self.InitOlv() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnDblClicOk, self.bouton_fermer)
def __init__(self, parent, listeOriginale=[ ("Choix1", "Texte1"), ("Choix2", "Texte2"), ], columnSort=1, LargeurCode=80, LargeurLib=100, minSize=(350, 350), titre=u"Faites un choix !", intro=u"Double Clic sur la ou les réponses souhaitées...", altOK=False): wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX) self.SetTitle("xchoixListe.DialogCoches") self.columnSort = columnSort self.altOK = altOK self.choix = None self.parent = parent self.minSize = minSize self.wCode = LargeurCode self.wLib = LargeurLib self.liste = [] self.nbColonnes = 0 for item in listeOriginale: if isinstance(item, (list, tuple)): self.nbColonnes = len(item) else: self.nbColonnes = 1 item = (str(item), ) self.liste.append(item) # Bandeau self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro, hauteur=15, nomImage="xpy/Images/32x32/Python.png") # conteneur des données self.listview = FastObjectListView(self) # Boutons self.bouton_ok = wx.Button(self, label=u"Valider") self.bouton_ok.SetBitmap(wx.Bitmap("xpy/Images/32x32/Valider.png")) self.bouton_annuler = wx.Button(self, label=u"Annuler") self.bouton_annuler.SetBitmap( wx.Bitmap("xpy/Images/32x32/Annuler.png")) self.__set_properties() self.__do_layout() # Binds self.Bind(wx.EVT_BUTTON, self.OnClicOk, self.bouton_ok) self.Bind(wx.EVT_BUTTON, self.OnClicFermer, self.bouton_annuler) self.listview.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnDblClic)
def __init__(self, parent, modeImportation=False): wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX) self.parent = parent self.saisie_pays = "" intro = "Vous pouvez ici saisir, modifier ou supprimer des pays utilisés dans les adresses" titre = "Gestion des pays postaux" self.ctrl_bandeau = xbd.Bandeau( self, titre=titre, texte=intro, hauteur=15, nomImage="xpy/Images/32x32/Secteur.png") self.ctrlOlv = OL_Pays.ListView(self, id=-1, style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL | wx.LC_HRULES | wx.LC_VRULES) self.ctrlOlv.MAJ() self.ctrl_recherche = OL_Pays.CTRL_Outils(self, listview=self.ctrlOlv) self.bouton_ajouter = wx.BitmapButton( self, -1, wx.Bitmap("xpy/Images/16x16/Ajouter.png", wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton( self, -1, wx.Bitmap("xpy/Images/16x16/Modifier.png", wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton( self, -1, wx.Bitmap("xpy/Images/16x16/Supprimer.png", wx.BITMAP_TYPE_ANY)) self.bouton_importer = CTRL_Bouton_image( self, texte="Choisir le pays", cheminImage="xpy/Images/32x32/Fleche_bas.png") self.bouton_fermer = CTRL_Bouton_image( self, id=wx.ID_CANCEL, texte="Fermer", cheminImage="xpy/Images/32x32/Annuler.png") if modeImportation == False: self.bouton_importer.Show(False) self.bouton_fermer = CTRL_Bouton_image( self, id=wx.ID_CANCEL, texte="Fermer", cheminImage="xpy/Images/32x32/Valider.png") self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.Ajouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.Modifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.Supprimer, self.bouton_supprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonChoisir, self.bouton_importer)
def Init(self): # boutons de bas d'écran - infos: texte ou objet window. Les infos sont placées en bas à gauche lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),INFO_OLV] dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos} # lancement de l'écran en blocs principaux self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO,nomImage="xpy/Images/32x32/Matth.png") self.pnlParams = PNL_params(self) self.pnlOlv = PNL_corps(self, self.dicOlv) self.pnlPied = PNL_pied(self, dicPied) self.ctrlOlv = self.pnlOlv.ctrlOlv self.Bind(wx.EVT_CLOSE,self.OnFermer) self.noegest.GetImmosComposants(self.dicOlv['lstChamps'])
def __init__(self, titre="Ici mon titre", intro="et mes explications", lstDonnees=[("a",2),("b",10)], lstColonnes=["let","nbre"], lstWcol=None, size=(600,600)): wx.Dialog.__init__(self, None, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) self.SetMinSize(size) mess = None if not lstDonnees or len(lstDonnees)==0 : mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' vide" if (not lstDonnees[0]) or (not isinstance(lstDonnees[0],(tuple,list))): mess = "xchoixListe.DialogAffiche reçoit 'lstDonnees' contenant un type :%s"%type(lstDonnees[0]) if mess: wx.MessageBox(mess) self.EndModal(wx.ID_ABORT) if len(lstColonnes) != len(lstDonnees[0]): lstColonnes=[] for i in range(len(lstDonnees[0])): lstColonnes.append("col " + str(i)) self.dicOlv = { 'listeColonnes': self.ComposeColonnes(lstColonnes,lstWcol=lstWcol), 'listeDonnees': lstDonnees, 'checkColonne': False, 'colonneTri': 0, 'style': wx.LC_SINGLE_SEL | wx.LC_HRULES | wx.LC_VRULES, 'msgIfEmpty': "Aucune donnée ne correspond à votre recherche", 'dictColFooter': {lstColonnes[0]: {"mode": "nombre", "alignement": wx.ALIGN_CENTER}, } } self.SetTitle("xchoixListe.DialogAffiche") self.choix= None self.avecFooter = True self.barreRecherche = True # Bandeau self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro, hauteur=18, nomImage="xpy/Images/32x32/Python.png") # Boutons bmpabort = wx.Bitmap("xpy/Images/32x32/Annuler.png") self.bouton_annuler = wx.Button(self, id=wx.ID_CANCEL,label=(u"Abandon")) self.bouton_annuler.SetBitmap(bmpabort) bmpok = wx.Bitmap("xpy/Images/32x32/Valider.png") self.bouton_fermer = wx.Button(self, id=-1,label=(u"Valider")) self.bouton_fermer.SetBitmap(bmpok) # Initialisations self.__init_olv() self.__set_properties() self.__do_layout()
def __init__(self, mode='individus', titre=TITRE, intro=INTRO): self.limitSql = LIMITSQL self.db = xdb.DB() wx.Dialog.__init__(self, None, -1, pos=(50, 80), style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) if nuu.VerificationDroitsUtilisateurActuel("individus_fiche", "consulter") == False: if self.IsModal(): self.EndModal(wx.ID_CANCEL) else: self.Destroy() self.mode = mode self.SetTitle(NOM_MODULE) self.choix = None # Bandeau self.ctrl_bandeau = xbandeau.Bandeau( self, titre=titre, texte=intro, hauteur=18, nomImage="xpy/Images/32x32/Matth.png") # composition des objets if self.mode == 'familles': dicOlv = dicOlvFamilles() self.getDonnees = self.GetFamilles else: dicOlv = dicOlvIndividus() self.getDonnees = self.GetIndividus dicOlv['getDonnees'] = self.getDonnees pnlOlv = Pnl_tableau(self, dicOlv) self.ctrlOlv = pnlOlv.ctrlOlv self.olv = pnlOlv self.pnlPied = xgtr.PNL_pied(self, {'autoSizer': False, 'lstBtns': []}) # Initialisations self.pnlPied.lstBtns = GetLstBtns(self.pnlPied, self.olv) btnFermer = self.pnlPied.lstBtns[1] self.Bind(wx.EVT_BUTTON, self.OnFermer, btnFermer) self.pnlPied.Sizer() self.__set_properties() self.Sizer() self.ctrlOlv.MAJ()
def Init(self): # boutons de bas d'écran - infos: texte ou objet window. Les infos sont placées en bas à gauche lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),self.txtInfo] dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos} # lancement de l'écran en blocs principaux self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO,nomImage="xpy/Images/32x32/Matth.png") self.pnlParams = PNL_params(self) self.pnlOlv = PNL_corps(self, self.dicOlv) self.pnlPied = PNL_pied(self, dicPied) self.ctrlOlv = self.pnlOlv.ctrlOlv # connexion compta et affichage bas d'écran self.compta = self.GetCompta() self.table = self.GetTable() self.Bind(wx.EVT_CLOSE,self.OnFermer) self.pnlParams.SetOneValue('forcer',False) self.OnCloture(None)
def Init(self): # lancement de l'écran en blocs principaux self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO, hauteur=20, nomImage="xpy/Images/80x80/Famille.png", sizeImage=(60,60)) self.pnlBandeau.SetBackgroundColour(wx.Colour(220, 250, 220)) # charger les valeurs de pnl_params self.periode = xformat.PeriodeMois(self.today) self.pnlParams.SetOneValue('periode',self.periode,'param1') self.pnlParams.SetOneValue('cuisine',self.cuisine,'param2') self.lstAnalytiques = nust.SqlAnalytiques(self.db,'ACTIVITES') self.btnAnalytique = self.pnlParams.GetPnlCtrl('analytique','param2').btn self.btnAnalytique.Enable(False) self.OnCuisine(None) self.Bind(wx.EVT_CLOSE,self.OnFermer) self.ctrlOlv.SetFocus()
def __init__(self,parent,dicParams={},dicOlv={},dicPied={}, **kwds): if not 'title' in kwds.keys(): listArbo=os.path.abspath(__file__).split("\\") kwds['title'] = listArbo[-1] + "/" + self.__class__.__name__ self.db = kwds.pop('db',None) #purge d'éventuels arguments db à ne pas envoyer à super() autoSizer = kwds.pop('autoSizer', True) size = kwds.get('size',None) if not 'style' in kwds.keys(): kwds['style'] = wx.DEFAULT_FRAME_STYLE # si size pas dans kwds, on pique celle de l'olv qui serait contrainte if not size and dicOlv.get('size',None): kwds['size'] = dicOlv.pop('size',None) # recherche d'un dicBandeau for dic in (kwds, dicParams, dicOlv): dicBandeau = dic.pop('dicBandeau',None) if dicBandeau != None: break super().__init__(parent,**kwds) if dicBandeau: self.bandeau = xbandeau.Bandeau(self,**dicBandeau) else: self.bandeau = None # Création des différentes parties de l'écran self.pnlParams = PNL_params(self, **dicParams) kwds['db'] = self.db if dicOlv != {}: self.dicOlv = xformat.CopyDic(dicOlv) self.pnlOlv = PNL_corps(self, dicOlv, **kwds ) self.ctrlOlv = self.pnlOlv.ctrlOlv else: autoSizer = False self.pnlPied = PNL_pied(self, dicPied, **kwds ) # permet un Sizer de substitution différé après l'init propre à l'instance if autoSizer: self.ctrlOlv.MAJ() self.Sizer()
def __init__(self,parent,dicOlv,**kwds): # récup de la matrice servant à la gestion des données, si non fournie elle est composée automatiquemetn matrice = dicOlv.get('matriceSaisie',None) mode = dicOlv.get('mode','ajout') if not matrice: key = ("saisie","") matrice = xformat.DicOlvToMatrice(key,dicOlv) sizeSaisie = dicOlv.get('sizeSaisie',None) # Size de l'écran de saisie if not sizeSaisie: nblignes = 0 for key, lst in matrice.items(): nblignes += len(lst) sizeSaisie = (200,max(80 + nblignes * 50,400)) kwds['size'] = sizeSaisie kwds['kwValideSaisie'] = dicOlv super().__init__(parent, **kwds) # construction de l'écran de saisie self.pnl = xusp.TopBoxPanel(self, matrice=matrice, lblTopBox=None) # grise le champ ID if mode in 'ajout' : titre = "Création d'une nouvelle ligne" else: titre = "Modification de la base de données" self.pnl.GetPnlCtrl('ID').Enable(False) texte = "Définissez les valeurs souhaitées pour la ligne" # personnalisation des éléments de l'écran self.bandeau = xbandeau.Bandeau(self,titre=titre,texte=texte, nomImage='xpy/images/32x32/Configuration.png') self.btn = self.Boutons(self) # layout self.Sizer(self.pnl)
def __init__(self, parent): wx.Dialog.__init__(self, parent, -1, name="DLG_Choix_action", style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX) self.parent = parent # Bandeau intro = "Vous pouvez enregistrer le fichier généré dans le répertoire souhaité." titre = "Exporter vers Excel" self.ctrl_bandeau = xbandeau.Bandeau(self, titre=titre, texte=intro,hauteur=30, nomImage=EXCEL_16X16_IMG) self.bouton_enregistrer = xctrlbi.CTRL(self, texte="Enregistrer sous", cheminImage= SAUVEGARDER_16X16_IMG, tailleImage=(48, 48), margesImage=(40, 20, 40, 0), positionImage=wx.TOP, margesTexte=(10, 10)) self.bouton_enregistrer.SetToolTip(wx.ToolTip("Enregistrer le fichier Excel")) self.bouton_annuler = xctrlbi.CTRL(self, id=wx.ID_CANCEL, texte="Annuler", cheminImage=ANNULER_32X32_IMG) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.OnBoutonEnregistrer, self.bouton_enregistrer)
def __init__(self, parent, **kwds): typeConfig = kwds.pop('typeConfig', None) nomConfig = kwds.pop('nomConfig', None) lblBox = kwds.pop('lblBox', "Paramètres de la base de donnée") modeBase = kwds.pop('modeBase', 'pointeur') kwds['size'] = (350, 430) super().__init__(parent, **kwds) self.modeBase = modeBase self.DB = None # récup info de l'utilisateur de la session cfg = xshelve.ParamUser() dicUser = cfg.GetDict(dictDemande=None, groupe='USER') mess = "Accès aux ParamUser" try: # vérif des droits if modeBase == 'creation': mess = "Echec de la vérification des droits de création" if dicUser['profil'] != 'administrateur': mess += "\n\n%s de profil %s n'est pas administrateur!" % ( dicUser['utilisateur'], dicUser['profil']) raise (mess) mess = None except: wx.MessageBox(mess, "xGestionConfig.DLG_saisieUneConfig") if mess: self.Destroy() # choix de la configuration prise dans paramFile cfgF = xshelve.ParamFile() grpConfigs = cfgF.GetDict(dictDemande=None, groupe='CONFIGS') # les choix de config sont stockés par application car Data peut être commun à plusieurs if parent and hasattr(parent, 'dictAppli'): dictAppli = self.parent.dictAppli else: cfg = xshelve.ParamUser() dictAppli = cfg.GetDict(dictDemande=None, groupe='APPLI') nomAppli = dictAppli['NOM_APPLICATION'] # récup des données à afficher après construction choixConfigs = grpConfigs['choixConfigs'][nomAppli] if 'lastConfig' in choixConfigs: lastConfig = choixConfigs['lastConfig'] else: lastConfig = None ddConfig = GetDdConfig(grpConfigs, lastConfig) # récup de la matrice ayant servi à la gestion des données if not typeConfig: lstcode = GetLstCodesMatrice(MATRICE_CONFIGS) typeConfig = lstcode[0] key = (typeConfig, lblBox) matrice = { key: MATRICE_CONFIGS[GetCleMatrice(typeConfig, MATRICE_CONFIGS)] } self.typeConfig = typeConfig # ajustement de la matrice selon les modeBase ixID = GetIxLigneMatrice('nameDB', matrice[key]) if self.modeBase == 'pointeur': matrice[key][ixID] = { 'name': 'nameDB', 'genre': 'combo', 'label': 'Nom de la Base', 'help': "Le nom de la base est le fichier en local, ou son nom sur le serveur", 'ctrlAction': 'OnNameDB', } elif self.modeBase == 'creation': matrice[key][ixID] = { 'name': 'nameDB', 'genre': 'texte', 'label': 'Nom de la Base', 'help': "Choisir un base de donnée non présente sur le serveur ou fichier non existant", 'ctrlAction': 'OnNameDB', } # place la valeur du champ ID exist = False if nomConfig: ixID = GetIxLigneMatrice('ID', matrice[key]) matrice[key][ixID]['value'] = nomConfig # construction de l'écran de saisie self.pnl = xusp.TopBoxPanel(self, matrice=matrice, lblTopBox=None) if self.typeConfig in ddConfig.keys() and nomConfig == ddConfig[ self.typeConfig]['ID']: self.pnl.SetValues(ddConfig) # grise le champ ID ctrlID = self.pnl.GetPnlCtrl('ID') ctrlID.Enable(False) if self.modeBase in ('creation', 'pointeur'): titre = "Création d'une nouvelle base de données" texte = "Définissez les pointeurs d'accès et le nom de la base à y créer\n" texte += "le mot de passe présenté sera celui des 'Accès aux bases de données'" else: titre = "Définition de la base de données" texte = "Définissez les pointeurs d'accès et le nom de la base souhaitée\n" texte += "l'éventuel mot de passe présenté sera celui des 'Accès aux bases de données'" # personnalisation des éléments de l'écran self.bandeau = xbandeau.Bandeau( self, titre=titre, texte=texte, nomImage='xpy/images/32x32/Configuration.png') self.btn = self.Boutons(self) # layout self.Sizer(self.pnl)
def __init__(self, ID, mode='individus', LargeurCode=180, LargeurLib=100, minSize=(180, 350), titre=u"Saisie d'une adresse normalisée", intro=u"Lignes limitées à 38 caractères"): wx.Dialog.__init__(self, None, -1, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX) self.SetTitle("aDLG_Adresses_saisie") self.mode = mode self.choix = None if self.mode == 'familles': self.dicCorrespondant = nua.GetDBfamille(ID) self.IDfamille = ID self.IDindividu = self.dicCorrespondant['IDindividu'] else: self.dicCorrespondant = {'IDindividu': ID} self.IDindividu = ID self.minSize = minSize self.wCode = LargeurCode self.wLib = LargeurLib self.liste = [] # Bandeau self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro, hauteur=15, nomImage="xpy/Images/32x32/Matth.png") # conteneur des données self.panelAdresse = PnlAdresse(self) self.lstCtrl = self.panelAdresse.lstCtrl self.lstNomsChamps = self.panelAdresse.lstNomsChamps if self.mode == 'familles': self.panelAdresse.SetCorrespondant(self.dicCorrespondant) self.lstAdresse, self.IDindividuLu, (nom, prenom) = nua.GetDBadresse( self.IDindividu, retNom=True) if self.IDindividu == self.IDindividuLu: self.panelAdresse.SetAdresse(self.lstAdresse) elif not nom or nom == "": mess = "Cette adresse est perdue,\n\nVoulez-vous créer une nouvelle adresse?" ret = wx.MessageBox(mess, "Pas d'adresse personnelle", style=wx.YES_NO | wx.CENTER) if ret == wx.YES: self.panelAdresse.SetAdresse(self.lstAdresse) else: self.Destroy() else: mess = "Cette personne avait l'adresse de %s %s\n\nVoulez-vous lui créer une adresse personnelle?" % ( prenom, nom) mess += "\nSinon changez l'adresse de l'individu %s" % self.IDindividuLu ret = wx.MessageBox(mess, "Pas d'adresse personnelle", style=wx.YES_NO | wx.CENTER) if ret != wx.YES: self.Destroy() # Boutons self.bouton_remonte = CTRL_Bouton_image( self, texte=u"Remonte\nex adr.", image="xpy/Images/32x32/Actualiser.png", ) self.bouton_ok = CTRL_Bouton_image( self, texte=u"Valider", image="xpy/Images/32x32/Valider.png") self.bouton_fermer = CTRL_Bouton_image( self, texte=u"Abandon", image="xpy/Images/32x32/Annuler.png") self.__set_properties() self.__do_layout()
def __init__(self, parent, dicOlv, *args, **kwds): self.parent = parent dicBandeau = dicOlv.pop('dicBandeau', None) autoSizer = dicOlv.pop('autoSizer', True) self.lstBtns = kwds.pop('lstBtns', None) self.lstActions = kwds.pop('lstActions', None) self.dicOnClick = kwds.pop('dicOnClick', None) if (not self.lstBtns): #force la présence d'un pied d'écran par défaut self.lstBtns = [ ('BtnPrec', wx.ID_CANCEL, wx.ArtProvider.GetBitmap(wx.ART_DELETE, wx.ART_OTHER, (32, 32)), "Abandon, Cliquez ici pour retourner à l'écran précédent"), ('BtnOK', wx.ID_OK, wx.Bitmap("xpy/Images/32x32/Valider.png", wx.BITMAP_TYPE_ANY), "Cliquez ici pour Choisir l'item sélectionné") ] wx.Panel.__init__(self, parent, *args, **kwds) #ci dessous l'ensemble des autres paramètres possibles pour OLV if dicBandeau: self.bandeau = xbandeau.Bandeau(self, **dicBandeau) else: self.bandeau = None if 'recherche' in dicOlv: self.avecRecherche = dicOlv['recherche'] else: self.avecRecherche = True #récup des seules clés possibles pour dicOLV lstParamsOlv = [ 'id', 'style', 'listeColonnes', 'listeChamps', 'colonneTri', 'getDonnees', 'getDonneesObj', 'msgIfEmpty', 'sensTri', 'exportExcel', 'exportTexte', 'apercuAvantImpression', 'imprimer', 'titreImpression', 'orientationImpression', 'cellEditMode', 'useAlternateBackColors', ] dicOlvOut = {} for key, valeur in dicOlv.items(): if key in lstParamsOlv: dicOlvOut[key] = valeur self.ctrlOlv = ListView(self, **dicOlvOut) if self.avecRecherche: self.barreRecherche = BarreRecherche( self, listview=self.ctrlOlv, texteDefaut=u"Saisir une partie de mot à rechercher ...", style=wx.TE_LEFT | wx.TE_PROCESS_ENTER) self.barreRecherche.Bind(wx.EVT_CHAR, self.OnRechercheChar) self.pnlPied = (10, 10) else: # Le pnlPied est un spécifique alimenté par les descendants self.pnlPied = (200, 10) # Sizer différé pour les descendants avec spécificités modifiant le panel if autoSizer: self.ProprietesOlv() self.__do_layout()
def __init__(self, parent,dicList1={},lstChamps1=[],dicList2={},lstChamps2=[],lstLettres=[],columnSort=3, LargeurCode=80,LargeurLib=100,minSize=(350, 350),titre=u"Lettrage des montants", intro=u"Cochez les lignes associées puis cliquez sur lettrage...", altOK = False): wx.Dialog.__init__(self, None, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX) self.SetTitle("xchoixListe.DialogLettrage") self.parent = parent self.lstLettresOriginal = copy.deepcopy(lstLettres) self.lstLettres = lstLettres self.dicList1 = dicList1 self.dicList2 = dicList2 self.lstChamps1 = lstChamps1 self.lstChamps2 = lstChamps2 self.columnSort = columnSort self.altOK = altOK self.choix = None self.parent = parent self.minSize = minSize self.wCode = LargeurCode self.wLib = LargeurLib self.nbValeurs = len(lstChamps2) if len(lstChamps1) > len(lstChamps2): self.nbValeurs = len(lstChamps1) self.nbColonnes = self.nbValeurs + 4 self.lstLibels = [u"DC",u"ID",u"Let",]+([u"",]*(self.nbValeurs-1))+[u"Débits",u"Crédits",] #composition des libelles colonnes et des codes i=3 for item in lstChamps1: if item.lower() == u"montant": continue self.lstLibels[i] = item i +=1 i=3 for item in lstChamps2: if item.lower() == u"montant": continue if self.lstLibels[i] != item: self.lstLibels[i] += u"/%s"%item i +=1 # le code est le dernier mot du libellé de la colonne, sans accent et en minuscule self.lstCodes = [xdb.Supprime_accent(x.split(u"/")[-1].strip()).lower() for x in self.lstLibels] # vérif unicité code lstano = [x for x in self.lstCodes if self.lstCodes.count(x)>1] if len(lstano)>0: wx.MessageBox(u"Les noms des champs doivent être uniques dans un même liste liste!\n voir le doublon: '%s'"%lstano[0], u"Impossible") return # constitution de la liste de données et calcul au passage de la largeur nécessaire pour les colonnes self.lstDonnees = [] self.lstWidth = [30]*self.nbColonnes # préalimentation d'une largeur par défaut self.lstWidth[1]=60 # lardeur de la colonne ID multiwidth = 6 # multiplicateur du nombre de caratère maxi dans la colonne pour déterminer la largeur for libel in self.lstLibels: if self.lstWidth[self.lstLibels.index(libel)] < multiwidth*len(libel)+10: self.lstWidth[self.lstLibels.index(libel)] = multiwidth*len(libel)+10 for sens in (+1,-1): # les montants seront alignés dans les deux colonnes le plus à droite if sens == +1: ixMtt = self.nbColonnes-2 dic = dicList1 champs = lstChamps1 else: ixMtt = self.nbColonnes-1 dic = dicList2 champs = lstChamps2 if not "montant" in str(champs).lower(): wx.MessageBox(u"Les listes de données n'ont pas chacune un champ 'montant'!",u"Impossible") return nbval = len(champs) # balayage des deux dictionnaires de données et de leur liste de champs for key,item in dic.items(): donnee=[sens,key,""] + ([""]*(self.nbValeurs-1)) + [0.0,0.0] ixVal = 3 valMtt = None for i in range(nbval): if u"montant" in champs[i].lower(): valMtt = item[i] continue donnee[ixVal] = item[i] if isinstance(item[i],(str)): lg = len(item[i]) else: lg = len(str(item[i])) if self.lstWidth[ixVal] < lg*multiwidth + 10: self.lstWidth[ixVal] = lg*multiwidth + 10 ixVal += 1 # ajout du montant à droite donnee[ixMtt] = valMtt self.lstDonnees.append(donnee) # Bandeau self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro, hauteur=15, nomImage="xpy/Images/32x32/matth.png") # conteneur des données self.listview = FastObjectListView(self, id=-1, style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL | wx.LC_HRULES | wx.LC_VRULES) self.listview.SetMinSize((10, 10)) self.barre_recherche = CTRL_Outils(self, listview=self.listview, afficherCocher=True) # Boutons self.bouton_lettrer = wx.Button(self, id = wx.ID_APPLY,label="Lettrer") self.bouton_lettrer.SetBitmap(wx.Bitmap("xpy/Images/32x32/Action.png")) self.bouton_delettrer = wx.Button(self, label=u"DeLettrer", ) self.bouton_delettrer.SetBitmap(wx.Bitmap("xpy/Images/32x32/Depannage.png")) self.bouton_fermer = wx.Button(self, label=u"Annuler",) self.bouton_fermer.SetBitmap(wx.Bitmap("xpy/Images/32x32/Annuler.png")) self.bouton_ok = wx.Button(self, label=u"Valider", ) self.bouton_ok.SetBitmap(wx.Bitmap("xpy/Images/32x32/Valider.png")) self.__set_properties() self.MAJ() self.__do_layout()
def Init(self): self.db = xdb.DB() # définition de l'OLV self.dicOlv = {'lstColonnes': GetOlvColonnes()} self.dicOlv.update({'lstCodesSup': GetOlvCodesSup()}) self.dicOlv.update(GetOlvOptions()) size = self.dicOlv.pop('size',None) self.choicesDiffere = self.dicOlv.pop('choicesDiffere',[]) self.SetSize(size) self.depotOrigine = [] self.ctrlOlv = None self.withDepot = True # récup des modesReglements nécessaires pour passer du texte à un ID d'un mode ayant un mot en commun choicesMode = [] self.libelleDefaut = '' for colonne in self.dicOlv['lstColonnes']: if 'mode' in colonne.valueGetter: choicesMode = colonne.choices if 'libelle' in colonne.valueGetter: self.libelleDefaut = colonne.valueSetter # appel de modes de règlements self.ddModesRegl = nur.GetModesReglements(self.db) if self.ddModesRegl == wx.ID_ABORT: return wx.ID_ABORT # constitution d'un dictionnaire de modes de règlements possibles par choices de mode (vrt chq esp) self.dicModesChoices = {} for item in choicesMode + self.choicesDiffere: # les descriptifs de modes de règlements ne doivent pas avoir des mots en commun lstMots = item.split(' ') self.dicModesChoices[item]={'lstMots':lstMots} ok = False for IDmode, dicMode in self.ddModesRegl.items(): # pour un mot dans les choices for mot in lstMots: # présent dans le label d'un mode de règlement if mot.lower() in dicMode['label'].lower(): self.dicModesChoices[item].update(dicMode) dicMode['choice'] = item ok = True break if ok: break if not ok: wx.MessageBox("Problème mode de règlement\n\n'%s' n'a aucun mot commun avec un mode de règlement paramétré!"%item) # appel d'émetteurs selon les modes de règlement lstModes = [self.dicModesChoices[x]['IDmode'] for x in self.dicModesChoices.keys()] self.dlEmetteurs, self.dlIDemetteurs = nur.GetEmetteurs(self.db,lstModes) if self.dlEmetteurs == wx.ID_ABORT: return wx.ID_ABORT # boutons de bas d'écran - infos: texte ou objet window. Les infos sont placées en bas à gauche self.txtInfo = "Ici de l'info apparaîtra selon le contexte de la grille de saisie" lstInfos = [ wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (16, 16)),self.txtInfo] dicPied = {'lstBtns': GetBoutons(self), "lstInfos": lstInfos} # lancement de l'écran en blocs principaux self.pnlBandeau = xbandeau.Bandeau(self,TITRE,INTRO,nomImage="xpy/Images/32x32/Matth.png") self.pnlParams = PNL_params(self) self.pnlOlv = PNL_corpsReglements(self, self.dicOlv) self.pnlPied = PNL_pied(self, dicPied) self.ctrlOlv = self.pnlOlv.ctrlOlv # la grille est modifiée selon la coche sans dépôt self.pnlParams.ctrlSsDepot.Bind(wx.EVT_KILL_FOCUS,self.OnSsDepot) self.choicesNonDiffere = self.ctrlOlv.lstColonnes[self.ctrlOlv.lstCodesColonnes.index('mode')].choices self.OnSsDepot(None) self.Bind(wx.EVT_CLOSE,self.OnClose) self.Sizer()
def __init__(self, parent, modeImportation=False): wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX) self.panel_saisie = wx.Panel(self, -1) self.SetTitle("DLG_Villes") titre = u"Gestion villes et codes postaux" if modeImportation == True: intro = u"Vous pouvez ici rechercher une ville ou un code postal grâce à la barre de recherche. Cliquez sur 'Choisir' pour importer la ville saisie ou sélectionnée." else: intro = u"Vous pouvez ici rechercher une ville ou un code postal. La barre de recherche vous permet d'effectuer une recherche sur une partie du nom ou du code postal." self.ctrl_bandeau = xbd.Bandeau(self, titre=titre, texte=intro, hauteur=15, nomImage="xpy/Images/32x32/Carte.png") self.ctrl_villes = olv.ListView(self, id=-1, style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_SINGLE_SEL | wx.LC_HRULES | wx.LC_VRULES) self.ctrl_villes.MAJ() self.ctrl_barreRecherche = olv.CTRL_Outils(self, listview=self.ctrl_villes) self.staticbox_saisie_staticbox = wx.StaticBox( self.panel_saisie, -1, u"Forcer une ville dans l'Adresse sans sauvegarde en modèle") self.label_cp = wx.StaticText(self.panel_saisie, -1, "Code postal :") self.ctrl_cp = wx.TextCtrl(self.panel_saisie, -1, "") self.label_ville = wx.StaticText(self.panel_saisie, -1, "Ville :") self.ctrl_ville = wx.TextCtrl(self.panel_saisie, -1, "") self.label_pays = wx.StaticText(self.panel_saisie, -1, "Pays :") self.ctrl_pays = wx.TextCtrl(self.panel_saisie, -1, "") self.bouton_ajouter = wx.BitmapButton( self, -1, wx.Bitmap("xpy/Images/16x16/Ajouter.png", wx.BITMAP_TYPE_ANY)) self.bouton_modifier = wx.BitmapButton( self, -1, wx.Bitmap("xpy/Images/16x16/Modifier.png", wx.BITMAP_TYPE_ANY)) self.bouton_supprimer = wx.BitmapButton( self, -1, wx.Bitmap("xpy/Images/16x16/Supprimer.png", wx.BITMAP_TYPE_ANY)) self.bouton_importer = CTRL_Bouton_image( self, texte=u"Choisir la ville", cheminImage="xpy/Images/32x32/Fleche_bas.png") self.bouton_annuler = CTRL_Bouton_image( self, texte=u"Fermer", cheminImage="xpy/Images/32x32/Annuler.png") if modeImportation == False: self.panel_saisie.Show(False) self.bouton_importer.Show(False) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.Ajouter, self.bouton_ajouter) self.Bind(wx.EVT_BUTTON, self.Modifier, self.bouton_modifier) self.Bind(wx.EVT_BUTTON, self.Supprimer, self.bouton_supprimer) self.Bind(wx.EVT_BUTTON, self.OnBoutonChoisir, self.bouton_importer) self.Bind(wx.EVT_BUTTON, self.OnBoutonAnnuler, self.bouton_annuler)