예제 #1
0
def __changeMap(mapCombo):
    """Respond to the user selecting a map
        
    ARGUMENTS:
        mapCombo - the ComboBox object for map selection
    RETURNS:
        None
    EFFECTS:
        sets the refinement map to the newly selected map
    """

    #figure out the newly selected map
    mapListStore = mapCombo.get_model()
    selectedMapIter = mapCombo.get_active_iter()
    selectedImol = mapListStore.get_value(selectedMapIter, 0)

    #set the refinement map
    set_imol_refinement_map(selectedImol)
예제 #2
0
def __changeMap(mapCombo):
    """Respond to the user selecting a map
        
    ARGUMENTS:
        mapCombo - the ComboBox object for map selection
    RETURNS:
        None
    EFFECTS:
        sets the refinement map to the newly selected map
    """

    # figure out the newly selected map
    mapListStore = mapCombo.get_model()
    selectedMapIter = mapCombo.get_active_iter()
    selectedImol = mapListStore.get_value(selectedMapIter, 0)

    # set the refinement map
    set_imol_refinement_map(selectedImol)
예제 #3
0
def selectMapDialog(callback=None):
    """Display a GUI for selecting the refinement map.
    
    OPTIONAL ARGUMENTS:
        callback - a function to call when the user clicks OK
    RETURNS:
        None
    """

    # create a list of map molecules and their names
    mapList = []
    for imol in xrange(graphics_n_molecules()):
        if is_valid_map_molecule(imol):
            mapList.append(imol)

    # if we have no maps, then display an error and don't invoke the callback
    if len(mapList) == 0:
        warningMessage = gtk.MessageDialog(
            type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK, message_format="Please load a map before using RCrane."
        )
        warningMessage.set_title("RCrane Error")
        warningMessage.run()
        warningMessage.destroy()

    else:
        # if we have one or more maps
        dialog = gtk.Dialog(title="Select Map for Fitting", buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK))

        # create a combo box that lists maps
        mapListStore = gtk.ListStore(int, str)
        for imol in mapList:
            mapListStore.append([imol, str(imol) + " " + molecule_name(imol)])
        mapCombo = gtk.ComboBox(mapListStore)
        mapRender = gtk.CellRendererText()
        mapCombo.pack_start(mapRender, True)
        mapCombo.add_attribute(mapRender, "text", 1)

        # select the current refinemnt map, or the first map if no map has been selected
        currentMap = imol_refinement_map()
        if currentMap == -1:
            set_imol_refinement_map(mapListStore[0][0])
            mapCombo.set_active(0)
        else:
            # figure out which combobox row corresponds to the currently selected map
            comboIndex = [i[0] for i in mapListStore].index(currentMap)
            mapCombo.set_active(comboIndex)

        # connect the changed signal for the combobox
        mapCombo.connect("changed", __changeMap)

        # add the label and frame
        chooseLabel = gtk.Label("Choose a Map:")
        frame = gtk.Frame()
        frameBox = gtk.VBox(False, 0)
        frame.add(frameBox)
        frameBox.pack_start(chooseLabel, False, False, 2)
        frameBox.pack_start(mapCombo, False, False, 2)

        # pack things into the top area of the dialog box
        dialog.vbox.pack_start(frame, False, False, 2)
        dialog.vbox.show_all()

        # connect the callback function
        if callback is not None:
            # if there is a callback function and the user clicks OK, then call the callback
            # if the user clicks the close button, then don't call the callback
            def checkResponse(dialog, responseID, callback):
                if responseID == gtk.RESPONSE_OK:
                    callback()

            dialog.connect("response", checkResponse, callback)

        # create the dialog box
        dialog.run()
        dialog.destroy()
예제 #4
0
def selectMapDialog(callback=None):
    """Display a GUI for selecting the refinement map.
    
    OPTIONAL ARGUMENTS:
        callback - a function to call when the user clicks OK
    RETURNS:
        None
    """

    #create a list of map molecules and their names
    mapList = []
    for imol in xrange(graphics_n_molecules()):
        if is_valid_map_molecule(imol):
            mapList.append(imol)

    #if we have no maps, then display an error and don't invoke the callback
    if len(mapList) == 0:
        warningMessage = gtk.MessageDialog(
            type=gtk.MESSAGE_ERROR,
            buttons=gtk.BUTTONS_OK,
            message_format="Please load a map before using RCrane.")
        warningMessage.set_title("RCrane Error")
        warningMessage.run()
        warningMessage.destroy()

    else:
        #if we have one or more maps
        dialog = gtk.Dialog(title="Select Map for Fitting",
                            buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK))

        #create a combo box that lists maps
        mapListStore = gtk.ListStore(int, str)
        for imol in mapList:
            mapListStore.append([imol, str(imol) + " " + molecule_name(imol)])
        mapCombo = gtk.ComboBox(mapListStore)
        mapRender = gtk.CellRendererText()
        mapCombo.pack_start(mapRender, True)
        mapCombo.add_attribute(mapRender, 'text', 1)

        #select the current refinemnt map, or the first map if no map has been selected
        currentMap = imol_refinement_map()
        if currentMap == -1:
            set_imol_refinement_map(mapListStore[0][0])
            mapCombo.set_active(0)
        else:
            #figure out which combobox row corresponds to the currently selected map
            comboIndex = [i[0] for i in mapListStore].index(currentMap)
            mapCombo.set_active(comboIndex)

        #connect the changed signal for the combobox
        mapCombo.connect("changed", __changeMap)

        #add the label and frame
        chooseLabel = gtk.Label("Choose a Map:")
        frame = gtk.Frame()
        frameBox = gtk.VBox(False, 0)
        frame.add(frameBox)
        frameBox.pack_start(chooseLabel, False, False, 2)
        frameBox.pack_start(mapCombo, False, False, 2)

        #pack things into the top area of the dialog box
        dialog.vbox.pack_start(frame, False, False, 2)
        dialog.vbox.show_all()

        #connect the callback function
        if callback is not None:
            #if there is a callback function and the user clicks OK, then call the callback
            #if the user clicks the close button, then don't call the callback
            def checkResponse(dialog, responseID, callback):
                if responseID == gtk.RESPONSE_OK: callback()

            dialog.connect("response", checkResponse, callback)

        #create the dialog box
        dialog.run()
        dialog.destroy()