Changeset 1231


Ignore:
Timestamp:
Feb 26, 2013 12:32:03 AM (9 years ago)
Author:
jemian
Message:
  • allow for brief or detailed MDA file summary
  • error check after readMDA()
  • support MRUD menu selection
  • provide directory picker control
Location:
mda2idd_report/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • mda2idd_report/src/mda2idd_gui.py

    r1218 r1231  
    6363                          style=wx.DEFAULT_FRAME_STYLE)
    6464
     65        self.startup_complete = False
    6566        self.selectedMdaFile = None
    6667        self.dirty = False
     
    7778        self.SetPosition(wx.Point(self.prefs['pos_h'], self.prefs['pos_v']))
    7879        self.splitter1.SetSashPosition(self.prefs['sash_pos'], True)
     80        summary = self.prefs['short_summary']
     81        self.menu_file.Check(self.id_menu_report, self.prefs['short_summary'])
     82        self.update_mrud_menus()
    7983       
    8084        self.setStatusText('preferences file: ' + self.preferences_file)
    8185        self.setSummaryText('')
     86        self.startup_complete = True
    8287       
    8388    def _init_menus(self):
    84         id_menu_exit  = 8101 # arbitrary starting number
    85         id_menu_prefs = 1 + id_menu_exit
    86         id_menu_about = 1 + id_menu_prefs
    87         id_menu_save  = 1 + id_menu_about
     89        id_menu_exit    = 8101 # arbitrary starting number
     90        id_menu_prefs   = 1 + id_menu_exit
     91        id_menu_about   = 1 + id_menu_prefs
     92        id_menu_save    = 1 + id_menu_about
     93        self.id_menu_report  = 1 + id_menu_save
     94        id_menu_mrud  = 1 + self.id_menu_report
    8895
    8996        self.menu_file = wx.Menu(title='')
     
    9198                              help=u'Save MDA data to ASCII text file')
    9299        self.Bind(wx.EVT_MENU, self.OnMenuFileItemSave, id=id_menu_save)
     100        self.menu_file.AppendSeparator()
     101        self.menu_file.AppendCheckItem(text=u'Brief &Report\tCtrl+R', id=self.id_menu_report,
     102                              help=u'Show a brief summary report of the selected MDA file')
     103        self.Bind(wx.EVT_MENU, self.OnMenuFileItemReportStyle, id=self.id_menu_report)
    93104        # TODO: provide a control to let user edit self.preferences_file
    94105        # TODO: provide a control to let user edit self.prefs
    95 #        self.menu_file.AppendSeparator()
    96106#        self.menu_file.Append(text=u'&Preferences ...', id=id_menu_prefs,
    97107#                              help=u'Edit program preferences ...')
    98108#        self.Bind(wx.EVT_MENU, self.OnMenuFileItemPrefs, id=id_menu_prefs)
     109        self.menu_file.AppendSeparator()
     110        self.menu_file.Append(text=u'&Save\tCtrl+S', id=id_menu_save,
     111                              help=u'Save MDA data to ASCII text file')
     112        self.menu_file.AppendSeparator()
     113
     114       
     115        self.menu_file.Append(text=u'MRUD list', id=id_menu_mrud,
     116                              help=u'Most Recently Used Directories')
     117        self.menu_file.Enable(id_menu_mrud, False)
     118       
    99119        self.menu_file.AppendSeparator()
    100120        self.menu_file.Append(text=u'E&xit', id=id_menu_exit,
     
    117137    def _init_contents(self):
    118138        self.statusBar = self.CreateStatusBar()
    119 
     139       
     140        sizer = wx.BoxSizer(orient=wx.VERTICAL)
     141
     142        self.dirPicker = wx.DirPickerCtrl (self, id=wx.ID_ANY,
     143                       style=wx.DIRP_DIR_MUST_EXIST | wx.DIRP_USE_TEXTCTRL)
     144        sizer.Add(
     145                self.dirPicker,
     146                0,           # make vertically unstretchable
     147                wx.EXPAND |  # make horizontally stretchable
     148                wx.ALL,      # and make border all around
     149                )
     150       
    120151        self.splitter1 = wx.SplitterWindow(self, id=wx.ID_ANY, style=wx.SP_3D)
    121 
     152        sizer.Add(
     153                self.splitter1,
     154                1,           # make vertically stretchable
     155                wx.EXPAND |  # make horizontally stretchable
     156                wx.ALL,      # and make border all around
     157                )
     158       
    122159        self.textCtrl1 = wx.TextCtrl (self.splitter1, id=wx.ID_ANY,
    123160                                      style=wx.TE_READONLY|wx.TE_MULTILINE)
     
    128165        self.dir.SetFilter(self.prefs['file_filter'])
    129166        # Select the starting folder and expand to it
    130         self.dir.ExpandPath(self.prefs['start_dir'])
     167        self.setCurrentDirectory(self.prefs['start_dir'])
    131168        self.splitter1.SplitVertically(self.dir, self.textCtrl1)
    132169       
     
    137174        #self.Bind(wx.EVT_SIZE, self.OnWindowGeometryChanged)
    138175        self.Bind(wx.EVT_MOVE, self.OnWindowGeometryChanged)
     176        self.Bind(wx.EVT_DIRPICKER_CHANGED, self.OnSelectDirPicker)
     177
     178        self.SetSizerAndFit(sizer)
    139179       
    140180    def GetDefaultPreferencesFileName(self):
     
    172212        if os.path.exists(selectedItem):
    173213            if os.path.isfile(selectedItem):
    174                 summary = mda2idd_summary.summaryMda(selectedItem)
     214                checked = self.menu_file.IsChecked(self.id_menu_report)
     215                summary = mda2idd_summary.summaryMda(selectedItem, checked)
    175216                self.setSummaryText(summary)
    176217                self.selectedMdaFile = selectedItem
     
    180221                    self.prefs['start_dir'] = path
    181222                    self.update_mrud(path)
     223                    self.dirPicker.SetPath( path )
    182224            if os.path.isdir(selectedItem):
    183225                self.prefs['start_dir'] = selectedItem
    184226                self.update_mrud(selectedItem)
     227                self.dirPicker.SetPath( selectedItem )
    185228            self.writePreferences()
     229   
     230    def OnSelectDirPicker(self, event):
     231        '''user changed the text or browsed to a directory in the picker'''
     232        if not isinstance(event, wx.Event):
     233            self.setStatusText( "Not an event: %s" % str(event) )
     234            event.Skip()
     235            return
     236        selectedItem = self.dirPicker.GetPath()
     237        if os.path.exists(selectedItem):
     238            if os.path.isdir(selectedItem):
     239                self.prefs['start_dir'] = selectedItem
     240                self.update_mrud(selectedItem)
     241                self.dir.ExpandPath(selectedItem)
    186242
    187243    def OnMenuFileItemSave(self, event):
     
    193249    def OnMenuFileItemPrefs(self, event):
    194250        '''save the preferences to a file'''
    195         pass        # TODO:
     251        # TODO: edit preferences dialog
     252        self.writePreferences()     # TODO: allow user to change file name?
     253   
     254    def OnMenuFileItemReportStyle(self, event):
     255        if self.selectedMdaFile is not None and os.path.exists(self.selectedMdaFile):
     256            checked = self.menu_file.IsChecked(self.id_menu_report)
     257            summary = mda2idd_summary.summaryMda(self.selectedMdaFile, checked)
     258            self.setSummaryText(summary)
    196259
    197260    def OnMenuFileItemExit(self, event):
     
    201264        :param event: wxPython event object
    202265        '''
     266        self.writePreferences()
    203267        self.Close()
     268   
     269    def setCurrentDirectory(self, directory):
     270        '''set the current directory'''
     271        self.dir.ExpandPath(directory)
     272        self.dirPicker.SetPath(directory)
    204273   
    205274    def setSummaryText(self, text):
     
    227296                        'sash_pos': 200,
    228297            'start_dir': os.path.dirname(self.preferences_file),
     298            'short_summary': True,
    229299            'file_filter': '*.mda',
    230300            'mrud': [
     
    258328               
    259329                self.prefs['file_filter'] = root.find('file_filter').text.strip()
     330                node = root.find('short_summary')
     331                self.prefs['short_summary'] = node is None or 'true' == node.text.strip().lower()
    260332                self.prefs['start_dir'] = root.find('starting_directory').text.strip()
    261333                   
     
    265337        if self.preferences_file is not None:
    266338            if os.path.exists(os.path.dirname(self.preferences_file)):
    267 
    268                 self.prefs['size_h'], self.prefs['size_v'] = self.GetSize()
    269                 self.prefs['pos_h'],  self.prefs['pos_v']  = self.GetPosition()
    270            
    271                 root = ElementTree.Element("mda2idd_gui")
    272                 root.set("version", __version__)
    273                 root.set("datetime", str(datetime.datetime.now()))
     339                if self.startup_complete:
     340
     341                    self.prefs['size_h'], self.prefs['size_v'] = self.GetSize()
     342                    self.prefs['pos_h'],  self.prefs['pos_v']  = self.GetPosition()
     343                    self.prefs['short_summary'] = self.menu_file.IsChecked(self.id_menu_report)
    274344               
    275                 node = ElementTree.SubElement(root, "preferences_file")
    276                 node.text = self.preferences_file
    277                
    278                 node = ElementTree.SubElement(root, "written_by")
    279                 node.set("program", sys.argv[0])
    280                
    281                 node = ElementTree.SubElement(root, "subversion")
    282                 node.set("id", __svnid__)
    283                
    284                 window = ElementTree.SubElement(root, "window")
    285                 node = ElementTree.SubElement(window, "size")
    286                 node.set("h", str(self.prefs['size_h']))
    287                 node.set("v", str(self.prefs['size_v']))
    288                 node = ElementTree.SubElement(window, "position")
    289                 node.set("h", str(self.prefs['pos_h']))
    290                 node.set("v", str(self.prefs['pos_v']))
    291                 node = ElementTree.SubElement(window, "sash")
    292                 node.set("pos", str(self.prefs['sash_pos']))
    293                
    294                 node = ElementTree.SubElement(root, "file_filter")
    295                 node.text = self.prefs['file_filter']
    296                
    297                 node = ElementTree.SubElement(root, "starting_directory")
    298                 node.text = self.prefs['start_dir']
    299                
    300                 mrud = ElementTree.SubElement(root, "mrud")
    301                 mrud.append(ElementTree.Comment('MRUD: Most-Recently-Used Directory'))
    302                 mrud.set("max_directories", str(self.prefs['mrud_max_directories']))
    303                 for item in self.mrud:
    304                     ElementTree.SubElement(mrud, "dir").text = item
    305 
    306                 doc = minidom.parseString(ElementTree.tostring(root))
    307                 xmlText = doc.toprettyxml(indent = "  ", encoding='UTF-8')
    308                
    309                 f = open(self.preferences_file, 'w')
    310                 f.write(xmlText)
    311                 f.close()
     345                    root = ElementTree.Element("mda2idd_gui")
     346                    root.set("version", __version__)
     347                    root.set("datetime", str(datetime.datetime.now()))
     348                   
     349                    node = ElementTree.SubElement(root, "preferences_file")
     350                    node.text = self.preferences_file
     351                   
     352                    node = ElementTree.SubElement(root, "written_by")
     353                    node.set("program", sys.argv[0])
     354                   
     355                    node = ElementTree.SubElement(root, "subversion")
     356                    node.set("id", __svnid__)
     357                   
     358                    window = ElementTree.SubElement(root, "window")
     359                    node = ElementTree.SubElement(window, "size")
     360                    node.set("h", str(self.prefs['size_h']))
     361                    node.set("v", str(self.prefs['size_v']))
     362                    node = ElementTree.SubElement(window, "position")
     363                    node.set("h", str(self.prefs['pos_h']))
     364                    node.set("v", str(self.prefs['pos_v']))
     365                    node = ElementTree.SubElement(window, "sash")
     366                    node.set("pos", str(self.prefs['sash_pos']))
     367                   
     368                    node = ElementTree.SubElement(root, "file_filter")
     369                    node.text = self.prefs['file_filter']
     370                   
     371                    node = ElementTree.SubElement(root, "starting_directory")
     372                    node.text = self.prefs['start_dir']
     373                   
     374                    node = ElementTree.SubElement(root, "short_summary")
     375                    node.text = str(self.prefs['short_summary'])
     376                   
     377                    mrud = ElementTree.SubElement(root, "mrud")
     378                    mrud.append(ElementTree.Comment('MRUD: Most-Recently-Used Directory'))
     379                    mrud.set("max_directories", str(self.prefs['mrud_max_directories']))
     380                    for item in self.mrud:
     381                        ElementTree.SubElement(mrud, "dir").text = item
     382   
     383                    doc = minidom.parseString(ElementTree.tostring(root))
     384                    xmlText = doc.toprettyxml(indent = "  ", encoding='UTF-8')
     385                   
     386                    f = open(self.preferences_file, 'w')
     387                    f.write(xmlText)
     388                    f.close()
    312389       
    313390   
    314391    def update_mrud(self, newdir):
    315         '''file menu list of most-recently-used directories'''
     392        '''list of most-recently-used directories'''
    316393        if newdir in self.mrud:
    317394            if self.mrud[0] == newdir:
     
    321398        if len(self.mrud) >= self.prefs['mrud_max_directories']:
    322399            self.mrud = self.mrud[:self.prefs['mrud_max_directories']]
    323         # TODO: manage the MRUD menu items
     400       
     401        self.update_mrud_menus()
     402       
     403   
     404    def update_mrud_menus(self):
     405        '''manage the MRUD menu items'''
     406        # TODO: this is too complicated -- save the MRUD menu details to avoid the search
     407        mrud_pos = None     # need to know the insertion point in the menu
     408        if len(self.mrud) > 0:
     409            # remove old MRUD items
     410            # look for items just after "MRUD list"
     411            signal = False
     412            for counter, item in enumerate(self.menu_file.GetMenuItems()):
     413                if item.GetKind() == wx.ITEM_NORMAL:
     414                    if signal:
     415                        self.menu_file.Delete(item.GetId())     # remove any old MRUD items
     416                    if item.GetItemLabel() == 'MRUD list':
     417                        signal = True   # trigger next item(s) for removal
     418                        mrud_pos = counter
     419                else:
     420                    if signal:
     421                        signal = False
     422                        break
     423                    signal = False      # no more items
     424            # add new MRUD items
     425            if mrud_pos is not None:
     426                for counter, dir in enumerate(self.mrud):
     427                    if os.path.exists(dir):
     428                        text = '%s\tCtrl+%d' % (dir, counter+1)
     429                        self.menu_file.Insert(mrud_pos+counter+1, wx.ID_ANY, text=text)
     430                        id = self.menu_file.FindItem(text)
     431                        self.Bind(wx.EVT_MENU, self.OnMrudItem, id=id)
     432       
     433    def OnMrudItem(self, event):
     434        '''handle MRUD menu items'''
     435        id = event.GetId()
     436        label = self.menu_file.GetLabelText(event.GetId())
     437        self.setCurrentDirectory(label)
     438#        self.setStatusText(label)
    324439       
    325440    def OnAbout(self, event):
  • mda2idd_report/src/mda2idd_report.py

    r1225 r1231  
    8989   
    9090    data = mda.readMDA(mdaFileName)
    91     # TODO: check if MDA was read and valid and all that stuff ...
     91    if data is None:
     92        return 'could not read: ' + mdaFileName
    9293   
    9394    summary = []
  • mda2idd_report/src/mda2idd_summary.py

    r1228 r1231  
    3131
    3232
    33 def summaryMda(mdaFileName):
     33def summaryMda(mdaFileName, shortReport = True):
    3434    '''
    3535    text summary of a single MDA file (name, rank, datetime, ...)
     
    4141        return ''
    4242   
    43     #data = mda.readMDA(mdaFileName)
    44     data = mda.skimMDA(mdaFileName) # just the header info
     43    reportType = {True: mda.skimMDA, False: mda.readMDA}[shortReport]
     44    data = reportType(mdaFileName) # just the header info
    4545    if data is None:
    4646        return "could not read: " + mdaFileName
    47     # TODO: check if MDA was read and valid and all that stuff ...
    4847   
    4948    summary = []
Note: See TracChangeset for help on using the changeset viewer.