-Version ?:
+Version 0.2.1 (Jun 3, 2006):
+ - recently used files listed in file menu
+ - can change color or thickness of pen strokes in selection
+ - function to apply paper style to all pages
- can specify on command line a PDF file to annotate
+ - suggest a derived file name for PDF annotation
+ - speed up switching between pages
- fixed a bug in XInput initialization (thanks to Luca de Cicco)
+ - fixed a bug in print ranges (thanks to Mathieu Bouchard)
+ - fixed a refresh bug in rescaling bitmap backgrounds
Version 0.2 (Jan 29, 2006):
- PDF file annotation using xpdf's pdftoppm
-Version 0.2 (Jan 29, 2006)
+Version 0.2.1 (June 3, 2006)
Installation: see INSTALL
User's manual: see html-doc/manual.html
Updates: see http://math.mit.edu/~auroux/software/xournal/
+
+See also: http://sourceforge.net/projects/xournal
-Version 0.2 (Jan 29, 2006)
+Version 0.2.1 (June 3, 2006)
Installation: see INSTALL
User's manual: see html-doc/manual.html
Updates: see http://math.mit.edu/~auroux/software/xournal/
+
+See also: http://sourceforge.net/projects/xournal
AM_PROG_CC_STDC
AC_HEADER_STDC
-dnl set this var to NONE (PC) or other thing (Maemo)
-usehildon='NONE'
-if test "x$usehildon" != xNONE
-then
- pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0 hildon-libs libosso"
-else
- pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0"
-fi
+pkg_modules="gtk+-2.0 >= 2.4.0 libgnomecanvas-2.0 >= 2.4.0 libgnomeprintui-2.2 >= 2.0.0"
PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
AC_SUBST(PACKAGE_CFLAGS)
AC_SUBST(PACKAGE_LIBS)
-AM_CONDITIONAL(USE_HILDON, test "x$usehildon" != xNONE)
-
AC_OUTPUT([
Makefile
src/Makefile
Xournal User's Manual
</h2>
<p style="font-size: 0.95em; text-align: center; color: rgb(0,0,0)">
- Version 0.2
+ Version 0.2.1
</p>
<hr />
<p>
<a name="changelog"></a>
<h2 class="subtitle">Version history</h2>
<p>
+Version 0.2.1 (Jun 3, 2006):
+<ul>
+ <li>recently used files listed in file menu</li>
+ <li>can change color or thickness of pen strokes in selection</li>
+ <li>function to apply paper style to all pages</li>
+ <li>can specify on command line a PDF file to annotate</li>
+ <li>suggest a derived file name for PDF annotation</li>
+ <li>speed up switching between pages</li>
+ <li>fixed a bug in XInput initialization (thanks to Luca de Cicco)</li>
+ <li>fixed a bug in print ranges (thanks to Mathieu Bouchard)</li>
+ <li>fixed a refresh bug in rescaling bitmap backgrounds</li>
+</ul>
+</p>
+<p>
Version 0.2 (January 29, 2006):
<ul>
<li>PDF file annotation using xpdf's pdftoppm
-- print range bugfix (SEE PATCH?)
-- non-attached annotation => suggest a derived filename for save-as
- when opening a PDF file from command-line, store full path in name
-- gtk_message_dialog_format_secondary_text in xo-print.c crashes 2.4 ?
-- lasso selection tool
-- prefs file, save prefs
-- recent files list
+List of features to be implemented (not in any particular order)
+----------------------------------------------------------------
+
- map tools to stylus buttons (maybe: btn click on toolbar item affects
the corresponding tool; tool switching cleaner than for eraser)
-- flatten (incl undo/redo...) - enabled only if nlayers>1
-- bg: apply to all pages (SEE PATCH?)
-- recolor selection / change pen stroke thickness
-- resize selection
- move selection to another page by drag-drop
(should apply to vertspacer when origin moves to another page,
but in the up direction only do so when all the stuff fits on prev page)
(SEE ALSO FEATURE REQUEST 1472482 and reply to it - optional behavior too?)
+- lasso selection tool
+- prefs file, save prefs
+- flatten (incl undo/redo...) - enabled only if nlayers>1
+- resize selection
- text tool, font chooser, default font
- color chooser (papercolor, pen color); maybe more default colors
- printing: print-to-PDF? (with & without pdf background to merge)
opacity issue for highlighter strokes (maybe print them below ?)
save gnome printer settings (throughout a session, and on disk)
(maybe a separate config file .xournal/gnome-print-settings)
-....
- file print-options, own print-to-ps/pdf
- help index
- pressure sensitivity
- insert images (screen capture or from file or from clipboard),
not as full-page backgrounds (new ITEM type)
- more pen/highlighter shapes (chisel)
-- convert to/from Jarnal format
+- convert to/from Jarnal format; to/from MS Journal format???
- recalibration upon screen resize / compensation for miscalibration
gtk_widget_hide(GET_COMPONENT("filePrintOptions"));
gtk_widget_hide(GET_COMPONENT("journalFlatten"));
gtk_widget_hide(GET_COMPONENT("papercolorOther"));
- gtk_widget_hide(GET_COMPONENT("journalApplyAllPages"));
gtk_widget_hide(GET_COMPONENT("toolsText"));
gtk_widget_hide(GET_COMPONENT("buttonText"));
gtk_widget_hide(GET_COMPONENT("toolsSelectRegion"));
GdkScreen *screen;
int i;
struct Brush *b;
- gboolean can_xinput;
+ gboolean can_xinput, success;
+ gchar *tmppath, *tmpfn;
// we need an empty canvas prior to creating the journal structures
canvas = GNOME_CANVAS (gnome_canvas_new_aa ());
+ // initialize config file names
+ tmppath = g_build_filename(g_get_home_dir(), CONFIG_DIR, NULL);
+ g_mkdir(tmppath, 0700); // safer (MRU data may be confidential)
+ ui.mrufile = g_build_filename(tmppath, MRU_FILE, NULL);
+ g_free(tmppath);
+
// initialize data
// TODO: load this from a preferences file
undo = NULL; redo = NULL;
journal.pages = NULL;
bgpdf.status = STATUS_NOT_INIT;
-
- if (argc == 1) new_journal();
- else if (!open_journal(argv[1])) {
- new_journal();
- w = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error opening file '%s'", argv[1]);
- gtk_dialog_run(GTK_DIALOG(w));
- gtk_widget_destroy(w);
- }
+
+ new_journal();
ui.cur_item_type = ITEM_NONE;
ui.cur_item = NULL;
update_undo_redo_enabled();
update_copy_paste_enabled();
+
+ // show everything...
+
+ gtk_widget_show (winMain);
+ update_cursor();
+
+ // load the MRU
+
+ init_mru();
+
+ // and finally, open a file specified on the command line
+ // (moved here because display parameters weren't initialized yet...)
+
+ if (argc == 1) return;
+ set_cursor_busy(TRUE);
+ if (g_path_is_absolute(argv[1]))
+ tmpfn = g_strdup(argv[1]);
+ else {
+ tmppath = g_get_current_dir();
+ tmpfn = g_build_filename(tmppath, argv[1], NULL);
+ g_free(tmppath);
+ }
+ success = open_journal(tmpfn);
+ g_free(tmpfn);
+ set_cursor_busy(FALSE);
+ if (!success) {
+ w = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Error opening file '%s'", argv[1]);
+ gtk_dialog_run(GTK_DIALOG(w));
+ gtk_widget_destroy(w);
+ }
}
init_stuff (argc, argv);
- gtk_widget_show (winMain);
- update_cursor();
-
gtk_main ();
if (bgpdf.status != STATUS_NOT_INIT) shutdown_bgpdf();
if (bgpdf.status != STATUS_NOT_INIT) end_bgpdf_shutdown();
+
+ save_mru_list();
return 0;
}
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
if (ui.filename!=NULL) {
- if (ui.filename[0] == '/')
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), ui.filename);
- else
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), ui.filename);
- } else {
+ 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));
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), stime);
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;
}
else
in_fn = g_strdup_printf("%s.pdf", ui.filename);
- if (in_fn[0] == '/')
- gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), in_fn);
- gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER (dialog), in_fn);
+ 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));
GList *list, *itemlist;
struct UndoErasureData *erasure;
struct Item *it;
+ struct Brush tmp_brush;
struct Background *tmp_bg;
double tmp_x, tmp_y;
make_page_clipbox(undo->page);
}
update_canvas_bg(undo->page);
- do_switch_page(g_list_index(journal.pages, undo->page), TRUE);
+ do_switch_page(g_list_index(journal.pages, undo->page), TRUE, TRUE);
}
else if (undo->type == ITEM_NEW_DEFAULT_BG) {
tmp_bg = ui.default_page.bg;
// so do_switch_page() won't try to remap the layers of the defunct page
if (ui.pageno >= undo->val) ui.pageno--;
if (ui.pageno < 0) ui.pageno = 0;
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
else if (undo->type == ITEM_DELETE_PAGE) {
journal.pages = g_list_insert(journal.pages, undo->page, undo->val);
journal.npages++;
make_canvas_items(); // re-create the canvas items
- do_switch_page(undo->val, TRUE);
+ do_switch_page(undo->val, TRUE, TRUE);
}
else if (undo->type == ITEM_MOVESEL) {
for (itemlist = undo->itemlist; itemlist != NULL; itemlist = itemlist->next) {
undo->layer->group = NULL;
undo->page->layers = g_list_remove(undo->page->layers, undo->layer);
undo->page->nlayers--;
- do_switch_page(ui.pageno, FALSE); // don't stay with bad cur_layer info
+ do_switch_page(ui.pageno, FALSE, FALSE); // don't stay with bad cur_layer info
}
else if (undo->type == ITEM_DELETE_LAYER) {
// special case of -1: deleted the last layer, created a new one
"width-units", it->brush.thickness, NULL);
}
}
- do_switch_page(ui.pageno, FALSE); // show the restored layer & others...
+ do_switch_page(ui.pageno, FALSE, FALSE); // show the restored layer & others...
+ }
+ else if (undo->type == ITEM_REPAINTSEL) {
+ for (itemlist = undo->itemlist, list = undo->auxlist; itemlist!=NULL;
+ itemlist = itemlist->next, list = list->next) {
+ it = (struct Item *)itemlist->data;
+ g_memmove(&tmp_brush, &(it->brush), sizeof(struct Brush));
+ g_memmove(&(it->brush), list->data, sizeof(struct Brush));
+ g_memmove(list->data, &tmp_brush, sizeof(struct Brush));
+ if (it->type == ITEM_STROKE && it->canvas_item != NULL)
+ gnome_canvas_item_set(it->canvas_item,
+ "fill-color-rgba", it->brush.color_rgba,
+ "width-units", it->brush.thickness, NULL);
+ }
}
// move item from undo to redo stack
GList *list, *itemlist, *target;
struct UndoErasureData *erasure;
struct Item *it;
+ struct Brush tmp_brush;
struct Background *tmp_bg;
struct Layer *l;
double tmp_x, tmp_y;
make_page_clipbox(redo->page);
}
update_canvas_bg(redo->page);
- do_switch_page(g_list_index(journal.pages, redo->page), TRUE);
+ do_switch_page(g_list_index(journal.pages, redo->page), TRUE, TRUE);
}
else if (redo->type == ITEM_NEW_DEFAULT_BG) {
tmp_bg = ui.default_page.bg;
journal.pages = g_list_insert(journal.pages, redo->page, redo->val);
journal.npages++;
- do_switch_page(redo->val, TRUE);
+ do_switch_page(redo->val, TRUE, TRUE);
}
else if (redo->type == ITEM_DELETE_PAGE) {
// unmap all the canvas items
if (ui.pageno > undo->val || ui.pageno == journal.npages) ui.pageno--;
ui.cur_page = NULL;
// so do_switch_page() won't try to remap the layers of the defunct page
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
else if (redo->type == ITEM_MOVESEL) {
for (itemlist = redo->itemlist; itemlist != NULL; itemlist = itemlist->next) {
redo->page->bg->canvas_item);
redo->page->layers = g_list_insert(redo->page->layers, redo->layer, redo->val);
redo->page->nlayers++;
- do_switch_page(ui.pageno, FALSE);
+ do_switch_page(ui.pageno, FALSE, FALSE);
}
else if (redo->type == ITEM_DELETE_LAYER) {
gtk_object_destroy(GTK_OBJECT(redo->layer->group));
redo->page->layers = g_list_append(redo->page->layers, redo->layer2);
redo->page->nlayers++;
}
- do_switch_page(ui.pageno, FALSE);
+ do_switch_page(ui.pageno, FALSE, FALSE);
+ }
+ else if (redo->type == ITEM_REPAINTSEL) {
+ for (itemlist = redo->itemlist, list = redo->auxlist; itemlist!=NULL;
+ itemlist = itemlist->next, list = list->next) {
+ it = (struct Item *)itemlist->data;
+ g_memmove(&tmp_brush, &(it->brush), sizeof(struct Brush));
+ g_memmove(&(it->brush), list->data, sizeof(struct Brush));
+ g_memmove(list->data, &tmp_brush, sizeof(struct Brush));
+ if (it->type == ITEM_STROKE && it->canvas_item != NULL)
+ gnome_canvas_item_set(it->canvas_item,
+ "fill-color-rgba", it->brush.color_rgba,
+ "width-units", it->brush.thickness, NULL);
+ }
}
// move item from redo to undo stack
{
GtkAdjustment *v_adj;
double yscroll;
+ struct Page *pg;
if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem))) return;
if (ui.view_continuous) return;
ui.view_continuous = TRUE;
v_adj = gtk_layout_get_vadjustment(GTK_LAYOUT(canvas));
- yscroll = gtk_adjustment_get_value(v_adj) - ui.cur_page->voffset*ui.zoom;
+ pg = ui.cur_page;
+ yscroll = gtk_adjustment_get_value(v_adj) - pg->voffset*ui.zoom;
update_page_stuff();
- gtk_adjustment_set_value(v_adj, yscroll + ui.cur_page->voffset*ui.zoom);
+ gtk_adjustment_set_value(v_adj, yscroll + pg->voffset*ui.zoom);
// force a refresh
gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
}
on_viewFirstPage_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- do_switch_page(0, TRUE);
+ do_switch_page(0, TRUE, FALSE);
}
gpointer user_data)
{
if (ui.pageno == 0) return;
- do_switch_page(ui.pageno-1, TRUE);
+ do_switch_page(ui.pageno-1, TRUE, FALSE);
}
on_journalNewPageEnd_activate(menuitem, user_data);
return;
}
- do_switch_page(ui.pageno+1, TRUE);
+ do_switch_page(ui.pageno+1, TRUE, FALSE);
}
on_viewLastPage_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- do_switch_page(journal.npages-1, TRUE);
+ do_switch_page(journal.npages-1, TRUE, FALSE);
}
pg = new_page(ui.cur_page);
journal.pages = g_list_insert(journal.pages, pg, ui.pageno);
journal.npages++;
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
prepare_new_undo();
undo->type = ITEM_NEW_PAGE;
pg = new_page(ui.cur_page);
journal.pages = g_list_insert(journal.pages, pg, ui.pageno+1);
journal.npages++;
- do_switch_page(ui.pageno+1, TRUE);
+ do_switch_page(ui.pageno+1, TRUE, TRUE);
prepare_new_undo();
undo->type = ITEM_NEW_PAGE;
pg = new_page((struct Page *)g_list_last(journal.pages)->data);
journal.pages = g_list_append(journal.pages, pg);
journal.npages++;
- do_switch_page(journal.npages-1, TRUE);
+ do_switch_page(journal.npages-1, TRUE, TRUE);
prepare_new_undo();
undo->type = ITEM_NEW_PAGE;
if (ui.pageno == journal.npages) ui.pageno--;
ui.cur_page = NULL;
// so do_switch_page() won't try to remap the layers of the defunct page
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
make_page_clipbox(ui.cur_page);
update_canvas_bg(ui.cur_page);
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
rescale_bg_pixmaps();
}
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
void
gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
rescale_bg_pixmaps();
}
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
on_journalApplyAllPages_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
-
+ struct Page *page;
+ GList *pglist;
+
+ if (ui.cur_page->bg->type != BG_SOLID) return;
+ reset_selection();
+ for (pglist = journal.pages; pglist!=NULL; pglist = pglist->next) {
+ page = (struct Page *)pglist->data;
+ prepare_new_undo();
+ undo->type = ITEM_NEW_BG_RESIZE;
+ undo->page = page;
+ undo->bg = page->bg;
+ undo->val_x = page->width;
+ undo->val_y = page->height;
+ if (pglist->next!=NULL) undo->multiop |= MULTIOP_CONT_REDO;
+ if (pglist->prev!=NULL) undo->multiop |= MULTIOP_CONT_UNDO;
+ page->bg = (struct Background *)g_memdup(ui.cur_page->bg, sizeof(struct Background));
+ page->width = ui.cur_page->width;
+ page->height = ui.cur_page->height;
+ page->bg->canvas_item = undo->bg->canvas_item;
+ undo->bg->canvas_item = NULL;
+
+ make_page_clipbox(page);
+ update_canvas_bg(page);
+ }
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
ui.pageno++;
tmppage = g_list_nth_data(journal.pages, ui.pageno);
}
- if (page_change) do_switch_page(ui.pageno, FALSE);
+ if (page_change) do_switch_page(ui.pageno, FALSE, FALSE);
// can't paint on the background...
GdkEventExpose *event,
gpointer user_data)
{
-
+ if (ui.view_continuous && ui.progressive_bg) rescale_bg_pixmaps();
return FALSE;
}
return FALSE;
}
-
void
on_comboLayer_changed (GtkComboBox *combobox,
gpointer user_data)
ui.pageno--;
tmppage = g_list_nth_data(journal.pages, ui.pageno);
}
- if (need_update) do_switch_page(ui.pageno, FALSE);
+ if (need_update) do_switch_page(ui.pageno, FALSE, FALSE);
return;
}
if (val == ui.pageno) return;
if (val < 0) val = 0;
if (val > journal.npages-1) val = journal.npages-1;
- do_switch_page(val, TRUE);
+ do_switch_page(val, TRUE, FALSE);
}
make_page_clipbox(ui.cur_page);
update_canvas_bg(ui.cur_page);
- do_switch_page(ui.pageno, TRUE);
+ do_switch_page(ui.pageno, TRUE, TRUE);
}
if (!ui.progressive_bg) rescale_bg_pixmaps();
}
+
+void
+on_mru_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ int which;
+ gboolean success;
+ GtkWidget *dialog;
+
+ if (!ok_to_close()) return; // user aborted on save confirmation
+
+ for (which = 0 ; which < MRU_SIZE; which++) {
+ if (ui.mrumenu[which] == GTK_WIDGET(menuitem)) break;
+ }
+ if (which == MRU_SIZE || ui.mru[which] == NULL) return; // not found...
+
+ set_cursor_busy(TRUE);
+ success = open_journal(ui.mru[which]);
+ set_cursor_busy(FALSE);
+ if (success) 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'", ui.mru[which]);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+ delete_mru_entry(which);
+}
+
on_optionsProgressiveBG_activate (GtkMenuItem *menuitem,
gpointer user_data);
+
+void
+on_mru_activate (GtkMenuItem *menuitem,
+ gpointer user_data);
}
}
+// initialize the recent files list
+void init_mru(void)
+{
+ int i;
+ gsize lfptr;
+ char s[5];
+ GIOChannel *f;
+ gchar *str;
+ GIOStatus status;
+
+ g_strlcpy(s, "mru0", 5);
+ for (s[3]='0', i=0; i<MRU_SIZE; s[3]++, i++) {
+ ui.mrumenu[i] = GET_COMPONENT(s);
+ ui.mru[i] = NULL;
+ }
+ f = g_io_channel_new_file(ui.mrufile, "r", NULL);
+ if (f) status = G_IO_STATUS_NORMAL;
+ else status = G_IO_STATUS_ERROR;
+ i = 0;
+ while (status == G_IO_STATUS_NORMAL && i<MRU_SIZE) {
+ lfptr = 0;
+ status = g_io_channel_read_line(f, &str, NULL, &lfptr, NULL);
+ if (status == G_IO_STATUS_NORMAL && lfptr>0) {
+ str[lfptr] = 0;
+ ui.mru[i] = str;
+ i++;
+ }
+ }
+ if (f) {
+ g_io_channel_shutdown(f, FALSE, NULL);
+ g_io_channel_unref(f);
+ }
+ update_mru_menu();
+}
+
+void update_mru_menu(void)
+{
+ int i;
+ gboolean anyone = FALSE;
+
+ for (i=0; i<MRU_SIZE; i++) {
+ if (ui.mru[i]!=NULL) {
+ gtk_label_set_text(GTK_LABEL(gtk_bin_get_child(GTK_BIN(ui.mrumenu[i]))),
+ g_basename(ui.mru[i]));
+ gtk_widget_show(ui.mrumenu[i]);
+ anyone = TRUE;
+ }
+ else gtk_widget_hide(ui.mrumenu[i]);
+ }
+ gtk_widget_set_sensitive(GET_COMPONENT("fileRecentFiles"), anyone);
+}
+
+void new_mru_entry(char *name)
+{
+ int i, j;
+
+ for (i=0;i<MRU_SIZE;i++)
+ if (ui.mru[i]!=NULL && !strcmp(ui.mru[i], name)) {
+ g_free(ui.mru[i]);
+ for (j=i+1; j<MRU_SIZE; j++) ui.mru[j-1] = ui.mru[j];
+ ui.mru[MRU_SIZE-1]=NULL;
+ }
+ if (ui.mru[MRU_SIZE-1]!=NULL) g_free(ui.mru[MRU_SIZE-1]);
+ for (j=MRU_SIZE-1; j>=1; j--) ui.mru[j] = ui.mru[j-1];
+ ui.mru[0] = g_strdup(name);
+ update_mru_menu();
+}
+
+void delete_mru_entry(int which)
+{
+ int i;
+
+ if (ui.mru[which]!=NULL) g_free(ui.mru[which]);
+ for (i=which+1;i<MRU_SIZE;i++)
+ ui.mru[i-1] = ui.mru[i];
+ ui.mru[MRU_SIZE-1] = NULL;
+ update_mru_menu();
+}
+
+void save_mru_list(void)
+{
+ FILE *f;
+ int i;
+
+ f = fopen(ui.mrufile, "w");
+ if (f==NULL) return;
+ for (i=0; i<MRU_SIZE; i++)
+ if (ui.mru[i]!=NULL) fprintf(f, "%s\n", ui.mru[i]);
+ fclose(f);
+}
void bgpdf_create_page_with_bg(int pageno, struct BgPdfPage *bgpg);
void bgpdf_update_bg(int pageno, struct BgPdfPage *bgpg);
+
+void init_mru(void);
+void update_mru_menu(void);
+void new_mru_entry(char *name);
+void delete_mru_entry(int which);
+void save_mru_list(void);
GtkWidget *menuFile_menu;
GtkWidget *fileNew;
GtkWidget *fileNewBackground;
- GtkWidget *image500;
+ GtkWidget *image533;
GtkWidget *fileOpen;
GtkWidget *fileSave;
GtkWidget *fileSaveAs;
GtkWidget *separator1;
+ GtkWidget *fileRecentFiles;
+ GtkWidget *fileRecentFiles_menu;
+ GtkWidget *mru0;
+ GtkWidget *mru1;
+ GtkWidget *mru2;
+ GtkWidget *mru3;
+ GtkWidget *mru4;
+ GtkWidget *mru5;
+ GtkWidget *mru6;
+ GtkWidget *mru7;
+ GtkWidget *separator22;
GtkWidget *filePrintOptions;
- GtkWidget *image501;
+ GtkWidget *image534;
GtkWidget *filePrint;
GtkWidget *filePrintPDF;
GtkWidget *separator2;
GtkWidget *viewZoomOut;
GtkWidget *viewNormalSize;
GtkWidget *viewPageWidth;
- GtkWidget *image502;
+ GtkWidget *image535;
GtkWidget *separator5;
GtkWidget *viewFirstPage;
- GtkWidget *image503;
+ GtkWidget *image536;
GtkWidget *viewPreviousPage;
- GtkWidget *image504;
+ GtkWidget *image537;
GtkWidget *viewNextPage;
- GtkWidget *image505;
+ GtkWidget *image538;
GtkWidget *viewLastPage;
- GtkWidget *image506;
+ GtkWidget *image539;
GtkWidget *separator6;
GtkWidget *viewShowLayer;
- GtkWidget *image507;
+ GtkWidget *image540;
GtkWidget *viewHideLayer;
- GtkWidget *image508;
+ GtkWidget *image541;
GtkWidget *menuJournal;
GtkWidget *menuJournal_menu;
GtkWidget *journalNewPageBefore;
GtkWidget *paperstyleGraph;
GtkWidget *paperstyleNA;
GtkWidget *journalLoadBackground;
- GtkWidget *image509;
+ GtkWidget *image542;
GtkWidget *journalScreenshot;
GtkWidget *journalApplyAllPages;
GtkWidget *separator19;
GtkWidget *toolsVerticalSpace;
GtkWidget *separator16;
GtkWidget *toolsColor;
- GtkWidget *image510;
+ GtkWidget *image543;
GtkWidget *toolsColor_menu;
GSList *colorBlack_group = NULL;
GtkWidget *colorBlack;
GtkWidget *highlighterMedium;
GtkWidget *highlighterThick;
GtkWidget *toolsTextFont;
- GtkWidget *image511;
+ GtkWidget *image544;
GtkWidget *separator10;
GtkWidget *toolsDefaultPen;
GtkWidget *toolsDefaultEraser;
gtk_widget_show (fileNewBackground);
gtk_container_add (GTK_CONTAINER (menuFile_menu), fileNewBackground);
- image500 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image500);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (fileNewBackground), image500);
+ image533 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image533);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (fileNewBackground), image533);
fileOpen = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group);
gtk_widget_show (fileOpen);
gtk_container_add (GTK_CONTAINER (menuFile_menu), separator1);
gtk_widget_set_sensitive (separator1, FALSE);
+ fileRecentFiles = gtk_menu_item_new_with_mnemonic ("Recent Files");
+ gtk_widget_show (fileRecentFiles);
+ gtk_container_add (GTK_CONTAINER (menuFile_menu), fileRecentFiles);
+
+ fileRecentFiles_menu = gtk_menu_new ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (fileRecentFiles), fileRecentFiles_menu);
+
+ mru0 = gtk_menu_item_new_with_mnemonic ("0");
+ gtk_widget_show (mru0);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru0);
+
+ mru1 = gtk_menu_item_new_with_mnemonic ("1");
+ gtk_widget_show (mru1);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru1);
+
+ mru2 = gtk_menu_item_new_with_mnemonic ("2");
+ gtk_widget_show (mru2);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru2);
+
+ mru3 = gtk_menu_item_new_with_mnemonic ("3");
+ gtk_widget_show (mru3);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru3);
+
+ mru4 = gtk_menu_item_new_with_mnemonic ("4");
+ gtk_widget_show (mru4);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru4);
+
+ mru5 = gtk_menu_item_new_with_mnemonic ("5");
+ gtk_widget_show (mru5);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru5);
+
+ mru6 = gtk_menu_item_new_with_mnemonic ("6");
+ gtk_widget_show (mru6);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru6);
+
+ mru7 = gtk_menu_item_new_with_mnemonic ("7");
+ gtk_widget_show (mru7);
+ gtk_container_add (GTK_CONTAINER (fileRecentFiles_menu), mru7);
+
+ separator22 = gtk_separator_menu_item_new ();
+ gtk_widget_show (separator22);
+ gtk_container_add (GTK_CONTAINER (menuFile_menu), separator22);
+ gtk_widget_set_sensitive (separator22, FALSE);
+
filePrintOptions = gtk_image_menu_item_new_with_mnemonic ("Print Options");
gtk_widget_show (filePrintOptions);
gtk_container_add (GTK_CONTAINER (menuFile_menu), filePrintOptions);
- image501 = gtk_image_new_from_stock ("gtk-preferences", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image501);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (filePrintOptions), image501);
+ image534 = gtk_image_new_from_stock ("gtk-preferences", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image534);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (filePrintOptions), image534);
filePrint = gtk_image_menu_item_new_from_stock ("gtk-print", accel_group);
gtk_widget_show (filePrint);
gtk_widget_show (viewPageWidth);
gtk_container_add (GTK_CONTAINER (menuView_menu), viewPageWidth);
- image502 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image502);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPageWidth), image502);
+ image535 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image535);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPageWidth), image535);
separator5 = gtk_separator_menu_item_new ();
gtk_widget_show (separator5);
gtk_widget_show (viewFirstPage);
gtk_container_add (GTK_CONTAINER (menuView_menu), viewFirstPage);
- image503 = gtk_image_new_from_stock ("gtk-goto-first", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image503);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewFirstPage), image503);
+ image536 = gtk_image_new_from_stock ("gtk-goto-first", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image536);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewFirstPage), image536);
viewPreviousPage = gtk_image_menu_item_new_with_mnemonic ("Previous Page");
gtk_widget_show (viewPreviousPage);
gtk_container_add (GTK_CONTAINER (menuView_menu), viewPreviousPage);
- image504 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image504);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPreviousPage), image504);
+ image537 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image537);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewPreviousPage), image537);
viewNextPage = gtk_image_menu_item_new_with_mnemonic ("Next Page");
gtk_widget_show (viewNextPage);
gtk_container_add (GTK_CONTAINER (menuView_menu), viewNextPage);
- image505 = gtk_image_new_from_stock ("gtk-media-forward", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image505);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewNextPage), image505);
+ image538 = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image538);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewNextPage), image538);
viewLastPage = gtk_image_menu_item_new_with_mnemonic ("Last Page");
gtk_widget_show (viewLastPage);
gtk_container_add (GTK_CONTAINER (menuView_menu), viewLastPage);
- image506 = gtk_image_new_from_stock ("gtk-goto-last", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image506);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewLastPage), image506);
+ image539 = gtk_image_new_from_stock ("gtk-goto-last", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image539);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewLastPage), image539);
separator6 = gtk_separator_menu_item_new ();
gtk_widget_show (separator6);
gtk_widget_show (viewShowLayer);
gtk_container_add (GTK_CONTAINER (menuView_menu), viewShowLayer);
- image507 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image507);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewShowLayer), image507);
+ image540 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image540);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewShowLayer), image540);
viewHideLayer = gtk_image_menu_item_new_with_mnemonic ("Hide Layer");
gtk_widget_show (viewHideLayer);
gtk_container_add (GTK_CONTAINER (menuView_menu), viewHideLayer);
- image508 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image508);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewHideLayer), image508);
+ image541 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image541);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (viewHideLayer), image541);
menuJournal = gtk_menu_item_new_with_mnemonic ("_Journal");
gtk_widget_show (menuJournal);
gtk_widget_show (journalLoadBackground);
gtk_container_add (GTK_CONTAINER (menuJournal_menu), journalLoadBackground);
- image509 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image509);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (journalLoadBackground), image509);
+ image542 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image542);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (journalLoadBackground), image542);
journalScreenshot = gtk_menu_item_new_with_mnemonic ("Background Screenshot");
gtk_widget_show (journalScreenshot);
gtk_widget_show (toolsColor);
gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsColor);
- image510 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image510);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsColor), image510);
+ image543 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image543);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsColor), image543);
toolsColor_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (toolsColor), toolsColor_menu);
gtk_widget_show (toolsTextFont);
gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsTextFont);
- image511 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
- gtk_widget_show (image511);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsTextFont), image511);
+ image544 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image544);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (toolsTextFont), image544);
separator10 = gtk_separator_menu_item_new ();
gtk_widget_show (separator10);
g_signal_connect ((gpointer) fileSaveAs, "activate",
G_CALLBACK (on_fileSaveAs_activate),
NULL);
+ g_signal_connect ((gpointer) mru0, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
+ g_signal_connect ((gpointer) mru1, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
+ g_signal_connect ((gpointer) mru2, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
+ g_signal_connect ((gpointer) mru3, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
+ g_signal_connect ((gpointer) mru4, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
+ g_signal_connect ((gpointer) mru5, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
+ g_signal_connect ((gpointer) mru6, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
+ g_signal_connect ((gpointer) mru7, "activate",
+ G_CALLBACK (on_mru_activate),
+ NULL);
g_signal_connect ((gpointer) filePrintOptions, "activate",
G_CALLBACK (on_filePrintOptions_activate),
NULL);
GLADE_HOOKUP_OBJECT (winMain, menuFile_menu, "menuFile_menu");
GLADE_HOOKUP_OBJECT (winMain, fileNew, "fileNew");
GLADE_HOOKUP_OBJECT (winMain, fileNewBackground, "fileNewBackground");
- GLADE_HOOKUP_OBJECT (winMain, image500, "image500");
+ GLADE_HOOKUP_OBJECT (winMain, image533, "image533");
GLADE_HOOKUP_OBJECT (winMain, fileOpen, "fileOpen");
GLADE_HOOKUP_OBJECT (winMain, fileSave, "fileSave");
GLADE_HOOKUP_OBJECT (winMain, fileSaveAs, "fileSaveAs");
GLADE_HOOKUP_OBJECT (winMain, separator1, "separator1");
+ GLADE_HOOKUP_OBJECT (winMain, fileRecentFiles, "fileRecentFiles");
+ GLADE_HOOKUP_OBJECT (winMain, fileRecentFiles_menu, "fileRecentFiles_menu");
+ GLADE_HOOKUP_OBJECT (winMain, mru0, "mru0");
+ GLADE_HOOKUP_OBJECT (winMain, mru1, "mru1");
+ GLADE_HOOKUP_OBJECT (winMain, mru2, "mru2");
+ GLADE_HOOKUP_OBJECT (winMain, mru3, "mru3");
+ GLADE_HOOKUP_OBJECT (winMain, mru4, "mru4");
+ GLADE_HOOKUP_OBJECT (winMain, mru5, "mru5");
+ GLADE_HOOKUP_OBJECT (winMain, mru6, "mru6");
+ GLADE_HOOKUP_OBJECT (winMain, mru7, "mru7");
+ GLADE_HOOKUP_OBJECT (winMain, separator22, "separator22");
GLADE_HOOKUP_OBJECT (winMain, filePrintOptions, "filePrintOptions");
- GLADE_HOOKUP_OBJECT (winMain, image501, "image501");
+ GLADE_HOOKUP_OBJECT (winMain, image534, "image534");
GLADE_HOOKUP_OBJECT (winMain, filePrint, "filePrint");
GLADE_HOOKUP_OBJECT (winMain, filePrintPDF, "filePrintPDF");
GLADE_HOOKUP_OBJECT (winMain, separator2, "separator2");
GLADE_HOOKUP_OBJECT (winMain, viewZoomOut, "viewZoomOut");
GLADE_HOOKUP_OBJECT (winMain, viewNormalSize, "viewNormalSize");
GLADE_HOOKUP_OBJECT (winMain, viewPageWidth, "viewPageWidth");
- GLADE_HOOKUP_OBJECT (winMain, image502, "image502");
+ GLADE_HOOKUP_OBJECT (winMain, image535, "image535");
GLADE_HOOKUP_OBJECT (winMain, separator5, "separator5");
GLADE_HOOKUP_OBJECT (winMain, viewFirstPage, "viewFirstPage");
- GLADE_HOOKUP_OBJECT (winMain, image503, "image503");
+ GLADE_HOOKUP_OBJECT (winMain, image536, "image536");
GLADE_HOOKUP_OBJECT (winMain, viewPreviousPage, "viewPreviousPage");
- GLADE_HOOKUP_OBJECT (winMain, image504, "image504");
+ GLADE_HOOKUP_OBJECT (winMain, image537, "image537");
GLADE_HOOKUP_OBJECT (winMain, viewNextPage, "viewNextPage");
- GLADE_HOOKUP_OBJECT (winMain, image505, "image505");
+ GLADE_HOOKUP_OBJECT (winMain, image538, "image538");
GLADE_HOOKUP_OBJECT (winMain, viewLastPage, "viewLastPage");
- GLADE_HOOKUP_OBJECT (winMain, image506, "image506");
+ GLADE_HOOKUP_OBJECT (winMain, image539, "image539");
GLADE_HOOKUP_OBJECT (winMain, separator6, "separator6");
GLADE_HOOKUP_OBJECT (winMain, viewShowLayer, "viewShowLayer");
- GLADE_HOOKUP_OBJECT (winMain, image507, "image507");
+ GLADE_HOOKUP_OBJECT (winMain, image540, "image540");
GLADE_HOOKUP_OBJECT (winMain, viewHideLayer, "viewHideLayer");
- GLADE_HOOKUP_OBJECT (winMain, image508, "image508");
+ GLADE_HOOKUP_OBJECT (winMain, image541, "image541");
GLADE_HOOKUP_OBJECT (winMain, menuJournal, "menuJournal");
GLADE_HOOKUP_OBJECT (winMain, menuJournal_menu, "menuJournal_menu");
GLADE_HOOKUP_OBJECT (winMain, journalNewPageBefore, "journalNewPageBefore");
GLADE_HOOKUP_OBJECT (winMain, paperstyleGraph, "paperstyleGraph");
GLADE_HOOKUP_OBJECT (winMain, paperstyleNA, "paperstyleNA");
GLADE_HOOKUP_OBJECT (winMain, journalLoadBackground, "journalLoadBackground");
- GLADE_HOOKUP_OBJECT (winMain, image509, "image509");
+ GLADE_HOOKUP_OBJECT (winMain, image542, "image542");
GLADE_HOOKUP_OBJECT (winMain, journalScreenshot, "journalScreenshot");
GLADE_HOOKUP_OBJECT (winMain, journalApplyAllPages, "journalApplyAllPages");
GLADE_HOOKUP_OBJECT (winMain, separator19, "separator19");
GLADE_HOOKUP_OBJECT (winMain, toolsVerticalSpace, "toolsVerticalSpace");
GLADE_HOOKUP_OBJECT (winMain, separator16, "separator16");
GLADE_HOOKUP_OBJECT (winMain, toolsColor, "toolsColor");
- GLADE_HOOKUP_OBJECT (winMain, image510, "image510");
+ GLADE_HOOKUP_OBJECT (winMain, image543, "image543");
GLADE_HOOKUP_OBJECT (winMain, toolsColor_menu, "toolsColor_menu");
GLADE_HOOKUP_OBJECT (winMain, colorBlack, "colorBlack");
GLADE_HOOKUP_OBJECT (winMain, colorBlue, "colorBlue");
GLADE_HOOKUP_OBJECT (winMain, highlighterMedium, "highlighterMedium");
GLADE_HOOKUP_OBJECT (winMain, highlighterThick, "highlighterThick");
GLADE_HOOKUP_OBJECT (winMain, toolsTextFont, "toolsTextFont");
- GLADE_HOOKUP_OBJECT (winMain, image511, "image511");
+ GLADE_HOOKUP_OBJECT (winMain, image544, "image544");
GLADE_HOOKUP_OBJECT (winMain, separator10, "separator10");
GLADE_HOOKUP_OBJECT (winMain, toolsDefaultPen, "toolsDefaultPen");
GLADE_HOOKUP_OBJECT (winMain, toolsDefaultEraser, "toolsDefaultEraser");
#include "xo-support.h"
#include "xo-callbacks.h"
#include "xo-misc.h"
+#include "xo-file.h"
+#include "xo-paint.h"
// some global constants
}
}
-void do_switch_page(int pg, gboolean rescroll)
+void do_switch_page(int pg, gboolean rescroll, gboolean refresh_all)
{
int i;
struct Layer *layer;
if (rescroll) { // scroll and force a refresh
gtk_adjustment_set_value(gtk_layout_get_vadjustment(GTK_LAYOUT(canvas)),
ui.cur_page->voffset*ui.zoom);
- gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
+ if (refresh_all)
+ gnome_canvas_set_pixels_per_unit(canvas, ui.zoom);
+ else if (!ui.view_continuous)
+ gnome_canvas_item_move(GNOME_CANVAS_ITEM(ui.cur_page->group), 0., 0.);
}
}
ui.cur_page->bg->type == BG_SOLID);
gtk_widget_set_sensitive(GET_COMPONENT("journalSetAsDefault"),
ui.cur_page->bg->type == BG_SOLID);
+ gtk_widget_set_sensitive(GET_COMPONENT("journalApplyAllPages"),
+ ui.cur_page->bg->type == BG_SOLID);
gtk_widget_set_sensitive(GET_COMPONENT("viewFirstPage"), ui.pageno!=0);
gtk_widget_set_sensitive(GET_COMPONENT("viewPreviousPage"), ui.pageno!=0);
else p = g_utf8_next_char(p);
g_snprintf(tmp, 100, "Xournal - %s", p);
gtk_window_set_title(GTK_WINDOW (winMain), tmp);
+ new_mru_entry(filename);
}
void update_undo_redo_enabled(void)
if (ui.toolno == TOOL_PEN || ui.toolno == TOOL_HIGHLIGHTER)
set_cur_color(color);
- // later add selection tools
+ if ((ui.toolno == TOOL_SELECTREGION || ui.toolno == TOOL_SELECTRECT) &&
+ ui.selection != NULL)
+ recolor_selection(color);
update_color_buttons();
update_color_menu();
}
if (tool >= NUM_STROKE_TOOLS) {
+ if ((tool == TOOL_SELECTREGION || tool == TOOL_SELECTRECT) && ui.selection != NULL)
+ rethicken_selection(val);
update_thickness_buttons(); // undo illegal button selection
return;
}
void update_undo_redo_enabled(void);
void update_copy_paste_enabled(void);
-void do_switch_page(int pg, gboolean rescroll);
+void do_switch_page(int pg, gboolean rescroll, gboolean refresh_all);
void set_cur_color(int color);
void process_color_activate(GtkMenuItem *menuitem, int color);
void process_thickness_activate(GtkMenuItem *menuitem, int tool, int val);
gtk_selection_data_free(sel_data);
update_copy_paste_enabled();
}
+
+// modify the color or thickness of pen strokes in a selection
+
+void recolor_selection(int color)
+{
+ GList *itemlist;
+ struct Item *item;
+ struct Brush *brush;
+
+ if (ui.selection == NULL) return;
+ prepare_new_undo();
+ undo->type = ITEM_REPAINTSEL;
+ undo->itemlist = NULL;
+ undo->auxlist = NULL;
+ for (itemlist = ui.selection->items; itemlist!=NULL; itemlist = itemlist->next) {
+ item = (struct Item *)itemlist->data;
+ if (item->type != ITEM_STROKE || item->brush.tool_type!=TOOL_PEN) continue;
+ // store info for undo
+ undo->itemlist = g_list_append(undo->itemlist, item);
+ brush = (struct Brush *)g_malloc(sizeof(struct Brush));
+ g_memmove(brush, &(item->brush), sizeof(struct Brush));
+ undo->auxlist = g_list_append(undo->auxlist, brush);
+ // repaint the stroke
+ item->brush.color_no = color;
+ item->brush.color_rgba = predef_colors_rgba[color];
+ if (item->canvas_item!=NULL)
+ gnome_canvas_item_set(item->canvas_item,
+ "fill-color-rgba", item->brush.color_rgba, NULL);
+ }
+}
+
+void rethicken_selection(int val)
+{
+ GList *itemlist;
+ struct Item *item;
+ struct Brush *brush;
+
+ if (ui.selection == NULL) return;
+ prepare_new_undo();
+ undo->type = ITEM_REPAINTSEL;
+ undo->itemlist = NULL;
+ undo->auxlist = NULL;
+ for (itemlist = ui.selection->items; itemlist!=NULL; itemlist = itemlist->next) {
+ item = (struct Item *)itemlist->data;
+ if (item->type != ITEM_STROKE || item->brush.tool_type!=TOOL_PEN) continue;
+ // store info for undo
+ undo->itemlist = g_list_append(undo->itemlist, item);
+ brush = (struct Brush *)g_malloc(sizeof(struct Brush));
+ g_memmove(brush, &(item->brush), sizeof(struct Brush));
+ undo->auxlist = g_list_append(undo->auxlist, brush);
+ // repaint the stroke
+ item->brush.thickness_no = val;
+ item->brush.thickness = predef_thickness[TOOL_PEN][val];
+ if (item->canvas_item!=NULL)
+ gnome_canvas_item_set(item->canvas_item,
+ "width-units", item->brush.thickness, NULL);
+ }
+}
void selection_delete(void);
void selection_to_clip(void);
void clipboard_paste(void);
+
+void recolor_selection(int color);
+void rethicken_selection(int val);
g_signal_connect(wait_dialog, "response", G_CALLBACK (cb_print_abort), &abort);
for (i = fromPage; i <= toPage; i++) {
- gtk_message_dialog_format_secondary_text(
- GTK_MESSAGE_DIALOG(wait_dialog), "Page %d", i+1);
+#if GTK_CHECK_VERSION(2,6,0)
+ if (!gtk_check_version(2, 6, 0))
+ gtk_message_dialog_format_secondary_text(
+ GTK_MESSAGE_DIALOG(wait_dialog), "Page %d", i+1);
+#endif
while (gtk_events_pending()) gtk_main_iteration();
print_page(gpc, (struct Page *)g_list_nth_data(journal.pages, i), i+1,
pgwidth, pgheight, &abort);
if (abort) break;
}
- gtk_message_dialog_format_secondary_text(
+#if GTK_CHECK_VERSION(2,6,0)
+ if (!gtk_check_version(2, 6, 0))
+ gtk_message_dialog_format_secondary_text(
GTK_MESSAGE_DIALOG(wait_dialog), "Finalizing...");
+#endif
while (gtk_events_pending()) gtk_main_iteration();
gnome_print_context_close(gpc);
#include <gtk/gtk.h>
#include <libgnomecanvas/libgnomecanvas.h>
+// PREF FILES INFO
+
+#define CONFIG_DIR ".xournal"
+#define MRU_FILE "recent-files"
+#define MRU_SIZE 8
+
// DATA STRUCTURES AND CONSTANTS
#define PIXEL_MOTION_THRESHOLD 0.3
#define ITEM_NEW_DEFAULT_BG 11
#define ITEM_NEW_PAGE 13
#define ITEM_DELETE_PAGE 14
+#define ITEM_REPAINTSEL 15
typedef struct Layer {
GList *items; // the items on the layer, from bottom to top
gboolean emulate_eraser;
gboolean antialias_bg; // bilinear interpolation on bg pixmaps
gboolean progressive_bg; // rescale bg's one at a time
+ char *mrufile; // file for the MRU
+ char *mru[MRU_SIZE]; // MRU data
+ GtkWidget *mrumenu[MRU_SIZE];
} UIData;
typedef struct UndoErasureData {
struct Layer *layer2; // for ITEM_DELETE_LAYER with val=-1
struct Page *page; // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE
GList *erasurelist; // for ITEM_ERASURE
- GList *itemlist; // for ITEM_MOVESEL, ITEM_PASTE
+ GList *itemlist; // for ITEM_MOVESEL, ITEM_PASTE, ITEM_REPAINTSEL
+ GList *auxlist; // for ITEM_REPAINTSEL
struct Background *bg; // for ITEM_NEW_BG_ONE/RESIZE, ITEM_NEW_DEFAULT_BG
int val; // for ITEM_NEW_PAGE, ITEM_NEW_LAYER, ITEM_DELETE_LAYER, ITEM_DELETE_PAGE
double val_x, val_y; // for ITEM_MOVESEL, ITEM_NEW_BG_RESIZE, ITEM_PAPER_RESIZE, ITEM_NEW_DEFAULT_BG
<signal name="activate" handler="on_fileNewBackground_activate" last_modification_time="Wed, 30 Nov 2005 18:39:59 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image500">
+ <widget class="GtkImage" id="image533">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
</widget>
</child>
+ <child>
+ <widget class="GtkMenuItem" id="fileRecentFiles">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Recent Files</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="fileRecentFiles_menu">
+
+ <child>
+ <widget class="GtkMenuItem" id="mru0">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">0</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:09:19 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="mru1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">1</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:09:19 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="mru2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">2</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:09:19 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="mru3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">3</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="mru4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">4</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="mru5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">5</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="mru6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">6</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="mru7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">7</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_mru_activate" last_modification_time="Fri, 02 Jun 2006 19:10:17 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator22">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+
<child>
<widget class="GtkImageMenuItem" id="filePrintOptions">
<property name="visible">True</property>
<signal name="activate" handler="on_filePrintOptions_activate" last_modification_time="Wed, 30 Nov 2005 18:44:18 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image501">
+ <widget class="GtkImage" id="image534">
<property name="visible">True</property>
<property name="stock">gtk-preferences</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_viewPageWidth_activate" last_modification_time="Wed, 30 Nov 2005 19:31:48 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image502">
+ <widget class="GtkImage" id="image535">
<property name="visible">True</property>
<property name="stock">gtk-zoom-fit</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_viewFirstPage_activate" last_modification_time="Wed, 30 Nov 2005 19:33:03 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image503">
+ <widget class="GtkImage" id="image536">
<property name="visible">True</property>
<property name="stock">gtk-goto-first</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_viewPreviousPage_activate" last_modification_time="Wed, 30 Nov 2005 19:35:41 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image504">
+ <widget class="GtkImage" id="image537">
<property name="visible">True</property>
<property name="stock">gtk-go-back</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_viewNextPage_activate" last_modification_time="Wed, 30 Nov 2005 19:35:41 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image505">
+ <widget class="GtkImage" id="image538">
<property name="visible">True</property>
- <property name="stock">gtk-media-forward</property>
+ <property name="stock">gtk-go-forward</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<signal name="activate" handler="on_viewLastPage_activate" last_modification_time="Wed, 30 Nov 2005 19:35:41 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image506">
+ <widget class="GtkImage" id="image539">
<property name="visible">True</property>
<property name="stock">gtk-goto-last</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_viewShowLayer_activate" last_modification_time="Wed, 30 Nov 2005 19:40:23 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image507">
+ <widget class="GtkImage" id="image540">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_viewHideLayer_activate" last_modification_time="Wed, 30 Nov 2005 19:40:23 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image508">
+ <widget class="GtkImage" id="image541">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_journalLoadBackground_activate" last_modification_time="Wed, 30 Nov 2005 20:06:31 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image509">
+ <widget class="GtkImage" id="image542">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
<property name="use_underline">True</property>
<child internal-child="image">
- <widget class="GtkImage" id="image510">
+ <widget class="GtkImage" id="image543">
<property name="visible">True</property>
<property name="stock">gtk-select-color</property>
<property name="icon_size">1</property>
<signal name="activate" handler="on_toolsTextFont_activate" last_modification_time="Thu, 01 Dec 2005 20:54:08 GMT"/>
<child internal-child="image">
- <widget class="GtkImage" id="image511">
+ <widget class="GtkImage" id="image544">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
<property name="icon_size">1</property>