Can't Close Modal Dialogs
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/07/2011 at 08:59, xxxxxxxx wrote:
Hi,
I recently heard from a Mac user that they don't get an X in their dialog window. So they can't close a modal dialog executed from a script.
Because of that. I tried to add a close button for them. But it appears that Close() is not supported in modal dialogs(in any language).
And the built-in buttons:self.AddDlgGroup() appear to not be supported in Python.Here's a simple example:
import c4d from c4d import gui GROUP1 = 2000 BUTTON1= 1002 class MyDlg(gui.GeDialog) : def CreateLayout(self) : self.SetTitle("Modal Dialog") self.GroupBegin(GROUP1, c4d.BFH_SCALEFIT, 1, 1) self.GroupBorderNoTitle(c4d.BORDER_GROUP_OUT) self.GroupBorderSpace(left = 2, top=2, right=2, bottom=2) self.AddButton(BUTTON1, c4d.BFH_SCALE, name="Close") self.AddDlgGroup(c4d.DR_DLGGROUP_OK) #Error: 'MyDlg' object has no attribute 'AddDlgGroup' self.AddDlgGroup(c4d.DLG_OK) #Error: 'MyDlg' object has no attribute 'AddDlgGroup' self.GroupEnd() return True def Command(self, id, msg) : if id==BUTTON1: c4d.Close() #Error: module object has no attribute 'Close' dlg = MyDlg() dlg.Open(c4d.DLG_TYPE_MODAL, defaultw=200, defaulth=100)
Question#1 : Why is there no X in Mac user's modal dialog window?
Question#2: How can I close a modal dialog with a button?-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/07/2011 at 09:21, xxxxxxxx wrote:
def Command(self, id, msg) : if id==BUTTON1: **self**.Close()
You want to close the dialog, not c4d. Why do you expect an attribute "AddDlgGroup" ? Cheers,
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/07/2011 at 10:20, xxxxxxxx wrote:
Close() does not close C4D.
It's a built in function in the GeModalDialog class.Here the same example. But using Coffee:
var GROUP1 = 2000; var BUTTON1=1002; class MyDlg:GeModalDialog { public: CreateLayout(); Command(id,msg); }; MyDlg::CreateLayout() { AddGroupBeginV(GROUP1, BFH_SCALEFIT, 1,"", 1); AddDlgGroup(DR_DLGGROUP_OK); AddGroupEnd(); } MyDlg::Command(id,msg) { if(id==BUTTON1) Close(); } main(doc,op) { var d = new(MyDlg); d->Open(-1,-1); var result = d->GetResult(); if(result==FALSE) return; }
Clicking the button closes the dialog just fine and dandy with Coffee.
But since AddDlgGroup() is apparently not supported by Python(did Sebastian miss it?) There's no way that I can find to close a modal dialog with a button.
And since Mac users don't get that X in their dialog menu(Why is that?) the only way for them to close a modal dialog is to press the escape key(ouch!).-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/07/2011 at 10:26, xxxxxxxx wrote:
Close() does not close C4D.
It's a built in function in the GeModalDialog class.Yea, I know. But you called c4d.Close() and I wanted to make a tiny joke of it because it look like you wanted to close C4d.
Anyway, you must call the Dialogs Close() method. The c4d module does not have a Close() attribute, and if there was one, it wouldn't make sense if it would close a dialog, and not c4d.
See my above codesnippet for the correct use.I can't help you with your other questions here, I'm on a PC and I did not write the C++ API Wrapper for Python.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/07/2011 at 10:46, xxxxxxxx wrote:
Oh. Sorry about that.
I didn't notice the way you used "self" in your example.That works.
I'm still trying to wrap my head around the whole "self" thing. I'm not used to using that. And in Python it's used a LOT. It's something I have to get a better grip on.Thanks for the help.
-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/07/2011 at 11:03, xxxxxxxx wrote:
Np.
It's not hard. You know the this keyword in C++, right ? self is in this case exactly the same. But in Pyhton you *have* to call methods & attributes using "this". -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/07/2011 at 12:55, xxxxxxxx wrote:
I have the same trouble with the "this" keyword in C++.
I know what they do. But because I don't use them very often I sometimes goof them up.
I just need to use them more often to get a better handle on them.It seems that AddDLGGroup() is missing from Python.
It should either be added. Or they should make a note that it's not supported in the SDK. So nobody else goes through the same problem trying to get it to work.-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 29/02/2012 at 10:56, xxxxxxxx wrote:
Hi all just been going thro the code above it works ok for me till i click the close button then get the error message below any ideal why the bool is giveing none.
def Command(self, id, msg) :#<------------error bool is exspected not none.
cheers Ray. -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 29/02/2012 at 12:09, xxxxxxxx wrote:
Hello Ray,
well.. returning a boolean value would be the solution then, wouldn't it? I'd recommend you to read a bit about Python.
def Command(self, id, msg) : # ... return True
As the documentation say, returning False would notify Cinema 4D that something did not go the correct way. (However, I haven't noticed that will change any behaviour, yet ..)
-Niklas
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 29/02/2012 at 13:59, xxxxxxxx wrote:
Ok ive stoped the error message ive put a
return True
statment after the
if id==BUTTON1: c4d.Close()
statement thanks Niklas.
Cheers. Ray.