void assign_view(ViewT1 sv) { // processor 0 will distribute data to all other procs vsip::Vector<vsip::processor_type> pvec_in(1);pvec_in(0)=(0); vsip::Map<> root_map(pvec_in); dst_block root_block(sv.size(),root_map); dst_view root_view(root_block); // Ok, now move the vector to the distributed view vsip::impl::assign_local(root_view,sv); view = root_view; };
void MsgBox::initWindow(const clan::FileSystem& fs) { auto& rootView = root_view(); auto& canvas = rootView->canvas(); rootView->slots.connect(rootView->sig_key_press(), [&](clan::KeyEvent &e) { on_input_down(e); }); // Без вызова этой функции события клавиатуры не приходят. rootView->set_focus(); // Загружаем иконки. leftIcon->set_image(clan::Image(canvas, "Exclamation.png", fs)); bOk->image_view()->set_image(clan::Image(canvas, "Ok.png", fs)); bCancel->image_view()->set_image(clan::Image(canvas, "Cancel.png", fs)); }
MsgBox::MsgBox(SettingsStorage* pSettings, const std::string& text, const std::string& caption, eMbType mbType) : leftIcon(std::make_shared<clan::ImageView>()), bOk(Theme::create_button()), bCancel(Theme::create_button()) { auto rootView = root_view(); set_title(caption); rootView->style()->set("flex-direction: row; background: rgb(240,240,240); padding: 11px"); // Иконка в левой части диалога (появится только если был вызов loadIcons(). leftIcon->style()->set("padding-right: 11px"); rootView->add_child(leftIcon); // Узнаем ширину текущего окна, чтобы соотнести с размером диалога. // Получим размеры для отображения. int primaryScreenIndex = 0; std::vector<clan::Rectf> screenRects = clan::ScreenInfo().get_screen_geometries(primaryScreenIndex); int screenWidth = int(screenRects.at(size_t(primaryScreenIndex)).get_width()); // Ширина диалога не должна быть менее 300 точек и более четверти экрана. screenWidth = std::max<int>(300, screenWidth / 4); //-V112 // Рамка для текста и кнопок правее иконки. auto rightPanel = std::make_shared<clan::View>(); rightPanel->style()->set("flex-direction: column; width: " + std::to_string(screenWidth) + "px"); //rightPanel->style()->set("border: 1px solid red"); rootView->add_child(rightPanel); // Текст. auto span = Theme::create_span(); span->style()->set("padding: 11px; margin-bottom: 11px"); span->add_text(text); rightPanel->add_child(span); // Подрамка справа внизу с кнопками, но только если кнопки есть. auto rightBottomPanel = std::make_shared<clan::View>(); if (mbType != cMbNone) { rightBottomPanel->style()->set("flex-direction: row; height: 32px; justify-content: center"); //rightBottomPanel->style()->set("border: 1px solid green"); rightPanel->add_child(rightBottomPanel); } if (mbType == cMbOkCancel || mbType == cMbOk) { bOk->style()->set("width: 120px; margin-right: 30px"); bOk->image_view()->style()->set("padding-left: 3px"); bOk->label()->set_text(pSettings->LocaleStr(cMsgBoxOk)); rightBottomPanel->add_child(bOk); bOk->func_clicked() = [=]() { result = cMbResultOk; dismiss(); }; } else // Для обработчика клавиатуры. bOk->set_hidden(); if (mbType == cMbOkCancel || mbType == cMbCancel) { bCancel->style()->set("width: 120px"); bCancel->image_view()->style()->set("padding-left: 3px"); bCancel->label()->set_text(pSettings->LocaleStr(cMsgBoxCancel)); rightBottomPanel->add_child(bCancel); bCancel->func_clicked() = [=]() { dismiss(); }; } // Уберём возможность менять размеры диалогового окна. set_resizable(false); }
Options::Options(Canvas &canvas) : TextureWindow(canvas) { root_view()->style()->set("background: rgb(153, 153, 204)"); auto spacer1 = std::make_shared<View>(); auto spacer2 = std::make_shared<View>(); auto spacer3 = std::make_shared<View>(); spacer1->style()->set("flex: 1 1"); spacer2->style()->set("flex: 1 1"); spacer3->style()->set("flex: 1 1"); add_subview(column1); add_subview(column2); add_subview(column3); column1->add_subview(rotation_y_view); column1->add_subview(rotation_x_view); column1->add_subview(rotation_z_view); column1->add_subview(spacer1); column1->add_subview(button_lerp); column2->add_subview(quaternion_w_view); column2->add_subview(quaternion_i_view); column2->add_subview(quaternion_j_view); column2->add_subview(quaternion_k_view); column2->add_subview(spacer2); column2->add_subview(button_slerp); column3->add_subview(target_y_view); column3->add_subview(target_x_view); column3->add_subview(target_z_view); column3->add_subview(spacer3); column3->add_subview(button_rotate); button_lerp_clicked = false; button_slerp_clicked = false; button_rotate_clicked = false; max_angle_value = 360.0f; rotation_x = Angle(0.0f, angle_degrees); rotation_y = Angle(0.0f, angle_degrees); rotation_z = Angle(0.0f, angle_degrees); target_x = Angle(0.0f, angle_degrees); target_y = Angle(0.0f, angle_degrees); target_z = Angle(0.0f, angle_degrees); rotation_y_view->slider->func_value_changed() = bind_member(this, &Options::slider_rotation_y_changed); rotation_x_view->slider->func_value_changed() = bind_member(this, &Options::slider_rotation_x_changed); rotation_z_view->slider->func_value_changed() = bind_member(this, &Options::slider_rotation_z_changed); quaternion_w_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_w_changed); quaternion_i_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_i_changed); quaternion_j_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_j_changed); quaternion_k_view->slider->func_value_changed() = bind_member(this, &Options::slider_quaternion_k_changed); target_y_view->slider->func_value_changed() = bind_member(this, &Options::slider_target_y_changed); target_x_view->slider->func_value_changed() = bind_member(this, &Options::slider_target_x_changed); target_z_view->slider->func_value_changed() = bind_member(this, &Options::slider_target_z_changed); button_lerp->label()->set_text("Linear Quaternion Interpolation (lerp)"); button_slerp->label()->set_text("Spherical Linear Interpolation (slerp)"); button_rotate->label()->set_text("Rotate : q.multiply(target)"); button_lerp->slots.connect(button_lerp->sig_pointer_press(), bind_member(this, &Options::on_clicked_button_lerp)); button_slerp->slots.connect(button_slerp->sig_pointer_press(), bind_member(this, &Options::on_clicked_button_slerp)); button_rotate->slots.connect(button_rotate->sig_pointer_press(), bind_member(this, &Options::on_clicked_button_rotate)); set_all_sliders(); }