Lock Icon



  • On 27/09/2013 at 05:13, xxxxxxxx wrote:

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

    ---------
    Hi,

    Most C4D Attribute Managers have at the top-right some icons, like search, new, etc.
    I need a lock-icon for my plug, but I can't find out how to do this in code.
    I'm not using a resource file for the layout.

    Connie.



  • On 27/09/2013 at 05:41, xxxxxxxx wrote:

    You can add elements into the menu bar by enclosing it in a InMenuLine-block like this:

      
    GroupBeginInMenuLine();   
    BaseContainer bc = GetCustomDataTypeDefault(CUSTOMGUI_BITMAPBUTTON);   
    bc.SetBool(BITMAPBUTTON_BUTTON, TRUE);   
    bc.SetBool(BITMAPBUTTON_TOGGLE, TRUE);   
    bc.SetLong(BITMAPBUTTON_ICONID1, LOCKICONID);   
    AddCustomGui(IDC_LOCK, CUSTOMGUI_BITMAPBUTTON, "", 0, 0, 0, bc)   
    GroupEnd();   
    


  • On 27/09/2013 at 09:38, xxxxxxxx wrote:

    Ah, thanks for that.
    Are the 'LOCKICONID' and 'IDC_LOCK' not c4d constants ?, because the compiler cannot find them.
    I also searched the whole resource directory with no result.
    I thought these icons were standard C4D UI elements, but I should provide my own bitmaps ?

    Connie



  • On 27/09/2013 at 14:49, xxxxxxxx wrote:

    Here's a bit more code for you to chew on.
    It also shows how to toggle the lock image in a GeDialog plugin.

    BTW: All of this code is in the plugin's .cpp file

    enum  
    {  
      LOCKBUTTON = 1003,   //The ID for the inline lock button  
      _dummy  
    };  
      
      
    class myDialog : public GeDialog  
    {  
      private:  
          Bool lockState;                     //Used to control things in any of the plugin's methods   
          BitmapButtonCustomGui *lockButton;  
      
      public:  
          myDialog(void);  
          virtual Bool CreateLayout(void);  
          //Other virtual methods here...  
        
    };  
      
    Bool myDialog::CreateLayout(void)  
    {  
    //This code loads things from a .res file if desired  
      Bool res = TRUE;  
      res = LoadDialogResource(IDS_RESDIALOG,NULL,0);  
      
      
      //This code block creates an inline button with the locked/unlocked icon on it  
      GroupBeginInMenuLine();  
      BaseContainer bc = GetCustomDataTypeDefault(CUSTOMGUI_BITMAPBUTTON);  
      bc = GetCustomDataTypeDefault(CUSTOMGUI_BITMAPBUTTON);  
      bc.SetBool(BITMAPBUTTON_BUTTON, TRUE);  
      bc.SetBool(BITMAPBUTTON_TOGGLE, TRUE);  
      if(lockState)   bc.SetLong(BITMAPBUTTON_ICONID1, -12679);   //Lock icon  
      if(!lockState)  bc.SetLong(BITMAPBUTTON_ICONID1, 12679);    //Unlock icon  
      lockButton = (BitmapButtonCustomGui* )AddCustomGui(LOCKBUTTON, CUSTOMGUI_BITMAPBUTTON,"", 0,0,0,bc);  
      GroupEnd();  
      
      return res;  
    }  
      
    Bool myDialog::Command(LONG id, const BaseContainer &msg)  
    {  
      switch (id)   
      {  
          case LOCKBUTTON:  
          {  
              //Toggle this class level variable true/false so we can control things with it  
              lockState = !lockState;  
      
              //Toggle the icon image  
              if(lockState) lockButton->SetImage(-12679, FALSE);  
              else lockButton->SetImage(12679, FALSE);  
      
              GePrint("LockState: " + LongToString(lockState));        
          }  
          break;  
      }  
      
      EventAdd();  
      return TRUE;  
    }
    

    Hope that helps.

    -ScottA



  • On 28/09/2013 at 02:24, xxxxxxxx wrote:

    I think  RESOURCEIMAGE_LOCKED is what you search for. See a list of icons here:

    http://www.maxonexchange.de/sdk/CINEMA4DPYTHONSDK/help/modules/c4d.bitmaps/RESOURCEIMAGE.html?highlight=lock

    Best,
    -Niklas



  • On 28/09/2013 at 02:26, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    Ah, thanks for that.
    Are the 'LOCKICONID' and 'IDC_LOCK' not c4d constants ?, because the compiler cannot find them.
    I also searched the whole resource directory with no result.
    I thought these icons were standard C4D UI elements, but I should provide my own bitmaps ?

    Connie

    I think Satara used LOCKICONID as a proxy and you were supposed to replace it with the
    propery Icon ID. IDC_LOCK is equal to LOCKICON in Scott's example: The ID of the GUI Widget.
    It is undefined because you need to define it yourself.

    Best,
    -Niklas



  • On 30/09/2013 at 01:20, xxxxxxxx wrote:

    Thanks to you Scott, Niklas & Satara; I'v got it working!

    Connie


Log in to reply