How to update a variable in a dialog?

On 11/02/2017 at 13:53, xxxxxxxx wrote:

Hello there,

How to update a variable in a dialog "CreateLayout(self)".
in the script below I want to passing the value from the path field or the self.DIRECTORY to the variable "dirs".

import c4d, re, os  
from c4d import gui  
  
class Dialog(c4d.gui.GeDialog) :  
  SELECT_DIR = 40  
                
  def CreateLayout(self) :          
      self.GroupBegin(0,c4d.BFH_SCALEFIT,3,0,"");  
      self.AddStaticText(0, c4d.BFH_RIGHT, 0, 0, "Path :", c4d.BORDER_NONE)  
      **self.AddEditText(1, c4d.BFH_SCALEFIT, 250, 15)** **#Path to pass**  
      self.AddButton(self.SELECT_DIR, flags=c4d.BFH_RIGHT,inith=15, name="...")         
      self.GroupEnd()  
        
      self.AddComboBox(1000, c4d.BFH_SCALEFIT, 0, 15)           
      self.AddChild(1000,0,"Folders :&i" + str(c4d.RESOURCEIMAGE_OPENED) + "&" )  
      self.AddChild(1000,0,"")  
   
      **dirs = os.listdir(os.path.join( self.GetString(1))) # Passing the path value or the self.DIRECTORY here**  
 **         # or** **:  
      # dirs = os.listdir(os.path.join(** ** ** ** **self.DIRECTORY****** )) **       
      id = 2000  
      for plugin_name in dirs:          
          self.AddChild(1000,id,plugin_name)  
          id += 1  
      return True   
  
  def UpdateDlg(self, id) :  
      self.SetString(1,self.DIRECTORY)          
      return True  
    
  def Command(self, id, msg) :  
      if id == self.SELECT_DIR:  
          **self.DIRECTORY** = c4d.storage.LoadDialog(flags=c4d.FILESELECT_DIRECTORY)  
      self.UpdateDlg(self.GetLong(1000))  
  
      return True  
    
  def CoreMessage(self, id, msg) :  
      if id==c4d.EVMSG_CHANGE:  
          self.UpdateDlg(self.GetBool(self.DIRECTORY))  
      return True  
    
def main() :  
  global Dialog  
  Dialog = Dialog()  
  Dialog.Open(c4d.DLG_TYPE_MODAL, xpos=700, ypos= 200, defaultw=516, defaulth=10)      
  return True  
if __name__=='__main__':  
  main()

I want to obtain this result:

Thanks

On 13/02/2017 at 01:49, xxxxxxxx wrote:

Hi,

To dynamically update the ComboBox children list, just call self.AddChild() in Command() with the sub-directories returned by os.listdir().
The ComboBox is updated automatically because this doesn't change the layout of the dialog.

On 13/02/2017 at 04:51, xxxxxxxx wrote:

Originally posted by xxxxxxxx

Hi,
To dynamically update the ComboBox children list, just call self.AddChild() in Command() with the sub-directories returned by os.listdir().
The ComboBox is updated automatically because this doesn't change the layout of the dialog.

Hi,

Sorry, I wasn't clear on your response, please can you give me a small example?

Thanks.

On 13/02/2017 at 04:57, xxxxxxxx wrote:

Originally posted by xxxxxxxx

Originally posted by xxxxxxxx

Hi,
To dynamically update the ComboBox children list, just call self.AddChild() in Command() with the sub-directories returned by os.listdir().
The ComboBox is updated automatically because this doesn't change the layout of the dialog.

Hi,

Sorry, I wasn't clear on your response, please can you give me a small example?

Thanks.

Simply move your loop with self.AddChild() from CreateLayout() to Command() and the if for the directory selection. CreateLayout() doesn't get called every time a command or an interaction in the dialog happens.

On 13/02/2017 at 05:33, xxxxxxxx wrote:

def Command(self, id, msg) :  
  dirs = os.listdir(os.path.join(self.GetString(1)))          
  id = 2000  
  for plugin_name in dirs:          
      self.AddChild(1000,id,plugin_name)  
      id += 1

I tried this but nothing happen.