⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xo-callbacks.c

📁 高手写的手写代码!欢迎大家下载,共同交流,如果有问题,请联系我!谢谢!
💻 C
📖 第 1 页 / 共 5 页
字号:
#ifdef HAVE_CONFIG_H#  include <config.h>#endif#include <math.h>#include <string.h>#include <gtk/gtk.h>#include <libgnomecanvas/libgnomecanvas.h>#include <time.h>#include <libgnomeprintui/gnome-print-dialog.h>#include <glib/gstdio.h>#include "xournal.h"#include "xo-callbacks.h"#include "xo-interface.h"#include "xo-support.h"#include "xo-misc.h"#include "xo-file.h"#include "xo-paint.h"#include "xo-print.h"voidon_fileNew_activate                    (GtkMenuItem     *menuitem,                                        gpointer         user_data){  end_text();  reset_focus();  if (close_journal()) {    new_journal();    ui.zoom = ui.startup_zoom;    update_page_stuff();    gtk_adjustment_set_value(gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)), 0);    gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);  }}voidon_fileNewBackground_activate          (GtkMenuItem     *menuitem,                                        gpointer         user_data){  GtkWidget *dialog, *attach_opt;  GtkFileFilter *filt_all, *filt_pdf;  char *filename;  int file_domain;  gboolean success;    end_text();  reset_focus();  if (!ok_to_close()) return; // user aborted on save confirmation    dialog = gtk_file_chooser_dialog_new("Open PDF", GTK_WINDOW (winMain),     GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,     GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL);       filt_all = gtk_file_filter_new();  gtk_file_filter_set_name(filt_all, "All files");  gtk_file_filter_add_pattern(filt_all, "*");  filt_pdf = gtk_file_filter_new();  gtk_file_filter_set_name(filt_pdf, "PDF files");  gtk_file_filter_add_pattern(filt_pdf, "*.pdf");  gtk_file_filter_add_pattern(filt_pdf, "*.PDF");  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_pdf);  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all);  if (ui.default_path!=NULL) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path);  attach_opt = gtk_check_button_new_with_label("Attach file to the journal");  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(attach_opt), FALSE);  gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER (dialog), attach_opt);    if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) {    gtk_widget_destroy(dialog);    return;  }  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(attach_opt)))       file_domain = DOMAIN_ATTACH;  else file_domain = DOMAIN_ABSOLUTE;    gtk_widget_destroy(dialog);  set_cursor_busy(TRUE);  ui.saved = TRUE; // force close_journal to work  close_journal();  while (bgpdf.status != STATUS_NOT_INIT) {    // waiting for pdf processes to finish dying    gtk_main_iteration();   }  new_journal();  ui.zoom = ui.startup_zoom;  gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);  update_page_stuff();  success = init_bgpdf(filename, TRUE, file_domain);  set_cursor_busy(FALSE);  if (success) {    g_free(filename);    return;  }    /* open failed */  dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,    GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error opening file '%s'", filename);  gtk_dialog_run(GTK_DIALOG(dialog));  gtk_widget_destroy(dialog);  g_free(filename);}voidon_fileOpen_activate                   (GtkMenuItem     *menuitem,                                        gpointer         user_data){  GtkWidget *dialog;  GtkFileFilter *filt_all, *filt_xoj;  char *filename;  gboolean success;    end_text();  reset_focus();  if (!ok_to_close()) return; // user aborted on save confirmation    dialog = gtk_file_chooser_dialog_new("Open Journal", GTK_WINDOW (winMain),     GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,     GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL);       filt_all = gtk_file_filter_new();  gtk_file_filter_set_name(filt_all, "All files");  gtk_file_filter_add_pattern(filt_all, "*");  filt_xoj = gtk_file_filter_new();  gtk_file_filter_set_name(filt_xoj, "Xournal files");  gtk_file_filter_add_pattern(filt_xoj, "*.xoj");  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_xoj);  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all);  if (ui.default_path!=NULL) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path);  if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) {    gtk_widget_destroy(dialog);    return;  }  filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));  gtk_widget_destroy(dialog);  set_cursor_busy(TRUE);  success = open_journal(filename);  set_cursor_busy(FALSE);  if (success) { g_free(filename); return; }    /* open failed */  dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,    GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error opening file '%s'", filename);  gtk_dialog_run(GTK_DIALOG(dialog));  gtk_widget_destroy(dialog);  g_free(filename);}voidon_fileSave_activate                   (GtkMenuItem     *menuitem,                                        gpointer         user_data){  GtkWidget *dialog;    end_text();  reset_focus();  if (ui.filename == NULL) {    on_fileSaveAs_activate(menuitem, user_data);    return;  }  set_cursor_busy(TRUE);  if (save_journal(ui.filename)) { // success    set_cursor_busy(FALSE);    ui.saved = TRUE;    return;  }  set_cursor_busy(FALSE);  /* save failed */  dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,    GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error saving file '%s'", ui.filename);  gtk_dialog_run(GTK_DIALOG(dialog));  gtk_widget_destroy(dialog);}voidon_fileSaveAs_activate                 (GtkMenuItem     *menuitem,                                        gpointer         user_data){  GtkWidget *dialog, *warning_dialog;  GtkFileFilter *filt_all, *filt_xoj;  char *filename;  char stime[30];  time_t curtime;  gboolean warn;  struct stat stat_buf;    end_text();  reset_focus();  dialog = gtk_file_chooser_dialog_new("Save Journal", GTK_WINDOW (winMain),     GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,     GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL);       if (ui.filename!=NULL) {    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), ui.filename);    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), g_basename(ui.filename));  }   else  if (bgpdf.status!=STATUS_NOT_INIT && bgpdf.file_domain == DOMAIN_ABSOLUTE       && bgpdf.filename != NULL) {    filename = g_strdup_printf("%s.xoj", bgpdf.filename->s);    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), filename);    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), g_basename(filename));    g_free(filename);   }  else {    curtime = time(NULL);    strftime(stime, 30, "%F-Note-%H-%M.xoj", localtime(&curtime));    if (ui.default_path!=NULL)      gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path);    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), stime);  }       filt_all = gtk_file_filter_new();  gtk_file_filter_set_name(filt_all, "All files");  gtk_file_filter_add_pattern(filt_all, "*");  filt_xoj = gtk_file_filter_new();  gtk_file_filter_set_name(filt_xoj, "Xournal files");  gtk_file_filter_add_pattern(filt_xoj, "*.xoj");  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_xoj);  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all);    // somehow this doesn't seem to be set by default  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);  do {    if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_OK) {      gtk_widget_destroy(dialog);      return;    }    filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));    warn = g_file_test (filename, G_FILE_TEST_EXISTS);    if (warn) { // ok to overwrite an empty file      if (!g_stat(filename, &stat_buf))        if (stat_buf.st_size == 0) warn=FALSE;    }    if (warn && ui.filename!=NULL) { // ok to overwrite oneself      if (ui.filename[0]=='/' && !strcmp(ui.filename, filename)) warn=FALSE;      if (ui.filename[0]!='/' && g_str_has_suffix(filename, ui.filename)) warn=FALSE;    }    if (warn) {      warning_dialog = gtk_message_dialog_new(GTK_WINDOW(winMain),         GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,        "Should the file %s be overwritten?", filename);      if (gtk_dialog_run(GTK_DIALOG(warning_dialog)) == GTK_RESPONSE_YES)        warn = FALSE;      gtk_widget_destroy(warning_dialog);    }  } while (warn);  gtk_widget_destroy(dialog);  set_cursor_busy(TRUE);  if (save_journal(filename)) { // success    ui.saved = TRUE;    set_cursor_busy(FALSE);    update_file_name(filename);    return;  }  set_cursor_busy(FALSE);  /* save failed */  dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,    GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error saving file '%s'", filename);  gtk_dialog_run(GTK_DIALOG(dialog));  gtk_widget_destroy(dialog);  g_free(filename);}voidon_filePrintOptions_activate           (GtkMenuItem     *menuitem,                                        gpointer         user_data){}voidon_filePrint_activate                  (GtkMenuItem     *menuitem,                                        gpointer         user_data){  GtkWidget *printDialog, *preview;  GnomePrintJob *gpj;  int fromPage, toPage;  int response;  char *in_fn;  guchar *s;  GnomePrintConfig *config = gnome_print_config_default();  end_text();  reset_focus();  if (ui.filename!=NULL) {    if (g_str_has_suffix(ui.filename, ".xoj")) {      in_fn = g_strdup(ui.filename);      g_strlcpy(g_strrstr(in_fn, "xoj"), "pdf", 4);    }     else      in_fn = g_strdup_printf("%s.pdf", ui.filename);    gnome_print_config_set(config, (guchar *)"Printer", (guchar *)"PDF");    gnome_print_config_set(config, (guchar *)GNOME_PRINT_KEY_OUTPUT_FILENAME, (guchar *)in_fn);    gnome_print_config_set(config, (guchar *)"Settings.Transport.Backend.FileName", (guchar *)in_fn);    g_strlcpy(g_strrstr(in_fn, "pdf"), "ps", 3);    gnome_print_config_set(config, (guchar *)"Printer", (guchar *)"GENERIC");    gnome_print_config_set (config, (guchar *)GNOME_PRINT_KEY_OUTPUT_FILENAME, (guchar *)in_fn);    s = gnome_print_config_get(config, (guchar *)"Settings.Transport.Backend.FileName");    if (s != NULL) {      g_free(s);      gnome_print_config_set(config, (guchar *)"Settings.Transport.Backend.FileName", (guchar *)in_fn);    }    g_free(in_fn);  }    gpj = gnome_print_job_new(config); /* was NULL */  gnome_print_config_unref(config);/* end */  printDialog = gnome_print_dialog_new(gpj, (guchar *)"Print", GNOME_PRINT_DIALOG_RANGE);  gnome_print_dialog_construct_range_page(GNOME_PRINT_DIALOG(printDialog),    GNOME_PRINT_RANGE_ALL | GNOME_PRINT_RANGE_RANGE,    1, journal.npages, (guchar *)"Current page", (guchar *)"Pages");  /* don't have "Current page" as option, else it becomes the default!! */    gtk_dialog_set_response_sensitive(GTK_DIALOG(printDialog),                         GNOME_PRINT_DIALOG_RESPONSE_PREVIEW, FALSE);  /* the print-job-preview "feature" is completely, hopelessly broken */                         response = gtk_dialog_run(GTK_DIALOG(printDialog));  if (response <= 0) {    gtk_widget_destroy(printDialog);    return;  }/*  if (response == GNOME_PRINT_DIALOG_RESPONSE_PREVIEW) {    print_job_render(gpj, 0, journal.npages-1);    gtk_widget_destroy(printDialog);    preview = gnome_print_job_preview_new(gpj, (guchar *)"Preview");    try_fix_print_preview_ui(preview);    gtk_window_set_modal(GTK_WINDOW(preview), TRUE);    gtk_widget_show_all(preview);  }*/  if (response == GNOME_PRINT_DIALOG_RESPONSE_PRINT) {    switch(gnome_print_dialog_get_range(GNOME_PRINT_DIALOG(printDialog))) {      case GNOME_PRINT_RANGE_RANGE:         gnome_print_dialog_get_range_page(GNOME_PRINT_DIALOG(printDialog), &fromPage, &toPage);        fromPage--;        toPage--;        break;      default:         fromPage = 0;         toPage = journal.npages-1;    }    gtk_widget_destroy(printDialog);    print_job_render(gpj, fromPage, toPage);  }}voidon_filePrintPDF_activate               (GtkMenuItem     *menuitem,                                        gpointer         user_data){  GtkWidget *dialog, *warning_dialog;  GtkFileFilter *filt_all, *filt_pdf;  char *filename, *in_fn;  char stime[30];  time_t curtime;  int response;  gboolean warn;    end_text();  reset_focus();  dialog = gtk_file_chooser_dialog_new("Export to PDF", GTK_WINDOW (winMain),     GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,     GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL);       if (ui.filename!=NULL) {    if (g_str_has_suffix(ui.filename, ".xoj")) {      in_fn = g_strdup(ui.filename);      g_strlcpy(g_strrstr(in_fn, "xoj"), "pdf", 4);    }     else      in_fn = g_strdup_printf("%s.pdf", ui.filename);    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), in_fn);    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), g_basename(in_fn));  } else {    curtime = time(NULL);    strftime(stime, 30, "%F-Note-%H-%M.pdf", localtime(&curtime));    if (ui.default_path!=NULL)      gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), ui.default_path);    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), stime);    in_fn = NULL;  }       filt_all = gtk_file_filter_new();  gtk_file_filter_set_name(filt_all, "All files");  gtk_file_filter_add_pattern(filt_all, "*");  filt_pdf = gtk_file_filter_new();  gtk_file_filter_set_name(filt_pdf, "PDF files");  gtk_file_filter_add_pattern(filt_pdf, "*.pdf");  gtk_file_filter_add_pattern(filt_pdf, "*.PDF");  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_pdf);  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), filt_all);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -