Пропадание вкладок плагина в Ribbon

Автор Тема: Пропадание вкладок плагина в Ribbon  (Прочитано 10470 раз)

0 Пользователей и 4 Гостей просматривают эту тему.

Оффлайн zavorАвтор темы

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Всем здравствуйте. У меня возникла следующая проблема.Имеется есть два плагина. Вкладка первого плагина  добавляется в Ribbon через cuix файл, а вкладка второго плагина подгружается динамически в коде. Когда загружается плагин через cuix, а затем подгружается плагин второй плагин, то все вкладки на месте и ни одна из них не исчезает из ribbon. А когда сначала происходит загрузка  динамически подгружаемого плагина, а затем cuix плагина, тогда динамический плагин исчезает. При дебаге кода я увидел, что динамический плагин удаляется из табов после загрузки cuix плагина. Скажите, как можно загружать cuix плагин так, чтобы не удалялся динамический плагин? Одно из решений было запоминать вкладку дин. плагина переде загрузкой cuix, а после загрузки добавлять вкладку в ribbon. Но что если у меня много cuix плагинов, как тогда быть ? И в какой очередности акад загружает плагины, может ему можно как-нибудь "сказать" какие плагины загружать первыми.

C# код загрузки динамического плагина (ARM Топограф)
Код - C# [Выбрать]
  1. internal static void InitRibbonPanel(HandlerPressedButton delegateBtn)
  2. {
  3.         var ribbonControl = ComponentManager.Ribbon;
  4.         if (ribbonControl == null)
  5.         {
  6.                 return;
  7.         }
  8.  
  9.         var ribbonTab = ribbonControl.FindTab(Constants.UIIndentificators.InternalTabId);
  10.         if (ribbonTab == null)
  11.         {
  12.                 ribbonTab = new RibbonTab
  13.                                                 {
  14.                                                                         Title = ProductConstants.ProductName,
  15.                                                                         Id = Constants.UIIndentificators.InternalTabId,
  16.                                                                         IsContextualTab = false
  17.                                                 };
  18.                 ribbonControl.Tabs.Add(ribbonTab);
  19.         }
  20.  
  21.         InitRibbonPanel(delegateBtn, ribbonTab);
  22. }
  23.  


C# код загрузки плагина cuix (Полотно+ Дороги)
Код - C# [Выбрать]
  1. public static AcadMenuGroup LoadCUIX()
  2. {
  3.         var fullPath = GetFileFullName(Constants.Interface.CUIX_NAME);
  4.  
  5.         UnloadMenuGroups(Constants.Interface.CUIX_NAME);
  6.  
  7.         var loaded = Application.LoadPartialMenu(fullPath);
  8.         return FindMenuGroup(Constants.Interface.CUIX_NAME);
  9. }
  10.  


Привожу еще изображения в момент дебага, когда динамический плагин уже подгружен, но не загружен cuix

На рисунке видно что количество табов 189



После загрузки cuix количество табов уменьшилось на 1





Прочитай правило форматирования кода на форуме и не забывай следовать ему. /* Александр Ривилис */
« Последнее редактирование: 22-04-2016, 11:24:45 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Пропадание вкладок плагина в Ribbon
« Ответ #1 : 22-04-2016, 11:18:34 »
И в какой очередности акад загружает плагины, может ему можно как-нибудь "сказать" какие плагины загружать первыми.
Нет. Да и это тебе не помогло бы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн zavorАвтор темы

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Re: Пропадание вкладок плагина в Ribbon
« Ответ #3 : 25-04-2016, 08:18:36 »
Ваш метод не помог мне. Скажите, а существует ли событие, которое реагирует на завершение загрузки плагина?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Пропадание вкладок плагина в Ribbon
« Ответ #4 : 25-04-2016, 11:26:11 »
Ваш метод не помог мне.
Думаю, что ты его или неправильно понял или неправильно использовал.
Скажите, а существует ли событие, которое реагирует на завершение загрузки плагина?
Нет. Такого события нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Пропадание вкладок плагина в Ribbon
« Ответ #5 : 25-04-2016, 17:05:12 »
Скажите, а существует ли событие, которое реагирует на завершение загрузки плагина?
https://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload%28v=vs.110%29.aspx

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Пропадание вкладок плагина в Ribbon
« Ответ #6 : 25-04-2016, 17:26:22 »
Скажите, а существует ли событие, которое реагирует на завершение загрузки плагина?
https://msdn.microsoft.com/en-us/library/system.appdomain.assemblyload%28v=vs.110%29.aspx
Не уверен, что это то, что zavor ищет. Хотя...
Я могу предложить другой вариант. Мне кажется, что он должен в данном случае сработать. Здесь мы подписываемся на события, которые приводят к изменению Ленты при загрузке cuix-файла и переключении рабочего пространства (workspace). Этими событиями и следует воспользоваться для того, чтобы динамически изменить Ленту. Но делать это следует не в этом событии, а тогда, когда AutoCAD свободен, т.е. или в событии Application.Idle или Editor.EnteringQuiescentState
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7. using Autodesk.AutoCAD.Internal.Reactors;
  8.  
  9. [assembly: ExtensionApplication(typeof(CuiEvents.MyPlugin))]
  10.  
  11. namespace CuiEvents
  12. {
  13.   public class MyPlugin : IExtensionApplication
  14.   {
  15.     void IExtensionApplication.Initialize()
  16.     {
  17.       try
  18.       {
  19.         CuiEventManager cuiMng = CuiEventManager.Instance();
  20.         cuiMng.LoadRibbon += cuiMng_LoadRibbon;
  21.         cuiMng.WorkspaceRibbonSave += cuiMng_WorkspaceRibbonSave;
  22.         cuiMng.WorkspaceRestore += cuiMng_WorkspaceRestore;
  23.       }
  24.       catch { }
  25.     }
  26.  
  27.     //////////////////////////////////////////////////////////////////////////
  28.     // Во всех следующих событиях можно себе отметить, что следует пересоздать
  29.     // свою Ленту, созданную динамически. Само пересоздание можно выполнить
  30.     // в любом другом событии. Например, Application.Idle или
  31.     // Editor.EnteringQuiescentState
  32.     //////////////////////////////////////////////////////////////////////////
  33.  
  34.     void cuiMng_WorkspaceRestore(object sender, WorkspaceEventArgs e)
  35.     {
  36.       Application.ShowAlertDialog("Восстанавливается рабочее пространство <"
  37.         + e.Name + "> Id=" + e.Id);
  38.     }
  39.  
  40.     void cuiMng_WorkspaceRibbonSave(object sender, WorkspaceEventArgs e)
  41.     {
  42.       Application.ShowAlertDialog("Сохраняется рабочее пространство <"
  43.         + e.Name + "> Id=" + e.Id);
  44.     }
  45.  
  46.     void cuiMng_LoadRibbon(object sender, CuiLoadEventArgs e)
  47.     {
  48.       Application.ShowAlertDialog("Загружается Лента в рабочее пространство: <"
  49.          + e.CurrentWorkspaceName + ">"
  50.          + e.CurrentWorkspaceId);
  51.     }
  52.     void IExtensionApplication.Terminate()
  53.     {
  54.     }
  55.   }
  56. }

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Пропадание вкладок плагина в Ribbon
« Ответ #7 : 25-04-2016, 17:29:37 »
Проблема топикстартера в том, что он мешает мух с котлетами. Либо CUIX, либо программно. А он всё в одну кучу сваливает.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Пропадание вкладок плагина в Ribbon
« Ответ #8 : 25-04-2016, 17:38:04 »
Проблема топикстартера в том, что он мешает мух с котлетами. Либо CUIX, либо программно. А он всё в одну кучу сваливает.
Да. Но возможна ситуация, когда кроме его приложения, которое работает с Лентой программно, есть еще приложения, которые грузят Ленту из одного или нескольких CUIX и/или меняют рабочие пространства. При этом эго Лента, созданная программно, исчезает. Конфигурация и порядок загрузки этих сторонних плагинов непредсказуем. Так что его цель - "защитить" свою Ленту в любой конфигурации и в случае необходимости её пересоздать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Пропадание вкладок плагина в Ribbon
« Ответ #9 : 25-04-2016, 17:42:19 »
Вообще, управлять тем, стоит ли отображать ту или иную ленту или туллбар - это прерогатива конечного пользователя, который настраивает интерфейс под себя. Пользователь знает, что такое CUIX, как их подгружать и выгружать. Т.е. "родной" механизм настроек автокада ему знаком и привычен.

Если же какой-то плагин будет самостоятельно по своему усмотрению каждый раз включать риббоны (при очередной загрузке) не смотря на то, что в прошлом сеансе пользователь их отключил (т.е. попросту посылая пользователя с его предпочтениями идти гулять лесом), то это, мягко говоря, плохое решение.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Пропадание вкладок плагина в Ribbon
« Ответ #10 : 25-04-2016, 17:45:56 »
...Если каждый плагин будет самостоятельно по своему усмотрению каждый раз включать риббоны не смотря на то, что в прошлом сеансе пользователь их отключил, то это, мягко говоря, плохое решение...
И здесь я с тобой согласен. Но это если пользоваться только Лентой из CUIX. С программной Лентой так не получится. Или потребуются достаточно приличные усилия для сохранения/восстановления её состояния.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Пропадание вкладок плагина в Ribbon
« Ответ #11 : 25-04-2016, 17:48:25 »
С программной Лентой так не получится. Или потребуются достаточно приличные усилия для сохранения/восстановления её состояния.
Не понял вас. Не получится что именно?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Пропадание вкладок плагина в Ribbon
« Ответ #12 : 25-04-2016, 17:56:10 »
С программной Лентой так не получится. Или потребуются достаточно приличные усилия для сохранения/восстановления её состояния.
Не понял вас. Не получится что именно?
Пользователь закрыл программно созданные вкладки Ленты. Нужно где-то это помнить и при следующем запуске не создавать свою вкладку.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Пропадание вкладок плагина в Ribbon
« Ответ #13 : 25-04-2016, 18:03:54 »
Пользователь закрыл программно созданные вкладки Ленты. Нужно где-то это помнить и при следующем запуске не создавать свою вкладку.
Теперь понял. Ну так это уж головная боль того, кто использует программное создание ленты. На мой взгляд, использовать файлы partial CUIX - самый рациональный путь. Пользовательские предпочтения следует учитывать. Объективных причин программного создания палитр вместо использования CUIX в составе BUNDLE-пакетов (настроенных соответствующим образом) я не вижу.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Пропадание вкладок плагина в Ribbon
« Ответ #14 : 25-04-2016, 18:21:46 »
Объективных причин программного создания палитр вместо использования CUIX в составе BUNDLE-пакетов (настроенных соответствующим образом) я не вижу.
Возможно единственная причина использования программной Ленты - создание собственных элементов управления на Ленте.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение