set_cursor_busy(TRUE);
success = open_journal(filename);
set_cursor_busy(FALSE);
- if (success) return;
+ if (success) { g_free(filename); return; }
/* open failed */
dialog = gtk_message_dialog_new(GTK_WINDOW (winMain), GTK_DIALOG_DESTROY_WITH_PARENT,
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);
+}
+