Multiple dialogs



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 06:41, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   11.5&12 
    Platform:   Windows  ; Mac  ;  
    Language(s) :   C.O.F.F.E.E  ;

    ---------
    Hi !

    I created a MenuPlugin that opens a dialog, my  problem is that each time I run the menuplugin its opens a new instance of the dialog ... I tried multiple tricks but didn't really found the equivalent of the MultipleAllowed() of the expression tag plugin.

    Any idea welcome.

    Thanks !

    Mike



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 07:06, xxxxxxxx wrote:

    Could you provide a snippet of code to show how you call for the dialogue to open?  Might help us help you.  :)

    Thanks,

    Shawn



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 08:49, xxxxxxxx wrote:

    Simply :

    Plugin::Execute(doc)  
      {  
        
                
          dialog = new(plugintools_gui);   
          dialog->Open(TRUE,-1,-1);   
      
            
        
    }  
    

    plugintools_gui is a GeDialog derived class and Plugin a menuplugin

    Hope it's enough.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 10:07, xxxxxxxx wrote:

    is it possible to check if there is an instance dialog already in use?



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 12:14, xxxxxxxx wrote:

    hello,
    first of all use restorelayout metod in dialog and command ....
    then if you need a pointer to the dialog from other part of cinema you have to create a kind of singletone of your command data and retrive the pointer from it.
    in activeobject there is an example of this! if you need some more help tell me .. i can share some example.

    all the best
    Franz



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 12:15, xxxxxxxx wrote:

    sorry i never seen is a coffee problem ... my reply was refereed to c++ :(

    sorry
    Franz



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 13:25, xxxxxxxx wrote:

    Thanks Franz... No problem, I often have this problem too :)

    Shawn :
    In fact I already tested something like

      
    if (!dialog)   
           {  
           dialog = new(plugintools_gui);  
           dialog->Open(TRUE,-1,-1);  
           }  
    

    But even when closed, the dialog object stays as existing. The result in cinema4d is that once I close the plugin dialog I cannot run it anymore because if (!dialog) always returns false.

    Mike



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 15:51, xxxxxxxx wrote:

    Here is how I do it.  It will not reopen the dialog if already open and supports adding it to the layout:

    ////////////////////////////////////////////////////////////////  
    // dropobject.cof  
    ////////////////////////////////////////////////////////////////  
    // Drop object onto target object or floor (X-Z plane).  
    // - If no object intersection, alert user.  
    ////////////////////////////////////////////////////////////////  
    // V0.3 2005.02.20 (c) Robert Templeton  
    ////////////////////////////////////////////////////////////////  
      
    // Included symbols  
    include "c4d_symbols.h"  
      
    // Global references  
    var resource;  
    var plugin_path;  
    var plugin_icon;  
    var d;  
      
    include "floordialog.h"  
      
    // CLASS: Drop Object Menu - Register plugin in menu  
    class DropObject_MenuPlugin : MenuPlugin  
    {  
      public:  
          DropObject_MenuPlugin();  
          GetID();  
          GetIcon();  
          GetName();  
          GetHelp();  
          Execute(doc);  
          RestoreLayout(secret);  
    }  
    DropObject_MenuPlugin::DropObject_MenuPlugin()    { super(); }  
    DropObject_MenuPlugin::GetID()                        { return PLUGIN_MENU_ID; }  
    DropObject_MenuPlugin::GetIcon()                        { return plugin_icon; }  
    DropObject_MenuPlugin::GetName()                        { return resource->GetString(PLUGIN_MENU_TEXT); }  
    DropObject_MenuPlugin::GetHelp()                        { return resource->GetString(PLUGIN_MENU_HELP_TEXT); }  
    DropObject_MenuPlugin::Execute(doc)  
    {  
      // Perform operation  
      d->Open(TRUE,-1,-1);  
    }  
    DropObject_MenuPlugin::RestoreLayout(secret)  
    {  
      // Called by C4D to restore the dialog  
      if (!d) d = new(FloorDialog);  
      d->RestoreLayout(secret);  
    }  
      
      
    // Start of plugin  
    main()  
    {  
      // Load Resource  
      if (!(plugin_path = GeGetRootFilename())) println("Unable to find plugin!");  
      plugin_path->RemoveLast();  
      if (!(resource = new(GeResource, plugin_path))) println("Unable to load resource!");  
      
      // Load Icons  
      var icon_file = plugin_path->GetClone();  
      icon_file->AddLast("pluginicon.tif");  
      plugin_icon = new(BaseBitmap,1,1);  
      plugin_icon->Load(icon_file);  
      
      // Register Plugins  
      Register(DropObject_MenuPlugin);  
      
      // Create non-modal dialog  
      d = new(FloorDialog);  
    }
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 03/04/2011 at 16:34, xxxxxxxx wrote:

    Ok, so if I understand well, the key was to declare the floordialog object only ONE time when launching cinema4d, this way it avoids to get multiple instances ...this is as brilliant as it seems obvious now ...

    You're my hero once more

    Thanks everyone.

    M!ke


Log in to reply