Directory UI component ?



  • Hi,

    I am reading the following

    https://developers.maxon.net/docs/Cinema4DPythonSDK/html/modules/c4d.gui/GeDialog/index.html?highlight=addeditnumberarrows#GeDialog.AddEditText

    hoping there might be some directory browsing UI.

    My intention is to allow the user to pick an output directory for some processing.

    Cheers



  • Hi @nicholas_yue this can be done with the CUSTOMGUI_FILENAME
    Here a complete example

    import c4d
    
    
    class ExampleDialog(c4d.gui.GeDialog):
    
        def CreateLayout(self):
            """
            This Method is called automatically when Cinema 4D Create the Layout (display) of the Dialog.
            """
            settings = c4d.BaseContainer()
            settings[c4d.FILENAME_DIRECTORY] = True
            self.AddCustomGui(1000,
                              c4d.CUSTOMGUI_FILENAME, "",
                              c4d.BFH_SCALEFIT | c4d.BFV_CENTER, 0, 0, settings)
            # Creates a Ok and Cancel Button
            self.AddDlgGroup(c4d.DLG_OK | c4d.DLG_CANCEL)
    
            return True
    
        def Command(self, messageId, bc):
            """
            This Method is called automatically when the user clicks on a gadget and/or changes its value this function will be called.
            It is also called when a string menu item is selected.
    
            :param messageId: The ID of the gadget that triggered the event.
            :param bc: The original message container
            :return: False if there was an error, otherwise True.
            """
            # User changed the file path
            if messageId == 1000:
                print(self.GetFilename(1000))
            
            # User click on Ok button
            if messageId == c4d.DLG_OK:
                print(self.GetFilename(1000))
                return True
    
            # User click on Cancel button
            elif messageId == c4d.DLG_CANCEL:
                print("User Click on Cancel")
    
                # Close the Dialog
                self.Close()
                return True
    
            return True
    
    
    def main():
        # Creates a new instance of the GeDialog
        dlg = ExampleDialog()
    
        # Opens the GeDialog, since it's open it as Modal, it block Cinema 4D
        dlg.Open(c4d.DLG_TYPE_MODAL_RESIZEABLE, defaultw=300, defaulth=50)
    
    
    if __name__ == "__main__":
        main()
    

    Cheers,
    Maxime.