void cell_and_expression(const any_regular_t& value, name_t& cell, array_t& expression) { array_t cell_and_expression; value.cast<name_t>(cell); if (!cell && value.cast<array_t>(cell_and_expression)) { cell = cell_and_expression[0].cast<name_t>(); const std::string& expression_string = cell_and_expression[1].cast<std::string>(); expression = parse_adam_expression(expression_string); } }
inline widget_node_t create_and_hookup_widget<control_button_t, poly_placeable_t>(const dictionary_t& parameters, const widget_node_t& parent, const factory_token_t& token, bool is_container, const layout_attributes_t& layout_attributes) { size_enum_t size(parameters.count(key_size) ? implementation::enumerate_size(get_value(parameters, key_size).cast<name_t>()) : parent.size_m); std::string name; std::string alt_text; std::string expression_string; get_value(parameters, key_name, name); get_value(parameters, key_alt_text, alt_text); get_value(parameters, static_name_t("expression"), expression_string); control_button_t* widget(NULL); widget = new control_button_t(name, alt_text, boost::bind(&sheet_t::inspect, boost::ref(token.sheet_m), _1), parse_adam_expression(expression_string), implementation::size_to_theme(size)); 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)); eve_t::iterator eve_token; eve_token = attach_placeable<poly_placeable_t>(parent.eve_token_m, *widget, parameters, token, is_container, layout_attributes); 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); }