/** * \fn void show_score(BrailleMusicEditor *editor) * \brief This function create a scoreviewer in a widget. * \param editor The GUI structure. */ void show_score(BrailleMusicEditor *editor) { GError *err = NULL; GFile *file; gchar *filename = "score.pdf"; file = g_file_new_for_commandline_arg (filename); gchar *uri = g_file_get_uri (file); g_object_unref (file); EvDocument *doc = ev_document_factory_get_document (uri, &err); if(err) { g_warning ("Trying to read the score pdf file %s gave an error: %s", uri, err->message); if(err) g_error_free (err); err = NULL; } else { EvDocumentModel *docmodel = ev_document_model_new_with_document(EV_DOCUMENT(doc)); ev_view_set_model(EV_VIEW(editor->score_view), EV_DOCUMENT_MODEL(docmodel)); g_signal_connect(editor->score_view, "external-link", G_CALLBACK(external_link_catch), editor); } }
/* Helper functions */ gint ev_document_links_get_dest_page (EvDocumentLinks *document_links, EvLinkDest *dest) { gint page = -1; switch (ev_link_dest_get_dest_type (dest)) { case EV_LINK_DEST_TYPE_NAMED: { page = ev_document_links_find_link_page (document_links, ev_link_dest_get_named_dest (dest)); } break; case EV_LINK_DEST_TYPE_PAGE_LABEL: ev_document_find_page_by_label (EV_DOCUMENT (document_links), ev_link_dest_get_page_label (dest), &page); break; default: page = ev_link_dest_get_page (dest); } return page; }
static void ev_document_finalize (GObject *object) { EvDocument *document = EV_DOCUMENT (object); if (document->priv->uri) { g_free (document->priv->uri); document->priv->uri = NULL; } if (document->priv->page_sizes) { g_free (document->priv->page_sizes); document->priv->page_sizes = NULL; } if (document->priv->page_labels) { gint i; for (i = 0; i < document->priv->n_pages; i++) { g_free (document->priv->page_labels[i]); } g_free (document->priv->page_labels); document->priv->page_labels = NULL; } if (document->priv->info) { ev_document_info_free (document->priv->info); document->priv->info = NULL; } if (document->priv->synctex_scanner) { synctex_scanner_free (document->priv->synctex_scanner); document->priv->synctex_scanner = NULL; } G_OBJECT_CLASS (ev_document_parent_class)->finalize (object); }
static EvDocument * ev_document_factory_new_document_for_mime_type (const gchar *mime_type, GError **error) { EvDocument *document; EvBackendInfo *info; GTypeModule *module = NULL; g_return_val_if_fail (mime_type != NULL, NULL); info = get_backend_info_for_mime_type (mime_type); if (info == NULL) { char *content_type, *mime_desc = NULL; content_type = g_content_type_from_mime_type (mime_type); if (content_type) mime_desc = g_content_type_get_description (content_type); g_set_error (error, EV_DOCUMENT_ERROR, EV_DOCUMENT_ERROR_INVALID, _("File type %s (%s) is not supported"), mime_desc ? mime_desc : "(unknown)", mime_type); g_free (mime_desc); g_free (content_type); return NULL; } if (ev_module_hash != NULL) { module = g_hash_table_lookup (ev_module_hash, info->module_name); } if (module == NULL) { gchar *path; path = g_module_build_path (ev_backends_dir, info->module_name); module = G_TYPE_MODULE (_ev_module_new (path, info->resident)); g_free (path); if (ev_module_hash == NULL) { ev_module_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL /* leaked on purpose */); } g_hash_table_insert (ev_module_hash, g_strdup (info->module_name), module); } if (!g_type_module_use (module)) { const char *err; err = g_module_error (); g_set_error (error, EV_DOCUMENT_ERROR, EV_DOCUMENT_ERROR_INVALID, "Failed to load backend for '%s': %s", mime_type, err ? err : "unknown error"); return NULL; } document = EV_DOCUMENT (_ev_module_new_object (EV_MODULE (module))); g_type_module_unuse (module); g_object_set_data_full (G_OBJECT (document), BACKEND_DATA_KEY, _ev_backend_info_ref (info), (GDestroyNotify) _ev_backend_info_unref); return document; }