[Bio] / PyGUI / Catalogpanel.py Repository:
ViewVC logotype

View of /PyGUI/Catalogpanel.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.37 - (download) (as text) (annotate)
Fri Aug 13 17:41:10 2004 UTC (15 years, 2 months ago) by efrank
Branch: MAIN
CVS Tags: V00-00-03, MigrateToNewPackage, mass-spec-01, mass-spec-03, mass-spec-02, HEAD
Changes since 1.36: +2 -7 lines
Adding a bu


from wxPython.wx             import *
from KahOM.RecoElem           import RecoElem
from PyGUI.RecoElempanel           import RecoElempanel
from CatalogServices.Catalog import Catalog


class Catalogpanel:
    #------------------------------------------------------------------------
    def __init__(self, parent):
    #------------------------------------------------------------------------
        self.parent            = parent

        self.selected = None       #remember last selected catalog entry
                                   #..is used when LOAD button is hit.

        # seedItemId is the wxPython id for the "Seed" node
        # in the catalog tree under which all specific Seed servers
        # are listed

        self.seedItemId        = None

        self.initCatEvents()
        self.initCatData()


        # setup catalog editing menu (right click)

        self.catEditMenu         = wxMenu()
        self.catEditMkItemId     = wxNewId()
        self.catEditMkDirId      = wxNewId()
        self.setupCatEditMenu()

        return

    
    #------------------------------------------------------------------------
    def initCatEvents(self):
    #------------------------------------------------------------------------

        EVT_TREE_SEL_CHANGED(self.parent.catalog_tree,
                             self.parent.catalog_treeId,
                             self.onLeftClick)

        # Right click on List item for Seed will let you connect to
        # another Seed server

        EVT_RIGHT_DOWN(self.parent.catalog_tree, self.onRightClickCatalogTree)

                
        EVT_LEFT_DCLICK (self.parent.catalog_tree, self.onLeftDClick)

        EVT_COMBOBOX(self.parent.catVersionValueComboBox,
                     self.parent.catVersionValueComboBox.GetId(),
                     self.onCatVersionValueComboBox)

        return
        
    #------------------------------------------------------------------------
    def initCatData( self ):
    #------------------------------------------------------------------------

        self.parent.catalogRootId = self.parent.catalog_tree.AddRoot("/")
        self.loadCatalog()

        self.parent.catalog_tree.Expand( self.parent.catalogRootId)
        return

    #------------------------------------------------------------------
    def setupCatEditMenu(self):
    #------------------------------------------------------------------

        self.catEditMenu.Append( self.catEditMkDirId,
                                 "New Directory", "NewDirectory" )
        EVT_MENU(self.parent, self.catEditMkDirId, self.doCatEditMkDir)

        self.catEditMenu.Append( self.catEditMkItemId,
                                 "New Item", "NewDirectory" )
        EVT_MENU(self.parent, self.catEditMkItemId, self.doCatEditMkItem)

        return

    #------------------------------------------------------------------------
    def loadCatalog(self):
    #------------------------------------------------------------------------
        wxBeginBusyCursor()

        #localSeedServer        = "http://localhost/FIG"
        #seedFactory   = SeedDataFactory( localSeedServer )

        ##
        # DO NOT CREATE BssFactory() HERE ANY LONGER
        # See main progam, ModelEditor
        ##

        ##
        # Handle top/root of catalog/tree specially to avoid "two root"
        # on display problem
        ##

        top = Catalog.instance().getCatalogTop()
        parentTree = self.parent.catalog_tree
        parentTree.SetPyData( self.parent.catalogRootId,
                              (self.recoElemLoader, top, self.parent.catalogRootId) )

        for e in top.entries():
            self.recurseCatalog( e, parentTree, self.parent.catalogRootId)

        parentTree.SortChildren( self.parent.catalogRootId)

        wxEndBusyCursor()

        return

    #------------------------------------------------------------------------
    def recurseCatalog( self, catEntry, parentTree, parentItemId):
    #------------------------------------------------------------------------
        """
        Create a new item under parentItemId in wxTree, parentTree.  Associate
        catEntry with it.  If catEntry has entries, recurse on them.
        """

        if ( catEntry.isTerminal() ): 
            displayedName = catEntry.name()
        else:
            displayedName = catEntry.name() + "/"

        newItemId=parentTree.AppendItem(parentItemId, displayedName )

        # associate data needed to manipulate the catEntry

        parentTree.SetPyData( newItemId,
                              (self.recoElemLoader, catEntry, newItemId ) )

        if ( not catEntry.isTerminal() ):
            for e in catEntry.entries():
                self.recurseCatalog( e, parentTree, newItemId)

        parentTree.SortChildren( newItemId )

        return

    #------------------------------------------------------------------------
    def DOOMloadSeedCatalog(self, seedServer ):
    #------------------------------------------------------------------------
        """
        This adds a Seed instance to the catalog.  It is called from the
        MainMenuBar when Data->Add Seed Instance is called, for example.
        """

        wxBeginBusyCursor()

	# The SeedDataFactory ctor is slow and actually reads a bunch of
	# data from the server

        seedFactory   = SeedDataFactory( seedServer )

        # add it to the list in the catalog
        try:
            Catalog.instance().addDataFactory( seedFactory )
        except:
            self.parent.error("loadSeedCatalog: %s already in foundry list." % seedServer)
            wxEndBusyCursor()
            return

        top = seedFactory.getCatalogTop()
        self.recurseCatalog( top, self.parent.catalog_tree, self.parent.catalogRootId)

        wxEndBusyCursor()

        return

    #------------------------------------------------------------------------
    def onLeftClick(self,treeEvent):
    #------------------------------------------------------------------------
        item = treeEvent.GetItem()
        
        catEntryTuple = self.parent.tree_ctr.GetPyData(item)
        if (catEntryTuple == None ):
            return
        self.selected = catEntryTuple
        catEntry   = catEntryTuple[1]

        ##
        # update the history information display
        ##

        theBox = self.parent.catVersionValueComboBox
        theBox.Clear()

        if ( not catEntry.isTerminal() ):
            
            self.parent.catPathValue.SetValue( catEntry.path() + "/" )
            self.parent.catVersionValueComboBox.SetLabel( "")
            self.parent.catHistoryDateValue.SetLabel( "" )
            self.parent.catHistoryUserValue.SetLabel( "" )
            self.parent.catHistoryCreatedFromValue.SetLabel( "")
            theBox.SetValue( "" )
        else:
            versions   = catEntry.versions()
            if ( [] == versions ):
                self.parent.catPathValue.SetValue( catEntry.path()+";[None]" )
                theBox.SetValue( "None" )
            else:
                maxVersion = max( versions )
                for v in versions:
                    theBox.Append( "%s" % (v ) )
                    theBox.SetValue( "%s" % (maxVersion) )
                self.parent.catPathValue.SetValue(catEntry.path()+";[%s]" % (maxVersion))
            #
            self.parent.catHistoryDateValue.SetLabel( "no date info yet" )
            self.parent.catHistoryUserValue.SetLabel( "no user info yet" )
            self.parent.catHistoryCreatedFromValue.SetLabel( "no history info yet" )
            
        return


    #------------------------------------------------------------------------
    def onCatVersionValueComboBox(self, event):
    #------------------------------------------------------------------------
        """
        Handles activity in combo box where user sets Verion to use
        """
                
        # get the value selected in the combo box.
        choice = event.GetString()
        self.parent.catVersionValueComboBox.SetValue( "%s" % (choice) )

        # the operation is interpreted relative to the currently selected
        # catalogEntry.  find what that is.
        
        catEntry   = self.selected[1]

        # update stuff
        #version = self.parent.catVersionValueComboBox.GetValue()
        self.parent.catPathValue.SetLabel( catEntry.path()+";[%s]" % (choice) )

        return
    
        
    #------------------------------------------------------------------------
    def onRightClickCatalogTree(self, event):
    #------------------------------------------------------------------------
        """ Fires off the pop-up menu to handle right click events. """

        event.GetEventObject().PopupMenu(self.catEditMenu, event.GetPosition())
        return

    #------------------------------------------------------------------------
    def doCatEditMkDir( self, event ):
    #------------------------------------------------------------------------
        if (None == self.selected):
            self.parent.error( "A selection is required first.")
            return
        
        catEntryTuple = self.selected
        catEntry      = catEntryTuple[1]
        treeItemId    = catEntryTuple[2]
        
        if (catEntry.isTerminal()):
            self.parent.error("Directories can not be added to items.")
            return

        prompt = "New catalog directory name:"
        dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)

        if ( dlg.ShowModal() == wxID_OK):
            theName = dlg.GetValue()
            if ( theName=="" ): return
            dlg.Destroy()
        else:
            #didn't get a kid name
            dlg.Destroy()
            return

        #try:
        if (1):
            newCatEntry=catEntry.mkDir( theName )
            parentTree=self.parent.catalog_tree
            newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
            parentTree.SetPyData( newItemId,
                                  (self.recoElemLoader, newCatEntry, newItemId )  )

            parentTree.SortChildren( treeItemId )
        else:
        #except:
            self.parent.error( "Operation refused." )
            

        return 

    #------------------------------------------------------------------------
    def doCatEditMkItem( self, event ):
    #------------------------------------------------------------------------
        if (None == self.selected):
            self.parent.error( "A selection is required first.")
            return

        catEntryTuple = self.selected
        catEntry      = catEntryTuple[1]
        treeItemId    = catEntryTuple[2]

        if (catEntry.isTerminal()):
            self.parent.error("Items can not be added to items. Add to a directory.")
            return

        prompt = "New catalog entry name:"
        dlg = wxTextEntryDialog(self.parent, message=prompt, style=wxOK)

        if ( dlg.ShowModal() == wxID_OK):
            theName = dlg.GetValue()
            if ( theName=="" ): return
            dlg.Destroy()
        else:
            #didn't get a kid name
            dlg.Destroy()
            return

        try:
            newCatEntry = catEntry.mkItem( theName )
            parentTree=self.parent.catalog_tree
            newItemId=parentTree.AppendItem(treeItemId, newCatEntry.name() )
            parentTree.SetPyData( newItemId,
                                  (self.recoElemLoader, newCatEntry, newItemId )  )

            parentTree.SortChildren( treeItemId )
        except:
            self.parent.error( "Operation refused." )
            

        return 


    #------------------------------------------------------------------------
    def onLeftDClick(self, event):
    #------------------------------------------------------------------------
        """ Double left-click means, "Load the currently selected item." """

        if ( self.selected == None ):
            self.parent.error( "You must select a catalog entry before requesting load.")
            return 

        # We store a loader to actually load the selected item.  This dates
        # back to a time before a single loader could handle all the various
        # data factory kinds.

        catEntryTuple = self.selected
        apply( catEntryTuple[0], [catEntryTuple[1]] )

        return
    
    #------------------------------------------------------------------------
    def recoElemLoader(self,  argList ):
    #------------------------------------------------------------------------
        wxBeginBusyCursor()

        (catalogEntry) = argList

        if (catalogEntry.isTerminal() ):
            ver = self.parent.catVersionValueComboBox.GetValue()
            if ( ver == "None" ):
                top = RecoElem( catalogEntry.name() )
            else:
                top = catalogEntry.read( int( ver ) )
                
            self.parent.re.addRecoElemTree(self.parent.rootId, top, catalogEntry)
        else:
            # current selection is directory. can't load that!
            wxEndBusyCursor()
            return


        wxEndBusyCursor()
        return

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3