Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chopins/php-libui
php bindings to the libui C library.
https://github.com/chopins/php-libui
ffi gui libui php ui
Last synced: 11 days ago
JSON representation
php bindings to the libui C library.
- Host: GitHub
- URL: https://github.com/chopins/php-libui
- Owner: chopins
- License: other
- Created: 2019-09-12T11:46:40.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-06-11T01:22:49.000Z (7 months ago)
- Last Synced: 2024-07-28T10:04:07.358Z (5 months ago)
- Topics: ffi, gui, libui, php, ui
- Language: PHP
- Homepage:
- Size: 568 KB
- Stars: 71
- Watchers: 6
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# [中文说明](README_zh.md)
# php-libui
PHP bindings to the [libui](https://github.com/andlabs/libui) C library.libui is a lightweight, portable GUI library that uses the native GUI technologies of each platform it supports.
### Requirements
* PHP >= 8.1
* PHP FFI extension available
* libui latest version### A Simple Example
see https://github.com/chopins/http-requestfirst download libui dynamic library from https://github.com/andlabs/libui/releases or checkout source for self-build, then load in php code use following code
```php
include '/src/UI.php';
$ui = new \UI\UI('/usr/lib64/libui.so'); //load libui dynamic library
$ui->init();
$mainwin = $ui->newWindow("libui Control Gallery", 640, 480,1);
$ui->controlShow($mainwin);
$ui->main();
```## Note: When Call libui C function need remove `ui` prefix of name, then to lower case first char
# Use UIBuild create UI
## Basic Usage:
```php
include '/src/UI.php';
$ui = new \UI\UI('/usr/lib64/libui.so');
$config = ['title' => 'test', 'width' => 600,'height' => 450];
$build = $ui->build($config);
$build->show();
```## build config structure
* build config is xml file, see `tests/uibuild.xml`
* **In xml file, all event attribute name must be prefix `on`**, `onclick`,`onchange`,`ondraw`, value is callable name, it is not Event instance, callable name support php variable and php callable:`$var`,`func_name`,`CLASS::method`, do not support array callable. variable is GLOBALS
* attr value support GLOBALS variable and constant, prefix `$``@` as `$var` or `@CONST`
* also build config support array, main key contain `body`,`menu` and *window attribute key*; in config array, element key is attr name, element value is attr value,similar the following:
```php
[
'title' => 'window title name',
'width' => 600,
'menu' => [],
'body' => [
'name' => 'box'
'childs' => []
]
]
```
```xml
```
## window attribute key list:
| attr | type | Description | Default Vlaue |
| ---------- | --------- | --------------- | ------------- |
| title | string | window title | No Win Title |
| width | int | window width | 800 |
| height | int | window height | 640 |
| border | int | window border | 0 |
| margin | int | window margin | 0 |
| fullscreen | int | window margin | 0 |
| quit | \UI\Event | quit callback | null |
| close | \UI\Event | close callback | null |
| resize | \UI\Event | resize callback | null |## menu array
The array level 1 of item element is one menu, similar:
```php
[
[
'title' => 'File',
'id' => 'menu_id_1',
'childs' => [
['title' => 'New File'],
['title' => 'Open File'],
]
],
[
'title' => 'Edit',
'id' => 'menu_id_1',
'childs' => [
['title' => 'Undo'],
['title' => 'Copy'],
]
],
]
```
Top menu only contain `title`, `id`, `childs` , the `title` value will display in window, every element of `childs` array is submenu that display in drop-down menu. if element is string and equral `hr` will display a separator
__current Build UI Config of submenu only contain the following attr:__| attr | type | Description | require |
| ------ | --------- | ---------------------------------------------------------------------------------------- | ------- |
| title | string | menu title | yes |
| type | string | menu type, value is `text`,`quit`,`about`,`preferences` or `checkbox`, default is `text` | no |
| click | \UI\Event | click callback | no |
| childs | array | child menu list | no |## body array
every element key of `body` array is control config, `widget` element is control name and `attr` element is control attr. see `examples/table.php` __Build UI__ current only support the following control:1. `button`, Button control,contain the following attr:
| attr | type | Description | require |
| ------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| type | string | control type, smiliar HTML `` tag of `type` attr, potential value is following:
1. `file`, open file button
2. `save`, save file button
3. `font`, select font button
4. `color`, select color button
5. `button`, is default value | yes |
| title | string | button label name | yes |
| click | \UI\Event | when click callback, when type `file` and `save` is after select file call | no |
| change | \UI\Event | only when `color` and `font` available, select color or font be call | no |
| id | string | | no |2. `box` box layout,the following attr:
| attr | type | Description | require |
| --------- | ------ | ------------------------------------------------------------------------------------- | ------- |
| dir | string | layout direction, Specify one of `h` is horizontal and default value, `v` is vertical | yes |
| padded | int | padding value, default is `0` | no |
| child_fit | int | Whether to automatically adapt | no |
| childs | array | sub control list | no |
| id | string | | no |3. `group` group layout, have `title` and `margin`, `child`,`id` attr
4. `label` text control, only has `title` and `id` attr
5. `hr` horizontal separator, no attr
6. `vr` vertical separator, no attr
7. `input` input control, the following attr:| attr | type | Description | require |
| -------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| type | string | miliar HTML `` tag of `type` attr, specify one of the following value:
1. `password` password entry control
2. `search` search entry control
3. `textarea` multiline entry control
4. `radio` radio
5. `select` select
6. `checkbox` checkbox
7. `text`, is default value
8.`number` is Spinbox
9.`slider` | yes |
| readonly | bool | whether readonly | no |
| wrap | bool | only `textarea` is available, `false` is non wrapping textarea | no |
| option | array | `radio` and `select` available, element value is option title, key is natural order number | no |
| change | \UI\Event | exclude `checkbox` and `radio` | no |
| title | string | `checkbox` available | yes |
| click | \UI\Event | only `radio` and `checkbox` available | no |
| min | int | `number` and `slider` available | yes |
| max | int | `number` and `slider` available | yes |
| id | string | | no |
| editable | bool | `select` available | no |
8. `form` form layout, has `padded`, `childs`,`id` attr, child widget has label attr
9. `grid` grid layout, the following attr:| attr | type | Description | require |
| ------------- | ------ | ----------- | ------- |
| padded | int | | no |
| child_left | int | | no |
| child_top | int | | no |
| child_width | int | | no |
| child_height | int | | no |
| child_hexpand | int | | no |
| child_halign | int | | no |
| child_vexpand | int | | no |
| child_valign | int | | no |
| childs | array | | no |
| id | string | | no |
10. `table` table control, table cell has change event, it is following sub key :| attr | type | Description | require |
| ----- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| th | array | every element of value is array, key is id, has the following attr:
1. `editable`, `bool` type, the column is whether editable
2. `textColor`
3. `title`
4. `type`, specify value of `button`, `image`, `imgtext`, `progress`, `checkbox`, `checkboxtext`, `color`, `text`
5. widget has `change` attr, for row column change callback | yes |
| tbody | array | the table row value list, every element is one row value, when row of column is array has the following attr:
1. `image` type, has `src` `width` `height`
2. `color` type has `r`,`g`,`b`
3. `rowBgcolor` | yes |
| id | string | | no |11. `tab` tab control, has `page` sub array, `page` array every element value is page child control and key is page title
12. `img` image control, has flowing attr:| attr | type | Description | require |
| ------ | ------ | ---------------------------------------------------------------------------------------- | ------- |
| src | array | is image paths list, every element value is image file path, key is natural order number | yes |
| width | int | the image control width, default is `src` first element image width | no |
| height | int | the image control heigth, default is `src` first element image width | no |
| id | string | | no |13. `datetime` datetime control
| attr | type | description | require |
| ------ | --------- | --------------------------------------------- | ------- |
| type | string | specify one of value `time`,`date`,`datetime` | yes |
| change | \UI\Event | | no |
| id | string | | no |14. `progress`, has `id` attr
15. `area`,`canvas` create `Area`
16. `attribute` create `Attribute`
17. `drawtext` create `TextLayout`
18. `string` create a `AttributeString`
19. unsupport control must call libui C function by `UI\UI`
20. `UI\Event`, all event callback class, The signature of the callback is as follows:
```php
/**
* @param UI\Event $callable The object instance of current event
*
* */
function (UI\Event $callable) {}
```## Control common method:
* show()
* hide()
* enable()
* disable()
* destroy()
* parent()
* setParent($parent)
* isVisible()
* isEnabled()specify control see class statement in control directory
## UI method
see `UI.php`## UIBuild method
see `UIBuild.php`