widget_node_t make_checkbox(const dictionary_t&     parameters, 
                            const widget_node_t&    parent, 
                            const factory_token_t&  token,
                            const widget_factory_t& factory)
    { return create_and_hookup_widget<checkbox_t, poly_placeable_t>(parameters, parent, token, 
        factory.is_container("checkbox"_name), 
        factory.layout_attributes("checkbox"_name)); }
Exemple #2
0
widget_node_t make_image_hack(const dictionary_t&     parameters, 
                              const widget_node_t&    parent, 
                              const factory_token_t&  token,
                              const widget_factory_t& factory)
    { return create_and_hookup_widget<image_t, poly_placeable_twopass_t>(
        parameters, parent, token, 
        factory.is_container(static_name_t("image")), 
        factory.layout_attributes(static_name_t("image"))); }
widget_node_t make_radio_button(const dictionary_t&     parameters,
                                const widget_node_t&    parent,
                                const factory_token_t&  token,
                                const widget_factory_t& factory)
{ 
    return create_and_hookup_widget<radio_button_t, poly_placeable_t>(parameters, parent, token, 
        factory.is_container(static_name_t("radio_button")), 
        factory.layout_attributes(static_name_t("radio_button"))); 
}
widget_node_t overlay_factory(const dictionary_t&     parameters,
                              const widget_node_t&    parent,
                              const factory_token_t&  token,
                              const widget_factory_t& factory)
{
    return wire_to_eve_noncreating(token, parent, parameters,
                                   factory.is_container("overlay"_name),
                                   factory.layout_attributes("overlay"_name));
}
widget_node_t make_display_number(const dictionary_t&     parameters, 
                                         const widget_node_t&    parent, 
                                         const factory_token_t&  token,
                                         const widget_factory_t& factory)
{ 
    return create_and_hookup_widget<display_number_t, poly_placeable_twopass_t>(
        parameters, parent, token, 
        factory.is_container("display_number"_name), 
        factory.layout_attributes("display_number"_name)); 
}
widget_node_t make_optional_panel(const dictionary_t&     parameters,
                                  const widget_node_t&    parent,
                                  const factory_token_t&  token,
                                  const widget_factory_t& factory)
{
   size_enum_t   size(parameters.count(key_size) ?
                       implementation::enumerate_size(get_value(parameters, key_size).cast<name_t>()) :
                       parent.size_m);

    optional_panel_t* widget(NULL);
    create_widget(parameters, size, widget);
    token.client_holder_m.assemblage_m.cleanup(boost::bind(delete_ptr<optional_panel_t*>(), widget));
  
    //
    // Call display_insertion to embed the new widget within the view heirarchy
    //
    platform_display_type display_token(insert(get_main_display(), parent.display_token_m, *widget));

    //
    // As per SF.net bug 1428833, we want to attach the poly_placeable_t
    // to Eve before we attach the controller and view to the model
    //

    eve_t::iterator eve_token;
    eve_token = attach_placeable<poly_placeable_t>(parent.eve_token_m, 
        *widget, parameters, token, 
        factory.is_container(static_name_t("optional")), 
        factory.layout_attributes(static_name_t("optional")));

    widget->set_optional_display_procs(boost::bind(&optional_display_show,
                                                   boost::ref(token.client_holder_m.visible_change_queue_m),
                                                   boost::ref(token.client_holder_m.eve_m),
                                                   eve_token,
                                                   _1),
                                       boost::bind(&optional_display_hide,
                                                   boost::ref(token.client_holder_m.visible_change_queue_m),
                                                   boost::ref(token.client_holder_m.eve_m),
                                                   eve_token,
                                                   _1));

    attach_view_and_controller(*widget, parameters, token);

    //
    // Return the widget_node_t that comprises the tokens created for this widget by the various components
    //
    return widget_node_t(size, eve_token, display_token, parent.keyboard_token_m);
}
widget_node_t make_edit_number(const dictionary_t&     parameters,
                               const widget_node_t&    parent,
                               const factory_token_t&  token,
                               const widget_factory_t& factory)
{
    bool is_container(factory.is_container(static_name_t("edit_number")));
    const layout_attributes_t& layout_attributes(
        factory.layout_attributes(static_name_t("edit_number")));

    size_enum_t   size(parameters.count(key_size) ?
                       implementation::enumerate_size(get_value(parameters, key_size).cast<name_t>()) :
                       parent.size_m);

    edit_number_t* widget(NULL);
    create_widget(parameters, size, widget);
    assemblage_cleanup_ptr(token.client_holder_m.assemblage_m, widget);

    //
    // Call display_insertion to embed the new widget within the view heirarchy
    //
    platform_display_type display_token(insert(get_main_display(), parent.display_token_m, *widget));

    //
    // As per SF.net bug 1428833, we want to attach the poly_placeable_t
    // to Eve before we attach the controller and view to the model
    //

    eve_t::iterator eve_token;
    eve_token = attach_placeable<poly_placeable_t>(parent.eve_token_m, *widget, parameters, token, is_container, layout_attributes);

    attach_edit_num_view_and_controller(*widget, parameters, token);

    keyboard_t::iterator keyboard_token = keyboard_t::get().insert(parent.keyboard_token_m, poly_key_handler_t(boost::ref(*widget)));

    //
    // Return the widget_node_t that comprises the tokens created for this widget by the various components
    //

    return widget_node_t(size, eve_token, display_token, keyboard_token);
}
widget_node_t make_button(const dictionary_t&     parameters, 
                          const widget_node_t&    parent, 
                          const factory_token_t&  token,
                          const widget_factory_t& factory)
{ 
    size_enum_t   size(parameters.count(key_size) ?
                       implementation::enumerate_size(get_value(parameters, key_size).cast<name_t>()) :
                       parent.size_m);

    button_t* widget = implementation::create_button_widget(parameters, token, size);
    token.client_holder_m.assemblage_m.cleanup(boost::bind(delete_ptr(),widget));
   
    //
    // Call display_insertion to embed the new widget within the view heirarchy
    //
    platform_display_type display_token(insert(get_main_display(), parent.display_token_m, *widget));

    // set up key handler code. We do this all the time because we want the button to be updated
    // when modifier keys are pressed during execution of the dialog.

    keyboard_t::iterator keyboard_token(keyboard_t::get().insert(parent.keyboard_token_m, poly_key_handler_t(boost::ref(*widget))));
    
    
    //
    // As per SF.net bug 1428833, we want to attach the poly_placeable_t
    // to Eve before we attach the controller and view to the model
    //

    eve_t::iterator eve_token;
    eve_token = attach_placeable<poly_placeable_t>(parent.eve_token_m, *widget, parameters, 
        token, factory.is_container("button"_name),
        factory.layout_attributes("button"_name));

    //
    // Return the widget_node_t that comprises the tokens created for this widget by the various components
    //
    return widget_node_t(size, eve_token, display_token, keyboard_token);
}
const widget_factory_t& default_asl_widget_factory()
{
    static bool             inited(false);
    static widget_factory_t default_factory_s;

    if (!inited)
    {
        name_t name_row("row"_name);
        name_t name_column("column"_name);
        name_t name_overlay("overlay"_name);
        name_t name_reveal("reveal"_name);
        name_t name_preset("preset"_name);
        name_t name_preview("preview"_name);
        name_t name_static_text("static_text"_name);
        name_t name_control_button("control_button"_name);

        default_factory_s.reg(name_column, &column_factory, true, column_layout_attributes());
        default_factory_s.reg(name_overlay, &overlay_factory, true, overlay_layout_attributes());
        default_factory_s.reg(name_row, &row_factory, true, row_layout_attributes());

        default_factory_s.reg(name_button, &make_button);
        default_factory_s.reg(name_checkbox, &make_checkbox);
        default_factory_s.reg(name_control_button, &make_control_button);
        default_factory_s.reg(name_dialog, &make_window, true, window_layout_attributes());
        default_factory_s.reg(name_display_number, &implementation::make_display_number);
        default_factory_s.reg(name_edit_number, &make_edit_number);
        default_factory_s.reg(name_edit_text, &implementation::make_edit_text);
        default_factory_s.reg(name_group, &make_group, true, group_layout_attributes());
#ifndef ADOBE_PLATFORM_NO_IMAGE
        default_factory_s.reg(name_image, &implementation::make_image_hack);
#endif
        default_factory_s.reg(name_toggle, &make_toggle);
        default_factory_s.reg(name_label, &implementation::make_label_hack);
#ifndef ADOBE_PLATFORM_NO_LINK
        default_factory_s.reg(name_link, &make_link, false, link_layout_attributes());
#endif
        default_factory_s.reg(name_optional, &make_optional_panel, true, optional_panel_layout_attributes());
        default_factory_s.reg(name_panel, &make_panel, true, panel_layout_attributes());
        default_factory_s.reg(name_popup, &make_popup);
#ifndef ADOBE_PLATFORM_NO_PRESETS
        default_factory_s.reg(name_preset, &make_presets);
#endif
        default_factory_s.reg(name_preview, &make_preview);
        default_factory_s.reg(name_progress_bar, &make_progress_bar);
        default_factory_s.reg(name_radio_button, &make_radio_button);
        default_factory_s.reg(name_reveal, &make_reveal);
        default_factory_s.reg(name_separator, &make_separator, false, separator_layout_attributes());
        default_factory_s.reg(name_slider, &make_slider);
        default_factory_s.reg(name_static_text, &implementation::make_label_hack);
        default_factory_s.reg(name_tab_group, &make_tab_group, true, tab_group_layout_attributes());

        inited = true;
    }

    return default_factory_s;
}