Exemplo n.º 1
0
void RadioButton_Impl::on_enablemode_changed()
{
	radio->set_pseudo_class(CssStr::disabled, !radio->is_enabled());
	radio->set_pseudo_class(CssStr::normal, radio->is_enabled());
	part_checker.set_pseudo_class(CssStr::disabled, !radio->is_enabled());
	part_checker.set_pseudo_class(CssStr::normal, radio->is_enabled());

	radio->request_repaint();
}
Exemplo n.º 2
0
void RadioButton_Impl::create_parts()
{
	part_checker = GUIThemePart(radio, CssStr::RadioButton::part_checker);
	part_checker.set_pseudo_class(CssStr::hover, false);
	part_checker.set_pseudo_class(CssStr::normal, true);
	part_checker.set_pseudo_class(CssStr::pressed, false);
	part_checker.set_pseudo_class(CssStr::checked, false);
	part_checker.set_pseudo_class(CssStr::indeterminated, false);
	part_checker.set_pseudo_class(CssStr::unchecked, true);
	part_checker.set_pseudo_class(CssStr::disabled, false);

	part_focus = GUIThemePart(radio, CssStr::RadioButton::part_focus);
}
Exemplo n.º 3
0
void Window_Impl::on_process_message(std::shared_ptr<GUIMessage> &msg)
{
	if (!window->is_enabled())
		return;
	if (!has_frame)		// Performed by the OS on system wm
		return;

	check_move_window(msg);
	Rect part_buttonclose_rect = get_part_buttonclose_rect();

	std::shared_ptr<GUIMessage_Input> input_msg = std::dynamic_pointer_cast<GUIMessage_Input>(msg);
	if (input_msg)
	{
		InputEvent &e = input_msg->input_event;

		if (e.type == InputEvent::pressed && e.id == mouse_left)
		{
			if(part_buttonclose_rect.contains(e.mouse_pos))
				if(part_buttonclose.set_pseudo_class(CssStr::pressed, true))
					window->request_repaint();
		}
		else if (e.type == InputEvent::released && e.id == mouse_left)
		{
			if(part_buttonclose.set_pseudo_class(CssStr::pressed, false))
			{
				window->request_repaint();
				if (window->func_close() && window->func_close()())
					msg->consumed = true;
			}
		}
		else if (e.type == InputEvent::pointer_moved)
		{
			bool inside = part_buttonclose_rect.contains(e.mouse_pos);

			if (part_buttonclose.get_pseudo_class(CssStr::hover) != inside)
			{
				part_buttonclose.set_pseudo_class(CssStr::hover, inside);
				window->request_repaint();
			}
		}
	}

}
Exemplo n.º 4
0
void Window_Impl::create_parts()
{
	if (has_frame)
	{
		part_caption = GUIThemePart(window, CssStr::Window::part_caption);
		part_frameleft = GUIThemePart(window, CssStr::Window::part_frameleft);
		part_frameright = GUIThemePart(window, CssStr::Window::part_frameright);
		part_framebottom = GUIThemePart(window, CssStr::Window::part_framebottom);
		part_buttonclose = GUIThemePart(window, CssStr::Window::part_buttonclose);

		part_buttonclose.set_pseudo_class(CssStr::normal, true);
	}

}
Exemplo n.º 5
0
void ToolBar_Impl::create_parts()
{
    toolbar->set_pseudo_class(CssStr::horizontal, true);
    part_item_normal = GUIThemePart(toolbar, CssStr::ToolBar::part_item);
    part_item_normal.set_pseudo_class(CssStr::normal, true);
    part_item_disabled = GUIThemePart(toolbar, CssStr::ToolBar::part_item);
    part_item_disabled.set_pseudo_class(CssStr::disabled, true);
    part_item_pressed = GUIThemePart(toolbar, CssStr::ToolBar::part_item);
    part_item_pressed.set_pseudo_class(CssStr::pressed, true);
    part_item_hot = GUIThemePart(toolbar, CssStr::ToolBar::part_item);
    part_item_hot.set_pseudo_class(CssStr::hover, true);
    part_item_on = GUIThemePart(toolbar, CssStr::ToolBar::part_item);
    part_item_on.set_pseudo_class(CssStr::on, true);

    size_icon.width = part_item_normal.get_property_int(CssStr::icon_width, "0");
    size_icon.height = part_item_normal.get_property_int(CssStr::icon_height, "0");
    std::string str_alignment = toolbar->get_property(CssStr::layout, "left");
    if (str_alignment == "center")
        layout = layout_center;
    else
        layout = layout_left;

    need_layout_update = true;
}
Exemplo n.º 6
0
void RadioButton_Impl::on_process_message(std::shared_ptr<GUIMessage> &msg)
{
	if (!radio->is_enabled())
		return;

	std::shared_ptr<GUIMessage_Input> input_msg = std::dynamic_pointer_cast<GUIMessage_Input>(msg);
	if (input_msg)
	{
		
		const InputEvent &e = input_msg->input_event;

		if (e.type == InputEvent::pressed && e.id == mouse_left)
		{
			part_checker.set_pseudo_class(CssStr::pressed, true);
			radio->request_repaint();
			msg->consumed = true;
		}
		else if (e.type == InputEvent::released && e.id == mouse_left)
		{
			if ((part_checker.get_pseudo_class(CssStr::checked) == false))
			{
				Callback_v1<RadioButton*> cb = uncheck_radio_buttons(radio->get_parent_component());

				part_checker.set_pseudo_class(CssStr::pressed, false);
				radio->set_selected(true);

				if (!cb.is_null())
					cb.invoke(radio);
				if (!func_selected.is_null())
					func_selected.invoke();
			}
			else
			{
				part_checker.set_pseudo_class(CssStr::pressed, false);
				radio->request_repaint();
			}

			radio->set_focus(true);
			msg->consumed = true;
		}
		else if (e.type == InputEvent::pressed && (e.id == keycode_left || e.id == keycode_up))
		{
			std::vector<GUIComponent*> group = radio->get_parent_component()->get_child_component_group(radio->get_component_group_name());

			// find previous visible & enabled radiobutton in the same group:
			GUIComponent *comp = radio->get_previous_sibling();
			if (comp == 0)
				comp = group.back();

			while (comp != radio)
			{
				if (comp->is_visible() && comp->is_enabled() && comp->get_component_group_name() == radio->get_component_group_name())
				{
					RadioButton *focus_comp = dynamic_cast<RadioButton*>(comp);
					if (focus_comp)
					{
						Callback_v1<RadioButton*> cb = uncheck_radio_buttons(radio->get_parent_component());
						focus_comp->set_selected(true);
						if (!cb.is_null())
							cb.invoke(focus_comp);
						if (!focus_comp->func_selected().is_null())
							focus_comp->func_selected().invoke();
						focus_comp->set_focus();
						break;
					}
				}

				if (!comp->get_previous_sibling() || comp->get_previous_sibling()->get_component_group_name() != radio->get_component_group_name())
				{
					// reach first item in group, loop around from the last:
					comp = group.back();
				}
				else
					comp = comp->get_previous_sibling();
			}

			msg->consumed = true;
		}
		else if (e.type == InputEvent::pressed && (e.id == keycode_right || e.id == keycode_down))
		{
			std::vector<GUIComponent*> group = radio->get_parent_component()->get_child_component_group(radio->get_component_group_name());

			// find next visible & enabled radiobutton in the same group:
			GUIComponent *comp = radio->get_next_sibling();
			if (comp == 0 || comp->get_component_group_name() != radio->get_component_group_name())
				comp = group.front();

			while (comp != radio)
			{
				if (comp->is_visible() && comp->is_enabled() && comp->get_component_group_name() == radio->get_component_group_name())
				{
					RadioButton *focus_comp = dynamic_cast<RadioButton*>(comp);
					if (focus_comp)
					{
						Callback_v1<RadioButton*> cb = uncheck_radio_buttons(radio->get_parent_component());
						focus_comp->set_selected(true);
						if (!cb.is_null())
							cb.invoke(focus_comp);
						if (!focus_comp->func_selected().is_null())
							focus_comp->func_selected().invoke();
						focus_comp->set_focus();
						break;
					}
				}

				if (!comp->get_previous_sibling() || comp->get_previous_sibling()->get_component_group_name() != radio->get_component_group_name())
				{
					// reach first item in group, loop around from the last:
					comp = group.back();
				}
				else
					comp = comp->get_next_sibling();
			}
			msg->consumed = true;
		}

	}
	std::shared_ptr<GUIMessage_Pointer> pointer = std::dynamic_pointer_cast<GUIMessage_Pointer>(msg);
	if (pointer)
	{
		
		if (pointer->pointer_type == GUIMessage_Pointer::pointer_enter)
		{
			part_checker.set_pseudo_class(CssStr::hover, true);
			radio->request_repaint();
		}
		else
		{
			part_checker.set_pseudo_class(CssStr::hover, false);
			radio->request_repaint();
		}
	}
	std::shared_ptr<GUIMessage_FocusChange> focus_change_msg = std::dynamic_pointer_cast<GUIMessage_FocusChange>(msg);
	if (focus_change_msg)
	{
		
		if (focus_change_msg->focus_type == GUIMessage_FocusChange::gained_focus)
		{
			radio->set_pseudo_class(CssStr::focused, true);
			if (!radio->is_selected())
			{
				Callback_v1<RadioButton*> cb = uncheck_radio_buttons(radio->get_parent_component());
				radio->set_selected(true);
				if (!cb.is_null())
					cb.invoke(radio);
				if (!func_selected.is_null())
					func_selected.invoke();
			}
			radio->request_repaint();
		}
		else 
		{
			radio->set_pseudo_class(CssStr::focused, false);
			radio->request_repaint();
		}
		msg->consumed = true;
	}
}