Multi-Selection button problem



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

    On 27/05/2011 at 11:41, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   12 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    Hi guys,

    I'm having trouble with Multi-Selection buttons returning the correct results.
    I'm trying to get a print result only when the multi-button is changed to a specific option.

    Here is my code:

    EXECUTIONRESULT MyTag::Execute(BaseTag *tag, BaseDocument *doc, BaseObject *op, BaseThread *bt, LONG priority, EXECUTIONFLAGS flags)  
    {  
      if (tag->GetData().GetBool(MYBOX)) // if the MYBOX checkbox attribute is enabled  
      {    
       GePrint("CheckBox is enabled"); // This Works fine          
      }      
      
      if (tag->GetData().GetLong(MULTIBUTTON, TWO)) // if the multi-button is set to this mode  
      {  
          GePrint("Option Two Selected"); //<--- This Does not work!! It always prints.. no matter what option is selected!!  
      }      
        
      return EXECUTIONRESULT_OK;  
    }
    

    Here is what's in my .res file:

    CONTAINER Tmytag  
    {  
      NAME Tmytag;  
      INCLUDE Texpression;  
      INCLUDE Obase;      
        
      GROUP ID_TAGPROPERTIES  
      {  
      COLUMNS 1;              
      BOOL MYBOX { }  
        GROUP  
        {  
        COLUMNS 1;  
          
      LINK MY_LINK  
      {   
      ACCEPT { Obase; }   
      REFUSE { Osky; Oforeground; }  
      }  
      
        SEPARATOR { LINE; }  
        BUTTON BUTTON1 {}        
        BUTTON BUTTON2 {}  
        //BUTTON BUTTON2 {HIDDEN;} //Use this to hide the button if desired  
          
        SEPARATOR { LINE; }  
        REAL MYSLIDER { UNIT PERCENT; MIN 0.0; MAX 100.0; MINSLIDER 0.0; MAXSLIDER 10000.0; CUSTOMGUI REALSLIDER; }        
        REAL MYNUMERIC {MIN 0.0; MAX 100.0; STEP 1;} //STEP controls the amount the values increase using the arrows   
        STRING MYTEXTBOX {ANIM OFF; } //ANIM OFF hides the set key option from the user  
      
        LONG    MULTIBUTTON  
          {  
          CYCLE  
            {                  
              ONE;  
              TWO;  
            }  
          }    
        }          
      }  
    }
    

    Can anyone tell me what I'm doing wrong?

    -ScottA



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

    On 27/05/2011 at 12:36, xxxxxxxx wrote:

    That's not how the BaseContainer works. :)

    if (tag->GetData().GetLong(MULTIBUTTON) == TWO) ....

    The second argument in the BaseContainer GetXXX() methods is a default value if the container ID has not been set.



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

    On 27/05/2011 at 13:18, xxxxxxxx wrote:

    Thanks . 🍺

    -ScottA



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

    On 23/09/2011 at 13:32, xxxxxxxx wrote:

    Hey Guys,

    I'm trying to do this with a Combo Button and a dialog now. But I can't figure out what it needs.

    Bool myDialog::Command(LONG id,const BaseContainer &msg)    
    {  
        
      switch (id)   
        {  
        case MY_BUTTON:  
          GePrint("Button Was Pressed");  //Works  
              break;  
      
        case MY_CHECKBOX:            
              GePrint("CHKBox was Toggled");  //Works  
              break;  
      
        case MY_COMBOBUTTON == SECOND_CHILD:  
              GePrint("Second Option Selected");//Does Not Work!              
              break;  
           
        }  
      
      return TRUE;  
    }
    

    If I use: case MY_COMBOBUTTON it works. But of course it always returns the print method. No matter which child option I select. Which is bad.
    How do I get the child options of a ComboButton to return my print method if I only select a specific child?

    -ScottA



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

    On 24/09/2011 at 09:57, xxxxxxxx wrote:

    Never mind.
    I think I've managed to figure it out... At least one way anyway.

    Bool myDialog::Command(LONG id,const BaseContainer &msg)    
    {  
      LONG second = msg.GetLong(BFM_ACTION_VALUE);  //Assigns an action to a variable  
        
      switch (id)   
        {  
        case MY_BUTTON:  
          GePrint("Button Was Pressed");   
              break;  
      
        case MY_CHECKBOX:            
              GePrint("CHKBox was Toggled");   
              break;  
      
        case MY_COMBOBUTTON:              
              if(second == SECOND_CHILD) GePrint("Second Option Selected");              
              break;         
        }  
      
      return TRUE;  
    }
    

    This was NOT obvious at all.
    Luckily the AsyncTest dialog plugin example in the SDK uses a Combo Button in it. And I was able to track down how it was working.
    I never would have been able to figure this out from the docs.

    -ScottA


Log in to reply