static gboolean press (EvView * view, GdkEventButton *event, EvDocumentModel *model) { EvDocument *doc = ev_document_model_get_document (model); gint i = ev_document_model_get_page (model); if (event->button != 1) infodialog (help_text); nearest_annotation_text = NULL; extern EvMappingList * ev_document_annotations_get_annotations(); EvMappingList *mapping_list = ev_document_annotations_get_annotations (doc, ev_document_get_page(doc, i)); if(mapping_list) { gdouble nearest = G_MAXDOUBLE; GList *g = ev_mapping_list_get_list (mapping_list); for (;g;g=g->next) { EvMapping *mapping = g->data; EvAnnotation *annot = mapping->data; gdouble annottx = ev_document_model_get_scale (model)*(mapping->area.x1 + mapping->area.x2)/2; gdouble annotty = ev_document_model_get_scale (model)*(mapping->area.y1 + mapping->area.y2)/2; gdouble dist = (annottx-event->x)*(annottx-event->x) + (annotty-event->y)*(annotty-event->y); if(dist < nearest) { nearest = dist; nearest_annotation_text = ev_annotation_get_contents (annot); } } } //g_print("\n\npress signal (%f, %f) %s\n", event->x, event->y, nearest_annotation_text); return FALSE; }
//signal handler for link static gint action_for_link (EvView * view, EvLinkAction * obj, EvDocumentModel *model) { EvDocument *doc = ev_document_model_get_document (model); gchar *uri = (gchar *) ev_link_action_get_uri (obj); if(Denemo.printstatus->updating_id && (Denemo.printstatus->typeset_type != TYPESET_ALL_MOVEMENTS)) { warningdialog (_("Cannot do location when only a range of music is typeset. Turn off continuous typesetting or set the range to All Movements")); return TRUE; } if (uri) { gchar **orig_vec = g_strsplit (uri, ":", 6); gchar **vec = orig_vec; if (vec[0] && vec[1] && vec[2] && vec[3] && vec[4] && vec[5] && *vec[5]) vec++;//this will be the case where the file name has a colon in it, (windows drive name) we do not allow for more than one colon. vec[0] is used hereafter. if (g_str_has_prefix (uri, "textedit:") && vec[1] && vec[2] && vec[3]) { DenemoTarget old_target = Denemo.project->movement->target; gboolean ObjectLocated = goto_lilypond_position (atoi (vec[2]), atoi (vec[3])); //sets si->target if (ObjectLocated && nearest_annotation_text) { DenemoScriptParam param; param.string = g_string_new (nearest_annotation_text); paste_comment (NULL, ¶m); g_string_free (param.string, TRUE); } else { warningdialog (_("Object not located, no annotation on page, or empty annotation.\n")); } } } return TRUE; }
static void ev_sidebar_document_changed_cb (EvDocumentModel *model, GParamSpec *pspec, EvSidebar *ev_sidebar) { EvSidebarPrivate *priv = GET_PRIVATE (ev_sidebar); EvDocument *document = ev_document_model_get_document (model); GtkTreeIter iter; gboolean valid; GtkWidget *first_supported_page = NULL; for (valid = gtk_tree_model_get_iter_first (priv->page_model, &iter); valid; valid = gtk_tree_model_iter_next (priv->page_model, &iter)) { GtkWidget *widget; gchar *title; gchar *icon_name; gtk_tree_model_get (priv->page_model, &iter, PAGE_COLUMN_MAIN_WIDGET, &widget, PAGE_COLUMN_TITLE, &title, PAGE_COLUMN_ICON_NAME, &icon_name, -1); if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (widget), document)) { gtk_container_child_set (GTK_CONTAINER (priv->stack), widget, "icon-name", icon_name, "title", title, NULL); if (!first_supported_page) first_supported_page = widget; } else { /* Without icon and title, the page is not shown in * the GtkStackSwitchter */ gtk_container_child_set (GTK_CONTAINER (priv->stack), widget, "icon-name", NULL, "title", NULL, NULL); } g_object_unref (widget); g_free (title); g_free (icon_name); } if (first_supported_page != NULL) { if (!ev_sidebar_current_page_support_document (ev_sidebar, document)) { ev_sidebar_set_page (ev_sidebar, first_supported_page); } } else { gtk_widget_hide (GTK_WIDGET (ev_sidebar)); } }
static gboolean find_annotated_pages (EvDocumentModel *model) { EvDocument *doc = ev_document_model_get_document (model); gint i; for (i=0; i< ev_document_get_n_pages(doc);i++) { extern EvMappingList * ev_document_annotations_get_annotations(); EvMappingList *mapping_list = ev_document_annotations_get_annotations (doc, ev_document_get_page(doc, i)); if(mapping_list) { annotated_pages = g_list_append (annotated_pages, GINT_TO_POINTER(i)); } } return (annotated_pages != NULL); }