Open SubDialog with parameters



  • 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 символами

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


  • 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



  • 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.


Log in to reply