コード例 #1
0
ファイル: button_array.cpp プロジェクト: allkhor/godot
void ButtonArray::_input_event(const InputEvent &p_event) {

	if (
			((orientation == HORIZONTAL && p_event.is_action("ui_left")) ||
					(orientation == VERTICAL && p_event.is_action("ui_up"))) &&
			p_event.is_pressed() && selected > 0) {
		set_selected(selected - 1);
		accept_event();
		emit_signal("button_selected", selected);
		return;
	}

	if (
			((orientation == HORIZONTAL && p_event.is_action("ui_right")) ||
					(orientation == VERTICAL && p_event.is_action("ui_down"))) &&
			p_event.is_pressed() && selected < (buttons.size() - 1)) {
		set_selected(selected + 1);
		accept_event();
		emit_signal("button_selected", selected);
		return;
	}

	if (p_event.type == InputEvent::MOUSE_BUTTON && p_event.mouse_button.pressed && p_event.mouse_button.button_index == BUTTON_LEFT) {

		int ofs = orientation == HORIZONTAL ? p_event.mouse_button.x : p_event.mouse_button.y;

		for (int i = 0; i < buttons.size(); i++) {

			if (ofs >= buttons[i]._pos_cache && ofs < buttons[i]._pos_cache + buttons[i]._size_cache) {

				set_selected(i);
				emit_signal("button_selected", i);
				return;
			}
		}
	}

	if (p_event.type == InputEvent::MOUSE_MOTION) {

		int ofs = orientation == HORIZONTAL ? p_event.mouse_motion.x : p_event.mouse_motion.y;
		int new_hover = -1;
		for (int i = 0; i < buttons.size(); i++) {

			if (ofs >= buttons[i]._pos_cache && ofs < buttons[i]._pos_cache + buttons[i]._size_cache) {

				new_hover = i;
				break;
			}
		}

		if (new_hover != hover) {
			hover = new_hover;
			emit_signal("mouse_sub_enter");
			update();
		}
	}
}
コード例 #2
0
void menu_button::signal_handler_left_button_click(const event::ui_event event, bool& handled)
{
	assert(get_window());
	DBG_GUI_E << LOG_HEADER << ' ' << event << ".\n";

	sound::play_UI_sound(settings::sound_button_click);

	// If a button has a retval do the default handling.
	dialogs::drop_down_menu droplist(this->get_rectangle(), this->values_, this->selected_, this->get_use_markup(), this->keep_open_,
		nullptr);

	if(droplist.show()) {
		const int selected = droplist.selected_item();

		// Safety check. If the user clicks a selection in the dropdown and moves their mouse away too
		// quickly, selected_ could be set to -1. This returns in that case, preventing crashes.
		if(selected < 0) {
			return;
		}

		set_selected(selected, true);

		if(retval_ != 0) {
			if(window* window = get_window()) {
				window->set_retval(retval_);
				return;
			}
		}
	}

	handled = true;
}
コード例 #3
0
ファイル: ui-menu.c プロジェクト: rcmorano/TBO
gboolean
clone_obj_cb (GtkWidget *widget, gpointer data)
{
    tbo_object *obj = selector_tool_get_selected_obj ();
    Frame *frame = selector_tool_get_selected_frame ();
    Page *page = tbo_comic_get_current_page (((TboWindow*)data)->comic);

    if (!get_frame_view () && frame)
    {
        Frame *cloned_frame = tbo_frame_clone (frame);
        cloned_frame->x += 10;
        cloned_frame->y -= 10;
        tbo_page_add_frame (page, cloned_frame);
        set_selected (cloned_frame, (TboWindow*)data);
    }
    else if (obj && get_frame_view ())
    {
        tbo_object *cloned_obj = obj->clone (obj);
        cloned_obj->x += 10;
        cloned_obj->y -= 10;
        tbo_frame_add_obj (frame, cloned_obj);
        set_selected_obj (cloned_obj, (TboWindow*)data);
    }
    update_drawing ((TboWindow *)data);
    return FALSE;
}
コード例 #4
0
Node3D::Node3D(int index, int symbol, QColor color, int size)
{
    set_index(index);
    set_coordinates(_random(), _random(), _random());
    set_size(1);
    set_marked(false);
    set_selected(false);
    set_label("");
}
コード例 #5
0
ファイル: shell-menu.c プロジェクト: RainCT/gnome-shell
static gboolean
shell_menu_leave_event (ClutterActor         *actor,
                        ClutterCrossingEvent *event)
{
  ShellMenu *box = SHELL_MENU (actor);

  set_selected (box, NULL);

  return TRUE;
}
コード例 #6
0
ファイル: shell-menu.c プロジェクト: MarkieMark/gnome-shell
static gboolean
shell_menu_leave_event (ClutterActor         *actor,
                        ClutterCrossingEvent *event)
{
  ShellMenu *menu = SHELL_MENU (actor);

  set_selected (menu, NULL);

  return CLUTTER_ACTOR_CLASS (shell_menu_parent_class)->leave_event (actor, event);
}
コード例 #7
0
void    GLUI_RadioGroup::set_int_val( int new_val )
{
  if ( new_val == int_val )
    return;

  set_selected( new_val );
  draw_group( true );  

  output_live(true);
     
}
コード例 #8
0
ファイル: shell-menu.c プロジェクト: MarkieMark/gnome-shell
static gboolean
shell_menu_enter_event (ClutterActor         *actor,
                        ClutterCrossingEvent *event)
{
  ShellMenu *menu = SHELL_MENU (actor);

  if (container_contains (CLUTTER_CONTAINER (menu), event->source) &&
      event->source != CLUTTER_ACTOR (menu))
    set_selected (menu, event->source);

  return CLUTTER_ACTOR_CLASS (shell_menu_parent_class)->enter_event (actor, event);
}
コード例 #9
0
void tdrop_button::create_drop_listbox(
		bool& handled,
		bool& halt) {
	handled = halt = true;
	CVideo& video = get_window()->video();
	tdrop_listbox dlg(get_origin(), vals_, linked_groups_, list_builder_, transform_, selected_);
	dlg.show(video);
	int ret = dlg.get_retval();
	if (ret >= 0) {
		set_selected(ret);
		if (callback_selection_changed_) {
			callback_selection_changed_(this, ret);
		}
	}
}
コード例 #10
0
ファイル: Fl_Tool_Bar.cpp プロジェクト: GustavoMOG/efltk
 int handle(int ev) {
     if(ev==FL_PUSH && Fl::event_is_click()) {
         if(Fl::event_button()==FL_LEFT_MOUSE) {
             set_selected();
             redraw();
             menu->anim_flags(Fl_Menu_::LEFT_TO_RIGHT);
             menu->Fl_Group::focus(-1);
             menu->popup(w(), 0);
             clear_selected();
             redraw();
             return 1;
         }
     }
     return Fl_Widget::handle(ev);
 }
コード例 #11
0
ファイル: button_array.cpp プロジェクト: jay3d/godot
bool ButtonArray::_set(const StringName& p_name, const Variant& p_value) {

    String n=String(p_name);
    if (n.begins_with("button/")) {

        String what = n.get_slicec('/',1);
        if (what=="count") {
            int new_size=p_value;
            if (new_size>0 && buttons.size()==0) {
                selected=0;
            }

            if (new_size < buttons.size()) {
                if (selected>=new_size)
                    selected=new_size-1;
            }
            buttons.resize(new_size);
            _change_notify();
            minimum_size_changed();
        } else if (what=="align") {
            set_align(Align(p_value.operator int()));
        } else if (what=="selected") {
            set_selected(p_value);
        } else if (what == "min_button_size") {
            min_button_size = p_value;
        } else {
            int idx=what.to_int();
            ERR_FAIL_INDEX_V(idx,buttons.size(),false);
            String f = n.get_slicec('/',2);
            if (f=="text")
                buttons[idx].text=p_value;
            else if (f=="tooltip")
                buttons[idx].tooltip=p_value;
            else if (f=="icon")
                buttons[idx].icon=p_value;
            else
                return false;

        }

        update();
        return true;
    }

    return false;

}
コード例 #12
0
ファイル: shell-menu.c プロジェクト: RainCT/gnome-shell
static gboolean
shell_menu_enter_event (ClutterActor         *actor,
                        ClutterCrossingEvent *event)
{
  ShellMenu *box = SHELL_MENU (actor);

  if (!shell_menu_contains (box, event->source))
    return TRUE;

  if (event->source == (ClutterActor*)box)
    return TRUE;

  if (g_object_get_data (G_OBJECT (event->source), "shell-is-separator"))
    return TRUE;

  set_selected (box, event->source);

  return TRUE;
}
コード例 #13
0
ファイル: ui-menu.c プロジェクト: rcmorano/TBO
gboolean
delete_obj_cb (GtkWidget *widget, gpointer data)
{
    TboWindow *tbo = (TboWindow *)data;

    tbo_object *obj = selector_tool_get_selected_obj ();
    Frame *frame = selector_tool_get_selected_frame ();
    Page *page = tbo_comic_get_current_page (((TboWindow*)data)->comic);

    if (obj && get_frame_view ())
    {
        tbo_frame_del_obj (frame, obj);
        set_selected_obj (NULL, tbo);
    }
    else if (!get_frame_view () && frame)
    {
        tbo_page_del_frame (page, frame);
        set_selected (NULL, tbo);
    }
    update_drawing ((TboWindow *)data);
    return FALSE;
}
コード例 #14
0
void SceneTreeEditor::_cell_button_pressed(Object *p_item,int p_column,int p_id) {

	TreeItem *item=p_item->cast_to<TreeItem>();
	ERR_FAIL_COND(!item);

	NodePath np = item->get_metadata(0);

	Node *n=get_node(np);
	ERR_FAIL_COND(!n);

	if (p_id==BUTTON_SUBSCENE) {
		//open scene request
		Rect2 item_rect = tree->get_item_rect(item,0);
		item_rect.pos.y-=tree->get_scroll().y;
		item_rect.pos+=tree->get_global_pos();

		if (n==get_scene_node()) {
			inheritance_menu->set_pos(item_rect.pos+Vector2(0,item_rect.size.y));
			inheritance_menu->set_size(Vector2(item_rect.size.x,0));
			inheritance_menu->popup();
			instance_node=n->get_instance_ID();

		} else {
			instance_menu->set_pos(item_rect.pos+Vector2(0,item_rect.size.y));
			instance_menu->set_size(Vector2(item_rect.size.x,0));
			if (EditorNode::get_singleton()->get_edited_scene()->is_editable_instance(n))
				instance_menu->set_item_checked(0,true);
			else
				instance_menu->set_item_checked(0,false);

			if (n->get_owner()==get_scene_node()) {
				instance_menu->set_item_checked(1,n->get_scene_instance_load_placeholder());
				instance_menu->set_item_disabled(1,false);
			} else {

				instance_menu->set_item_checked(1,false);
				instance_menu->set_item_disabled(1,true);
			}

			instance_menu->popup();
			instance_node=n->get_instance_ID();
		}
		//emit_signal("open",n->get_filename());
	} else if (p_id==BUTTON_SCRIPT) {
		RefPtr script=n->get_script();
		if (!script.is_null())
			emit_signal("open_script",script);

	} else if (p_id==BUTTON_VISIBILITY) {


		if (n->is_type("Spatial")) {

			Spatial *ci = n->cast_to<Spatial>();
			if (!ci->is_visible() && ci->get_parent_spatial() && !ci->get_parent_spatial()->is_visible()) {
				error->set_text(TTR("This item cannot be made visible because the parent is hidden. Unhide the parent first."));
				error->popup_centered_minsize();
				return;
			}

			bool v = !bool(n->call("is_hidden"));
			undo_redo->create_action(TTR("Toggle Spatial Visible"));
			undo_redo->add_do_method(n,"_set_visible_",!v);
			undo_redo->add_undo_method(n,"_set_visible_",v);
			undo_redo->commit_action();
		} else if (n->is_type("CanvasItem")) {

			CanvasItem *ci = n->cast_to<CanvasItem>();
			if (!ci->is_visible() && ci->get_parent_item() && !ci->get_parent_item()->is_visible()) {
				error->set_text(TTR("This item cannot be made visible because the parent is hidden. Unhide the parent first."));
				error->popup_centered_minsize();
				return;
			}
			bool v = !bool(n->call("is_hidden"));
			undo_redo->create_action(TTR("Toggle CanvasItem Visible"));
			undo_redo->add_do_method(n,v?"hide":"show");
			undo_redo->add_undo_method(n,v?"show":"hide");
			undo_redo->commit_action();
		}

	} else if (p_id==BUTTON_LOCK) {

		if (n->is_type("CanvasItem")) {
			n->set_meta("_edit_lock_", Variant());
			_update_tree();
			emit_signal("node_changed");
		}

	} else if (p_id==BUTTON_GROUP) {
		if (n->is_type("CanvasItem")) {
			n->set_meta("_edit_group_", Variant());
			_update_tree();
			emit_signal("node_changed");
		}
	} else if (p_id==BUTTON_WARNING) {

		String config_err = n->get_configuration_warning();
		if (config_err==String())
			return;
		config_err=config_err.word_wrap(80);
		warning->set_text(config_err);
		warning->popup_centered_minsize();

	} else if (p_id==BUTTON_SIGNALS) {

		editor_selection->clear();
		editor_selection->add_node(n);

		set_selected(n);

		NodeDock::singleton->get_parent()->call("set_current_tab",NodeDock::singleton->get_index());
		NodeDock::singleton->show_connections();

	} else if (p_id==BUTTON_GROUPS) {

		editor_selection->clear();
		editor_selection->add_node(n);

		set_selected(n);

		NodeDock::singleton->get_parent()->call("set_current_tab",NodeDock::singleton->get_index());
		NodeDock::singleton->show_groups();
	}
}
コード例 #15
0
void tdrop_button::set_items(const std::vector<std::string>& vals) {
	vals_ = vals; 
	set_selected(selected_);
}
コード例 #16
0
ファイル: menu_button.hpp プロジェクト: Wedge009/wesnoth
	/** Inherited from selectable_item */
	virtual void set_value(const unsigned value ) override { set_selected(value); }
コード例 #17
0
void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_id) {

	if (connect_to_script_mode) {
		return; //don't do anything in this mode
	}
	TreeItem *item = Object::cast_to<TreeItem>(p_item);
	ERR_FAIL_COND(!item);

	NodePath np = item->get_metadata(0);

	Node *n = get_node(np);
	ERR_FAIL_COND(!n);

	if (p_id == BUTTON_SUBSCENE) {
		if (n == get_scene_node()) {
			if (n && n->get_scene_inherited_state().is_valid()) {
				emit_signal("open", n->get_scene_inherited_state()->get_path());
			}
		} else {
			emit_signal("open", n->get_filename());
		}
	} else if (p_id == BUTTON_SCRIPT) {
		RefPtr script = n->get_script();
		if (!script.is_null())
			emit_signal("open_script", script);

	} else if (p_id == BUTTON_VISIBILITY) {
		undo_redo->create_action(TTR("Toggle Visible"));
		_toggle_visible(n);
		List<Node *> selection = editor_selection->get_selected_node_list();
		if (selection.size() > 1 && selection.find(n) != NULL) {
			for (List<Node *>::Element *E = selection.front(); E; E = E->next()) {
				Node *nv = E->get();
				ERR_FAIL_COND(!nv);
				if (nv == n) {
					continue;
				}
				_toggle_visible(nv);
			}
		}
		undo_redo->commit_action();
	} else if (p_id == BUTTON_LOCK) {
		undo_redo->create_action(TTR("Unlock Node"));

		if (n->is_class("CanvasItem") || n->is_class("Spatial")) {

			undo_redo->add_do_method(n, "remove_meta", "_edit_lock_");
			undo_redo->add_undo_method(n, "set_meta", "_edit_lock_", true);
			undo_redo->add_do_method(this, "_update_tree", Variant());
			undo_redo->add_undo_method(this, "_update_tree", Variant());
			undo_redo->add_do_method(this, "emit_signal", "node_changed");
			undo_redo->add_undo_method(this, "emit_signal", "node_changed");
		}
		undo_redo->commit_action();
	} else if (p_id == BUTTON_PIN) {

		if (n->is_class("AnimationPlayer")) {
			AnimationPlayerEditor::singleton->unpin();
			_update_tree();
		}

	} else if (p_id == BUTTON_GROUP) {
		undo_redo->create_action(TTR("Button Group"));

		if (n->is_class("CanvasItem") || n->is_class("Spatial")) {

			undo_redo->add_do_method(n, "remove_meta", "_edit_group_");
			undo_redo->add_undo_method(n, "set_meta", "_edit_group_", true);
			undo_redo->add_do_method(this, "_update_tree", Variant());
			undo_redo->add_undo_method(this, "_update_tree", Variant());
			undo_redo->add_do_method(this, "emit_signal", "node_changed");
			undo_redo->add_undo_method(this, "emit_signal", "node_changed");
		}
		undo_redo->commit_action();
	} else if (p_id == BUTTON_WARNING) {

		String config_err = n->get_configuration_warning();
		if (config_err == String())
			return;
		config_err = config_err.word_wrap(80);
		warning->set_text(config_err);
		warning->popup_centered_minsize();

	} else if (p_id == BUTTON_SIGNALS) {

		editor_selection->clear();
		editor_selection->add_node(n);

		set_selected(n);

		NodeDock::singleton->get_parent()->call("set_current_tab", NodeDock::singleton->get_index());
		NodeDock::singleton->show_connections();

	} else if (p_id == BUTTON_GROUPS) {

		editor_selection->clear();
		editor_selection->add_node(n);

		set_selected(n);

		NodeDock::singleton->get_parent()->call("set_current_tab", NodeDock::singleton->get_index());
		NodeDock::singleton->show_groups();
	}
}