Beispiel #1
0
int view_navigate_next(GtkTreeView *view)
{
	GtkTreeIter iter;
	GtkTreeModel *model;
	GtkTreePath *path;
	GtkTreeSelection *selection;

	path = view_get_current_path(view, &model, &selection);
	if (path != NULL) {
		gtk_tree_path_next(path);
		if (!gtk_tree_model_get_iter(model, &iter, path) &&
		    gtk_tree_model_get_iter_first(model, &iter)) {

			gtk_tree_path_free(path);
			path = gtk_tree_model_get_path(model, &iter);
		}

	}

	if (path != NULL) {
		select_path(view, selection, path);
		gtk_tree_path_free(path);
	}

	return path != NULL;

}
Beispiel #2
0
int view_navigate_prev(GtkTreeView *view)
{
	GtkTreeModel *model;
	GtkTreePath *path;
	GtkTreeSelection *selection;

	path = view_get_current_path(view, &model, &selection);
	if (path != NULL) {
		if (!gtk_tree_path_prev(path)) {
			gtk_tree_path_free(path);
			path = tree_model_get_path_last(model);
		}
	}

	if (path != NULL) {
		select_path(view, selection, path);
		gtk_tree_path_free(path);
	}

	return path != NULL;
}
Beispiel #3
0
//for most cases, this takes world coordinates, but not always!!!
void g1_human_class::player_clicked(g1_object_class * obj, float gx, float gy,w32 command)
{
	g1_object_type convoy_type=g1_get_object_type(li_convoy.get());

	switch (command)
	{
		case DEFAULT:
			{
				if (obj && obj->player_num==team() && obj->get_flag(g1_object_class::SELECTABLE))
				{
					clear_selected();

					if (obj == commander())
					{
						selected_object = 0;
					}
					else
					{

						g1_convoy_class * c=(g1_convoy_class *)g1_object_type_array[convoy_type]->create_object(convoy_type,0);
						c->setup(obj);
						c->player_num=team();
						selected_object=c;
						selected_object->mark_as_selected();
					}
				}
				else if (selected_object.valid())
				{
					send_selected_units(gx,gy);
				}
				else
				{
					select_path(gx,gy);
				}
			} break;
		case ATTACK:
			{
				if (selected_object.valid()&&selected_object->player_num==team())
				{
					attack_unit(obj,gx,gy);
				}                  //remember: this only works if
				//target is in range
				break;
			}
		case GOTO:
			if (selected_object.valid()&&selected_object->player_num==team())
			{
				send_selected_units(gx,gy);
			}
			break;
		case SELECT:
			{
				//single objects can be selected, even if they don't
				//belong to the local user
				if (!obj/*||obj->player_num!=team()
						||!obj->get_flag(g1_object_class::SELECTABLE) */)
				{
					break;
				}

				clear_selected();

				g1_convoy_class * c=(g1_convoy_class *)g1_create_object(convoy_type);
				c->player_num=obj->player_num;
				if (!obj->get_flag(g1_object_class::SELECTABLE))
				{
					c->player_num=0;
				}              //a slight hack to prevent the user
							   //from actually sending commands
							   //to this unit.
				c->setup(obj);
				selected_object=c;
				selected_object->mark_as_selected();

				break;
			}

		case ADD_TO_LIST:
			{
				if ((selected_object.valid()&&selected_object->id!=g1_get_object_type(li_convoy.get())) ||
					!obj || obj->player_num!=team() ||
					!obj->get_flag(g1_object_class::SELECTABLE))
				{
					break;
				}
				if (!selected_object.valid())
				{
					g1_convoy_class * cn=(g1_convoy_class *) g1_create_object(convoy_type);
					cn->player_num=team();
					cn->setup(obj);
					selected_object=cn;
					cn->mark_as_selected();
					break;
				}
				((g1_convoy_class *)selected_object.get())->add_object(obj);

			} break;
		case START_DRAG:
			{
				dragstartx=gx; //Screen coordinates!!!
				dragstarty=gy;
				break;
			}

		case DRAGGING:
			{
				dragdestx=gx;
				dragdesty=gy;
				//w16 mod;
				//if (i4_current_app->get_window_manager()->shift_pressed())
				//  mod=ADD_TO_OLD;
				//else if (i4_current_app->get_window_manager()->alt_pressed())
				//    mod=SUB_FROM_OLD;
				//else
				//    mod=CLEAR_OLD;
				//select_objects_in_range(dragstartx,dragstarty,dragendx,dragendy,mod);
			} break;

		case END_DRAG:
			{
				dragstartx=dragstarty=dragdestx=dragdesty=-1;
			} break;

		case SELECT_PATH:
			{
				select_path(gx,gy);
			} break;

		default:
			break;
	}
}