You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: _AnalyzeGroupPP_G.gen.m
    path of file: ./repos/BRAPH-2/braph2genesis/src/analysis
    
    the code of the file until where you have to start completion: %% ¡header!
AnalyzeGroupPP_G < PanelProp (pr, graph and measure plot) plots the panel to manage the graph and measures of a group analysis.

%%% ¡description!
AnalyzeGroupPP_G plots the panel to manage the graph and measures of a group analysis.
It is intended to be used only with the property G of AnalyzeGroup.

%%% ¡seealso!
uitable, AnalyzeGroup, Graph, Measure

%% ¡props_update!

%%% ¡prop!
ELCLASS (constant, string) is the class of the % % % .
%%%% ¡default!
'AnalyzeGroupPP_G'

%%% ¡prop!
NAME (constant, string) is the name of the graph and measure panel.
%%%% ¡default!
'AnalyzeGroupPP_G'

%%% ¡prop!
DESCRIPTION (constant, string) is the description of the graph and measure panel.
%%%% ¡default!
'AnalyzeGroupPP_G plots the panel to manage the graph and measures of a group analysis.'

%%% ¡prop!
TEMPLATE (parameter, item) is the template of the graph and measure panel.
%%%% ¡settings!
'AnalyzeGroupPP_G'

%%% ¡prop!
ID (data, string) is a few-letter code for the graph and measure panel.
%%%% ¡default!
'AnalyzeGroupPP_G'

%%% ¡prop!
LABEL (metadata, string) is an extended label of the graph and measure panel.
%%%% ¡default!
'AnalyzeGroupPP_G label'

%%% ¡prop!
NOTES (metadata, string) are some specific notes about the graph and measure panel.
%%%% ¡default!
'AnalyzeGroupPP_G'

%%% ¡prop!
EL (data, item) is the element.
%%%% ¡default!
AnalyzeGroup()

%%% ¡prop!
PROP (data, scalar) is the property number.
%%%% ¡default!
AnalyzeGroup.G

%%% ¡prop!
X_DRAW (query, logical) draws the property panel.
%%%% ¡calculate!
value = calculateValue@PanelProp(pr, PanelProp.X_DRAW, varargin{:}); % also warning
if value
    pr.memorize('TABLE')
    pr.memorize('CONTEXTMENU')
end

%%% ¡prop!
UPDATE (query, logical) updates the content and permissions of the table.
%%%% ¡calculate!
value = calculateValue@PanelProp(pr, PanelProp.UPDATE, varargin{:}); % also warning
if value
	el = pr.get('EL');
	prop = pr.get('PROP');
        
	if isa(el.getr(prop), 'NoValue')
        % don't plot anything for a result not yet calculated
        pr.set('HEIGHT', pr.getPropDefault('HEIGHT'))
        set(pr.get('TABLE'), 'Visible', 'off')
    else
        set_table()
        pr.set('HEIGHT', pr.getPropDefault('HEIGHT') + pr.get('TABLE_HEIGHT'))
        set(pr.get('TABLE'), 'Visible', 'on')
    end
end
%%%% ¡calculate_callbacks!
function set_table()
    a = pr.get('EL');
    prop = pr.get('PROP');
    if isa(a.getr(prop), 'NoValue')
        g = a.getPropDefaultConditioned(prop); % default graph
    else
        g = a.get(prop); % actual graph
    end

    m_list = g.get('COMPATIBLE_MEASURES');

    if isa(g.getr('M_DICT'), 'NoValue')
        mlist_already_calculated = {};
    else
        mlist_
    
function cb_table(~, event) % (src, event)
    % only needs to update the selector

        i = event.Indices(1);
        
        selected = pr.get('SELECTED');
        if event.NewData == 1
            pr.set('SELECTED', sort(unique([selected; i])));
        else
            pr.set('SELECTED', selected(selected ~= i));
        end
        
        pr.get('UPDATE')    
end

%%% ¡prop!
CONTEXTMENU (evanescent, handle) is the context menu.
%%%% ¡calculate!
contextmenu = uicontextmenu( ...
    'Parent', ancestor(pr.get('H'), 'figure'), ...
    'Tag', 'CONTEXTMENU' ...
    );
menu_open_g_pl = uimenu( ...
	'Parent', contextmenu, ...
	'Tag', 'MENU_OPEN_G_PL', ...
	'Text', 'Plot Graph Plot ...', ...
	'MenuSelectedFcn', {@cb_open_g_pl} ...
	);

menu_hide_g_pl = uimenu( ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_HIDE_G_PL', ...
    'Text', 'Hide Graph Plot', ...
    'MenuSelectedFcn', {@cb_hide_g_pl} ...
	);
menu_open_g_el = uimenu( ...
	'Separator', 'on', ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_OPEN_G_EL', ...
    'Text', 'Data Graph ...', ...
    'MenuSelectedFcn', {@cb_open_g_el} ...
    );
menu_hide_g_el = uimenu( ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_HIDE_G_EL', ...
    'Text', 'Hide Graph Data', ...
	'MenuSelectedFcn', {@cb_hide_g_el} ...
    );
menu_select_all = uimenu( ...
	'Separator', 'on', ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_SELECT_ALL', ...
    'Text', 'Select All Measures', ...
    'MenuSelectedFcn', {@cb_select_all} ...
    );
menu_clear_selection = uimenu( ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_CLEAR_SELECTION', ...
    'Text', 'Clear Selection', ...
    'MenuSelectedFcn', {@cb_clear_selection} ...
    );
menu_invert_selection = uimenu( ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_INVERT_SELECTION', ...
    'Text', 'Invert Selection', ...
    'MenuSelectedFcn', {@cb_invert_selection} ...
    );
menu_calculate = uimenu( ...
	'Separator', 'on', ...
	'Parent', contextmenu, ...
	'Tag', 'MENU_CALCULATE', ...
    'Text', 'Calculate Selected Measures', ...
	'MenuSelectedFcn', {@cb_calculate} ...
    );
menu_open_mbrain = uimenu( ...
	'Separator', 'on', ...
	'Parent', contextmenu, ...
	'Tag', 'MENU_OPEN_MBRAIN', ...
	'Text', 'Plot Selected Measures on Brain ...', ...
	'MenuSelectedFcn', {@cb_open_mbrain} ... % % %
	);
menu_hide_mbrain = uimenu( ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_HIDE_MBRAIN', ...
    'Text', 'Hide Selected Brain-Plots', ...
    'MenuSelectedFcn', {@cb_hide_mbrain} ... % % %
	);
menu_open_plots = uimenu( ...
	'Parent', contextmenu, ...
	'Tag', 'MENU_OPEN_PLOTS', ...
	'Text', 'Line-Plot Selected Measures ...', ...
	'MenuSelectedFcn', {@cb_open_plots} ...
	);
menu_hide_plots = uimenu( ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_HIDE_PLOTS', ...
    'Text', 'Hide Selected Line-Plots', ...
    'MenuSelectedFcn', {@cb_hide_plots} ...
	);
menu_open_elements = uimenu( ...
	'Separator', 'on', ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_OPEN_ELEMENTS', ...
    'Text', 'Data Selected Measures ...', ...
    'MenuSelectedFcn', {@cb_open_elements} ...
    );
menu_hide_elements = uimenu( ...
    'Parent', contextmenu, ...
    'Tag', 'MENU_HIDE_ELEMENTS', ...
    'Text', 'Hide Selected Data', ...
	'MenuSelectedFcn', {@cb_hide_elements} ...
    );

set(pr.get('TABLE'), 'ContextMenu', contextmenu)

value = contextmenu;
%%%% ¡calculate_callbacks!
function cb_open_g_pl(~, ~)
    if isa(pr.getr('GUI_G_EL'), 'NoValue')
        f = ancestor(pr.get('H'), 'figure');

        el = pr.get('EL'); % AnalyzeGroup
        prop = pr.get('PROP'); % G

        gui = GUIElement( ...
            'PE', el.memorize(prop), ... % ensure that the property is stored -- this is the graph G
            'POSITION', [ ...
                x0(f, 'normalized')+w(f, 'normalized') ...
                y0(f, 'normalized') ...
                w(f, 'normalized') ...
                h(f, 'normalized') ...
                ], ...
            'WAITBAR', pr.getCallback('WAITBAR'), ...
            'CLOSEREQ', false ...
            );
        
        pr.set('GUI_G_EL', gui)
    else
        gui = pr.get('GUI_G_EL');
    end