Пример #1
0
class iPht3dGui(wx.Frame):
    ID_CHRONIQUE = 122
    ID_PROFIL = 123
    ID_OPTIONS = 125
    ID_RT3D = 126

    def __init__(self, titre, lang="fr"):
        wx.Frame.__init__(self,
                          None,
                          1,
                          title=titre,
                          style=wx.DEFAULT_FRAME_STYLE)
        self.Maximize(True)
        self.titre = titre
        self.demo = False
        self.icones = self.creerIcones()
        self.mainDir = os.getcwd()
        self.model = iPht3dModel(self, self.mainDir)
        self.lg = langue()  #dico contient les mots et leur traduction
        self.invdico = dict()
        for i in self.lg.dict.iteritems():
            self.invdico[i[1][0]] = i[0]  # dictionneir inverse
        self.LANG = lang  # nom de la langue

        self.creerPanelMatplotlib()
        self.creerTopBar()
        self.creerPanelParametres()
        self.creerPanelAffiche()
        self.creerMenus()

        self.afficheSizer = wx.BoxSizer(wx.VERTICAL)
        self.afficheSizer.Add(self.affiche, 0, wx.EXPAND)

        frameSizer = wx.BoxSizer(wx.HORIZONTAL)
        frameSizer.Add(self.paramSizer, 12, wx.EXPAND)
        frameSizer.Add(self.matplot, 76, wx.EXPAND)
        frameSizer.Add(self.afficheSizer, 15, wx.EXPAND)

        globalSizer = wx.BoxSizer(wx.VERTICAL)
        globalSizer.Add(self.barSizer, 4)
        globalSizer.Add(frameSizer, 96, wx.EXPAND)

        globalSizer.SetSizeHints(self)
        self.SetSizer(globalSizer)
        self.control = Controller(self)
        wx.EVT_CLOSE(self, self.OnExit)

    def traduit(self, mot):
        mot2 = []
        if self.LANG == 'fr': return mot
        if type(mot) == type('abc'):
            return self.lg.getMot(
                mot)  # pour l'instant que anglais donc pas choix
        else:
            for m in mot:
                mot2.append(self.lg.getMot(m))  # pour des listes
            return mot2

    def tradinverse(self, mot):
        if self.invdico.has_key(mot):
            return str(
                self.invdico[mot])  # pour l'instant que anglais donc pas choix
        else:
            return mot

    def OnRepondre(self, texte):
        texte = self.traduit(texte)
        message = wx.MessageDialog(self,
                                   texte,
                                   "Attention",
                                   style=wx.ICON_INFORMATION | wx.CENTRE
                                   | wx.OK | wx.CANCEL)
        retour = message.ShowModal()
        message.Destroy()
        return retour

    def OnMessage(self, text):
        if text == None: return
        text = self.traduit(text)
        if type(text) == type('ab'):
            w = max(len(text) * 5, 80)
            h = 1
            text = [text]
        elif type(text) == type([3, 4]):
            h = len(text)
            w = 80
            for i in range(len(text)):
                w = max(w, len(text[i]) * 5)
        dlg = wx.Dialog(self, -1, "", size=(min(w + 30, 450), h * 30 + 80))
        dlgSizer = wx.BoxSizer(wx.VERTICAL)
        for i in range(len(text)):
            dlgSizer.Add(wx.StaticText(dlg, -1, text[i]))
        dlgSizer.Add(dlg.CreateButtonSizer(wx.OK), -1,
                     wx.ALIGN_BOTTOM | wx.ALIGN_CENTER)
        dlg.SetSizer(dlgSizer)
        dlg.ShowModal()
        dlg.Destroy()

    ####################################################
    #                   creer menus
    ####################################################
    def creerMenus(self):
        self.menus = Menus(self)
        #file menu
        menuFichier = wx.Menu()
        menuFichier.Append(wx.ID_NEW,
                           "&" + self.traduit('Nouveau') + "\tCTRL+n")
        menuFichier.AppendSeparator()
        menuFichier.Append(wx.ID_OPEN,
                           "&" + self.traduit('Ouvrir') + "\tCTRL+o")
        menuFichier.Append(wx.ID_SAVE,
                           "&" + self.traduit('Enregistrer') + "\tCTRL+s")
        menuFichier.Append(wx.ID_SAVEAS,
                           "&" + self.traduit('Enregistrer sous'))
        menuFichier.AppendSeparator()
        menuFichier.Append(wx.ID_EXIT,
                           "&" + self.traduit('Quitter') + "\tCTRL+q")

        wx.EVT_MENU(self, wx.ID_NEW, self.menus.OnNew)
        wx.EVT_MENU(self, wx.ID_OPEN, self.menus.OnOpen)
        wx.EVT_MENU(self, wx.ID_SAVE, self.menus.OnSave)
        wx.EVT_MENU(self, wx.ID_SAVEAS, self.menus.OnSaveAs)
        wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit)

        listeVar = self.model.Aquifere.getParm('Variable')[1]
        listeVar.extend(
            ['Transport', 'Tr_Rech', 'PHT3D', 'PH_Rech', 'Observation'])

        # Import
        menuImport = wx.Menu()
        submenu = wx.Menu()
        for i in range(len(listeVar)):
            id = submenu.Append(-1, self.traduit(listeVar[i]))
            self.Bind(wx.EVT_MENU, self.menus.OnImportVar, id)
        menuImport.AppendMenu(710, "Grid", submenu)
        submenu = wx.Menu()
        for i in range(len(listeVar)):
            id = submenu.Append(-1, self.traduit(listeVar[i]))
            self.Bind(wx.EVT_MENU, self.menus.OnImportZones, id)
        menuImport.AppendMenu(730, "Zones", submenu)
        id = menuImport.Append(-1, self.traduit('Donnees'))
        self.Bind(wx.EVT_MENU, self.menus.OnImportData, id)
        id = menuImport.Append(-1, self.traduit('Solutions'))
        self.Bind(wx.EVT_MENU, self.menus.OnImportSolutions, id)
        #Export
        menuExport = wx.Menu()
        submenu = wx.Menu()
        for i in range(len(listeVar)):
            submenu.Append(751 + i, self.traduit(listeVar[i]))
        menuExport.AppendMenu(750, "Variables", submenu)
        menuExport.Append(771, self.traduit("Vitesses"))
        menuExport.Append(772, "Transport")
        menuExport.Append(773, "PHT3D")
        for i in range(len(listeVar)):
            wx.EVT_MENU(self, 751 + i, self.menus.OnExportResultat)
        for i in range(771, 774):
            wx.EVT_MENU(self, i, self.menus.OnExportResultat)

        #Outils
        menuOutils = wx.Menu()
        oc = menuOutils.Append(-1, "Options calcul")
        ov = menuOutils.Append(-1, "Options Visu")
        of = menuOutils.Append(-1, "Options Modflow")
        omt = menuOutils.Append(-1, "Options Mt3dms")
        opht = menuOutils.Append(-1, "Options Pht3d")
        oim = menuOutils.Append(-1, self.traduit("Import Donnees"))
        self.Bind(wx.EVT_MENU, self.menus.OnCalcOpt, oc)
        self.Bind(wx.EVT_MENU, self.menus.OnVisuOpt, ov)
        self.Bind(wx.EVT_MENU, self.menus.OnModflowOpt, of)
        self.Bind(wx.EVT_MENU, self.menus.OnMt3dmsOpt, omt)
        self.Bind(wx.EVT_MENU, self.menus.OnPht3dOpt, opht)
        self.Bind(wx.EVT_MENU, self.menus.OnImportData, oim)
        #Add-ins
        self.menuAddins = wx.Menu()

        #Aide
        menuAide = wx.Menu()
        if self.LANG == "fr": menuAide.Append(131, "Aide")
        if self.LANG == "en": menuAide.Append(131, "Help")
        wx.EVT_MENU(self, 131, self.menus.OnAide)
        ##        menuAide.Append(132,"Video1 Tutorial")
        ##        menuAide.Append(133,"Video2 Zones")
        ##        wx.EVT_MENU(self, 132, self.menus.OnVideo)
        ##        wx.EVT_MENU(self, 133, self.menus.OnVideo)
        menuAide.Append(133, "&Donwload new")
        wx.EVT_MENU(self, 133, self.menus.OnDownload)
        menuAide.Append(134, "&Back to old")
        wx.EVT_MENU(self, 134, self.menus.OnBackVersion)
        self.menuBarre = wx.MenuBar()

        self.menuBarre.Append(menuFichier, "&" + self.traduit('Fichier'))
        self.menuBarre.Append(menuImport, "&Import")
        self.menuBarre.Append(menuExport, "&Export")
        self.menuBarre.Append(menuOutils, "&" + self.traduit('Outils'))
        self.menuBarre.Append(self.menuAddins, "&Add-in")
        self.menuBarre.Append(menuAide, "&?")
        self.SetMenuBar(self.menuBarre)
        addin = Addins(self)
        addin.build()

    def enableMenu(self, nomM, bool):
        id = self.menuBarre.FindMenu(nomM)
        if id != -1: self.menuBarre.EnableTop(id, bool)  # pour les griser

    def OnExit(self, evt):
        self.menus.askSave(evt)
        self.Destroy()

    #####################################################
    #                   Panel Matplotlib
    ######################################################
    def creerPanelMatplotlib(self):

        #initialisation de la visualisation
        self.Visu = Visualisation(self, self.model.Aquifere.getVarList())
        sizerVisu = wx.BoxSizer(wx.VERTICAL)

        #ajout d'un item avec une proportion dans le sizer (95% et 5% ici) avec comme flag wxExpand
        sizerVisu.Add(self.Visu, 95, wx.EXPAND)
        basSizer = wx.BoxSizer(wx.HORIZONTAL)
        basSizer.Add(self.Visu.GetToolBar(), 0)
        self.pos = wx.StaticText(self, -1, ' x: y:', size=(100, 40))
        self.pos.SetOwnBackgroundColour('LIGHT GRAY')
        basSizer.Add(self.pos, 5, wx.EXPAND)
        self.notify = wx.StaticText(self, -1, '')
        font = wx.Font(16, wx.SWISS, wx.NORMAL, wx.NORMAL)
        self.notify.SetFont(font)
        self.notify.SetOwnForegroundColour('RED')
        basSizer.AddSpacer((0, 5), 0)
        basSizer.Add(self.notify, 5, wx.EXPAND)
        sizerVisu.Add(basSizer, 5, wx.EXPAND)
        self.matplot = sizerVisu
        self.model.setVisu(self.Visu)
        self.Visu.setVisu(self.model, self.model.getGlist())

        # On Windows, default frame size behaviour is incorrect
        # you don't need this under Linux
        #tw, th = self.Visu.GetToolBar().GetSizeTuple()
        #fw, fh = self.Visu.GetSizeTuple()
        #self.Visu.GetToolBar().SetSize(wx.Size(fw, th))

    def getModel(self):
        return self.model

    def getVisu(self):
        return self.Visu

    def onNotify(self, text):
        self.notify.SetLabel(text)

    def onPosition(self, text):
        self.pos.SetLabel(text)

    # affiche le titre ainsi que le path complet du projet
    def updateTitle(self):
        self.SetTitle(self.titre + " - " + self.model.getProjectName())

    #####################################################
    #                   Panel Top et Parametres
    #####################################################
    def creerTopBar(self):
        self.barSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.zoneBox = zoneBox(self)
        self.barSizer.Add(self.zoneBox, 0)
        self.barSizer.Add(wx.StaticLine(self, -1), 0,
                          wx.ALIGN_CENTER | wx.EXPAND)
        self.modifBox = modifBox(self)
        self.barSizer.Add(self.modifBox, 0)

    def creerPanelParametres(self):
        #Creation des differents Panels
        self.paramSizer = wx.BoxSizer(wx.VERTICAL)
        self.parametresGui = parametresGui(self, self.model)
        self.paramSizer.Add(self.parametresGui)

    #####################################################
    #                   Panel Vue
    #####################################################
    def creerPanelAffiche(self):
        self.afficheTree = visuGui(self, self.model)
        self.affiche = wx.BoxSizer(wx.VERTICAL)
        self.affiche.Add(self.afficheTree, -1, wx.EXPAND)

    ######################## ICONES ############################
    import sys
    os.path.join(os.path.dirname(sys.executable), 'utils')

    def creerIcones(self):
        noms = [
            'blanc', 'bBleu', 'Mo_zList', 'Mo_Carte', 'Mo_Domaine',
            'Mo_Grille', 'Mo_GriVar', 'Mo_Unites', 'Aq_Zone', 'Aq_layLock',
            'Aq_layUnlock', 'Top_Point', 'Top_Ligne', 'Top_Rect', 'Top_Poly',
            'Top_PolyV', 'Top_Interp', 'Top_move', 'Top_modifPoly',
            'Top_modifPolyRed', 'Top_supprime', 'Top_zoneLay', 'Top_Histo',
            'Top_supprimeAll', 'Ec_SolvListe', 'Ec_Solver', 'Ec_Temps',
            'Ec_Write', 'Ec_Run', 'Ec_Particule', 'Tr_ZoneT', 'Tr_Transp',
            'Tr_Temps', 'Tr_Methodes', 'Tr_Recharge', 'Tr_Solver',
            'Tr_Particules', 'Tr_Write', 'Tr_Run', 'PH_Import', 'PH_Chemistry',
            'PH_ZoneP', 'PH_Write', 'PH_Run', 'PH_PHparm', 'PH_Recharge',
            'PH_Immobile', 'PH_ImmobileDisable', 'Ob_ZoneO', 'Vis_OriX',
            'Vis_OriY', 'Vis_OriZ', 'Vis_SwiImg', 'Vis_SwiCont'
        ]
        dIcones = {}
        for n in noms:
            img = 'utils' + os.sep + n + '.gif'
            dIcones[n] = wx.Bitmap(img, wx.BITMAP_TYPE_GIF)
        return dIcones