1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//build: 20240314
//Button group control
import utils from "./uiUtils.js"
import base from "./uiBase.js"
let buttons = {}
 
buttons.build = function (id, parent) {
    let temp = utils.validateBuild(buttons.all, id, parent, 'buttons')
    let my = {type: 'buttons'}
    my.obj = new utils.GG.NativeBtnmatrix({ uid: id }, temp)
    my.id = id
    /**
     * Set the data for the button group, must be in array format. Example below shows 3 rows of buttons, 12 buttons in total:
     * ["1", "2", "3", "0", "\n",
     * "4", "5", "6", "Cancel", "\n",
     *  "7", "8", "9", "Confirm", ""]
     * @param {array} d Optional, if not provided or not an object type, it will get the data
     */
    my.data = function (d) {
        if (utils.validateObject(d)) {
            this.obj.lvBtnmatrixSetMap(d)
        } else {
            return this.obj.lvBtnmatrixGetMap()
        }
    }
    /**
     * Call clickedButton to get the id and text of the clicked button when any button in the button group is clicked
     * Return example: {id:11,text:'Cancel'}
     */
    my.clickedButton = function () {
        let id = this.obj.lvBtnmatrixGetSelectedBtn();
        if (id == 0xFFFF) {
            // Clicking on the button group boundary will result in 0xFFFF invalid value, return empty
            return { id: null, text: null }
        }
        let txt = this.obj.lvBtnmatrixGetBtnText(id);
        return { id: id, text: txt }
    }
    /**
     * Set the state of a specific button in the button group, can be changed to selected, disabled, etc.
     * @param {number} id Button index, starting from 0 from left to right, top to bottom, also the id returned by clickedButton
     * @param {number} state Refer to dxui.Utils.BUTTONS_STATE
     */
    my.setState = function (id, state) {
        this.obj.lvBtnmatrixSetBtnCtrl(id, state)
    }
    /**
     * Clear the already set state of a specific button in the button group
     * @param {number} id Button index, starting from 0 from left to right, top to bottom, also the id returned by clickedButton
     * @param {number} state Refer to dxui.Utils.BUTTONS_STATE
     */
    my.clearState = function (id, state) {
        this.obj.lvBtnmatrixClearBtnCtrl(id, state)
    }
    /**
     * Set the state of all buttons in the button group, can be changed to selected, disabled, etc.
     * @param {number} state Refer to dxui.Utils.BUTTONS_STATE
     */
    my.setAllState = function (state) {
        this.obj.lvBtnmatrixSetBtnCtrlAll(state)
    }
    /**
     * Clear the already set state of all buttons in the button group
     * @param {number} state Refer to dxui.Utils.BUTTONS_STATE
     */
    my.clearAllState = function (state) {
        this.obj.lvBtnmatrixClearBtnCtrlAll(state)
    }
    /**
     * Set the button width to span multiple columns for a specific button id
     * @param {number} id Button index, starting from 0
     * @param {number} width Width span in number of columns
     */
    my.setBtnWidth = function (id, width) {
        this.obj.lvBtnmatrixSetBtnWidth(id, width)
    }
    /**
     * Set the button icon for a specific button id
     * @param {number} id Button index, starting from 0
     * @param {string} src Icon file path
     */
    my.setBtnIcon = function (id, src) {
        this.obj.addEventCb((e) => {
            // Get the draw control object
            let dsc = e.lvEventGetDrawPartDsc()
            // If drawing the id-th button
            if (dsc.type == utils.ENUM.LV_BTNMATRIX_DRAW_PART_BTN && dsc.id == id) {
                // Get image information
                let header = utils.GG.NativeDraw.lvImgDecoderGetInfo(src)
                // Define an area, center display, note: size to area needs -1, area to size needs +1
                let x1 = dsc.draw_area.x1 + (dsc.draw_area.x2 - dsc.draw_area.x1 + 1 - header.w) / 2;
                let y1 = dsc.draw_area.y1 + (dsc.draw_area.y2 - dsc.draw_area.y1 + 1 - header.h) / 2;
                let x2 = x1 + header.w - 1;
                let y2 = y1 + header.h - 1;
                let area = utils.GG.NativeArea.lvAreaSet(x1, y1, x2, y2)
                // Draw image information
                let img_draw_dsc = utils.GG.NativeDraw.lvDrawImgDscInit()
                // Draw image
                utils.GG.NativeDraw.lvDrawImg(dsc.dsc, img_draw_dsc, area, src)
            }
        }, utils.ENUM.LV_EVENT_DRAW_PART_END)
    }
    let comp = Object.assign(my, base);
    utils.setParent(this.all,comp,parent)
    return comp;
}
export default buttons;