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

    Open SubDialog with parameters

    Scheduled Pinned Locked Moved PYTHON Development
    3 Posts 0 Posters 392 Views
    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.
    • H Offline
      Helper
      last edited by

      On 21/12/2016 at 04:54, xxxxxxxx wrote:

      Hi, guys!
      I made some experiments trying to find a way to open a subdialogs with parameters. 
      But when i press the first button parameter is sending only once, and then with other button, it is used again. 
      Is there a solution of the issue?

      There is my code based on NiclasR example:

      import c4d
        
      PLUGIN_ID = 1000004 # Test ID
        
      class MainDialog(c4d.gui.GeDialog) :
        
          # Do not create the object on class-level, although it might
          # be unimportant since you do not open multiple objects of your
          # MainDialog, it is contradicting to have one instance of sub
          # dialog for all instances of the main dialog.
          # A property that creates the dialog on-demand is perfect for
          # this purpose.
        
          # data = 'Testtt'
          # @property
          def sub_dialog(self,name) :
              if not hasattr(self, '_sub_dialog') :
                  self._sub_dialog = SubDialog(name)
              return self._sub_dialog
        
          # c4d.gui.GeDialog
        
          def CreateLayout(self) :
              self.SetTitle('Main Dialog')
              self.AddButton(1000, 0, name="Open Sub-Dialog")
              self.AddButton(1001, 0, name="Open Sub-Dialog 2")
              return True
        
          def Command(self, param, bc) :
              if param == 1000:
                  self.sub_dialog('First param').Open(c4d.DLG_TYPE_MODAL, PLUGIN_ID, subid=1)
              if param == 1001:
                  # self.data = 
                  self.sub_dialog('Sec param').Open(c4d.DLG_TYPE_MODAL, PLUGIN_ID, subid=1)
              return True
        
          def Restore(self, pluginid, secref) :
              # We override this method so we don't have to handle the sub-
              # dialog from the CommandData plugin. THIS dialog is responsible
              # for the sub-dialog, do not split such management throughout
              # your program or it gets confusing.
              if secref['subid'] == 1:
                  return self.sub_dialog('').Restore(pluginid, secref)
              else:
                  return super(MainDialog, self).Restore(pluginid, secref)
              # if secref['subid'] == 2:
              #     return self.sub_dialog('Udin').Restore(pluginid, secref)
              # else:
              #     return super(MainDialog, self).Restore(pluginid, secref)
        
      class SubDialog(c4d.gui.GeDialog) :
        
          def __init__(self,name) :
              self.name = name
        
          def CreateLayout(self) :
              self.SetTitle('Sub-Dialog')
              # md = MainDialog()
              self.AddStaticText(1000, 0, name=self.name)
              return True
        
        
      class Command(c4d.plugins.CommandData) :
        
          def Register(self) :
              return c4d.plugins.RegisterCommandPlugin(
                      PLUGIN_ID, "Sub-Dialog Docking Test", 0, None, "", self)
        
          @property
          def dialog(self) :
              if not hasattr(self, '_dialog') :
                  self._dialog = MainDialog()
              return self._dialog
        
          # c4d.plugins.CommandData
        
          def Execute(self, doc) :
              return self.dialog.Open(c4d.DLG_TYPE_ASYNC, PLUGIN_ID)
        
          def RestoreLayout(self, secref) :
              return self.dialog.Restore(PLUGIN_ID, secref)
        
      if __name__ == '__main__':
          Command().Register()
      

      G
      M
      T

      < id="SL_locer" ="" title="Зафиксировать язык"> < id="SL_lng_from">< value="auto">Определить язык< value="az">Азербайджанский< value="sq">Албанский< value="en">Английский< value="ar">Арабский< value="hy">Армянский< value="af">Африкаанс< value="eu">Баскский< value="be">Белорусский< value="bn">Бенгальский< value="my">Бирманский< value="bg">Болгарский< value="bs">Боснийский< value="cy">Валлийский< value="hu">Венгерский< value="vi">Вьетнамский< value="gl">Галисийский< value="el">Греческий< value="ka">Грузинский< value="gu">Гуджарати< value="da">Датский< value="zu">Зулу< value="iw">Иврит< value="ig">Игбо< value="yi">Идиш< value="id">Индонезийский< value="ga">Ирландский< value="is">Исландский< value="es">Испанский< value="it">Итальянский< value="yo">Йоруба< value="kk">Казахский< value="kn">Каннада< value="ca">Каталанский< value="zh-CN">Китайский (Трад)< value="zh-TW">Китайский (Упр)< value="ko">Корейский< value="ht">Креольский (Гаити)< value="km">Кхмерский< value="lo">Лаосский< value="la">Латинский< value="lv">Латышский< value="lt">Литовский< value="mk">Македонский< value="mg">Малагасийский< value="ms">Малайский< value="ml">Малайялам< value="mt">Мальтийский< value="mi">Маори< value="mr">Маратхи< value="mn">Монгольский< value="de">Немецкий< value="ne">Непали< value="nl">Нидерландский< value="no">Норвежский< value="pa">Панджаби< value="fa">Персидский< value="pl">Польский< value="pt">Португальский< value="ro">Румынский< value="ru">Русский< value="ceb">Себуанский< value="sr">Сербский< value="st">Сесото< value="si">Сингальский< value="sk">Словацкий< value="sl">Словенский< value="so">Сомали< value="sw">Суахили< value="su">Суданский< value="tl">Тагальский< value="tg">Таджикский< value="th">Тайский< value="ta">Тамильский< value="te">Телугу< value="tr">Турецкий< value="uz">Узбекский< value="uk">Украинский< value="ur">Урду< value="fi">Финский< value="fr">Французский< value="ha">Хауса< value="hi">Хинди< value="hmn">Хмонг< value="hr">Хорватский< value="ny">Чева< value="cs">Чешский< value="sv">Шведский< value="eo">Эсперанто< value="et">Эстонский< value="jw">Яванский< value="ja">Японский
      < id="SL_lng_to">< value="az">Азербайджанский< value="sq">Албанский< value="en">Английский< value="ar">Арабский< value="hy">Армянский< value="af">Африкаанс< value="eu">Баскский< value="be">Белорусский< value="bn">Бенгальский< value="my">Бирманский< value="bg">Болгарский< value="bs">Боснийский< value="cy">Валлийский< value="hu">Венгерский< value="vi">Вьетнамский< value="gl">Галисийский< value="el">Греческий< value="ka">Грузинский< value="gu">Гуджарати< value="da">Датский< value="zu">Зулу< value="iw">Иврит< value="ig">Игбо< value="yi">Идиш< value="id">Индонезийский< value="ga">Ирландский< value="is">Исландский< ed="ed" value="es">Испанский< value="it">Итальянский< value="yo">Йоруба< value="kk">Казахский< value="kn">Каннада< value="ca">Каталанский< value="zh-CN">Китайский (Трад)< value="zh-TW">Китайский (Упр)< value="ko">Корейский< value="ht">Креольский (Гаити)< value="km">Кхмерский< value="lo">Лаосский< value="la">Латинский< value="lv">Латышский< value="lt">Литовский< value="mk">Македонский< value="mg">Малагасийский< value="ms">Малайский< value="ml">Малайялам< value="mt">Мальтийский< value="mi">Маори< value="mr">Маратхи< value="mn">Монгольский< value="de">Немецкий< value="ne">Непали< value="nl">Нидерландский< value="no">Норвежский< value="pa">Панджаби< value="fa">Персидский< value="pl">Польский< value="pt">Португальский< value="ro">Румынский< value="ru">Русский< value="ceb">Себуанский< value="sr">Сербский< value="st">Сесото< value="si">Сингальский< value="sk">Словацкий< value="sl">Словенский< value="so">Сомали< value="sw">Суахили< value="su">Суданский< value="tl">Тагальский< value="tg">Таджикский< value="th">Тайский< value="ta">Тамильский< value="te">Телугу< value="tr">Турецкий< value="uz">Узбекский< value="uk">Украинский< value="ur">Урду< value="fi">Финский< value="fr">Французский< value="ha">Хауса< value="hi">Хинди< value="hmn">Хмонг< value="hr">Хорватский< value="ny">Чева< value="cs">Чешский< value="sv">Шведский< value="eo">Эсперанто< value="et">Эстонский< value="jw">Яванский< value="ja">Японский

      |

      --- --- --- --- --- --- --- --- --- --- ---

      Звуковая функция ограничена 100 символами

      Настройки : История : Справка : Обратная связь Закрыть
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 21/12/2016 at 08:48, xxxxxxxx wrote:

        Give this one a try Mike.
        It's a little bit more organized than your code. So hopefully it's easier to follow what's going on in it

        #This is an example of a GeDialog plugin that opens another dialog using properties  
        #It also allows both dialogs to be docked and saved in a custom layout  
          
        import c4d  
        PLUGIN_ID = 1000004 # Test ID  
          
        class MainDialog(c4d.gui.GeDialog) :  
          
          #Create 2 properties for each sub dialog  
          #A property can create the sub dialogs on-demand as if they were class objects  
          
          @property  
          def sub_dialog1(self) :  
              if not hasattr(self, '_sub_dialog1') : self._sub_dialog1 = SubDialog1()  
              return self._sub_dialog1  
                
          @property  
          def sub_dialog2(self) :  
              if not hasattr(self, '_sub_dialog2') : self._sub_dialog2 = SubDialog2()  
              return self._sub_dialog2  
                
                
        ############### GeDialog section ###################  
          
          def CreateLayout(self) :  
              self.SetTitle('Main Dialog')  
              self.AddButton(1000, 0, name="Open Sub-Dialog 1")  
              self.AddButton(1001, 0, name="Open Sub-Dialog 2")  
              return True  
          
          def Command(self, param, bc) :  
              if param == 1000: self.sub_dialog1.Open(c4d.DLG_TYPE_ASYNC, PLUGIN_ID, subid=1)  
              if param == 1001: self.sub_dialog2.Open(c4d.DLG_TYPE_ASYNC, PLUGIN_ID, subid=2)  
              return True  
          
          def Restore(self, pluginid, secref) :  
            
              #Set the pointers to the specific sub dialog here rather than in the CommandData section of this plugin  
              if secref['subid'] == 1: return self.sub_dialog1.Restore(pluginid, secref)  
              if secref['subid'] == 2: return self.sub_dialog2.Restore(pluginid, secref)  
              else: return super(MainDialog, self).Restore(pluginid, secref)  
          
          
                
        ############### Sub Dialogs section ######################  
        class SubDialog1(c4d.gui.GeDialog) :  
          
          def CreateLayout(self) :  
              self.SetTitle('Sub-Dialog')  
              self.AddStaticText(1000, 0, name="This is sub-dialog #1")  
              return True  
                
        class SubDialog2(c4d.gui.GeDialog) :  
          
          def CreateLayout(self) :  
              self.SetTitle('Sub-Dialog2')  
              self.AddStaticText(1001, 0, name="This is sub-dialog #2")  
              return True  
          
                
                
        ################# CommandData section #######################  
        class Command(c4d.plugins.CommandData) :  
          
          def Register(self) :  
              return c4d.plugins.RegisterCommandPlugin(PLUGIN_ID, "Sub-Dialog Docking Test", 0, None, "", self)  
          
          @property  
          def dialog(self) :  
              if not hasattr(self, '_dialog') : self._dialog = MainDialog()  
              return self._dialog  
          
          def Execute(self, doc) :  
              return self.dialog.Open(c4d.DLG_TYPE_ASYNC, PLUGIN_ID)  
          
          def RestoreLayout(self, secref) :  
              return self.dialog.Restore(PLUGIN_ID, secref)  
          
        if __name__ == '__main__':  
          Command().Register()
        

        -ScottA

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 21/12/2016 at 10:26, xxxxxxxx wrote:

          Thanks for the reply, Scott! 
          The fact is that I do not know how many subdialogs user may need. 
          Buttons will be added by the loop.
          G
          M
          T

          < id="SL_locer" ="" title="Зафиксировать язык"> < id="SL_lng_from">< value="auto">Определить язык< value="az">Азербайджанский< value="sq">Албанский< value="en">Английский< value="ar">Арабский< value="hy">Армянский< value="af">Африкаанс< value="eu">Баскский< value="be">Белорусский< value="bn">Бенгальский< value="my">Бирманский< value="bg">Болгарский< value="bs">Боснийский< value="cy">Валлийский< value="hu">Венгерский< value="vi">Вьетнамский< value="gl">Галисийский< value="el">Греческий< value="ka">Грузинский< value="gu">Гуджарати< value="da">Датский< value="zu">Зулу< value="iw">Иврит< value="ig">Игбо< value="yi">Идиш< value="id">Индонезийский< value="ga">Ирландский< value="is">Исландский< value="es">Испанский< value="it">Итальянский< value="yo">Йоруба< value="kk">Казахский< value="kn">Каннада< value="ca">Каталанский< value="zh-CN">Китайский (Трад)< value="zh-TW">Китайский (Упр)< value="ko">Корейский< value="ht">Креольский (Гаити)< value="km">Кхмерский< value="lo">Лаосский< value="la">Латинский< value="lv">Латышский< value="lt">Литовский< value="mk">Македонский< value="mg">Малагасийский< value="ms">Малайский< value="ml">Малайялам< value="mt">Мальтийский< value="mi">Маори< value="mr">Маратхи< value="mn">Монгольский< value="de">Немецкий< value="ne">Непали< value="nl">Нидерландский< value="no">Норвежский< value="pa">Панджаби< value="fa">Персидский< value="pl">Польский< value="pt">Португальский< value="ro">Румынский< value="ru">Русский< value="ceb">Себуанский< value="sr">Сербский< value="st">Сесото< value="si">Сингальский< value="sk">Словацкий< value="sl">Словенский< value="so">Сомали< value="sw">Суахили< value="su">Суданский< value="tl">Тагальский< value="tg">Таджикский< value="th">Тайский< value="ta">Тамильский< value="te">Телугу< value="tr">Турецкий< value="uz">Узбекский< value="uk">Украинский< value="ur">Урду< value="fi">Финский< value="fr">Французский< value="ha">Хауса< value="hi">Хинди< value="hmn">Хмонг< value="hr">Хорватский< value="ny">Чева< value="cs">Чешский< value="sv">Шведский< value="eo">Эсперанто< value="et">Эстонский< value="jw">Яванский< value="ja">Японский
          < id="SL_lng_to">< value="az">Азербайджанский< value="sq">Албанский< value="en">Английский< value="ar">Арабский< value="hy">Армянский< value="af">Африкаанс< value="eu">Баскский< value="be">Белорусский< value="bn">Бенгальский< value="my">Бирманский< value="bg">Болгарский< value="bs">Боснийский< value="cy">Валлийский< value="hu">Венгерский< value="vi">Вьетнамский< value="gl">Галисийский< value="el">Греческий< value="ka">Грузинский< value="gu">Гуджарати< value="da">Датский< value="zu">Зулу< value="iw">Иврит< value="ig">Игбо< value="yi">Идиш< value="id">Индонезийский< value="ga">Ирландский< value="is">Исландский< value="es">Испанский< value="it">Итальянский< value="yo">Йоруба< value="kk">Казахский< value="kn">Каннада< value="ca">Каталанский< value="zh-CN">Китайский (Трад)< value="zh-TW">Китайский (Упр)< value="ko">Корейский< value="ht">Креольский (Гаити)< value="km">Кхмерский< value="lo">Лаосский< value="la">Латинский< value="lv">Латышский< value="lt">Литовский< value="mk">Македонский< value="mg">Малагасийский< value="ms">Малайский< value="ml">Малайялам< value="mt">Мальтийский< value="mi">Маори< value="mr">Маратхи< value="mn">Монгольский< value="de">Немецкий< value="ne">Непали< value="nl">Нидерландский< value="no">Норвежский< value="pa">Панджаби< value="fa">Персидский< value="pl">Польский< value="pt">Португальский< value="ro">Румынский< ed="ed" value="ru">Русский< value="ceb">Себуанский< value="sr">Сербский< value="st">Сесото< value="si">Сингальский< value="sk">Словацкий< value="sl">Словенский< value="so">Сомали< value="sw">Суахили< value="su">Суданский< value="tl">Тагальский< value="tg">Таджикский< value="th">Тайский< value="ta">Тамильский< value="te">Телугу< value="tr">Турецкий< value="uz">Узбекский< value="uk">Украинский< value="ur">Урду< value="fi">Финский< value="fr">Французский< value="ha">Хауса< value="hi">Хинди< value="hmn">Хмонг< value="hr">Хорватский< value="ny">Чева< value="cs">Чешский< value="sv">Шведский< value="eo">Эсперанто< value="et">Эстонский< value="jw">Яванский< value="ja">Японский

          |

          --- --- --- --- --- --- --- --- --- --- ---

          Звуковая функция ограничена 100 символами

          Настройки : История : Справка : Обратная связь Закрыть

          And I need to get a dialogs with different details.

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