Бета-версия Studio 13

Добрый день всем,
Мы только что опубликовали версию CUBA Studio 13.0.BETA.

Наиболее заметные изменения в версии 13:

Переработка компоновки дизайнера экранов

Мы переработали компоновку дизайнера экранов, ставя перед собой следующие цели:

  • Эффективное использование пространства окна IDE;
  • Удобное переключение между исходным кодом XML дескриптора и панелью предварительного просмотра верстки;
  • Позволить опытным разработчикам использовать возможности дизайнера при просмотре и редактировании XML кода.

Были проделаны следующие изменения:

1. Панели дизайнера стали независимыми панелями IDE (tool window).

Панель Component Hierarchy - осталась в правом верхнем углу IDE, как и раньше.
Панель Component Palette - находится в правом нижнем углу IDE.
Панель Component Inspector - переместилась в левый нижний угол окна IDE и содержит вкладки Properties и Handlers.

Эти панели автоматически появляются, когда вы открываете дескриптор экрана в редакторе. Когда вы переключаетесь в редакторе на другой экран, содержимое панелей обновляется. Иногда, когда вы открываете другие панели IDE (такие как Gradle, Persistence и т.д.), панели дизайнера экранов скрываются, и потом их нужно будет переоткрыть, используя соответствующие кнопки на левой и правой кромках окна IDE.

Мы сохранили возможность отображения панели Component Inspector в правом нижнем углу для тех пользователей, кто предпочитает старую компоновку. Чтобы переместить эту панель на правую сторону окна, используйте кнопку “Move to Right Bottom”, расположенную в заголовке панели.

2. Панель предпросмотра верстки теперь разделяет пространство редактора с исходным кодом дескриптора экрана.

Вкладки “Text” и “Designer” ушли в прошлое. Справа, на верхней панели редактора дескриптора экрана теперь расположены четыре кнопки, переключающие режим отображения предпросмотра:

  • Editor only - редактор содержит только исходный код;
  • Editor and Preview - пространство редактора разделено пополам между исходным кодом и панелью предпросмотра;
  • Preview only - весь редактор занят панелью предпросмотра (как было раньше в дизайнере экранов);
  • Preview in Window - редактор содержит исходный код, а панель предпросмотра выделена в независимое окно, которое можно переместить на другой монитор.

3. Панели дизайнера активны и взаимодействуют с редактором XML кода.

Опытные разработчики, которые просматривают и редактируют верстку экранов путем прямого редактирования XML кода, теперь могут воспользоваться всеми возможностями быстрой генерации кода в дизайнере экранов:

  • Панели дизайнера следят за курсором в XML коде и выбирают соответствующий компонент, когда курсор переходит от одного тега к другому;
  • При выборе элемента в панели иерархии - курсор перемещается к соответствующему XML тегу в исходном коде;
  • Вы можете добавлять компоненты из палитры в панель иерархии, переупорядочивать компоненты и редактировать свойства компонентов в панели Component Inspector, когда в редакторе открыт исходный код. Все изменения немедленно применяются к исходному коду.

Дизайнер экранов - столбцы и действия таблиц добавлены в панель иерархии

Столбцы и действия компонентов-таблиц теперь отображаются как полноценные элементы в дереве панели Component Hierarchy.

Вместе с реализацией этого изменения мы смогли избавиться от нескольких модальных диалогов. Теперь вы можете просматривать и редактировать свойства столбцов и действий, а также их обработчики событий, прямо в панели Component Inspector.

Добавлять новые столбцы и действия в таблицу стало удобнее. Когда в дизайнере выбрана таблица, одна из её колонок или действий, то в панели Component Inspector отображается кнопка “+ Add”. Нажав её, можно добавить один или несколько столбцов или действий в таблицу.

Дизайнер экранов - диалоги-помощники создания компонентов

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

  • Контейнеры данных;
  • Компоненты-таблицы;
  • Столбец таблицы;
  • Действие таблицы;
  • Поле формы (FormField).

При добавлении одного из упомянутых компонентов в экран, появляется диалог, позволяющий сразу задать основные необходимые для функционирования компонента свойства. Например, при добавлении в экран компонента DataGrid, можно выбрать существующий или создать новый контейнер данных, указать id компонента и выбрать набор действий с кнопками, которые будут сразу добавлены к таблице.

Расширение мастера создания проекта

Расширен мастер создания CUBA проектов. Мы перегруппировали поля между шагами мастера и добавили возможность сразу задать следующие настройки проекта:

  • Префикс названия модулей;
  • Поддерживаемые языки программирования;
  • Локали;
  • Настройки главного хранилища данных.

Опции JVM и переменные среды для конфигурации запуска CUBA Application

К конфигурации запуска “CUBA Application” были добавлены две настройки: аргументы командной строки (command line arguments) и переменные среды (environment variables). Эти настройки применяются к процессу Tomcat, который выполняет CUBA приложение в режиме отладки. Например, указав аргументы командной строки, можно задать часовой пояс: “-Duser.timezone=Europe/London” или увеличить доступную память: “-Xmx1500m” для сервера приложения.

Поддержка Kotlin (CUBA 7.2)

Studio 13 полностью поддерживает язык программирования Kotlin. Вы можете выбрать Kotlin как язык программирования для проекта при его создании в мастере создания проекта. Все элементы CUBA проекта: сущности, экраны, сервисы - будут генерироваться на Kotlin. Визуальные дизайнеры Studio, автодополнения, фоновые проверки и мгновенное применение изменений кода к отладочному серверу - также поддерживают язык Kotlin.

Эта функция будет доступна для проектов, использующих CUBA 7.2 (скоро выйдет beta-версия).

Новый шаблон экрана входа в систему (CUBA 7.2)

Добавлен новый шаблон экрана входа в систему (login) с обновленными компоновкой и дизайном. Примеры, как новый экран входа выглядит, можно посмотреть здесь: https://github.com/cuba-platform/cuba/issues/2455

Чтобы добавить новый экран входа в ваш проект, выберите шаблон “Login screen with branding image” в мастере создания экранов New -> Screen.

Новый шаблон экрана входа в систему доступен для проектов, использующих CUBA 7.2 (скоро выйдет beta-версия).

Бета-тестирование

Сейчас мы находимся в процессе тестирования новой версии Studio.
Мы будем очень благодарны, если вы попробуете beta-версию в вашей среде разработки и на вашем проекте и дадите нам знать, если возникнут какие-нибудь проблемы.

Версия 13.0.BETA была опубликована в отдельном канале плагинов в репозитории JetBrains.
Чтобы установить beta-версию, вам нужно проделать следующие действия:

  • Открыть диалог IDEA Settings -> Plugins
  • Нажать иконку :gear: и выбрать Manage Plugin Repositories.
  • Нажать “+” чтобы добавить строку
  • Ввести следующий Repository URL:
    https://plugins.jetbrains.com/plugins/beta/list
  • Переключиться на вкладку Marketplace. Вы должны сразу увидеть, что плагин CUBA предлагается к обновлению на версию 13.0.BETA.
  • Нажмите Update.

Если/когда вам потребуется вернуться назад на стабильную версию плагина, проделайте следующее:

  • Открыть диалог IDEA Settings -> Plugins
  • Выполните Uninstall для плагина CUBA
  • Нажать иконку :gear: выбрать Manage Plugin Repositories.
  • Удалите “beta” репозиторий из списка
  • Установите плагин CUBA снова, он скачается из стабильного канала обновлений

Мы ждем ваших отзывов!

4 симпатии

Эх… потестил бы, еслиб лицензия была :frowning:

Многие улучшения, например “Опции JVM и переменные среды для конфигурации запуска CUBA Application”, доступны для использования и без лицензии.

Дизайнер экранов становится просто шикарным :slight_smile:

Из проблем на боевом проекте пока заметил какую-то проблему с дизайнером экранов при работе со старыми экранами, использующими PopupButton.
Валит ошибку при открытии: “Exception during Screen Designer activation. See log for details
PopupButton has actions defined or some component already added”.
А в дизайнере настает каша: в Component Hierarchy выделяю один элемент, а в разметке выделяется совсем не соответствующий.
image

Нашлись подробности в логе...

java.lang.UnsupportedOperationException: PopupButton has actions defined or some component already added
at com.haulmont.studio.ui.sd.layout.gui.impl.InternalPopup.check(InternalPopup.java:74)
at com.haulmont.studio.ui.sd.layout.gui.impl.InternalPopup.addComponent(InternalPopup.java:45)
at com.haulmont.studio.ui.sd.layout.gui.impl.PopupButton.addComponent(PopupButton.java:209)
at com.haulmont.studio.intellij.ui.sd.designer.ComponentModelMapper.updateComponentFromModel(ComponentModelMapper.java:569)
at com.haulmont.studio.intellij.ui.sd.designer.ComponentModelMapper.updateComponentFromModel(ComponentModelMapper.java:584)
at com.haulmont.studio.intellij.ui.sd.designer.ComponentModelMapper.updateComponentFromModel(ComponentModelMapper.java:584)
at com.haulmont.studio.intellij.ui.sd.designer.ComponentModelMapper.updateComponentFromModel(ComponentModelMapper.java:584)
at com.haulmont.studio.intellij.ui.sd.designer.ComponentModelMapper.updateComponentFromModel(ComponentModelMapper.java:584)
at com.haulmont.studio.intellij.ui.sd.designer.ComponentModelMapper.updateComponentFromModel(ComponentModelMapper.java:584)
at com.haulmont.studio.intellij.ui.sd.designer.ScreenLayoutDesigner.lambda$null$1(ScreenLayoutDesigner.java:169)
at com.haulmont.studio.ui.util.UiWrapper.lambda$runComponent$0(UiWrapper.java:17)
at com.haulmont.studio.ui.util.UiWrapper.lambda$compute$2(UiWrapper.java:48)
at com.vaadin.ui.UI.accessSynchronously(UI.java:1392)
at com.haulmont.studio.ui.util.UiWrapper.compute(UiWrapper.java:46)
at com.haulmont.studio.ui.util.UiWrapper.computeComponent(UiWrapper.java:30)
at com.haulmont.studio.ui.util.UiWrapper.runComponent(UiWrapper.java:16)
at com.haulmont.studio.intellij.ui.sd.designer.ScreenLayoutDesigner.lambda$updateComponentFromModel$2(ScreenLayoutDesigner.java:168)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:309)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:441)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:424)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:407)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:908)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:781)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:424)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:423)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Воспроизвел проблему и завел тикет, спасибо.

1 симпатия

Studio 13.0.BETA2-191
При попытке в Studio в в окне Project properies указать версию артефактов с более чем 1 точкой выдает ошибку - “Версия артефактов может содержать только цифры и точки”.
У нас версия артефактов может выглядеть так 1.2.12.1.
На Studio 12 с длинной версий артефактов проблем нет.

Спасибо за сообщение.
Завел тикет, поправим.

1 симпатия

Добрый день всем,
Мы только что выпустили версию CUBA Studio 13.0.BETA3.

Она содержит исправления ошибок и дополнительные изменения для поддержки CUBA 7.2.
Если у вас в IDE сконфигурирован beta-канал плагинов, вы автоматически получите уведомление о вышедшем обновлении.

1 симпатия

На BETA3 с PopupButton проблема решилась.
Но теперь конструктор экранов валится на экранах, где в таблице на колонке задается режим открытия ссылки:

...
<column id="name"
link="true"
linkScreenOpenType="DIALOG"/>
...

Exception during Screen Designer activation. See log for details.
com.haulmont.studio.ui.sd.layout.gui.impl.TableColumn.setLinkScreenOpenType(java.lang.String)

Спасибо, воспроизвел баг. Исправим к релизу:
https://youtrack.cuba-platform.com/issue/STUDIO-7892

1 симпатия

Попробовал настроить следующим образом
image
ZoneId.systemDefault().toString() по-прежнему возвращает Europe/Moscow

Версия студии - 14.0

Что делаю не так?

-Duser.timezone - это не переменная среды. Это аргумент командной строки.

1 симпатия