Dialog in a dialog
-
On 25/03/2013 at 07:35, xxxxxxxx wrote:
I'm tring to open a 2nd (modal) dialog in another dialog.
It works ok, until I close and re-open the plugin with the dialog.
Then an incorrect dialog is displayed and later Cinema 4d crashes.
It seems that i do not restore correctly?import c4d import os from c4d import gui, plugins, bitmaps, utils, documents PLUGIN_ID = 1011310 # Test ID MY_CITY = 11001 MY_BUTTON = 11004 class MyDialog2(gui.GeDialog) : #2nd (modal) dialog def CreateLayout(self) : self.GroupBegin(id=1011, flags=c4d.BFH_FIT, cols=2) self.element = self.AddStaticText(id=1003, flags=c4d.BFH_LEFT, initw=100, name="City") self.AddEditText(MY_CITY, c4d.BFH_SCALEFIT, 100, 0) self.GroupEnd() self.GroupBegin(id=1013, flags=c4d.BFH_SCALEFIT, cols=1) self.AddButton(MY_BUTTON, c4d.BFV_MASK, initw=100, name="Done") self.GroupEnd() return True def Command(self, id, msg) : if (id == MY_BUTTON) : print "city: ", self.GetString (MY_CITY) self.Close() return True return True class MyDialog(gui.GeDialog) : #main dialog def CreateLayout(self) : self.GroupBegin(id=1013, flags=c4d.BFH_SCALEFIT, cols=1) self.AddButton(MY_BUTTON, c4d.BFV_MASK, initw=100, name="Goto 2nd dialog") self.GroupEnd() return True def Command(self, id, msg) : if (id == MY_BUTTON) : self.dialog2 = MyDialog2() #init and open 2nd dialog self.dialog2.Open(dlgtype=c4d.DLG_TYPE_MODAL, pluginid=PLUGIN_ID, defaultw=200, defaulth=150, xpos=-1, ypos=-1) return True return True ################################################################################################# class MyMenuPlugin(plugins.CommandData) : dialog = None def Execute(self, doc) : # create the dialog if self.dialog is None: self.dialog = MyDialog() return self.dialog.Open(dlgtype=c4d.DLG_TYPE_ASYNC, pluginid=PLUGIN_ID, defaultw=200, defaulth=150, xpos=-1, ypos=-1) def RestoreLayout(self, sec_ref) : # manage the dialog if self.dialog is None: self.dialog = MyDialog() print "Restore." return self.dialog.Restore(pluginid=PLUGIN_ID, secret=sec_ref) if __name__ == "__main__": path, fn = os.path.split(__file__) bmp = bitmaps.BaseBitmap() bmp.InitWith(os.path.join(path, "res/icons/", "icon.tif")) okyn = plugins.RegisterCommandPlugin(PLUGIN_ID, "OSM",0, bmp, "OSM", MyMenuPlugin()) if (okyn) : print "Initialized."
-
On 25/03/2013 at 07:40, xxxxxxxx wrote:
Hi.
Pass the pluginid to a dialog only for the dialog that belongs to the CommandData itself. It is
also only necessary when you want to restore the dialog (in CommandData.Restore()) which in
turn only works for asynchronous dialogs.Remove the pluginid=PLUGIN_ID from the Open() call of your second dialog.
-Niklas
-
On 26/03/2013 at 12:07, xxxxxxxx wrote:
Yes, it works!
Thank you.
I'll put it in a tutorial including your remarks.