GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: gx_tree_view_selected_set.c Lines: 25 25 100.0 %
Date: 2026-03-06 19:21:09 Branches: 12 12 100.0 %

Line Branch Exec Source
1
/***************************************************************************
2
 * Copyright (c) 2024 Microsoft Corporation
3
 * Copyright (c) 2026-present Eclipse ThreadX contributors
4
 *
5
 * This program and the accompanying materials are made available under the
6
 * terms of the MIT License which is available at
7
 * https://opensource.org/licenses/MIT.
8
 *
9
 * SPDX-License-Identifier: MIT
10
 **************************************************************************/
11
12
13
/**************************************************************************/
14
/**************************************************************************/
15
/**                                                                       */
16
/** GUIX Component                                                        */
17
/**                                                                       */
18
/**   Tree View Management (Tree View)                                    */
19
/**                                                                       */
20
/**************************************************************************/
21
22
#define GX_SOURCE_CODE
23
24
25
/* Include necessary system files.  */
26
27
#include "gx_api.h"
28
#include "gx_tree_view.h"
29
#include "gx_system.h"
30
#include "gx_widget.h"
31
32
/**************************************************************************/
33
/*                                                                        */
34
/*  FUNCTION                                               RELEASE        */
35
/*                                                                        */
36
/*    _gx_tree_view_selected_visible                      PORTABLE C      */
37
/*                                                           6.1          */
38
/*  AUTHOR                                                                */
39
/*                                                                        */
40
/*    Kenneth Maxwell, Microsoft Corporation                              */
41
/*                                                                        */
42
/*  DESCRIPTION                                                           */
43
/*                                                                        */
44
/*    Internal helper function to make selected item visible.             */
45
/*                                                                        */
46
/*  INPUT                                                                 */
47
/*                                                                        */
48
/*    tree                                  Pointer to the tree view      */
49
/*                                            control block               */
50
/*    selected                              New selected item             */
51
/*                                                                        */
52
/*  OUTPUT                                                                */
53
/*                                                                        */
54
/*    status                                Completion status             */
55
/*                                                                        */
56
/*  CALLS                                                                 */
57
/*                                                                        */
58
/*    _gx_tree_view_position                Reposition tree view childdren*/
59
/*                                                                        */
60
/*  CALLED BY                                                             */
61
/*                                                                        */
62
/*    _gx_tree_view_selected_set                                          */
63
/*                                                                        */
64
/**************************************************************************/
65
2
static UINT _gx_tree_view_selected_visible(GX_TREE_VIEW *tree)
66
{
67
GX_WIDGET    *parent;
68
2
GX_WIDGET    *selected = tree -> gx_tree_view_selected;
69
GX_MENU_LIST *list;
70
71
2
    parent = selected -> gx_widget_parent;
72
10
    while (parent != (GX_WIDGET *)tree)
73
    {
74
8
        if (parent -> gx_widget_type == GX_TYPE_MENU_LIST)
75
        {
76
4
            list = (GX_MENU_LIST *)parent;
77
4
            list -> gx_menu_list_owner -> gx_widget_style |= GX_STYLE_MENU_EXPANDED;
78
4
            parent = list -> gx_menu_list_owner;
79
        }
80
        else
81
        {
82
4
            parent = parent -> gx_widget_parent;
83
        }
84
    }
85
86
2
    _gx_tree_view_position(tree);
87
88
2
    return GX_SUCCESS;
89
}
90
91
/**************************************************************************/
92
/*                                                                        */
93
/*  FUNCTION                                               RELEASE        */
94
/*                                                                        */
95
/*    _gx_tree_view_selected_set                          PORTABLE C      */
96
/*                                                           6.1          */
97
/*  AUTHOR                                                                */
98
/*                                                                        */
99
/*    Kenneth Maxwell, Microsoft Corporation                              */
100
/*                                                                        */
101
/*  DESCRIPTION                                                           */
102
/*                                                                        */
103
/*    This function set selected item for the specified tree view.        */
104
/*                                                                        */
105
/*  INPUT                                                                 */
106
/*                                                                        */
107
/*    tree                                  Pointer to the tree view      */
108
/*                                            control block               */
109
/*    selected                              New selected item             */
110
/*                                                                        */
111
/*  OUTPUT                                                                */
112
/*                                                                        */
113
/*    status                                Completion status             */
114
/*                                                                        */
115
/*  CALLS                                                                 */
116
/*                                                                        */
117
/*    _gx_system_dirty_mark                 Mark the widget area as dirty */
118
/*    _gx_widget_event_generate             Create an event and send it to*/
119
/*                                            the widget parent           */
120
/*    _gx_tree_view_selected_visible        Make selected item visible.   */
121
/*                                                                        */
122
/*  CALLED BY                                                             */
123
/*                                                                        */
124
/*    Application Code                                                    */
125
/*    GUIX Internal Code                                                  */
126
/*                                                                        */
127
/**************************************************************************/
128
9
UINT  _gx_tree_view_selected_set(GX_TREE_VIEW *tree, GX_WIDGET *selected)
129
{
130
9
    if (tree -> gx_tree_view_selected == selected)
131
    {
132
1
        return GX_SUCCESS;
133
    }
134
135
8
    if (tree -> gx_tree_view_selected)
136
    {
137
5
        tree -> gx_tree_view_selected -> gx_widget_style &= ~GX_STYLE_DRAW_SELECTED;
138
5
        _gx_system_dirty_mark(tree -> gx_tree_view_selected);
139
    }
140
141
8
    selected -> gx_widget_style |= GX_STYLE_DRAW_SELECTED;
142
143
8
    tree -> gx_tree_view_selected = selected;
144
145
8
    if (tree -> gx_widget_id)
146
    {
147
        /* Generate tree select event. */
148
2
        _gx_widget_event_generate((GX_WIDGET *)tree, GX_EVENT_TREE_SELECT, selected -> gx_widget_id);
149
    }
150
151
8
    if (!(selected -> gx_widget_status & GX_STATUS_VISIBLE))
152
    {
153
2
        _gx_tree_view_selected_visible(tree);
154
    }
155
156
8
    _gx_system_dirty_mark(selected);
157
158
    /* Return completion status code. */
159
8
    return(GX_SUCCESS);
160
}