Changeset 1080 for trunk/GSASII.py


Ignore:
Timestamp:
Oct 3, 2013 9:29:47 PM (8 years ago)
Author:
toby
Message:

revise export menu; add multiple selection to G2gd.ItemSelector?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1077 r1080  
    10121012
    10131013    def _init_Exports(self,menu):
    1014         '''This is a place holder for when exports are handled in a manner similar to imports
    1015         '''
    1016 #        submenu = wx.Menu()
    1017 #        item = menu.AppendMenu(
    1018 #            wx.ID_ANY, 'entire project',
    1019 #            submenu, help='Export entire project')
    1020 
    1021         # for now hard-code CIF testing here
    1022         item = menu.Append(
    1023             wx.ID_ANY,
    1024             help='full CIF file includes powder/reflection data',
    1025             kind=wx.ITEM_NORMAL,
    1026             text='full CIF file')
    1027         self.Bind(wx.EVT_MENU, self.OnTestCIF, id=item.GetId())
    1028         item = menu.Append(
    1029             wx.ID_ANY,
    1030             help='quick CIF file with no data, no distance/angle table',
    1031             kind=wx.ITEM_NORMAL,
    1032             text='quick CIF file')
    1033         self.Bind(wx.EVT_MENU, self.OnTestCIF, id=item.GetId())
    1034 
    1035     def OnTestCIF(self,event):
    1036         # hard-code CIF testing here
    1037        
    1038         # get the menu command on Windows and Linux
    1039         menu = self.ExportMenu.FindItemById(event.GetId())
    1040         mode = 'full'
    1041         if menu:
    1042             if 'quick' in menu.GetLabel():
    1043                 mode = 'simple'
    1044         else: # this works on the Mac
    1045             try:
    1046                 if 'quick' in event.EventObject.GetLabelText(event.Id):
    1047                     mode = 'simple'
    1048             except:
     1014        '''Find exporter routines and add them into menus
     1015        '''
     1016        # set up the top-level menus
     1017        projectmenu = wx.Menu()
     1018        item = menu.AppendMenu(
     1019            wx.ID_ANY, 'Entire project as',
     1020            projectmenu, help='Export entire project')
     1021
     1022        phasemenu = wx.Menu()
     1023        item = menu.AppendMenu(
     1024            wx.ID_ANY, 'Phase as',
     1025            phasemenu, help='Export phase or sometimes phases')
     1026
     1027        powdermenu = wx.Menu()
     1028        item = menu.AppendMenu(
     1029            wx.ID_ANY, 'Powder data as',
     1030            powdermenu, help='Export powder diffraction histogram(s)')
     1031
     1032        singlemenu = wx.Menu()
     1033        item = menu.AppendMenu(
     1034            wx.ID_ANY, 'Single crystal data as',
     1035            singlemenu, help='Export single crystal histogram(s)')
     1036
     1037        # find all the exporter files
     1038        pathlist = sys.path
     1039        filelist = []
     1040        for path in pathlist:
     1041            for filename in glob.iglob(os.path.join(
     1042                path,
     1043                "G2export*.py")):
     1044                filelist.append(filename)   
     1045        filelist = sorted(list(set(filelist))) # remove duplicates
     1046        exporterlist = []
     1047        # go through the routines and import them, saving objects that
     1048        # have export routines (method Exporter)
     1049        for filename in filelist:
     1050            path,rootname = os.path.split(filename)
     1051            pkg = os.path.splitext(rootname)[0]
     1052            try:
     1053                fp = None
     1054                fp, fppath,desc = imp.find_module(pkg,[path,])
     1055                pkg = imp.load_module(pkg,fp,fppath,desc)
     1056                for clss in inspect.getmembers(pkg): # find classes defined in package
     1057                    if clss[0].startswith('_'): continue
     1058                    if inspect.isclass(clss[1]):
     1059                        # check if we have the required methods
     1060                        for m in 'Exporter','loadParmDict':
     1061                            if not hasattr(clss[1],m): break
     1062                            if not callable(getattr(clss[1],m)): break
     1063                        else:
     1064                            exporter = clss[1](self) # create an export instance
     1065                            exporterlist.append(exporter)
     1066            except AttributeError:
     1067                print 'Import_'+errprefix+': Attribute Error'+str(filename)
    10491068                pass
    1050         #path2GSAS2 = os.path.join(
    1051         #    os.path.dirname(os.path.realpath(__file__)), # location of this file
    1052         #    'exports')
    1053         #if path2GSAS2 not in sys.path: sys.path.append(path2GSAS2)
    1054         #reload(G2IO)
    1055         import G2cif
    1056         reload(G2cif)
    1057         exp = G2cif.ExportCIF(self)
    1058         sexp = G2cif.ExportSimpleCIF(self)
    1059         if mode == 'full':
    1060             exp.export()
    1061         else:
    1062             sexp.export()
    1063 
     1069            except ImportError:
     1070                print 'Import_'+errprefix+': Error importing file'+str(filename)
     1071                pass
     1072            if fp: fp.close()
     1073        # Add submenu item(s) for each Exporter by its self-declared type (can be more than one)
     1074        for obj in exporterlist:
     1075            #print 'exporter',obj
     1076            for typ in obj.exporttype:
     1077                if typ == "project":
     1078                    submenu = projectmenu
     1079                elif typ == "phase":
     1080                    submenu = phasemenu
     1081                elif typ == "powder":
     1082                    submenu = powdermenu
     1083                elif typ == "single":
     1084                    submenu = singlemenu
     1085                else:
     1086                    print("Error, unknown type in "+str(obj))
     1087                    break
     1088                item = submenu.Append(
     1089                    wx.ID_ANY,
     1090                    help=obj.longFormatName,
     1091                    kind=wx.ITEM_NORMAL,
     1092                    text=obj.formatName)
     1093                self.Bind(wx.EVT_MENU, obj.Exporter, id=item.GetId())
     1094                self.ExportLookup[item.GetId()] = typ # lookup table for submenu item
     1095           
    10641096    def _Add_ExportMenuItems(self,parent):
    10651097        item = parent.Append(
     
    11861218       
    11871219    def __init__(self, parent):
     1220        self.ExportLookup = {}
    11881221        self._init_ctrls(parent)
    11891222        self.Image = wx.Image(
Note: See TracChangeset for help on using the changeset viewer.