Пока я в тайне от человечества пишу мега-проект Core - что-то вроде фреймворка для корела - иногда хочется иметь кусочки егойного функционала, чтобы сунуть в какой-нибудь проектик. Внутри Core всё высокосвязное, поэтому так просто не оторвёшь. Поэтому начал вытаскивать для себя переделанные кусочки с пониженной социальной ответственностью связанностью. Пусть лежит и на гитхабе, тем более давно хотелось похвастаться перед тов. Katachi.
Это классы. Ну, кроме главного модуля LibCore. Некоторые из них всё ещё идут с отдельным интерфейсом (традиционно с буковкой I в начале), однако я от этого отхожу в сторону того, чтобы класс сам был себе интерфейсом. Конструкторы (см. ниже) прячем за Friend, чтобы они не имплементились, если нам захочется заимплементить класс как интерфейс.
Игногда классам требуется что-нибудь из соседней папки. Также, многим требуется референс к Microsoft Scripting Runtime, для Dictionary, об этом я даже в описаниях указывать не буду, потому что словарь - полезная штука, добавляйте в проект по умолчанию, тем более что Scripting Runtime идёт с кореловским VBA в комплекте, то есть у пользователя оно точно будет.
Большая часть классов инициализируются не через ключевое слово new, а через встроенный конструктор. Эту тему я взял на вооружение у тов. Мэтью Гиндона. Такие классы являются predeclared, имеют конструктор New_, который возвращает копию этого инициализированного класса (через отдельный интерфейс или дефолтный, то есть просто сам себя).
Например, List вызывается так:
Dim MyList as IList
Set MyList = List.New_То есть мы вызываем метод New_ класса List, который возвращает нам свой новый экземпляр с интерфейсом IList.
Ну, пойдём по порядку.
В некоторых папках есть подробное описание.
- _templates - шаблоны модулей для быстрого старта.
- Composer - простой укладчик шейпов или шейпренджей.
- CsvTools - парсинг CSV-файлов, в том числе под интерфейсом
TableFile(см. ниже). - Either - конструкция для работы с методами, которые могут выполняться с предусмотренной ошибкой.
- FileBrowser - браузер файлов, standalone, так сказать.
- FileSpec - хранит имя файла и путь к нему.
- InputData - получение исходного пользовательского выбора.
- LibCore - основной модуль с большим набором всяких функций - от полезных до легаси мусора.
- List - обёртка для коллекции, добавляющая функционал.
- Loggers - форма логгера чего-нибудь, типа ошибок - два варианта.
- MarksSetter - установщик меток реза, используется в
MotifTools. - MotifTools - продвинутый укладчик изделий (мотивов) на лист с совмещением оборота, метками и прочими прибамбасами, основан на
Composer'е и является его логическим развитием. - Point - хранит две координаты точки.
- Json - сохранение настроек в json-файле, с управлением пресетами и шаблоном формы.
- ProgressBar - как ни странно.
- RecordList - коллекция словарей с поиском по всем полям.
- RecordListToTableBinder - класс для привязки
RecordListа кTableFile. - StringLocalizer - относительно простой механизм локализации.
- TableFile - универсальный интерфейс для двумерного массива, читай - табличных данных.
- Third-party - чужой код, необходимый для работы некоторых модулей.
- ViewHandlers - инструменты для контроля разных полей на форме.
Довольно простенький. Может вызвать окошко "открыть" ("сохранить" пока не допилил), поддерживает мультивыбор, возвращает коллекцию строк (имён файлов). Изначальный код откуда-то из интернетов, авторство мне не известно.
Хранит имя файла. Можно распарсить полное имя, задать/получить путь, имя, расширение.
Обёртка для коллекции, добавляющая функционал. Можно изменять элементы (Let/Set), Appendить другие листы и коллекции, запрашивать наличие элемента, получать копию себя.
Требует EnumHelper.
Форма логгера чего-нибудь, типа ошибок. Умеет хранить ссылки на объекты корела и по кнопочке их выделять (если шейпы) или открывать (документ, страница).
Очень простецкая, наговнокодил на коленке, давно и неправда. Без конструктора и интерфейса, вызывается через new. Добавляем элементы через Add, запрашиваем проверку через Check - если что-то было добавлено, то форма покажется.
Просто хранит две координаты точки. Может вращать себя вокруг другой точки.
Относительно простая база данных. По сути, коллекция словарей с поиском по всем полям.
Требует List и EnumHelper.
Класс для привязки RecordListа к TableFile. Cначала создаёте TableFile, потом скармливаете биндеру - на выходе получаете заполненный из таблицы RecordList. Все изменения в нём (если не открыли рид-онли) сохраняются в TableFile по завершении жизни класса.
Инициализируется билдером, это тот же New_, только с вынесенными в пропертис параметрами, как задали параметры - инициализируем через Build. Можно задавать MandatoryKey - обязательные ключи (в таблице ключ - это колонка), если в таблице под этим ключом пустое поле, то в RecordList эта запись (строка таблицы) не попадёт. Также не попадёт запись с пустым полем под первичным ключом, если он задан. Ещё можно задать UnboundKey - это дополнительные ключи, которые не сохраняются в таблице.
Задумывалось как универсальный интерфейс для двумерного массива, читай - табличных данных. Под этот интерфейс я написал CsvFile для ковыряния csv, xls напрямую через Excel (получилась кака, при краше остаются висеть экселевские процессы), и ExcelConnection - а вот это получилось что надо, на нём и остановился. Даёт доступ к экселевскому файлу через ADODB. Позволяет менять данные даже в открытом параллельно в экселе файле, прямо на глазах изумлённой публики.
Можно открывать xls и xlsx. По завершении жизни класса все изменения сохраняются в таблицу (если не открыли рид-онли).
Требует FileSpec.
Тут чужой код, без которого ничего работать не будет. Ну, кое-что будет, ок. Щас там EnumHelper - полезный хелпер, позволяющий провайдить энумератор через интерфейс (так оно в 64-битном VBA не работает). Взял отсюда, почитайте там, если ничего не поняли. У тов. Кристиана Буза ещё много всякого интересного.
Да какая, к чёрту, русскому лицензия. Но если у вас взорвётся утюг - я тут нипричём.