Ejemplo n.º 1
0
void
sample_save_as_cb(GtkWidget * widget, gpointer data)
{
  GtkWidget *dialog;
  gint win_width, win_height;
  sw_view * view = (sw_view *)data;
  sw_sample * sample;
  GtkWidget * save_options;
  GtkWidget * frame;
  GtkWidget * hbox;
  GtkWidget * label;
  GtkWidget * option_menu;
  GtkWidget * save_menu;
  struct stat statbuf;
  gchar *filename;
  gint retval;

  save_as_data * sd;

  char buf[512];

  win_width = gdk_screen_width () / 2;
  win_height = gdk_screen_height () / 2;

  sample = view->sample;

  dialog = gtk_file_chooser_dialog_new (_("Sweep: Save file"),
				      GTK_WINDOW(view->window),
				      GTK_FILE_CHOOSER_ACTION_SAVE,
				      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
				      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
				      NULL);


  //gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
  attach_window_close_accel(GTK_WINDOW(dialog));
  sweep_set_window_icon (GTK_WINDOW(dialog));

  save_options = gtk_hbox_new (TRUE, 1);

  frame = gtk_frame_new (_("Save Options"));
  gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
  gtk_box_pack_start (GTK_BOX (save_options), frame, TRUE, TRUE, 4);

  hbox = gtk_hbox_new (FALSE, 4);
  gtk_container_set_border_width (GTK_CONTAINER (hbox), 4);
  gtk_container_add (GTK_CONTAINER (frame), hbox);
  gtk_widget_show (hbox);

  label = gtk_label_new (_("Determine File Type:"));
  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
  gtk_widget_show (label);

  option_menu = gtk_option_menu_new ();
  gtk_box_pack_start (GTK_BOX (hbox), option_menu, TRUE, TRUE, 0);
  gtk_widget_show (option_menu);

  save_menu = create_save_menu (sample);
  gtk_option_menu_set_menu (GTK_OPTION_MENU (option_menu), save_menu);

  gtk_widget_show (frame);

  /* pack the containing save_options hbox into the save-dialog */
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
		    save_options, FALSE, FALSE, 0);

  gtk_widget_show (save_options);

  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
  gtk_widget_set_size_request (dialog, win_width, win_height);

  if (strcmp (g_path_get_dirname(sample->pathname), ".") == 0) {
    char last_save [512];

    prefs_get_string (LAST_SAVE_KEY, last_save, sizeof (last_save), "");

    if (last_save [0]) {
      gchar * last_save_dir = g_dirname (last_save);

	  gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(dialog),
				      last_save_dir);
      gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(dialog),
				      sample->pathname);

      g_free (last_save_dir);
    }
  } else {
     retval =  gtk_file_chooser_set_filename (GTK_FILE_CHOOSER(dialog),
				    sample->pathname);
        /* FIXME: bug (local only?) causes gtk_file_chooser_set_filename
           to fail silently in some cases*/
        filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
        //printf("filename pre: %s\n", filename);
        //printf("sample->pathname: %s\n", sample->pathname);

  }

  retval = gtk_dialog_run (GTK_DIALOG (dialog));

  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
  //printf("filename post: %s\n", filename);
  sample = view->sample;
  sd = g_malloc (sizeof (save_as_data));
  sd->sample = sample;
  sd->pathname = filename;

  if (retval == GTK_RESPONSE_ACCEPT) {

    if (!sweep_dir_exists (filename)) {
      g_free (sd);
      g_free (filename);
      return;
    }

    if (stat (filename, &statbuf) == -1) {
      switch (errno) {
      case ENOENT:
        /* If it doesn't exist, it's ok to save as */
        overwrite_ok_cb (NULL, sd);
        break;
      default:
        sweep_perror (errno, filename);
        break;
      }
    } else {
      /* file exists */

      if (access(filename, W_OK) == -1) {
        sweep_perror (errno, _("You are not allowed to write to\n%s"), filename);
      } else {
        snprintf (buf, sizeof (buf), _("%s exists. Overwrite?"), filename);

        question_dialog_new (sample, _("File exists"), buf,
		  	   _("Overwrite"), _("Don't overwrite"),
			     G_CALLBACK (overwrite_ok_cb), sd, G_CALLBACK (overwrite_cancel_cb), sd,
			     SWEEP_EDIT_MODE_META);
      }
    }
    /* FIXME: wrapped this due to the above gtk_file_chooser_set_filename problem */
    } else if (sd->pathname != NULL) {
      gchar msg [1024];

      snprintf (msg, sizeof (msg), _("Save as %s cancelled"), g_path_get_basename (sd->pathname));
      sample_set_tmp_message (sd->sample, msg);
    } else {

    g_free (sd);
    g_free (filename);
    }
  gtk_widget_destroy (dialog);


}
Ejemplo n.º 2
0
Sint32 vbutton::do_call(Sint32 whatfunc, Sint32 arg)
{
	switch (whatfunc)
	{
		case BEGINMENU:
			return beginmenu(arg);
		case CREATE_TEAM_MENU:
			return create_team_menu(arg);
		case SET_PLAYER_MODE:
			return set_player_mode(arg);
		case QUIT_MENU:
			quit(arg);
			return 1;
		case CREATE_VIEW_MENU:
			return create_view_menu(arg);
		case CREATE_EDIT_MENU:
			return create_edit_menu(arg);
		case CREATE_BUY_MENU:
			return create_buy_menu(arg);
		case CREATE_LOAD_MENU:
			return create_load_menu(arg);
		case CREATE_SAVE_MENU:
			return create_save_menu(arg);
		case GO_MENU:
			return go_menu(arg);
		case RETURN_MENU:
			return arg;
		case CYCLE_TEAM_GUY:
			return cycle_team_guy(arg);
		case DECREASE_STAT:
			return decrease_stat(arg);
		case INCREASE_STAT:
			return increase_stat(arg);
		case EDIT_GUY:
			return edit_guy(arg);
		case CYCLE_GUY:
			return cycle_guy(arg);
		case ADD_GUY:
			return add_guy(arg);
		case DO_SAVE:
			return do_save(arg);
		case DO_LOAD:
			return do_load(arg);
		case NAME_GUY: // name some guy
			return name_guy(arg);
		case CREATE_DETAIL_MENU:
			return create_detail_menu(NULL);
		case DO_SET_SCEN_LEVEL:
			return do_set_scen_level(arg);
		case SET_DIFFICULTY:
			return set_difficulty();
		case CHANGE_TEAM:
			return change_teamnum(arg);
		case CHANGE_HIRE_TEAM:
			return change_hire_teamnum(arg);
		case ALLIED_MODE:
			return change_allied();
		case YES_OR_NO:
			return yes_or_no(arg);
		default:
			return 4;
	}
}
Ejemplo n.º 3
0
Sint32 vbutton::do_call(Sint32 whatfunc, Sint32 arg)
{
    switch (whatfunc)
    {
    case BEGINMENU:
        return beginmenu(arg);
    case CREATE_TEAM_MENU:
        return create_team_menu(arg);
    case SET_PLAYER_MODE:
        return set_player_mode(arg);
    case QUIT_MENU:
        quit(arg);
        return 1;
    case CREATE_VIEW_MENU:
        return create_view_menu(arg);
    case CREATE_TRAIN_MENU:
        return create_train_menu(arg);
    case CREATE_HIRE_MENU:
        return create_hire_menu(arg);
    case CREATE_LOAD_MENU:
        return create_load_menu(arg);
    case CREATE_SAVE_MENU:
        return create_save_menu(arg);
    case GO_MENU:
        return go_menu(arg);
    case RETURN_MENU:
        return arg;
    case CYCLE_TEAM_GUY:
        return cycle_team_guy(arg);
    case DECREASE_STAT:
        return decrease_stat(arg);
    case INCREASE_STAT:
        return increase_stat(arg);
    case EDIT_GUY:
        return edit_guy(arg);
    case CYCLE_GUY:
        return cycle_guy(arg);
    case ADD_GUY:
        return add_guy(arg);
    case DO_SAVE:
        return do_save(arg);
    case DO_LOAD:
        return do_load(arg);
    case NAME_GUY: // name some guy
        return name_guy(arg);
    case CREATE_DETAIL_MENU:
        return create_detail_menu(NULL);
    case DO_SET_SCEN_LEVEL:
        return do_set_scen_level(arg);
    case DO_PICK_CAMPAIGN:
        return do_pick_campaign(arg);
    case SET_DIFFICULTY:
        return set_difficulty();
    case CHANGE_TEAM:
        return change_teamnum(arg);
    case CHANGE_HIRE_TEAM:
        return change_hire_teamnum(arg);
    case ALLIED_MODE:
        return change_allied();
    case DO_LEVEL_EDIT:
        return level_editor();
    case YES_OR_NO:
        return yes_or_no(arg);
    case MAIN_OPTIONS:
        return main_options();
    case TOGGLE_SOUND:
        toggle_effect("sound", "sound");
        return REDRAW;
    case TOGGLE_RENDERING_ENGINE:
        toggle_rendering_engine();
        return REDRAW;
    case TOGGLE_FULLSCREEN:
        toggle_effect("graphics", "fullscreen");
        myscreen->set_fullscreen(cfg.is_on("graphics", "fullscreen"));
        return REDRAW;
    case OVERSCAN_ADJUST:
        return overscan_adjust(arg);
    case TOGGLE_MINI_HP_BAR:
        toggle_effect("effects", "mini_hp_bar");
        return REDRAW;
    case TOGGLE_HIT_FLASH:
        toggle_effect("effects", "hit_flash");
        return REDRAW;
    case TOGGLE_HIT_RECOIL:
        toggle_effect("effects", "hit_recoil");
        return REDRAW;
    case TOGGLE_ATTACK_LUNGE:
        toggle_effect("effects", "attack_lunge");
        return REDRAW;
    case TOGGLE_HIT_ANIM:
        toggle_effect("effects", "hit_anim");
        return REDRAW;
    case TOGGLE_DAMAGE_NUMBERS:
        toggle_effect("effects", "damage_numbers");
        return REDRAW;
    case TOGGLE_HEAL_NUMBERS:
        toggle_effect("effects", "heal_numbers");
        return REDRAW;
    case TOGGLE_GORE:
        toggle_effect("effects", "gore");
        return REDRAW;
    case RESTORE_DEFAULT_SETTINGS:
        restore_default_settings();
        cfg.load_settings();
        return REDRAW;
    default:
        return OK;
    }
}