Меню Рубрики

Windows bundle develnext примеры работы

Как собрать пакет расширений для DevelNext

Опубликовано 23/10/2016 · Обновлено 10/12/2016

В DevelNext есть возможность создавать пользовательские пакеты расширений, правда создание таких пакетов у некоторых пользователей создаёт трудности .

Для удобства создания пакетов я написал небольшую утилиту:

Скачать «createBundle.zip» Загрузок: 573 array(63) < [0]=>string(6) «exists» [1]=> string(6) «get_id» [2]=> string(6) «set_id» [3]=> string(9) «get_title» [4]=> string(9) «set_title» [5]=> string(9) «the_title» [6]=> string(8) «get_slug» [7]=> string(8) «set_slug» [8]=> string(10) «get_status» [9]=> string(10) «set_status» [10]=> string(10) «get_author» [11]=> string(10) «set_author» [12]=> string(14) «get_the_author» [13]=> string(10) «the_author» [14]=> string(15) «get_description» [15]=> string(15) «set_description» [16]=> string(11) «get_excerpt» [17]=> string(11) «the_excerpt» [18]=> string(11) «set_excerpt» [19]=> string(16) «is_redirect_only» [20]=> string(17) «set_redirect_only» [21]=> string(11) «is_featured» [22]=> string(12) «set_featured» [23]=> string(15) «is_members_only» [24]=> string(16) «set_members_only» [25]=> string(18) «get_download_count» [26]=> string(18) «set_download_count» [27]=> string(9) «get_image» [28]=> string(9) «the_image» [29]=> string(17) «the_download_link» [30]=> string(21) «get_the_download_link» [31]=> string(11) «has_version» [32]=> string(11) «get_version» [33]=> string(11) «set_version» [34]=> string(27) «get_version_id_version_name» [35]=> string(14) «version_exists» [36]=> string(15) «get_version_ids» [37]=> string(12) «get_versions» [38]=> string(8) «get_post» [39]=> string(8) «set_post» [40]=> string(25) «get_the_short_description» [41]=> string(21) «the_short_description» [42]=> string(13) «redirect_only» [43]=> string(13) «get_the_title» [44]=> string(13) «get_the_image» [45]=> string(18) «the_download_count» [46]=> string(22) «get_the_download_count» [47]=> string(17) «get_file_versions» [48]=> string(20) «get_file_version_ids» [49]=> string(14) «get_version_id» [50]=> string(16) «get_file_version» [51]=> string(22) «get_the_version_number» [52]=> string(18) «the_version_number» [53]=> string(18) «has_version_number» [54]=> string(16) «get_the_filename» [55]=> string(12) «the_filename» [56]=> string(17) «get_the_file_date» [57]=> string(16) «get_the_filesize» [58]=> string(12) «the_filesize» [59]=> string(12) «get_the_hash» [60]=> string(8) «the_hash» [61]=> string(16) «get_the_filetype» [62]=> string(12) «the_filetype» > > —>

Для начала создадим тестовый пакет (или же можно открыть ранее сохраненный пакет)

Нажмем сохранить, выберем папку для сохранения, там утилита создаст директорию вида dn-название-bundle, переименовывать её не следует!

В разделе DevelNext отображены классы и файлы, которые позволяют взаимодействовать со средой, они не попадут в собранную программу, их можно оставить без изменений. В Vendor – файлы/классы собственно нашего расширения, которые будут использованы в программе.

Добавлю в тестовое расширение какой-нибудь функционал

Сборка расширения
Собрать можно нажав на кнопку “Запустить сборку” либо из командной строки, запустив gradlew (gradlew.bat для windows) с параметром bundle.

После успешной сборки расширение окажется в папке build

Тест расширения
После подключения пакета в DevelNext он начнёт отображаться в списке пакетов, а в коде появятся соответствующие подсказки

Создам тестовый проект с новым расширением – и всё работает

Источник

Введение в DevelNext

Опубликовано 17/10/2017 · Обновлено 28/01/2019

Начиная работу со студией DevelNext, могут возникнуть трудности, с чего начать, чтоб реализовать хотя бы простейший функционал. Я не буду касаться основ PHP, у пользователя должны быть хотя бы базовые знания ООП, т.к. программирование в DN полностью основано на объектах .

К сожалению, с документацией всё очень печально, она разбросана на нескольких ресурсах, и многие аспекты не описаны. Собрал нужные ссылки:

Навигация по статье

В DN поддерживается синтаксис PHP 5.6, плюс некоторые фичи из PHP 7 (ожидается полная поддержка PHP 7). Интерпретатор JPHP написан на языке Java, есть возможность скомпилировать исходники в байт код Java Virtual Machine (защита от декомпиляции). Графическая платформа – JavaFX.

Компиляция в байт-код

С одной стороны, Java позволит писать кроссплатформенные, высокопроизводительные приложения, плюс есть возможность подключить готовые пакеты Java с богатой функциональностью (нужно собрать их в пакет расширений), но с другой – зависимость от Java (если не установлена JVM на ПК клиента, необходимо тащить её с собой, а это более 100 мб), “прожорливость” готовых программ (простейшее hello world может потребовать десятки-сотни мб ОЗУ), относительно длительный запуск программы (нужно время для старта JVM).

Особенности JPHP

К сожалению, интерпретатор не лишён багов и не редко возникает ошибка JVM – NullPointerException, что может быть из-за ошибки как в JPHP, так и в исходном коде PHP.

Синтаксические особенности. В отличии от оригинального php, такой синтаксис является валидным:

Описание событий в комментариях. На мой взгляд, довольно красивое решение. События объектов привязываются к функциям комментарием @event.

Событие действие (action) для кнопки с id button будет выглядеть таким образом:

События можно комбинировать, правда парсер не сработает и не отобразит события в левой колонке, вот например события действие + клик левой кнопкой мыши:

Несмотря на то, что в левом столбце отображается одно событие, сработают оба, т.к. прописаны необходимые комментарии

Событие действие включает в себя нажатие мышью, а при фокусе на кнопке –
нажатие пробела.

Пространства имён. Про пространства имён я писал ранее, всё как в оригинальном php, особенность лишь в операторе use. Есть разные режимы его работы:

В первом случае use работает как в оригинальном php – импортирует имя класса:

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

Редактор в DN автоматически подставляет необходимые use, что довольно удобно. При копировании-вставке кода редактор предложит прописать нужные use:

Функции. JPHP поддерживает большое количество стандартных PHP функций таких как file_get_contents, strlen, array_merge и т.д. Проверить, поддерживается ли функция, можно с помощью function_exists:

Для поддержки curl_* функций есть пакет jURL, для preg_ – Preg. Если в подсказках появляется имя необходимой функции, то она точно поддерживается средой.

Отладка кода. Каких-либо специальных функций для отладки нет, только класс Logger. Весь stdout поток отображается в консоли. Есть функции pre, alert, которые отображают информацию в всплывающем окне, но это не так практично, как var_dump, т.к. если объем информации большой, он обрежется под размеры окна.

Примеры сообщений из Logger

Редактор

Редактор с каждой версией среды всё лучше и лучше, но всё равно с багами… Если проект большой, готовьтесь к тормозам. Но тем не менее, редактор с системой подсказок и автодополнением значительно помогает при написании кода. Если код содержит комментарии формата phpdoc, редактор распарсит их и будет отображать соответствующие подсказки.

Допустим, что в списке listView содержатся текстовые объекты UXLabel, и чтоб редактор отображал корректные подсказки, добавим соответствующий комментарий.

Итак, с чего начать

Создав новый проект. перед нами предстаёт пустая форма MainForm и пара пустых модулей – MainModule, AppModule.

Формы и графические объекты

Каждой статически созданной форме в DevelNext соответствует отдельный класс. Новый проект содержит пустую форму и соответствующий ей одноименный класс – MainForm.

Здесь, как и в классическом php, есть поддержка “магических” методов. Метод __construct будет вызван при старте приложения, но в данный момент форма ещё не существует и обращение к графическим элементам невозможно, для этого лучше использовать событие Появление (show). Последовательность, в которой вызываются события: __construct -> создание формы -> Перед появлением (showing) -> появление формы, отрисовка графики -> Появление (show)

Все графические объекты изначально обладают стандартным набором свойств и методов. Свойства самой формы можно просмотреть введя в редакторе $this->

В подсказках – все свойства и методы текущей формы

Кнопки, формы и прочие графические объекты являются свойствами текущего класса, обратиться к этим объектам и их свойствам можно так: $this->id_объекта->свойство
Чтоб просмотреть, как именуется то или иное свойство, можно выделить объект и навести мышь на нужное поле или ввести в редакторе $this->id_объекта-> для отображения подсказок.

Свойство текст именуется как ->text

Подсказки для объекта edit

Обращение к графическои объектам возможно только из главного (графического) потока.
Если вы используете функции для работы с потоками (Thread), чтоб вернуться к графическому потоку, есть функции uiLater и uiLaterAndWait

Есть небольшой баг с размерами формы, если форма открывается и закрывается несколько раз,
её размеры почему-то меняются, чтоб вернуть исходные размеры, создайте событие “закрытие формы” и поместите туда код $this->free();

Есть событие формы – перед появлением (showing). Если из этого события открывать другую форму, закрывать текущую или менять размеры текущей формы, это может либо вызвать ошибку, либо визуально никаких изменений не произойдёт. Чтоб это исправить – нужна задержка в пару мс:

Выбрать главную форму можно в настройках проекта. Если главной формы нет, будет выполнен только тот код, который расположен в модуле “Загрузчик” (об этом ниже).

Выбор главной формы – она будет отображена при запуске проекта

Система модулей

В каждом проекте по умолчанию присутствует модуль Загрузчик (AppModule), даже если его удалить, он будет заново создан при открытии проекта . Судя по названию, этот модуль запускается сразу после старта проекта. Если в настройках не выбрана главная форма, будет выполнен только код из загрузчика. У модуля Загрузчик есть два события – Подключение и Загрузка модуля, практической разницы между этими событиями я не заметил. Если нужно создать приложение без графики (как например это), код необходимо поместить в одно из этих событий.

Другие же модули могут быть созданы самим пользователем. Модули удобны тем, что в них можно вынести отдельную функциональность, например, модуль для базы данных, модуль с выбором папок/файлов и т.д. Получится, что в классе формы будет расположен код, отвечающий за графику этой формы, а каждая функциональность в своём модуле, т.е. не будет мешанины, всё станет на свои полки.

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

Обратиться к объектам модуля можно так же через $this->…

Обращение к объектам модуля

Любой модуль (кроме загрузчика) можно подключить к любой форме

Подключение модуля к форме

1. Создаём форму, на неё помещаем поле для ввода и кнопку. Подключаем модуль к форме.

2. На модуль помещаем диалог для файлов. В настройках диалога выбираем объекты формы – кнопку и поле для ввода.

3. Получается, что мы связали диалог выбора и графические объекты, не написав при этом ни строки кода

При подключении модуля, форме становятся доступны методы модуля. Если поместить в модуль такой код:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Windows build как узнать
  • Windows build qt static
  • Windows bsod critical process died
  • Windows brute force router
  • Windows bridge как пользоваться