Page 1 of 1

Loader

PostPosted: 18 Apr 2016, 12:01
by ArtMares
Версия
0.1

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

Как уже было продемонтрированно ранее в группе в ВК есть видео демонстрации работы аддона.
При старте приложения он отображает QFrame с прозрачным фоном и прогресс загрузки компанентов. Вся загрузка происходит в фоновом режиме для которого используется поток.

При инициализации Загрузчик получает данные из файла конфигурации Loader.json, который находится в дочерней директории приложения или ресурсах. Указание дочерней директории обязательно, так как в дальнейшем при разработке будет меньше путаницы где что лежит. И все конфигурационные файлы можно будет хранить в одном месте.

Содержание конфигурацинного файла:
Code:
[
    {
        "name"      : "Имя которое будет отображаться при выполнении загрузки",
        "class"     : "ClassName",
        "path"      : "Путь к файлу от корневой директории приложения или ресурсов",
        "init"      : true or false - Параметр, который отвечает за инициализацию компанента при загрузке,
        "resource"  : true or false - Параметр, который отчевает за загрузку копанента из русерсов или нет
    }
]
Пример конфигурационного файла:
Code:
[
    {
        "name"      : "UI Elements",
        "class"     : "MyToolBtn",
        "path"      : "ui/",
        "init"      : false,
        "resource:  : true
    },
    {
        "name"      : "Controllers",
        "class"     : "MainController",
        "path"      : "Controllers/",
        "init"      : true,
        "resource"  : false
    }
]
Параметр "name" - Имя которое будет отображается над прогресс баром загрузки
Параметр "class" - Название класса, должно полностью совпадать с названием файла который необходимо подключить
Параметр "path" - Относительный путь к файлу от корневой директории приложения или ресурсов. Обязательно на конце должен быть слешь
Параметр "init" - Отвечает за инициализацию класса при загрузке
Параметр "resource" - Отвечает за загрузку компанента из ресурсов приложения

Пути к файлам из примера:
Если параметр "resource" установлен в true то компонент будет загружен из ресурсов приложения
/res/ui/MyToolBtn.php

В противном случаем из директории приложения
%APP_PATH%/Controllers/MainController.php

Зависимости
Для корректной радоты необходимы подключенные адд-оны Storage и Style
Так же необходимо расширение для движка PQEngineFS

Использование
Так как адд-он работает в фоновом режиме его необходимо объявлять как свойство объекта
Code:
class MainWindow extends QWidget {
    /** Загрузчик */
    private $loader;
    public function __construct() {
        parent::__construct();
        /** Инициализируем Загрузчик */
        $this->loader = new Loader('system', false, R('Welcome.png'), 512, 512);
        /** Соединяем сигнал Загрузчика о завершении загрузки с публичным методом */
        $this->loader->connect(SIGNAL('completed()'), $this, SLOT('show()'));
        /** Запускаем Загрузчик компанентов */
        $this->loader->start();
    }
}
В противном случае GarbageCollector PHP просто убъет Загрузчик.

Все компаненты у которых параметр "init" установлен в true будут инициализированы и переданы в Storage как свойства c названием из параметра "class"
В дальнейшем получить эти классы можно так $controller = $this->storage->ClassName
Все классы которые были не инициализированны при загрузке можно инициализировать в любой момент
стандартным объявлением класса $class = new ClassName();

Внимание!
Необходимо обратить внимание на то что последовательность загрузки компанентов описанная в файле очень важна.
Лучще всего все компаненты у которых параметр "init" утановлен в false уставить первыми в списке.
Если компанент использует загружаемый компанент то он должен находится после загрузки используемого компанента.
В противном случаем вы увидите что загрузка остановилась и ничего не происходит


Аргументы передаваемые классу
Code:
/**
 * Loader constructor.
 * @param string $path - Дочерняя диреткория приложения в которой расположен файл Loader.json
 * @param bool $resource - Параметр отвечает за нахождение файла конфигурации в ресурсах или нет
 * @param string $image - Путь к изображению для фоновой завтавки
 * @param int $imageWidth - Ширина фонового изображения
 * @param int $imageHeight - Высота фонового изображения
 */
При инициализации Загрузчика можно передать путь к фоновому изображению, которое будет отображаться вместе с прогресс баром загрузки.
За фоновое изображение отвечают аргументы $image, $imageWidth и $imageHeight.

Если ширина фонового изображения меньше 400px то ширина окна Загрузчика будет равна 400, в противном случаем ширине изображения.

Если вы хотите чтобы отображаемые надписи при загрузке были локализованы на язык приложения то необходимо добавить в файл локализации две секции <unit> и задать язык локализации перед инициализацией Загрузчика
Code:
<unit>
    <source>Loading components</source>
    <tr>%Ваш перевод%</tr>
</unit>
<unit>
    <source>Loading component</source>
    <tr>%Ваш перевод%</tr>
</unit>
Так как Загрузчик использует адд-он Style, то можно задать собственный стиль для элементов. Для этого необходимо инициализировать адд-он Style перед тем как будет инициализирован Загрузчик. Так же в теме оформления должен находится файл Loader.qss
Если данного файла нет то будет применен стиль прописанный в самом загрузчике
Code:
QLabel {
    color: #323232;
    font-size: 12px;
}
QLabel#Message {
    padding-left: 5px;
    background: #cfcfcf;
    border-top-left-radius: 6px;
    border-top-right-radius: 6px;
}
QProgressBar {
    background: #cfcfcf;
    height: 10px;
    border-bottom-left-radius: 6px;
    border-bottom-right-radius: 6px;
}
QProgressBar::chunk {
    background-color: #276ccc;
    border-bottom-left-radius: 6px;
    border-bottom-right-radius: 6px;
}
Архив
Loader_0.1.7z
Архив необходимо скачать и распаковать в директорию addons установленной программы PQBuilder
Пример пути куда необходимо распаковывать архив:
C:\Program FIles (x86)\PQBuilder\addons