Custom GUI example?



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

    On 20/07/2005 at 17:54, xxxxxxxx wrote:

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

    ---------
    "Are there any complete custom gui examples available that use user areas?

    Thank you,
    Damon Gilbert"



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

    On 21/07/2005 at 11:21, xxxxxxxx wrote:

    No, I don't think so. However, at some point in the existing examples you will have a dialog, and then you can insert a user area just like you do in a real dialog. Could you tell us a bit more of what you have already and what you want to do?



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

    On 23/07/2005 at 11:46, xxxxxxxx wrote:

    Greetings:

    Right now I have a user area working inside a asyncronous dialog. What I am trying to do is insert this user area into the attribute manager. This is only to manipulate date and not to store it.

    Hope you can help.

    Thanks

    Damon



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

    On 27/07/2005 at 06:54, xxxxxxxx wrote:

    Here is an example I found of a custom GUI for the string type.

        
        
        #include "c4d.h"
        
        
        
        
        const LONG MY_STRING_GUI_ID = 1016814;  
        static LONG restypetable[] = { DA_STRING };
        
        
        
        
        class MyStringGUIDialog : public iCustomGui  
        {  
        INSTANCEOF(MyStringGUIDialog, iCustomGui)  
        private:  
          BaseContainer m_settings;
        
        
        
        
          String m_str;  
          Bool m_tristate;
        
        
        
        
        public:  
          MyStringGUIDialog(const BaseContainer &settings, CUSTOMGUIPLUGIN *plugin)   
            : iCustomGui(settings, plugin), m_str("[default"), m_tristate(false), m_settings(settings) { }
        
        
        
        
          virtual Bool CreateLayout (void)  
          {  
            GroupBegin(1002, BFH_SCALEFIT, 2, 1, "", 0);  
            {  
              AddStaticText(1001, BFH_FIT, 0, 0, "Test:", 0);  
              AddEditText(1000, BFH_SCALEFIT, 20, SizeChr(1));  
            }  
            GroupEnd();  
            return TRUE;  
          }  
            
          virtual Bool InitValues()  
          {  
            SetString(1000, m_str, m_tristate);
        
        
        
        
            // We cannot look at the return value from SetString() since it's broken in 8.503  
            return TRUE;  
          }
        
        
        
        
          virtual LONG Message(const BaseContainer& msg, BaseContainer& result)  
          {  
            switch(msg.GetId())  
            {  
            case BFM_DRAGRECEIVE:  
              {  
                if (msg.GetLong(BFM_DRAG_FINISHED) && CheckDropArea(1000, msg, TRUE, TRUE))  
                {  
                  LONG type = 0;  
                  void *object = NULL;  
                    
                  GetDragObject(msg, &type, &object);  
                  if (object && type == DRAGTYPE_ATOMARRAY) // DRAGTYPE_OBJECT  
                  {  
                    AtomArray* array = static_cast<AtomArray*>(object);  
                    Atom* atom = array->GetPreferred();  
                    if (atom && atom->IsInstanceOf(Obase))  
                    {             
                      BaseObject* obj = static_cast<BaseObject*>(atom);  
                      SetString(1000, obj->GetName());  
                        
                      BaseContainer actionmsg(BFM_ACTION), actionresult;  
                      actionmsg.SetLong(BFM_ACTION_ID, 1000);  
                      SUPER::Message(actionmsg, actionresult);  
                    }  
                  }           
                }  
                else SetDragDestination(CheckDropArea(1000, msg, TRUE, TRUE) ? MOUSE_POINT_HAND : MOUSE_FORBIDDEN);  
              } return TRUE;  
            }  
            return SUPER::Message(msg, result);  
          }
        
        
        
        
          virtual Bool Command(LONG id, const BaseContainer& msg)  
          {  
            switch (id)  
            {  
            case 1000:  
              {  
                BaseContainer m(msg);  
                m.SetLong(BFM_ACTION_ID, GetId());  
                m.RemoveData(BFM_ACTION_VALUE);  
                m.SetData(BFM_ACTION_VALUE, GetData().GetValue());  
                SendParentMessage(m);
        
        
        
        
                break;  
              }  
            }
        
        
        
        
            return TRUE;  
          }  
            
          virtual Bool SetData(const TriState<GeData> &tristate)  
          {  
            m_str = tristate.GetValue().GetString();  
            m_tristate = tristate.GetTri();
        
        
        
        
            return InitValues();  
          }  
            
          virtual TriState<GeData> GetData()  
          {  
            GetString(1000, m_str);  
            return m_str;  
          }  
        };
        
        
        
        
        class MyStringGUI : public CustomGuiData  
        {  
        public:  
          virtual LONG GetId() { return MY_STRING_GUI_ID; }
        
        
        
        
          virtual CDialog* Alloc(const BaseContainer &settings)  
          {  
            MyStringGUIDialog* dlg = gNew MyStringGUIDialog(settings, GetPlugin());  
            if (!dlg) return NULL;  
              
            CDialog *cdlg = dlg->Get();  
            if (!cdlg) return NULL;  
              
            return cdlg;  
          }
        
        
        
        
          virtual void Free(CDialog *dlg, void *userdata)  
          {  
            if (!dlg || !userdata) return;  
            MyStringGUIDialog *sub = static_cast<MyStringGUIDialog*>(userdata);  
            gDelete(sub);  
          }
        
        
        
        
          virtual CHAR *GetResourceSym()  
          {  
            return "MY_STRING_GUI";  
          }
        
        
        
        
          virtual LONG GetResourceDataType(LONG *&table)   
          {   
            table = restypetable;   
            return sizeof(restypetable)/sizeof(LONG);   
          }  
        };
        
        
        
        
         
        
        
        
        
        Bool RegisterStringGUI()  
        {  
          static BaseCustomGuiLib mylib;  
          ClearMem(&mylib,sizeof(mylib));  
          FillBaseCustomGui(mylib);
        
        
        
        
          return InstallLibrary(MY_STRING_GUI_ID, &mylib, 1000, sizeof(mylib))
        
        
        
        
                 &&  
                    
                 RegisterCustomGuiPlugin("My String GUI", 0*PLUGINFLAG_HIDE, gNew MyStringGUI);  
        }
    

Log in to reply