Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    GeDialog Button Highlighted By Default

    Cinema 4D SDK
    r25 python sdk windows
    2
    3
    330
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User
      last edited by

      Hello,
      When I create a GeDialog with buttons, the first button is highlighted by default for some reason:

      import c4d
      from c4d import gui
      
      MY_PLUGIN_ID = 1234567
      GROUP1_ID = 1000
      GROUP2_ID = 1001
      BUTTON1_ID = 1002
      BUTTON2_ID = 1003
      BUTTON3_ID = 1004
      
      class Example_Dialog(gui.GeDialog):
          def CreateLayout(self):
              self.SetTitle("BUTTON_HIGHLIGHTED")
              self.GroupBorderSpace(10,10,10,10)
              if self.GroupBegin(GROUP1_ID, c4d.BFH_SCALEFIT | c4d.BFV_SCALE | c4d.BFV_CENTER):
                  if self.GroupBegin(GROUP2_ID, c4d.BFH_SCALEFIT, 1):
                      self.GroupBorderSpace(5,5,5,5)
                      self.AddButton(BUTTON1_ID, c4d.BFH_SCALEFIT | c4d.BFV_SCALE | c4d.BFV_CENTER, name='Button1')
                      self.AddButton(BUTTON2_ID, c4d.BFH_SCALEFIT | c4d.BFV_SCALE | c4d.BFV_CENTER, name='Button2')
                      self.AddButton(BUTTON3_ID, c4d.BFH_SCALEFIT | c4d.BFV_SCALE | c4d.BFV_CENTER, name='Button3')
                  self.GroupEnd()
              self.GroupEnd()
              return True
      
      # Main function
      def main():
          global example_dialog
          example_dialog = Example_Dialog()
          example_dialog.Open(c4d.DLG_TYPE_ASYNC, pluginid=MY_PLUGIN_ID, defaultw=300, defaulth=150)
      
      # Execute main()
      if __name__=='__main__':
          main()
      

      32aa2c03-38d6-4b72-a3c8-a064dca61328-image.png

      ferdinandF 1 Reply Last reply Reply Quote 1
      • ferdinandF
        ferdinand @A Former User
        last edited by

        Hello @blastframe,

        thank you for reaching out to us. This is the correct behavior of GeDialog. It will always set the focus to its first element, so that users can navigate the dialog with the keyboard. If you look at our asset API examples dialog from the C++ SDK, it has the same behavior:

        alt text

        There are technically two ways to suppress this behavior.

        1. Simply dock the dialog with a layout, given it is non-modal dialog, which seems to be the case in your example.
        2. There is technically the private message BFM_SETFOCUS with which this behavior might be altered, but that requires some jumping through hoops and is probably also intentionally private, so I cannot really share it without a good reason. I think you will always need dummy element, e.g., a static text with no string, to make this work. So that you can set the focus to that element. By default, Cinema 4D will ignore such static text element as the first element.

        I would say setting the focus to a dummy element is bad because it will break the keyboard input mechanics put into place by Cinema 4D. And I also have not tested what the side-effects of such hack would be. Or to be a bit more direct: This is simply not something you are intended to do. You can always set the focus of gadgets with GeDialog.Activate, but this does not allow you to clear the focus or set it to illegal elements.

        Cheers,
        Ferdinand

        MAXON SDK Specialist
        developers.maxon.net

        1 Reply Last reply Reply Quote 0
        • ferdinandF
          ferdinand
          last edited by

          Hello @blastframe ,

          we will set this topic to 'Solved' when there are no further questions or replies until Monday, November the 22th.

          Thank you for your understanding,
          Ferdinand

          MAXON SDK Specialist
          developers.maxon.net

          1 Reply Last reply Reply Quote 0
          • First post
            Last post