Данную утилиту и исходные коды к ней вы можете скачать на GitHub.
Что такое RibbonBuilder?
Это инструмент, позволяющий создавать пользовательский ленточный интерфейс в MapInfoPro, содержащий любое количество наборов данных, инструментов или стандартных функций/команд MIPro, который легко настраивается с помощью простых электронных таблиц и поэтому не требует абсолютно никакого знания MapBasic.
Инструмент имеет две основные функции:
1. Позволяет администратору настраивать универсальный единый центр для всех часто используемых наборов данных - по сути, список «Избранное». Это гарантирует, что все пользователи в организации или команде используют одни и те же источники данных и не тратят время на поиск правильных файлов.
2. Позволяет администратору настраивать, какие инструменты будут автоматически загружаться на всех пользовательских экземплярах MIPro, гарантируя, что все пользователи будут работать с одинаковыми, обновленными версиями всех инструментов. После установки новых экземпляров MI, процесс добавления всех необходимых инструментов заключается просто в добавлении RibbonBuilder и его установки в AutoLoad.
Как он работает?
Администратор настраивает необходимые элементы ленты в электронной таблице, добавляя вкладку, группу и имена кнопок, пути к файлам TAB и MBX, ссылки на значки кнопок (внешние .PNG или внутренние значки MI), информацию о подсказках и т.д.
Когда RibbonBuilder запускается в первый раз, он преобразует таблицу в серии .TAB файлов для каждого из типов элементов (вкладка, группа, кнопка и т. д.) в том же каталоге, что и файл MBX. Затем RibbonBuilder MBX переберет все .TAB файлы и создаст ленточный интерфейс для требуемой конфигурации. Когда RibbonBuilder запустят в следующий раз или он будет использоваться другим пользователем, ленточный интерфейс мгновенно создастся из предварительно сгенерированных .TAB файлов. Если необходимо внести изменения, таблицу можно модифицировать, для этого следует использовать функцию Refresh на вкладке HOME RibbonBuilder в MI Pro. Это очистит .TAB файлы и восстановит их. (Вы также можете вручную очистить .TAB и повторно запустить RibbonBuilder.MBX).
Элементы ленты
Примечание: SplitButton (раскрывающаяся кнопка) не обозначена отдельно, поскольку выглядит также, как и Subgroup (подгруппа), однако имеет действие, назначенное и на основной кнопке. Так, в примере выше, кнопка OSM в группе Basemaps имеет раскрывающуюся кнопку. Обычный щелчок просто добавит слой на карту, но при нажатии рядом со стрелкой вниз будет раскрыт список альтернативных стилей OSM.
Как добавить элементы на ленту?
Все элементы хранятся в электронной таблице XLSX. Вы также можете найти пустой шаблон и примеры таблиц с указанием типов элементов, которые сможете добавить. Электронная таблица имеет базовую валидацию, чтобы помочь создать файл правильной конфигурации. Вы должны взять копию любого примера или шаблон xlsx, переименовать его в Config.xlsx, а затем добавить свой контент в этот файл.
Электронная таблица состоит из 5 вкладок:
• Tabs (вкладки)
• Groups (группы)
• Subgroups (подгруппы)
• Buttons (кнопки)
• Tools (инструменты)
Они относятся к элементам, которые могут быть добавлены к ленте интерфейса MI Pro, и вы должны работать с ними именно в этом порядке. Таким образом, сначала в Exel необходимо внести вкладку Tabs. Это новое имя вкладки затем появится на вкладке Groups и позволит вам добавлять к ней группы. Аналогичным образом вы должны добавить группы или подгруппы на правильную вкладку Excel, прежде чем вы сможете добавить к ней кнопку, и так далее.
Внутри таблицы вы заметите, что некоторые столбцы и строки выделены серым цветом - это означает, что вы не должны редактировать эти значения или формулы, поскольку они будут заполняться автоматически. Некоторые столбцы будут окрашены зеленым цветом, это означает, что существует выпадающий список, из которого можно выбрать значение (значения внутри будут определены значениями в других вкладках - именно поэтому вы должны добавить элементы в Exel в правильном порядке). Остальные белые столбцы вы можете заполнить на свое усмотрение.
Каждый из столбцов в электронной таблице имеет комментарий, прикрепленный к заголовку этого столбца, который объясняет, что делает каждый столбец, и какие значения следует вводить.
Следует отметить две вещи: «Имя» групп должно начинаться с «G_», а подгруппы начинаются с «SG_» (см. пример config.xlsx). Названия вкладок и кнопок могут быть любыми, какими вы захотите, но советуем начать с «T_» и «B_» для ясности.
Типы подгрупп
Существует два типа подгрупп:
• Subgroup – подгруппа, которая может содержать несколько кнопок, и выпадающий список появляющийся при нажатии на подгруппу.
• SplitButton – это комбинация обычной кнопки и подгруппы. Нажатие на саму кнопку выполнит действие (добавит слой, запустит инструмент и т. д.), однако, при нажатии на маленькую стрелку на кнопке, будет раскрыт выпадающий список, похожий на подгруппу.
И Subgroup и SplitButton обе вносятся во вкладку Subgroups таблицы Exel. Однако, если столбец ButtonAction оставлен пустым, подгруппа будет обычной, а если столбец заполнен именем существующей кнопки, то она станет SplitButton и наследует действие именованной кнопки.
Типы кнопок
Существует два типа кнопок:
• Button – просто обычная кнопка. Она будет делать то же самое каждый раз при нажатии на нее. Если это добавление слоя, то будет выдана ошибка, что слой уже добавлен к карте. Если это запуск инструмента, инструмент будет запущен повторно.
• ToggleButton – кнопка переключатель, имеет 2 действия и работает только с кнопками с типом действия AddLayer.
Например, она откроет и добавит слой к карте, или закроет и удалит с карты. Наиболее полезно для карт-основ, которые вы можете включить / выключить.
Типы действия кнопок
Каждая кнопка может выполнять одно из 7 следующих действий:
1. AddLayer – откроет файл .TAB и добавит текущую (или новую) карту. Столбец Path в Exel должен содержать путь до .TAB-файла.
2. AddThematicLayer – откроет .TAB, но не добавит его на карту. Вместо этого он попросит добавить его на карту вручную. Это связано с ограничением Mapinfo / MapBasic, возникшим из-за того, что тематическое оформление карты встроено в .TAB, и стиль будет игнорироваться при добавлении к карте через MapBasic, но будет отображаться при добавлении вручную. Столбец Path в Exel должен содержать путь до .TAB файла.
3. CustomAction – будет выполнять определенную задачу, которая была закодирована в приложении. Существует несколько CustomAction уже встроенных в инструментарий (см. пример config.xlsx), но вы также можете создать свои собственные, если вы знакомы с MapBasic. Столбец Path в Exel должен быть заполнен названием действия.
4. RunTool – запускает внешний MBX при нажатии. Столбец Path в Exel должен быть заполнен путем к файлу .MBX.
5. OpenWorkspace – открывает рабочее пространство. Столбец Path в Exel должен быть заполнен путем к файлу .WOR.
6. BrowseTable – откроет файл таблицы .TAB для просмотра. Столбец Path в Exel должен быть заполнен путем к .TAB файлу.
7. MenuCommand – запустит внутреннее меню команды любой из уже существующих кнопок / функций в MI Pro. Столбец Path в Exel должен быть заполнен номером команды меню MI Pro (вы можете найти их в Menu.DEF, который будет включен в каталог установки MapBasic)
Изображения и иконки
RibbonBuilder может использовать изображения и значки из 3 источников:
1. Файлы PNG, хранящиеся в папке «Image» в том же каталоге, что и MBX. Столбец Image в таблице Exel должна быть заполнен именем файла, включая его расширение. Например, «GPS.png». Изображения в идеале должны быть 32x32 пикселя, но изображения немного меньше или больше по размеру также допустимы. Примечание: одно и то же изображение используется независимо от размера самой кнопки (малый или большой), в будущих версиях инструмент сможет поддерживать изображения 16x16 и 32x32 пикселя для каждого размера каждой кнопки.
2. Стандартные значки MI Pro - это внутренние значки, используемые в MI Pro. Название файла нужного значка можно найти в MI_ICONS_X64.def, который поставляется с RibbonLib. Например, MI_IMG_MAP_SQLSELECT_32
3. Pack URI - это те же самые внутренние значки, что и выше, но заданные с помощью указания полного пути до места хранения файла значка. Они также могут быть найдены в файле MI_ICONS_X64.def. Например pack://application:,,,/MapInfo.StyleResources;component/Images/Mapping/sqlSelect_32x32.png
FAQ
1. Почему для RibbonBuilder существует 2 MBX? Что они делают?
RibbonBuilder64_Launcher.MBX - это инструмент, который должен быть добавлен в ToolsExtension ко всем пользователям MI Pro и установлен в режим автозагрузки AutoLoad. Как только он будет добавлен однажды, пользователю больше никогда не понадобится изменять его для любых будущих обновлений или обновлений этого или любых других связанных инструментов.
RibbonBuilder64_Launcher.MBX будет запускаться на машине пользователя и загружать самую последнюю версию RibbonBuilder MBX, например (RibbonBuilder64_v0.52.MBX). Версия, которая будет запускаться, устанавливается администратором в исходном коде запуска MBX. Запуск MBX никогда не блокируется, что означает, что администратор может свободно компилировать новые версии инструмента без необходимости просить всех пользователей закрыть инструмент для разблокировки файла или обновления пути инструмента в их ToolsExtension MI Pro.
2. В чем разница между кнопками Reload и Refresh на вкладке HOME?
Кнопка Reload просто перезагрузит инструмент RibbonBuilder и снова добавит все элементы в ленточный интерфейс MI Pro. Обычно это делается, если что-то пойдет не так, например, произойдет сбой работы инструмента или исчезнет какая-то кнопка. Кнопка Refresh обновит файлы конфигурации и перезагрузит RibbonBuilder. Ее следует использовать, когда вы добавили / изменили содержимое в файле Config.xlsx и хотите увидеть изменения в MI Pro.
3. В чем разница между добавлением инструмента на вкладку Tools и добавлением его на вкладку Buttonsв Config.xlsx?
Добавление MBX в качестве кнопки запускает MBX только, когда пользователь нажимает данную кнопку на ленте. Используйте это для инструментов, которые не добавляют свои собственные кнопки в интерфейс, например, простые инструменты которые запускаются немедленно и выполняют конкретную простую задачу.
Инструменты MBX, которые добавляют свои собственные элементы в ленту, должны быть добавлены на вкладку Tools в config.xlsx. Это означает, что RibbonBuilder будет запускать MBX при первом запуске, который загрузит ваш настроенный инструмент и все элементы ленты, которые он может иметь. Это лучше всего использовать для более сложных инструментов, которые вы обычно устанавливаете в AutoLoad в MI Pro.
4. Зачем использовать вкладку Tools в Config.xlsx, когда у меня уже есть зарегистрированные и установленные инструменты в AutoLoad в MIProToolExtension?
Разумеется, вы можете оставить и использовать свои инструменты такими, какими они есть, и не использовать вкладку Tools в файле config.xlsx. Цель этой функции – упростить централизованное администрирование инструментов / версий, используемых всеми пользователями MI Pro в вашей организации. Возьмем, например, команду из 30 пользователей MI Pro, использующих 15 инструментов. Каждый раз, с выпуском новой версии инструмента, каждый пользователь должен вручную изменить путь к файлу. Некоторые пользователи могут забыть это сделать, что выльется в реальную головную боль для администратора, которому придется ходить и вручную обновлять инструменты всех пользователей. Используя эту функцию RibbonBuilder, администратор может определить все инструменты, которые должны быть загружены на все экземпляры MI Pro, а затем легко обновлять пути, когда они меняются. Это гарантирует, что все пользователи всегда будут в курсе событий и не будут использовать разные / устаревшие версии инструментов. Это также упрощает установку новых экземпляров MI Pro, поскольку вы можете сразу просто загрузить RibbonBuilder, и он автоматически подгрузит все инструменты, используемые вашей организацией.
5. Могу ли я запретить всем пользователям обновлять / редактировать конфигурацию?
Да, удалите кнопки Refresh и Edit, а также подгруппу Config из Config.XLSX. Если администратор хочет обновить конфигурацию, он должен удалить Tab.tab, Groups.tab, Subgroups.tab, Buttons.tab и Tools.tab из каталога приложений, а затем запустить RibbonBuilder, который перестроит .tab-файлы на основе текущей конфигурации. Любой пользователь, конечно же, может сделать то же самое, поэтому для дополнительной предосторожности вы также можете сохранить файл конфигурации в труднодоступном месте,а также удостовериться, что файлы .tab, создаваемые инструментом (Tabs.tab, Groups.tab и т. д.), настроены только для чтения.
6. Могу ли я использовать разные конфигурации для разных пользователей / команд?
Только одна конфигурация может использоваться одновременно с MBX, но вы можете сохранить несколько конфигураций электронных таблиц, которые вы можно менять местами по мере необходимости. Не забудьте использовать инструмент Refresh на вкладке HOME.
Если вам нужно запустить несколько конфигураций для разных пользователей / команд, можно создать копию двух файлов MBX и Config.xlsx и сохранить их в новом месте. Далее настроить таблицу в соответствии с конкретным пользователем / командой. Затем каждый пользователь / команда должен загружать соответствующую версию RibbonBuilder.
7. За что отвечает значение LayerScale на вкладке кнопки Config.XSLX?
Мы все иногда по случайности можем открыть огромный набор данных, автоматически добавляющийся к текущей карте, которая в настоящий момент, например, отображается в очень маленьком масштабе и охватывает всю Россию, после чего MapInfo может зависнуть и вылететь, при этом все несохраненные изменения будут потеряны. Данная функция пытается избежать этой ситуации, предупреждая, что вы собираетесь загрузить набор данных в неправильном масштабе. Значение должно быть настроено на реалистичный просмотр для этого конкретного набора данных. Например, OS 50k Raster должен быть установлен на 50000. Предупреждение срабатывает, если пользователь пытается открыть этот слой в масштабе, превышающем масштаб данных более чем в два раза - в приведенном примере, в масштабе более 1: 100 000. Если карта не открыта, когда пользователь открывает слой, значение LayerScale будет использовано как масштаб новой карты при ее открытии.
8. Могу ли я добавить пользовательские функции к инструменту? Например, кнопка, запускающая внешний скрипт или открывающая определенный файл?
Да, исходный код предоставляется, чтобы вы могли писать свои собственные пользовательские функции в MapBasic. Вы можете изучить примеры пользовательских функций в runCustomCommandSub в исходном коде. Если это простая задача, то вы можете добавить ее здесь, но для более сложных задач лучше создать отдельный MBX и добавить ее как кнопку в config.xlsx.
9. Могу ли я добавлять элементы к базовым вкладкам / группам / подгруппам MI Pro?
Да, если они перечислены в электронной таблице config.xls, вы можете добавить их в базовый интерфейс. Например, на вкладке Tabs в электронной таблице вы можете увидеть стандартные вкладки инструментов MI Pro, что означает, что вы можете добавлять кнопки и т.д. на эти вкладки. Однако, если вы хотите добавьте кнопки в стандартную группу или подгруппу, их следует добавить на соответствующую вкладку в таблицу с правильным внутренним именем MI Pro, прежде чем вы сможете добавлять к ним элементы. (Эти внутренние имена перечислены в RibbonElements.def в RibbonLib).
10. Могу ли я добавить одну и ту же кнопку в несколько местоположений?
Да, см. пример файла config, в котором все кнопки / слои базовой карты отображаются не только в своей вкладке BASEMAPS, но также в выпадающем меню на вкладке DATASETS. Чтобы сделать это, просто дублируйте строку для кнопки в электронной таблице и измените параметры, чтобы она отображалась в другом месте.
Примечание: значение DisplayName может быть одинаковым для обеих кнопок, но значение Name должны быть уникальными, чтобы избежать конфликтов.
Решение наиболее частых проблем
• Инструмент не запускается
Удостоверьтесь, что у вас есть доступ на запись в каталог, где хранится RibbonBuilder64_Launcher.MBX. Инструменту необходимо создать некоторые .TAB-файлы в этом месте, поэтому произойдет сбой, если у вас нет доступа к записи в данном каталоге.
• Инструмент начинает загружаться, начинают появляться вкладки / кнопки, но затем все они исчезают.
Это говорит о том, что один из инструментов, которые RibbonBuilder пытался загрузить, недействителен или не открывается, из-за чего RibbonBuilder прекращает работу. Удостоверьтесь, что все пути к файлам на вкладке Tools электронной таблицы действительны, а MBX работает, если его открыть вручную.
• Мои значки отображаются неверно, даже если они правильные в электронной таблице.
В электронной таблице проверьте строку button/group/subgroup, следующую после строки с неправильным значком. Если следующая строка в таблице недействительна, т.е. элемент добавлен неправильно, его атрибуты иногда могут быть заимствованы из последней успешно добавленной кнопки.
Компиляция из исходного кода
RibbonBuilder создан на основе RibbonLib, который является частью mbLibrary Питера Хорсболла Мёллера, который вы можете найти здесь: https://github.com/PeterHorsbollMoller/mbLibrary
Вы должны загрузить и извлечь mbLibrary, а затем изменить исходный код RibbonBuilder, чтобы указать правильное расположение необходимых библиотек на вашем компьютере.
Вам необходимо будет обновить следующие пути:
• RibbonBuilder.mbp
• RibbonBuilder.mb