BitmapButton toggle id



  • On 26/05/2013 at 07:06, xxxxxxxx wrote:

    Hi,

    can anyone point me to the correct BFM_MESSAGE id to call a toggle BitmapButton click in a 
    GeDialog / toggle its state ? I have that code which does work in general (it does disable 
    the button, but i want to toggle it as described).

    def Execute(self, doc) :
        fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN
        tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
        if isinstance(tool, plugins.BasePlugin) :
            data = tool.GetNodeData()
            if isinstance(data, fhBaseSelectToolData.fhBaseSelectToolData) :
                if isinstance(data.Dialog, gui.GeDialog) :
                    print data.Dialog.SendMessage(id   = fhPolyTools.IDC_BASE_FREEZE_BTN, 
                                                  msg  = c4d.BaseContainer(c4d.BFM_DISABLE))
        return True
    

    Thank you for your help and happy rendering,

    Ferdinand



  • On 26/05/2013 at 07:37, xxxxxxxx wrote:

    hm,

    that is how i thonk it should work, but it does not 🤢.

    def Execute(self, doc) :
        fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN
        tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
        if isinstance(tool, plugins.BasePlugin) :
            data = tool.GetNodeData()
            if isinstance(data, fhBaseSelectToolData.fhBaseSelectToolData) :
                if isinstance(data.Dialog, gui.GeDialog) :
                    msg, bc = c4d.BaseContainer(c4d.BFM_VALUECHNG), c4d.BaseContainer(c4d.BFM_ACTION)
                    bc.SetLong(c4d.BFM_ACTION_ID, fhPolyTools.IDC_BASE_FREEZE_BTN)
                    bc.SetBool(c4d.BFM_ACTION_VALUE, fhPolyTools.ID_ISFROZEN)
                    msg.SetContainer(c4d.BFM_ACTION, bc)
                    data.Dialog.SendMessage(id = fhPolyTools.IDC_BASE_FREEZE_BTN, msg = msg)
        return True
    


  • On 26/05/2013 at 07:48, xxxxxxxx wrote:

    Never tried it with Python.
    My C++ notes say to use it like this:

    BaseContainer msg(BFM_ACTION);  
    msg.SetLong(BFM_ACTION_ID, YOUR_ID);  
    msg.SetLong(BFM_ACTION_VALUE, TRUE);
    

    -ScottA



  • On 26/05/2013 at 07:56, xxxxxxxx wrote:

    Hi scott,

    thanks for your answer. I tried that too, using SetLong for BFM_ACTION_VALUE and sending the BMF_ACTION container directly, but that did not work either for me.



  • On 26/05/2013 at 08:27, xxxxxxxx wrote:

    You're asking about GeDialog. Yet the code you posted is for a Tool Data plugin?
    Are you trying to send a message from a tool plugin to a GeDialog plugin?

    Also.
    BitmapButtons have their own settings to do things like TOGGLE: _  customgui_bitmapbutton.h_
    Enable() is sort of a generic way to grey things out in dialogs.

    -ScottA



  • On 26/05/2013 at 08:59, xxxxxxxx wrote:

    ToolData plugins have in contrast to ToolDescriptionData plugins a GeDialog attached to it. 
    I am accessing the dialog attached to the tool. Check the example code. The code itself is 
    from a CommandData plugin.

    I am aware about the nature of bfm_disable. I have posted it just as a demonstration 
    that the general approach works and that i can alter the gadget attached to id that way.
    I am only missing the correct id(s).



  • On 26/05/2013 at 11:58, xxxxxxxx wrote:

    hey,

    for the record and others who might search on this, i made it just to complicated. I thought
    BitmapButton is not wrapped for python but it actually is. So you can keep it pretty straight 
    forward.

        # --- Toggle the freeze state and toggle the freeze button of the active fhBaseToolData
        # -----------------------------------------------------------------------------------------------
        def Execute(self, doc) :
            tool = plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL)
            if (isinstance(tool, plugins.BasePlugin) and
                isinstance(tool.GetNodeData(), fhBaseToolData.fhBaseToolData) and
                isinstance(tool.GetNodeData().Dialog, fhBaseToolDialog.fhBaseToolDialog) and
                tool.GetNodeData().Dialog.CanFreeze) :
                btn = tool.GetNodeData().Dialog.FindCustomGui(id       = fhPolyTools.IDC_BASE_FREEZE_BTN, 
                                                              pluginid = c4d.CUSTOMGUI_BITMAPBUTTON)
                if isinstance(btn, c4d.gui.BitmapButtonCustomGui) :
                    fhPolyTools.ID_ISFROZEN = not fhPolyTools.ID_ISFROZEN
                    btn.SetToggleState(fhPolyTools.ID_ISFROZEN)
            c4d.SpecialEventAdd(messageid = fhPolyTools.PID_FHFREEZETOOL)
            return True
    

Log in to reply