Как задать RibbonItem.IsChecked при автозагрузке с помощью Bundle?

Автор Тема: Как задать RibbonItem.IsChecked при автозагрузке с помощью Bundle?  (Прочитано 11804 раз)

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

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Ситуация такая:
У меня есть приложение для AutoCAD, которое раньше я подгружал при помощи загрузки CUIX-файла. Рядом с этим CUIX находился файл MNL, который загружал мои .NET dll-библиотеки. В dll прописана проверка состояния приложения и установка для кнопок ленты отображения "включено-отключено" путем изменения свойства RibbonItem.IsChecked.
Сейчас я перевел приложение на загрузку с использованием Bundle-пакета. Загрузку CUIX-файла и .NET dll-библиотек прописал в PackageContents.xml элементами ComponentEntry. И теперь, при загрузке, происходит следующее - сперва грузятся dll-файлы, а уже после происходит инициализация интерфейса и загружается CUIX файл. Соответственно, установка состояний для кнопок ленты отрабатывает "вхолостую", т.к. в этот момент ленты еще нет - метод получения вкладок-панелей-кнопок возвращает null.
Пока предполагаю два возможных варианта решения: искать события инициализации ленты, подписываться на них и производить обработку, либо формировать вкладки-панели-кнопки ленты полностью программно без CUIX-файла (сталкивался уже с таким в чьих-то приложениях).
Вопрос такой - может быть, кто-то уже сталкивался с такой проблемой и подскажет, в каком направлении искать решение и где какие грабли раскиданы? :)

Отмечено как Решение Дмитрий Загорулькин 24-09-2015, 13:46:40

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

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

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Александр Наумович, как всегда, в точку!  :)
Работает как надо! Спасибо!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я так понимаю, что этот параметр сделали именно для того, чтобы можно было выполнить некоторые действия, когда уже AutoCAD полностью инициализирован (меню, лента, палитры, тулбары и т.д.) и ждёт действия пользователя. Возможны и альтернативные решения (например, через подписку на Applicaton.Idle), но начиная с AutoCAD 2013 в них нет необходимости.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
А если прописать StartupCommand и в нём выполнять "установку состояния для кнопок ленты"?
Обнаружилась неприятная особенность этого способа. Он не срабатывает, если запускать AutoCAD из "Пуск" с указанием чертежа, который нужно открыть, из списка "Последние". Баг?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А если прописать StartupCommand и в нём выполнять "установку состояния для кнопок ленты"?
Обнаружилась неприятная особенность этого способа. Он не срабатывает, если запускать AutoCAD из "Пуск" с указанием чертежа, который нужно открыть, из списка "Последние". Баг?
Только отсюда или кликом по чертежу в проводнике тоже?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим Маркевич

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
либо формировать вкладки-панели-кнопки ленты полностью программно без CUIX-файла (сталкивался уже с таким в чьих-то приложениях)
А почему бы и нет? ИМХО, самый простой и удобный вариант..
Может, подскажете, в чем преимущества работы с CUIX-файлом (просто я так и не нашел никаких плюсов для себя, поэтому строю ленту сразу программно)?

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Только отсюда или кликом по чертежу в проводнике тоже?
Только в таком варианте запуска. Если кликать по чертежу в проводнике, или запускать автокад с ярлыка, а потом открывать чертеж - все в порядке. Сейчас запишу видео и выложу тестовый проект.

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Может, подскажете, в чем преимущества работы с CUIX-файлом
Ну есть и плюсы и минусы, но, на мой взгляд, так правильнее. Программно никогда не создавал элементы ленты, поэтому не в курсе, что можно сделать таким способом, а что нельзя. Однозначно, что при таком подходе пользователь не сможет никак изменить ленту, подстроить под себя. В варианте с подгружаемым CUIX файлом у него есть такая возможность.

Вот, записал видео проблемы. Сильно подозреваю, что в голом автокаде ее может и не быть. Суть в чем - при открытии через "Пуск", русский Civil 3D дополнительно создает документ "Чертеж1". И наличие этого документа портит всю работу. Английская версия Civil 3D не имеет такой проблемы - проверял на 2015 версии, но думаю, в 2017 будет то же самое, потому что эта проблема с дополнительным документом тянется еще с версии 2013, если мне не изменяет память. Только раньше мне это не мешало, а вот сейчас - очень даже неприятную ситуацию создает.
Во вложениях:
SimpleBundle.zip - проект VS 2013
SimpleBundle.bundle.zip - папка bundle. Работает с AutoCAD и AutoCAD Civil 3D версий 2013-2017



Оффлайн Максим Маркевич

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Программно никогда не создавал элементы ленты, поэтому не в курсе, что можно сделать таким способом, а что нельзя.
По сути, можно все.
Однозначно, что при таком подходе пользователь не сможет никак изменить ленту, подстроить под себя. В варианте с подгружаемым CUIX файлом у него есть такая возможность.
Ну можно создать окошко какое-то дополнительное (не автокадовское, где пользователь будет перетаскивать кнопки), а мы потом, соответственно, перестраивать ленту по "перетасканному";)
Вообще, Вашу позицию понял.
Сильно подозреваю, что в голом автокаде ее может и не быть.
Вряд ли тебе это поможет, но вот я проверил на голом(хотя, смотря что понимать под этим) акаде - действительно, все ок:

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Дмитрий Загорулькин
Странно. Непонятно в чем разница между русским и английским Civil 3D, что такая вещь проявляется только в нём. Может в русском еще какие-то дополнительные приложения? Кстати, тот факт, что остаётся открытым Чертеж1 говорит о том, что после запуска Civil 3D произошло изменение базы этого чертежа и поэтому Civil 3D его не закрыл перед открытием заданного чертежа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Да нет, дело не в дополнениях. Изначально, в версии 2013, если мне не изменяет память, так было и в английской версии и в русской. В английской создавался Drawing1, в русской Чертеж1. Потом в каком-то SP поправили это дело в английской версии, а в русской так и осталось. Насчет того, что в Чертеж1 было изменение базы у меня большие сомнения. Потому что если бы это было так, то он бы помечался звездочкой и при закрытии предлагал бы сохранить изменения. Но этого не происходит.
Попробовал задать команде флаг Session, но это привело к тому, что Civil 3D просто зависает при запуске и приходится его закрывать через диспетчер задач. Вот ведь засада...

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Ну можно создать окошко какое-то дополнительное (не автокадовское, где пользователь будет перетаскивать кнопки), а мы потом, соответственно, перестраивать ленту по "перетасканному"
Ну у меня порядка 40 кнопок на ленте своих. Замучаешься инструмент кастомизации делать :)
К тому же, через программное создание, наверняка, будет сложно предусмотреть смену значков при изменении цветовой схемы (светлая-темная). Через CUIX и ресурсные DLL с иконками это делать довольно удобно. В общем, использование CUIX более гибко по сравнению с программным созданием. И программировать меньше приходится, т.к. используются встроенные в AutoCAD механизмы.

Оффлайн Максим Маркевич

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Дмитрий, в общем, у меня на всех акадах работает (2016 и 2017, "голых" и "не голых", на работе и дома).
К тому же, через программное создание, наверняка, будет сложно предусмотреть смену значков при изменении цветовой схемы (светлая-темная). Через CUIX и ресурсные DLL с иконками это делать довольно удобно. В общем, использование CUIX более гибко по сравнению с программным созданием. И программировать меньше приходится, т.к. используются встроенные в AutoCAD механизмы.
Не подскажешь, где можно толково почитать про программную настройку CUIX?

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Не подскажешь, где можно толково почитать про программную настройку CUIX?
Программная настройка? Это как? Я вручную его создаю и настраиваю, через инструмент "Адаптация".