Hi,
With the help of Pim Grooff's
, I have a GUI that generates buttons at run time.My problem is it doesn't dynamic. How do I generate dynamic functions also to coincide with the dynamic buttons (along with their dynamic ids).
You can see the problem here: Button 1, 2, 3 works but not Button 4 and above.
https://www.dropbox.com/s/svimsrbhx35egtk/c4d203_generate_dynamic_functions.mp4?dl=0
You can check the working code here:
import c4d
from c4d import gui, plugins, bitmaps, utils, documents
PLUGIN_ID = 1450011099
# Based from Pim Grooff's code
#
def print_A():
return "1011 Button"
def print_B():
return "1021 Button"
def print_C():
return "1031 Button"
class MyDialog(gui.GeDialog):
def InitValues(self):
self.newfieldindex = 0
self.button_commands = {1031: print_A(),
1032: print_B(),
1033: print_C()}
return True
def CreateLayout(self):
self.SetTitle("Add/Remove Enable/Disable Dialog")
self.GroupBegin(id=1002, flags=c4d.BFH_MASK, cols=2)
self.AddButton(1021, c4d.BFV_MASK, initw=145, name="Add")
self.AddButton(1022, c4d.BFV_MASK, initw=145, name="Remove")
self.GroupEnd()
self.GroupBegin(id=1030, flags=c4d.BFH_MASK, cols=1)
self.GroupEnd()
return True
def Command (self, id ,msg):
if (id==1021):
self.LayoutFlushGroup(id=1030)
self.newfieldindex += 1
if (self.newfieldindex < 0):
self.newfieldindex = 0
for newid in range(1,self.newfieldindex+1):
button_id = newid + 1030
fieldname = "Add-" + str(newid)
self.AddButton(button_id, c4d.BFV_MASK, initw=145, name=fieldname)
self.LayoutChanged(id=1030)
return True
if (id==1022):
self.LayoutFlushGroup(id=1030)
self.newfieldindex -= 1
if (self.newfieldindex < 0):
self.newfieldindex = 0
for newid in range(1,self.newfieldindex+1):
button_id = newid + 1030
fieldname = "Add-" + str(newid)
self.AddButton(button_id, c4d.BFV_MASK, initw=145, name=fieldname)
self.LayoutChanged(id=1030)
return True
if id in self.button_commands:
print self.button_commands[id]
return True
class TestDialog(plugins.CommandData):
dialog = None
def Execute(self, doc):
if self.dialog is None:
self.dialog = MyDialog()
return self.dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=PLUGIN_ID)
def RestoreLayout(self, sec_ref):
if self.dialog is None:
self.dialog = MyDialog()
return self.dialog.Restore(pluginid=PLUGIN_ID, secret=sec_ref)
if __name__ == "__main__":
okyn = plugins.RegisterCommandPlugin(PLUGIN_ID, "Enable Disable Dynamic",0, None, "Enable Disable Dynamic", TestDialog())
if (okyn):
print "Enable Disable Initialized"