예제 #1
0
static void
statusbar_set_date (GtkStatusbar *statusbar,
                    EomThumbView *view)
{
	EomImage *image;
	gchar *date = NULL;
	gchar time_buffer[32];
	ExifData *exif_data;

	if (eom_thumb_view_get_n_selected (view) == 0)
	{
		return;
	}

	image = eom_thumb_view_get_first_selected_image (view);

	gtk_statusbar_pop (statusbar, 0);

	if (!eom_image_has_data (image, EOM_IMAGE_DATA_EXIF))
	{
		if (!eom_image_load (image, EOM_IMAGE_DATA_EXIF, NULL, NULL))
		{
			gtk_widget_hide (GTK_WIDGET (statusbar));
		}
	}

	exif_data = eom_image_get_exif_info (image);

	if (exif_data)
	{
		date = eom_exif_util_format_date (eom_exif_data_get_value (exif_data, EXIF_TAG_DATE_TIME_ORIGINAL, time_buffer, 32));
		eom_exif_data_free (exif_data);
	}

	if (date)
	{
		gtk_statusbar_push (statusbar, 0, date);
		gtk_widget_show (GTK_WIDGET (statusbar));
		g_free (date);
	}
	else
	{
		gtk_widget_hide (GTK_WIDGET (statusbar));
	}
}
static void
pd_update_metadata_tab (EomPropertiesDialog *prop_dlg,
                        EomImage            *image)
{
    EomPropertiesDialogPrivate *priv;
    GtkNotebook *notebook;
#if HAVE_EXIF
    ExifData    *exif_data;
#endif
#if HAVE_EXEMPI
    XmpPtr      xmp_data;
#endif

    g_return_if_fail (EOM_IS_PROPERTIES_DIALOG (prop_dlg));

    priv = prop_dlg->priv;

    notebook = GTK_NOTEBOOK (priv->notebook);

    if (TRUE
#if HAVE_EXIF
            && !eom_image_has_data (image, EOM_IMAGE_DATA_EXIF)
#endif
#if HAVE_EXEMPI
            && !eom_image_has_data (image, EOM_IMAGE_DATA_XMP)
#endif
       ) {
        if (gtk_notebook_get_current_page (notebook) ==	EOM_PROPERTIES_DIALOG_PAGE_EXIF) {
            gtk_notebook_prev_page (notebook);
        } else if (gtk_notebook_get_current_page (notebook) == EOM_PROPERTIES_DIALOG_PAGE_DETAILS) {
            gtk_notebook_set_current_page (notebook, EOM_PROPERTIES_DIALOG_PAGE_GENERAL);
        }

        if (gtk_widget_get_visible (priv->exif_box)) {
            gtk_widget_hide_all (priv->exif_box);
        }
        if (gtk_widget_get_visible (priv->metadata_details_box)) {
            gtk_widget_hide_all (priv->metadata_details_box);
        }

        return;
    } else {
        if (!gtk_widget_get_visible (priv->exif_box))
            gtk_widget_show_all (priv->exif_box);
        if (priv->netbook_mode &&
                !gtk_widget_get_visible (priv->metadata_details_box)) {
            gtk_widget_show_all (priv->metadata_details_box);
            gtk_widget_hide_all (priv->exif_details_expander);
        }
    }

#if HAVE_EXIF
    exif_data = (ExifData *) eom_image_get_exif_info (image);

    eom_exif_set_label (priv->exif_aperture_label,
                        exif_data, EXIF_TAG_FNUMBER);

    eom_exif_set_label (priv->exif_exposure_label,
                        exif_data, EXIF_TAG_EXPOSURE_TIME);

    eom_exif_set_focal_length_label (priv->exif_focal_label, exif_data);

    eom_exif_set_label (priv->exif_flash_label,
                        exif_data, EXIF_TAG_FLASH);

    eom_exif_set_label (priv->exif_iso_label,
                        exif_data, EXIF_TAG_ISO_SPEED_RATINGS);


    eom_exif_set_label (priv->exif_metering_label,
                        exif_data, EXIF_TAG_METERING_MODE);

    eom_exif_set_label (priv->exif_model_label,
                        exif_data, EXIF_TAG_MODEL);

    eom_exif_set_label (priv->exif_date_label,
                        exif_data, EXIF_TAG_DATE_TIME_ORIGINAL);

    eom_exif_details_update (EOM_EXIF_DETAILS (priv->exif_details),
                             exif_data);

    /* exif_data_unref can handle NULL-values */
    exif_data_unref(exif_data);
#endif

#if HAVE_EXEMPI
    xmp_data = (XmpPtr) eom_image_get_xmp_info (image);

    if (xmp_data != NULL) {
        eom_xmp_set_label (xmp_data,
                           NS_IPTC4XMP,
                           "Location",
                           priv->xmp_location_label);

        eom_xmp_set_label (xmp_data,
                           NS_DC,
                           "description",
                           priv->xmp_description_label);

        eom_xmp_set_label (xmp_data,
                           NS_DC,
                           "subject",
                           priv->xmp_keywords_label);

        eom_xmp_set_label (xmp_data,
                           NS_DC,
                           "creator",
                           priv->xmp_creator_label);

        eom_xmp_set_label (xmp_data,
                           NS_DC,
                           "rights",
                           priv->xmp_rights_label);

        eom_exif_details_xmp_update (EOM_EXIF_DETAILS (priv->exif_details), xmp_data);

        xmp_free (xmp_data);
    } else {
        /* Image has no XMP data */

        /* Clear the labels so they won't display foreign data.*/

        gtk_label_set_text (GTK_LABEL (priv->xmp_location_label), NULL);
        gtk_label_set_text (GTK_LABEL (priv->xmp_description_label),
                            NULL);
        gtk_label_set_text (GTK_LABEL (priv->xmp_keywords_label), NULL);
        gtk_label_set_text (GTK_LABEL (priv->xmp_creator_label), NULL);
        gtk_label_set_text (GTK_LABEL (priv->xmp_rights_label), NULL);
    }
#endif
}