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 :nauseated_face:.

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