diff -Nru rawstudio-1.1.1/configure rawstudio-1.2/configure --- rawstudio-1.1.1/configure 2008-10-12 21:22:14.000000000 +0100 +++ rawstudio-1.2/configure 2009-04-09 22:21:53.000000000 +0100 @@ -2094,7 +2094,7 @@ # Define the identity of the package. PACKAGE=rawstudio - VERSION=1.1.1 + VERSION=1.2 cat >>confdefs.h <<_ACEOF diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/configure.in /tmp/lCx6zc4s8u/rawstudio-1.2/configure.in --- rawstudio-1.1.1/configure.in 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/configure.in 2009-04-09 22:21:46.000000000 +0100 @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(configure.in) -AM_INIT_AUTOMAKE(rawstudio, 1.1.1) +AM_INIT_AUTOMAKE(rawstudio, 1.2) AM_CONFIG_HEADER(config.h) AM_MAINTAINER_MODE diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/debian/changelog /tmp/lCx6zc4s8u/rawstudio-1.2/debian/changelog --- rawstudio-1.1.1/debian/changelog 2008-10-12 21:35:55.000000000 +0100 +++ rawstudio-1.2/debian/changelog 2009-04-09 22:24:42.000000000 +0100 @@ -1,6 +1,6 @@ -rawstudio (1.1.1-0ubuntu1~feisty1) feisty; urgency=low +rawstudio (1.2-0ubuntu1~feisty1) feisty; urgency=low - * Release of Rawstudio 1.1.1. + * Release of Rawstudio 1.2. - -- Anders Kvist Sun, 12 Oct 2008 22:35:55 +0200 + -- Anders Kvist Thu, 09 Apr 2009 23:24:42 +0200 diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/debian/control /tmp/lCx6zc4s8u/rawstudio-1.2/debian/control --- rawstudio-1.1.1/debian/control 2008-10-12 21:35:48.000000000 +0100 +++ rawstudio-1.2/debian/control 2009-04-09 22:24:32.000000000 +0100 @@ -2,7 +2,7 @@ Section: graphics Priority: optional Maintainer: Anders Kvist -Build-Depends: debhelper (>= 4), dpatch, autotools-dev, libgconf2-dev, libgtk2.0-dev, liblcms1-dev, libjpeg62-dev, libtiff4-dev, libxml2-dev, libdbus-1-dev, libexiv2-dev +Build-Depends: debhelper (>= 4), dpatch, autotools-dev, libgconf2-dev, libgtk2.0-dev, liblcms1-dev, libjpeg62-dev, libtiff4-dev, libxml2-dev, libdbus-1-dev, libexiv2-dev, libtool Homepage: http://www.rawstudio.org/ Package: rawstudio diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/NEWS /tmp/lCx6zc4s8u/rawstudio-1.2/NEWS --- rawstudio-1.1.1/NEWS 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/NEWS 2009-04-09 22:21:46.000000000 +0100 @@ -1,3 +1,8 @@ +Mews for version 1.2: +This release adds a lot of small incremental improvements like sorting +photos based on various photo data, more verbose tooltips for thumbnails +and threaded loading of thumbnails and the usual swarm of bugfixes. + News for version 1.1.1: This is a bugfix release fixing bug 221, 222, 223, 227, 230. Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/ca.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/ca.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/ca.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/ca.po --- rawstudio-1.1.1/po/ca.po 2008-10-12 21:22:25.000000000 +0100 +++ rawstudio-1.2/po/ca.po 2009-04-09 22:22:05.000000000 +0100 @@ -5,12 +5,12 @@ # msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-08-19 09:35+0100\n" "Last-Translator: Anders Kvist \n" -"Language-Team: Rawstudio \n" +"Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -18,38 +18,47 @@ "X-Poedit-Country: ANDORRA\n" "X-Poedit-SourceCharset: utf-8\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Nom del fitxer original" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Comptador" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Identificador del paràmetres (A, B o C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Seleccioneu el perfil de color" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Tots els fitxers" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Perfils de color (icc i icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "El nom del perfil de color no és vàlid." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -57,169 +66,169 @@ "El fitxer que heu triat sembla que no disposa d'un perfil de color vàlid per " "aquesta versió de Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Habilita la gestió del color (experimental)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Perfil d'entrada" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Mostra el perfil" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Exporta el perfil" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Intenta" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Perceptual" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Colorimetria relativa" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Saturació" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Colorimetria absoluta" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "La visualització del fons està habilitada" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "S'està obrint la foto ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "No s'ha pogut obrir la fotografia" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "S'ha obert la imatge" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "S'ha modificat la prioritat de la foto (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "S'ha modificat la prioritat de la foto (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "S'ha modificat la prioritat de la foto (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Preferències" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Imatge prèvia de color de fons:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Alçada de l'histograma:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Mostra els noms de fitxers a la barra de miniatures" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Fés servir els colors del tema del sistema" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Posa la caché al directori inicial" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Carrega les fotos de 8 bits (jpeg, png, etc)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Torna a carregar les fotografies" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Directori:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Nom del fitxer:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Tipus de fitxer:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Exemple del nom del fitxer:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Desa com a TIFF sense comprimir" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "General" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Exportació ràpida" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Colors" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Obre les subcarpetes" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Eines" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Lot" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Obre" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Preparat" @@ -247,7 +256,7 @@ msgid "Percent:" msgstr "Percentatge:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Exporta" @@ -255,7 +264,7 @@ msgid "Exporting file ..." msgstr "S'està exportant el fitxer ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "S'ha exportat el fitxer" @@ -263,207 +272,198 @@ msgid "File export canceled" msgstr "S'ha cancel·lat la exportació del fitxer" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "CR2 de Canon" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "CIFF de Canon" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "NEF de Nikon" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Raw de Minolta" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "TIFF de Canon" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Raw de Panasonic" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Raw de Panasonic" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Raw de Pentax" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Negatiu Adobe Digital" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "TIFF (Tagged Image File Format) de 8 bits" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "TIFF (Tagged Image File Format) de 16 bits" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "S'estant processant les fotografies" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Cancel·la" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Darrera imatge:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Temps restant: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Temps restant: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "S'està carregant %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "S'està desant %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Icona" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Nom de fitxer" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Configuració" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Comença" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Elimina" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Elimina-ho tot" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Mida de la foto" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Escala constant" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Amplada constant" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Alçada constant" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Mida màxima" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Amplada de la foto:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "píxels" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Alçada de la imatge:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Escala de la imatge" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -472,7 +472,7 @@ "Amplada constant:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -481,7 +481,7 @@ "Alçada constant:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -490,7 +490,7 @@ "Escala constant:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -499,83 +499,83 @@ "Mida màxima:constant:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Trieu el directori de sortida" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Directori de sortida:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Plantilla del nom de l'arxiu:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Canvia" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Exporta la mida" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Totes les fotos (excepte les suprimides)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Fotografies amb prioritat 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Fotografies amb prioritat 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Fotos amb prioritat 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Fotografies sense prioritat" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Fotografies suprimides" @@ -584,208 +584,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Prioritats" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "S'està obrint el directori..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" + +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Mida" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Graella" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Cap" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Seccions àuries" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Regla dels terços" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Rectangles daurats #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Rectangles daurats #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Triangles harmònics #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Triangles harmònics #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Aspecte" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Corba de forma lliure" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "Paper ISO (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (XGA ample)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Rectangle daurat" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Escapça" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "No ho escapcis" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Gira la foto sobre l'eix X" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Gira la foto sobre l'eix Y" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Gira la imatge 90 graus en sentit horari" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Gira la imatge 180 graus" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Gira la imatge 90 graus en sentit horari" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transforma" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Matís/color" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Reinicia aquest paràmetre" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Obre la corba ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Anomena i desa la corba ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Reinicia la corba" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Ajusta automàticament els finals de les corbes" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Exposició" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Matís" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Contrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Matís/color" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Augmenta la nitidesa" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Corba" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histograma" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Obre un directori" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "S'ha produït un error mentre s'estava exportant" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "S'ha produït un error en exportar a gimp." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "S'estant suprimint les fotografies" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Els vostres fitxers seran esborrats de forma permanentment!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Suprimeix les fotografies" @@ -801,54 +835,54 @@ msgid "Select settings to paste" msgstr "Seleccioneu els paràmetres que voleu enganxar" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Paràmetres enganxats" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "No hi ha res per enganxar" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "El buffer està buit" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "S'està ajustant l'equilibri de blanc" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "No hi ha cap patró per l'equilibre del blanc" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "S'està ajustant amb l'equilibri de blanc de la càmera" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "S'està mostrant la màscara d'exposició" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "S'està amagant la màscara d'exposició" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "S'ha afegit %s a la cua del lot" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s ja és a la cua del lot" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "S'han afegit %d fotos a la cua del lot" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -856,212 +890,256 @@ "Trieu els paràmeters que\n" "voleu afegir a la cua del lot" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "S'ha suprimit de la cua del lot" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "No és a la cua de lots" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertidor de imatges raw per a GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Fitxer" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Edita" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "F_oto" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "Estableix la _prioritat" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "Equilibri de _blanc" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Visualitza" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Lot" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Ajuda" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Obre un directori" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Exportació ràpida" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "Exporta _com a" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "Exporta a _Gimp" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Torna a carregar el directori" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "S_uprimeix les fotografies senyalades" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Surt" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Torna als paràmetres inicials" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Copia els paràmetres" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Enganxa els paràmetres" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Reinicia els paràmetres" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Preferències" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Senyala la foto per suprimir-la" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Suprimeix la prioritat" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Automàtic" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Càmera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Escapça" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Desfés el que s'ha Escapçat" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Redreça" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "Des_fés el que s'ha redreçat" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Agrupa" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Desagrupa" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 msgid "_Auto group" msgstr "Agrupa _automàticament" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "Foto _Anterior" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "Foto _Següent" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "Ajusta a la _finestra" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "Amplia al _100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "Afegeix a la cua del _lot" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "Afegeix la _vista actual a la cua" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Suprimeix de la cua del lot" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Comença" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Quant a" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Barra de miniatures" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Caixa d'eines" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Pantalla sencera" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Màscara d'exposició" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Divideix" + +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + +#~ msgid "Opening directory..." +#~ msgstr "S'està obrint el directori..." Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/cs.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/cs.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/cs.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/cs.po --- rawstudio-1.1.1/po/cs.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/cs.po 2009-04-09 22:22:04.000000000 +0100 @@ -5,9 +5,9 @@ # Jakub Friedl , 2007. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-04-17 22:04+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -19,213 +19,222 @@ "X-Poedit-Language: Czech\n" "X-Poedit-Country: CZECH REPUBLIC\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Původní jméno souboru" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - vzestupné počítadlo" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Vyberte barevný profil" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Všechny soubory" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Barevné profily (icc a icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Není platný barevný profil." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 #, fuzzy msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." msgstr "Zvolený soubor zřejmě není platným barevným profilem." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Povolit správu barev (experimentální)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Vstupní profil" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Vestavěný RGB profil" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Profil obrazovky" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Exportní profil" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Záměr" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Perceptuální" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Relativní kolorimetrický" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Sytost" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absolutní kolorimetrický" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Vykreslování pozadí aktivní" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Otevírá se fotografie..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Nelze otevřít fotografii" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Obrázek otevřen" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Změněna priorita fotografie (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Změněna priorita fotografie (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Změněna priorita fotografie (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Předvolby" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Náhled barvy pozadí:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Výška histogramu:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Zobrazit jména souborů v pohledu na ikony" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Umístit vyrovnávací paměť do domovského adresáře" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Načíst 8bitové fotografie (JPEG, PNG, apod.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 #, fuzzy msgid "Preload photos" msgstr "Smazané fotografie" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 #, fuzzy msgid "Directory:" msgstr "Adresář otevřen" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 #, fuzzy msgid "Filename:" msgstr "Jméno souboru" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 #, fuzzy msgid "File type:" msgstr "Šablona jména souboru:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Příklad jména souboru:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Uložit nekomprimovaný TIFF" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Obecné" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 #, fuzzy msgid "Quick export" msgstr "Soubor exportován" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Barvy" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 #, fuzzy msgid "Open recursive" msgstr "Otevřít křivku..." -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Nástroje" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Dávka" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Připraveno" @@ -253,7 +262,7 @@ msgid "Percent:" msgstr "Procento:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Exportovat soubor" @@ -261,7 +270,7 @@ msgid "Exporting file ..." msgstr "Exportuje se soubor..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Soubor exportován" @@ -269,315 +278,306 @@ msgid "File export canceled" msgstr "Export souboru zrušen" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, fuzzy, c-format -msgid "%.1fs " -msgstr "%.1f " - -#: src/rawstudio.c:507 -#, fuzzy, c-format -msgid "1/%.0fs " -msgstr "1/%.0f " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Zpracovávají se fotografie" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Zrušit" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Poslední obrázek:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "" -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Načítá se %s..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Ukládá se %s..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Ikona" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Jméno souboru" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Nastavení" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Spustit" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 #, fuzzy msgid "Constant height" msgstr "Výška histogramu:" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 #, fuzzy msgid "Photo height:" msgstr "Výška histogramu:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" "%d" msgstr "" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, fuzzy, c-format msgid "" "Constant height:\n" "%d" msgstr "Výška histogramu:" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" "%d" msgstr "" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" "%d x %d" msgstr "" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Zvolte výstupní adresář" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Výstupní adresář:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Šablona jména souboru:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 #, fuzzy msgid "Change" msgstr "Zrušit" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 #, fuzzy msgid "Export dimensions" msgstr "Adresář pro export:" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Všechny fotografie (kromě smazaných)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Fotografie s prioritou 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Fotografie s prioritou 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Fotografie s prioritou 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Fotografie bez priority" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Smazané fotografie" @@ -586,211 +586,244 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 #, fuzzy msgid "Priorities" msgstr "Průběh" -#: src/rs-store.c:1004 -#, fuzzy -msgid "Opening directory..." -msgstr "Otevírá se adresář..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" + +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Velikost" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Mřížka" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Žádný" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Zlaté řezy" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Pravidlo třetin" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Zlaté trojúhelníky #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Zlaté trojúhelníky #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Harmonické trojúhelníky #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Harmonické trojúhelníky #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Poměr stran" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Volně" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "Formát A4" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Zlatý obdélník" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Oříznout" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 #, fuzzy msgid "Don't crop" msgstr "Zrušit oříznutí" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Převrátit fotografii podle osy x" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Zrcadlit fotografii podle osy y" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Otočit fotografii o 90 stupňů ve směru hodinových ručiček" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Otočit fotografii o 180 stupňů" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Otočit fotografii o 90 stupňů proti směru hodinových ručiček" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transformace" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Teplota/tónování" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Resetovat toto nastavení" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Otevřít křivku..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Uložit křivku jako..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Resetovat křivku" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Expozice" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Odstín" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Kontrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Teplota/tónování" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Křivka" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogram" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Otevřít adresář" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Mazání fotografií" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Vaše soubory budou trvale smazány!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Smazat fotografie" @@ -806,54 +839,54 @@ msgid "Select settings to paste" msgstr "Vyberte nastavení pro vložení" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Vložená nastavení" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Nic ke vložení" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Prázdný buffer" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Automatická úprava vyvážení bílé" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Neexistuje vyvážení bílé k nastavení" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Vyvážení bílé podle fotoaparátu" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Zobrazení expoziční masky" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Skrytí expoziční masky" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, fuzzy, c-format msgid " %s added to batch queue" msgstr "Přidáno do fronty" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, fuzzy, c-format msgid "%s already added to batch queue" msgstr "Je již ve frontě" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, fuzzy, c-format msgid "%d photos added to batch queue" msgstr "Přidáno do fronty" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -861,243 +894,290 @@ "Zvolte, která nastavení\n" "přidat do fronty" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Odstraněno z fronty" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Není ve frontě" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Konvertor obrazového formátu raw pro GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Soubor" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Úpravy" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Fotografie" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Nastavit prioritu" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 #, fuzzy msgid "_White Balance" msgstr "Vyvážení bílé" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Zobrazení" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Dávka" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Nápověda" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 #, fuzzy msgid "_Open Directory" msgstr "Otevřít adresář" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 #, fuzzy msgid "_Quick Export" msgstr "Soubor exportován" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 #, fuzzy msgid "_Export As" msgstr "Export" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 #, fuzzy msgid "_Export to Gimp" msgstr "Exportní profil" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 #, fuzzy msgid "_Reload directory" msgstr "Otevřít adresář" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Smazat označené fotografie" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Ukončit" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Obnovit nastavení" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 #, fuzzy msgid "_Copy settings" msgstr "Zkopírovaná nastavení" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 #, fuzzy msgid "_Paste settings" msgstr "Vložená nastavení" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 #, fuzzy msgid "_Reset settings" msgstr "Resetovat toto nastavení" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 #, fuzzy msgid "_Preferences" msgstr "Předvolby" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 #, fuzzy msgid "_Crop" msgstr "Oříznout" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 #, fuzzy msgid "_Uncrop" msgstr "Zrušit oříznutí" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 #, fuzzy msgid "_Straighten" msgstr "Narovnat" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 #, fuzzy msgid "_Unstraighten" msgstr "Zrušit narovnání" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 #, fuzzy msgid "_Group" msgstr "Oříznout" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 #, fuzzy msgid "_Ungroup" msgstr "Zrušit oříznutí" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "Zrušit oříznutí" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Předchozí fotografie" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Další fotografie" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Přiblížit podle okna" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Přiblížit 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 #, fuzzy msgid "_Add to batch queue" msgstr "Přidáno do fronty" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Přidat aktuální pohled do fronty" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 #, fuzzy msgid "_Remove from batch queue" msgstr "Odstraněno z fronty" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 #, fuzzy msgid "_Start" msgstr "Spustit" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "O aplikaci" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 #, fuzzy msgid "_Iconbox" msgstr "Ikona" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 #, fuzzy msgid "_Toolbox" msgstr "Nástroje" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Celá obrazovka" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 #, fuzzy msgid "_Exposure mask" msgstr "Expozice" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#, fuzzy +#~ msgid "%.1fs " +#~ msgstr "%.1f " + +#, fuzzy +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0f " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Chybí metadata" #, fuzzy +#~ msgid "Opening directory..." +#~ msgstr "Otevírá se adresář..." + +#, fuzzy #~ msgid "Added view to batch queue" #~ msgstr "Pohled(y) přidány do fronty" Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/da.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/da.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/da.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/da.po --- rawstudio-1.1.1/po/da.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/da.po 2009-04-09 22:22:04.000000000 +0100 @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" -"PO-Revision-Date: 2008-04-17 21:42+0100\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" +"PO-Revision-Date: 2009-01-11 04:25+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" @@ -17,38 +17,47 @@ "X-Poedit-Language: Danish\n" "X-Poedit-Country: DENMARK\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Originalt filnavn" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Stigende tæller" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Indstillings id (A, B eller C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Vælg farveprofil" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Alle filer" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Farveprofiler (icc og icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Ikke en valid farveprofil" -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -56,169 +65,169 @@ "Den valgte fil er ikke en godkendt farveprofil til denne version af " "Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Aktiver farvestyring (eksperimentelt)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Input profil" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Indbygget RGB profil" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Skærm profil" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Output profil" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Formål" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Opfattelse" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Relativt farvemetrisk" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Farvemætning" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absolut farvemetrisk" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Beregner i baggrunden" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Åbner foto ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Kunne ikke åbne foto" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Foto åbnet" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Fotoprioritet ændret (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Fotoprioritet ændret (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Fotoprioritet ændret (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Egenskaber" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Baggrundsfarve" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Histogram højde:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Vis filnavne" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Brug system tema" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Placer cache i hjemme bibliotek" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Åben 8 bit fotos (jpeg, png, osv.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Forhåndsåbning af fotos" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Bibliotek:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Filnavn:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Fil type:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Eksempel på filnavn:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Gem TIFF ukomprimeret" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Generel" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Hurtig eksportering" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Farver" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Åben rekursivt" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Værktøjer" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Batch" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Åben" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Klar" @@ -246,7 +255,7 @@ msgid "Percent:" msgstr "Procent:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Eksporter fil" @@ -254,7 +263,7 @@ msgid "Exporting file ..." msgstr "Eksporterer fil ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Fil eksporteret" @@ -262,207 +271,198 @@ msgid "File export canceled" msgstr "Eksportering af fil afbrudt" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Behandler fotos" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Afbryd" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Sidste foto:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tid tilbage: %dt %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Tid tilbage: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Åbner %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Gemmer %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Ikon" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Filnavn" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Indstilling" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Start" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Fjern" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Fjern alle" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Foto størrelse" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Konstant målestok" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Konstant bredde" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Konstant højde" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Maximal størrelse" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Foto bredde:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pixels" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Foto højde:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Foto målestok:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -471,7 +471,7 @@ "Konstant bredde:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -480,7 +480,7 @@ "Konstant højde:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -489,7 +489,7 @@ "Konstant målestok:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -498,83 +498,83 @@ "Maksimal størrelse:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Vælg output bibliotek" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Output bibliotek:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Filnavns skabelon:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Skift" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Eksponerings dimensioner" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Alle fotos (undtaget slettede)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Prioritet 1 fotos" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Prioritet 2 fotos" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Prioritet 3 fotos" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Uprioriterede fotos" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Slettede fotos" @@ -583,208 +583,244 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Prioriteter" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Åben bibliotek" +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" +"%s\n" +"\n" + +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "Fokus længde: %dmm\n" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "Lukker hastighed: %.1fs\n" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "Lukker hastighed: 1/%.0fs\n" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "Blænde: F/%.01f\n" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "ISO: %u\n" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "Tid: %s" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Størrelse:" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Gitter" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Ingen" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Gyldne sektioner" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Trediedels reglen" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Gyldne trekanter #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Gyldne trekanter #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Harmoniske trekanter #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Harmoniske trekanter #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Forhold" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Fri" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "ISO papir (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Gylden rektangel" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Beskær" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Afbryd crop" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Vend foto over x-aksen" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Vend foto over y-aksen" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Roter fotoet 90 grader med uret" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Roter fotoet 180 grader" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Roter fotoet 90 grader mod uret" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transformere" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Varme/Nuance" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Nulstil denne indstilling" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Åben kurve ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Gem kurve som ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Nulstil kurve" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Auto indstil kurve ender" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A" -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Eksponering" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Farvetone" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Kontrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Varme/Nuance" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Skarphed" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Kurve" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogram" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Åben bibliotek" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Fejl ved eksportering" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Fejl ved eksportering til Gimp" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Sletter fotos" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Dine filer vil blive slettet permanent!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Slet fotos" @@ -800,54 +836,54 @@ msgid "Select settings to paste" msgstr "Vælg indstillinger der skal indsættes" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Indstillinger indsat" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Intet at indsætte" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Bufferen er tom" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Justerer efter auto hvidbalance" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Ingen hvidbalance at justere fra" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Justerer efter kameraets hvidbalance" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Viser eksponerings maskering" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Skjuler eksponerings maskering" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "%s er tilføjet til batch køen" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s er allerede tilføjet til batch køen" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d fotos tilføjet til batch køen" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -855,220 +891,262 @@ "Vælg hvilke indstillinger der\n" "skal tilføjes til batch køen" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Fjernet fra batch kø" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Findes ikke i batch kø" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "En raw foto konverter til GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Filer" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Editer" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Foto" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Sæt_prioritet" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Hvidbalance" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Vis" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "_Sorter efter" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Batch" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Hjælp" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Åben bibliotek" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Hurtig eksportering" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "_Eksporter som..." -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Eksporter til Gimp " -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Genindlæs bibliotek" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Slet markerede fotos" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Afslut" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Nulstil ændringer" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Kopier indstillinger" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Indsæt indstillinger" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Nulstil denne indstilling" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Egenskaber" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Marker foto til sletning" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Fjern prioritet" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Auto" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Kamera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Beskær" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Annuller beskæring" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Ret foto op" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "_Fjern fotoopretning" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Grupper" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Fjern gruppering" -#: src/rs-actions.c:837 -#, fuzzy +#: src/rs-actions.c:832 msgid "_Auto group" -msgstr "_Fjern gruppering" +msgstr "_Auto gruppering" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Foregående foto" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Næste foto" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Zoom tilpasning" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zoom til 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Tilføj til batch køen" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Tilføj nuværende visning til batch køen" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Fjern fra batch køen" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Start" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Om" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Ikoner" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Værktøjer" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Fuld skærm" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Eksponerings maskering" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Delt visning" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "Navn" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "Tidspunkt" + +#: src/rs-actions.c:863 +msgid "ISO" +msgstr "ISO" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "Blænde" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "Fokuslængde" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "Lukker hastighed" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Ingen metadata" +#~ msgid "Opening directory..." +#~ msgstr "Åben bibliotek" + #~ msgid "Split" #~ msgstr "Delt visning" Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/de.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/de.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/de.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/de.po --- rawstudio-1.1.1/po/de.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/de.po 2009-04-09 22:22:04.000000000 +0100 @@ -6,9 +6,9 @@ # Martin Egger , 2008. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-04-17 22:00+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -20,38 +20,47 @@ "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Usprünglicher Dateiname" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Laufnummer" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Einstellungen (A, B oder C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Auswahl des Farbprofiles" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Alle Dateien" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Farbprofile (ICC und ICM)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Dies ist kein gültiges Farbpropfil" -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -59,174 +68,174 @@ "Die ausgewählte Datei ist für diese Version von Rawstudio kein gültiges " "Farbprofil" -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Farbmanagement einschalten (experimentell)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Eingabe Farbprofil" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Arbeitsfarbraum" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Ausgabe Farbprofil" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Farbraumtransformation" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Wahrnehmungsabhängig" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Relativ farbmetrisch" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Sättigung" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absolut farbmetrisch" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Verarbeitung im Hintergrund aktiv" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 #, fuzzy msgid "Opening photo ..." msgstr "Öffne Bild ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 #, fuzzy msgid "Couldn't open photo" msgstr "Kann das Bild nicht öffnen" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Bild geöffnet" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Priorität des Bildes geändert (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Priorität des Bildes geändert (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Priorität des Bildes geändert (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Einstellungen" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Hintergrundfarbe:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Höhe des Histogramms:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Anzeige der Dateinamen in der Vorschau" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Verwende Standard Bildschirmdarstellung" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Speichere temporäre Daten im Benutzerverzeichnis" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Lade 8-Bit Bilder (JPEG, PNG etc.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 #, fuzzy msgid "Preload photos" msgstr "Vorgängiges Laden der Bilder" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 #, fuzzy msgid "Directory:" msgstr "Verzeichnis:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Dateiname:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Dateityp:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Beispiel für Dateiname:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Speichere umkomprimiertes TIFF" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Allgemein" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Schnellausgabe" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Farben" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 #, fuzzy msgid "Open recursive" msgstr "Rekursives Öffnen" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Werkzeuge" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Stapelverarbeitung" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Öffnen" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Fertig" @@ -254,7 +263,7 @@ msgid "Percent:" msgstr "prozent:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Datei eportieren" @@ -262,7 +271,7 @@ msgid "Exporting file ..." msgstr "Exportiere Datei ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Datei gesprichert" @@ -270,208 +279,199 @@ msgid "File export canceled" msgstr "Datei Export abgebrochen" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Verarbeite Bilder" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Abbruch" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Letztes Bild:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Verbleibende Zeit: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Verbleibende Zeit: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Lade %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Speichere %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Symbol" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Dateiname" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Einstellung" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Beginn" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Entfernen" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Alle entfernen" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Bildgrösse" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Fixe Grösse" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Fixe Breite" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Fixe Höhe" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Maximale Grösse" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Bildbreite:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "Bildpunkte" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 #, fuzzy msgid "Photo height:" msgstr "Bildhöhe:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Skalierungsfaktor:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -480,7 +480,7 @@ "Fixe Breite:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -489,7 +489,7 @@ "Fixe Höhe:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -498,7 +498,7 @@ "Fixer Faktor:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -507,84 +507,84 @@ "Maximale Grösse:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Wähle Ausgabeverzeichnis" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Ausgabeverzeichnis:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Vorgabe für Dateiname:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 #, fuzzy msgid "Change" msgstr "Ändern" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Bildgrösse exportieren" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Alle Bilder (ohne gelöschte)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Bilder der Priorität 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Bilder der Priorität 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Bilder der Priorität 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Bilder ohne Priorität" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Gelöschte Bilder" @@ -593,212 +593,245 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 #, fuzzy msgid "Priorities" msgstr "Prioritäten" -#: src/rs-store.c:1004 -#, fuzzy -msgid "Opening directory..." -msgstr "Öffne Verzeichnis" +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" + +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Grösse" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Gitter" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Keines" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Goldener Schnitt" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Drittelsregel" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Goldene Dreiecke #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Goldene Dreiecke #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Harmonische Dreiecke #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Harmonische Dreiecke #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Verhältnis" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Freie Auswahl" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "DIN/ISO (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Goldenes Rechteck" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Beschneiden" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 #, fuzzy msgid "Don't crop" msgstr "Beschneidung aufheben" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Spiegeln des Bildes über die X-Achse" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Spiegeln des Bildes über die Y-Achse" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Rotieren des Bildes um 90 Grad im Uhrzeigersinn" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Rotieren des Bildes um 180 Grad" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Rotieren des Bildes um 90 Grad gegen den Uhrzeigersinn" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Anpassungen" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Farbtemperatur/Farbton" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Einstellungen zurücksetzen" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 #, fuzzy msgid "Open curve ..." msgstr "Öffne Belichtungskurve ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Speichere Belichtungskurve unter ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Belichtungskurve zurücksetzen" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Automatische Anpassungen der Kurvenenden" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Belichtung" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Farbton" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Kontrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Farbtemperatur/Farbton" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Schärfen" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Kurve" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogramm" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Öffne Verzeichnis" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Fehler beim Exportieren" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Fehler beim Exportieren zu GIMP" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Lösche Bilder" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Die Dateien werden unwiderruflich gelöscht!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Bilder löschen" @@ -814,54 +847,54 @@ msgid "Select settings to paste" msgstr "Auswahl der einzufügenden Einstellungen" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Einstellungen eingefügt" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Nichts einzufügen" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Puffer ist leer" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Automatischer Weissabgleich durchgeführt" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Kein Daten für Weissabgleich vorhanden" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Verwendung des Kamera Weissabgleichs" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Anzeige der Belichtungswarnung" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Keine Anzeige der Belichtungswarnung" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, fuzzy, c-format msgid " %s added to batch queue" msgstr " %s zur Stapelverarbeitung hinzugefügt" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, fuzzy, c-format msgid "%s already added to batch queue" msgstr "%s wurde bereits zur Stapelverarbeitung hinzugefügt" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, fuzzy, c-format msgid "%d photos added to batch queue" msgstr "%d Bilder zur Stapelverarbeitung hinzugefügt" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -869,245 +902,290 @@ "Welche Einstellungen zur\n" "Stapelverarbeitung hinzugen" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Von der Stapelverarbeitung gelöscht" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Nicht in der Stapelverarbeitung vorhanden" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Ein RAW Konverter für GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Datei" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Editieren" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Bild" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Setze Priorität" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 #, fuzzy msgid "_White Balance" msgstr "_Weissabgleich" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Ansicht" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Stapelverarbeitung" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Hilfe" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 #, fuzzy msgid "_Open Directory" msgstr "_Verzeichnis öffnen" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 #, fuzzy msgid "_Quick Export" msgstr "_Schnellausgabe" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 #, fuzzy msgid "_Export As" msgstr "_Datei eportieren" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 #, fuzzy msgid "_Export to Gimp" msgstr "_Exportieren zu GIMP" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 #, fuzzy msgid "_Reload directory" msgstr "_Verzeichnis neu laden" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Markierte Bilder löschen" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Beenden" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Einstellungen rückgängig machen" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 #, fuzzy msgid "_Copy settings" msgstr "_Einstellungen kopieren" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 #, fuzzy msgid "_Paste settings" msgstr "_Einstellungen eingefügen" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 #, fuzzy msgid "_Reset settings" msgstr "_Einstellungen zurücksetzen" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 #, fuzzy msgid "_Preferences" msgstr "_Einstellungen" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Bild zum löschen markieren" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Lösche Priorität" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Automatisch" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Kamera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 #, fuzzy msgid "_Crop" msgstr "_Beschneiden" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 #, fuzzy msgid "_Uncrop" msgstr "_Beschneidung aufheben" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 #, fuzzy msgid "_Straighten" msgstr "_Begradigen" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 #, fuzzy msgid "_Unstraighten" msgstr "_Begradigung aufheben" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 #, fuzzy msgid "_Group" msgstr "_Gruppieren" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 #, fuzzy msgid "_Ungroup" msgstr "_Gruppierung aufheben" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Gruppierung aufheben" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Vorhergehendes Bild" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Nächstes Bild" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 #, fuzzy msgid "_Zoom to fit" msgstr "_Grösse an Bildschirm anpassen" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 #, fuzzy msgid "_Zoom to 100%" msgstr "_Grösse 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 #, fuzzy msgid "_Add to batch queue" msgstr "_Zur Stapelverarbeitung hinzugefügen" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Aktuelle Ansicht zur Stapelverarbeitung hinzufügen" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 #, fuzzy msgid "_Remove from batch queue" msgstr "_Von der Stapelverarbeitung entfernen" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 #, fuzzy msgid "_Start" msgstr "_Beginn" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Über Rawstudio" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 #, fuzzy msgid "_Iconbox" msgstr "_Bildleiste" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 #, fuzzy msgid "_Toolbox" msgstr "_Werkzeuge" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Vollbildansicht" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 #, fuzzy msgid "_Exposure mask" msgstr "_Belichtungswarnung" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 #, fuzzy msgid "_Split" msgstr "_Teilen" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Keine Metadaten vorhanden" +#, fuzzy +#~ msgid "Opening directory..." +#~ msgstr "Öffne Verzeichnis" + #~ msgid "Added view to batch queue" #~ msgstr "Ansicht zur Stapelverarbeitung hinzugefügt" Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/en.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/en.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/en.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/en.po --- rawstudio-1.1.1/po/en.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/en.po 2009-04-09 22:22:04.000000000 +0100 @@ -5,9 +5,9 @@ # Simone Contini , 2008. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-04-17 21:42+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -16,38 +16,47 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: English\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Original filename" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Incremental counter" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Setting id (A, B or C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Select color profile" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "All files" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Color profiles (icc and icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Not a valid color profile." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -55,169 +64,169 @@ "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Enable color management (experimental)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Input profile" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Display profile" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Export profile" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Intent" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Perceptual" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Relative colormetric" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Saturation" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absolute colormetric" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Background renderer active" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Opening photo ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Couldn't open photo" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Image opened" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Changed photo priority (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Changed photo priority (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Changed photo priority (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Preferences" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Preview background color:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Histogram height:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Show filenames in iconview" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Use system theme" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Place cache in home directory" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Load 8 bit photos (jpeg, png, etc)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Preload photos" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Directory:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Filename:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "File type:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Filename example:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Save uncompressed TIFF" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "General" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Quick export" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Colors" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Open recursive" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Tools" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Batch" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Open" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Ready" @@ -245,7 +254,7 @@ msgid "Percent:" msgstr "Percent:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Export File" @@ -253,7 +262,7 @@ msgid "Exporting file ..." msgstr "Exporting file ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "File exported" @@ -261,207 +270,198 @@ msgid "File export canceled" msgstr "File export canceled" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Processing photos" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Cancel" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Last image:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Time left: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Time left: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Loading %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Saving %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Icon" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Filename" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Setting" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Start" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Remove" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Remove all" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Photo size" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Constant scale" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Constant width" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Constant height" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Maximum size" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Photo width:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pixels" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Photo height:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Photo scale:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -470,7 +470,7 @@ "Constant width:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -479,7 +479,7 @@ "Constant height:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -488,7 +488,7 @@ "Constant Scale:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -497,83 +497,83 @@ "Maximum size:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Choose output directory" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Output directory:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Filename template:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Change" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Export dimensions" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "All photos (excluding deleted)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Priority 1 photos" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Priority 2 photos" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Priority 3 photos" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Unprioritized photos" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Deleted photos" @@ -582,208 +582,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Priorities" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Opening directory..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Size" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Grid" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "None" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Golden sections" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Rule of thirds" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Golden triangles #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Golden triangles #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Harmonious triangles #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Harmonious triangles #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Aspect" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Freeform" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "ISO paper (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Golden rectangle" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Crop" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Don't crop" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Flip the photo over the x-axis" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Mirror the photo over the y-axis" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Rotate the photo 90 degrees clockwise" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Rotate the photo 180 degrees" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Rotate the photo 90 degrees counter clockwise" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transforms" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Warmth/tint" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Reset this setting" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Open curve ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Save curve as ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Reset curve" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Auto adjust curve ends" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Exposure" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Hue" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Contrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Warmth/tint" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Sharpen" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Curve" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogram" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Open directory" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Error exporting" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Error exporting photo to gimp." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Deleting photos" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Your files will be permanently deleted!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Delete photos" @@ -799,54 +833,54 @@ msgid "Select settings to paste" msgstr "Select settings to paste" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Pasted settings" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Nothing to paste" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Buffer empty" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Adjusting to auto white balance" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "No white balance to set from" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Adjusting to camera white balance" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Showing exposure mask" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Hiding exposure mask" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr " %s added to batch queue" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s already added to batch queue" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d photos added to batch queue" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -854,216 +888,260 @@ "Select which settings to\n" "add to batch queue" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Removed from batch queue" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Not in batch queue" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "A raw image converter for GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_File" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Edit" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Photo" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Set Priority" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_White Balance" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_View" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Batch" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Help" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Open Directory" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Quick Export" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "_Export As" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Export to Gimp" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Reload directory" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Delete flagged photos" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Quit" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Revert settings" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Copy settings" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Paste settings" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Reset settings" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Preferences" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Flag photo for deletion" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Remove priority" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Auto" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Camera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Crop" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Uncrop" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Straighten" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "_Unstraighten" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Group" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Ungroup" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Ungroup" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Previous photo" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Next Photo" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Zoom to fit" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zoom to 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Add to batch queue" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Add current view to queue" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Remove from batch queue" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Start" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_About" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Iconbox" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Toolbox" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Fullscreen" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Exposure mask" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Split" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "No metadata" + +#~ msgid "Opening directory..." +#~ msgstr "Opening directory..." Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/es.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/es.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/es.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/es.po --- rawstudio-1.1.1/po/es.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/es.po 2009-04-09 22:22:04.000000000 +0100 @@ -5,9 +5,9 @@ # Carlos Davila , 2008. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-05-02 00:47+0100\n" "Last-Translator: Patrik Jarl \n" "Language-Team: Rawstudio development \n" @@ -19,38 +19,47 @@ "X-Poedit-Language: Spanish\n" "X-Poedit-Country: SPAIN\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Nombre de archivo original" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Contador incremental" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Ajuste id (A, B o C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Seleccionar perfil de color" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Todos los archivos" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Perfiles de color (icc e icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "No es un perfil de color válido." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -58,169 +67,169 @@ "El archivo que ha seleccionado parece que no es un perfil de color válido " "para esta versión de Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Activar administración de color (experimental)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Perfil de entrada" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "PerfilRGBIncrustado" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Perfil de visualización" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Perfil de exportación" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Propósito" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Perceptual" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Colorimétrico relativo" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Saturación" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Colorimétrico absoluto" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Renderizador en segundo plano activo" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Abriendo foto..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "No se pudo abrir la foto" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Imagen abierta" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Prioridad de foto cambiada (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Prioridad de foto cambiada (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Prioridad de foto cambiada (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Configuración" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Color de fondo de previsualización:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Altura del histograma:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Mostrar nombres de archivo en la vista de iconos" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Usar tema del sistema" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Situar caché en el directorio personal" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Cargar fotos de 8 bits (jpeg, png, etc.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Precargar fotos" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Directorio:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Nombre de archivo:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Tipo de archivo:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Ejemplo de nombre de archivo:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Guardar TIFF sin compresión" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "General" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Exportación rápida" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Colores" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Apertura recursiva" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Herramientas" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Lotes" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Abrir" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Listo" @@ -248,7 +257,7 @@ msgid "Percent:" msgstr "Porcentaje:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Exportar archivo" @@ -256,7 +265,7 @@ msgid "Exporting file ..." msgstr "Exportando archivo..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Archivo exportado" @@ -264,207 +273,198 @@ msgid "File export canceled" msgstr "Cancelada la exportación de archivo" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Raw de Minolta" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Raw de Panasonic" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Raw de Panasonic" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Raw de Pentax" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Negativo digital de Adobe" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Procesando fotos" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Cancelar" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Última imagen:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tiempo restante: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Tiempo restante: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Cargando %s..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Guardando %s..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Icono" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Nombre de archivo" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Ajuste" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Inicio" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Eliminar" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Eliminar todo" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Tamaño de foto" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Escala constante" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Anchura constante" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Altura constante" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Tamaño máximo" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Anchura de foto:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "píxeles" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Altura de foto:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Escala de foto:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -473,7 +473,7 @@ "Anchura constante:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -482,7 +482,7 @@ "Altura constante:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -491,7 +491,7 @@ "Escala constante:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -500,83 +500,83 @@ "Tamaño máximo:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Seleccionar directorio de salida" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Directorio de salida:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Plantilla de nombres de archivo:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Cambiar" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Exportar dimensiones" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Todas las fotos (excluidas las borradas)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Fotos de prioridad 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Fotos de prioridad 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Fotos de prioridad 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Fotos sin priorizar" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Fotos borradas" @@ -585,208 +585,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Prioridades" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Abriendo directorio..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Tamaño" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Cuadrícula" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Ninguna" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "La sección áurea" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "La regla de tercero" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Triangulo de oro #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Triangulo de oro #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Triángulos armoniosos #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Triángulos armoniosos #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Orientación" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Forma libre" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "Papel ISO (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "El rectángulo áureo" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Recortar" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "No recortar" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Reflejar la foto sobre el eje X" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Reflejar la foto sobre el eje X" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Girar la foto 90 grados en el sentido de las agujas del reloj" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Girar la foto 180 grados" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Girar la foto 90 grados en sentido contrario a las agujas del reloj" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transformaciones" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Temperatura/matiz" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Restaurar este ajuste" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Abrir curva..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Guardar curva como..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Restablecer curva" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Auto ajustar finales de curva" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Exposición" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Tono" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Contraste" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Temperatura/matiz" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Enfoque" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Curva" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histograma" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Abrir directorio" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Error al exportar" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Error al exportar la foto a gimp." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Borrando fotos" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "¡Sus archivos se borrarán permanentemente!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Borrar fotos" @@ -802,54 +836,54 @@ msgid "Select settings to paste" msgstr "Seleccionar ajustes a pegar" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Ajustes pegados" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Nada que pegar" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Memoria intermedia vacía" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Ajustando a balance de blancos automático" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Balance de blanco falta de" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Ajustando al balance de blancos de la cámara" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Mostrando máscara de exposición" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Ocultando máscara de exposición" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr " %s añadido a la cola de lotes" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s ya está en la cola de lotes" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d fotos añadidas a la cola de lotes" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -857,216 +891,260 @@ "Seleccionar qué ajustes\n" "añadir a la cola de lotes" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Eliminado de la cola de lotes" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "No está en la cola de lotes" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertidor de imágenes raw para GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Archivo" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Editar" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Foto" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Establecer prioridad" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Balance de blancos" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Ver" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Lotes" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Ayuda" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Abrir directorio" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Exportación rápida" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "_Exportar como" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Exportar a Gimp" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Recargar directorio" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Borrar fotos marcadas" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Salir" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Deshacer ajustes" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Copiar ajustes" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Pegar ajustes" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Restablecer ajustes" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Configuración" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Marcar foto para borrar" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Eliminar prioridad" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Auto" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Cámara" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Recorte" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Deshacer recorte" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Enderezar" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "_Desenderezar" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Agrupar" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Desagrupar" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Desagrupar" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Foto anterior" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Siguiente foto" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Zoom para ajustar" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zoom al 100 %" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Añadir a la cola de lotes" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Añadir vista actual a la cola de lotes" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Eliminar de la cola de lotes" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Iniciar" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Acerca de" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Caja de iconos" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Caja de herramientas" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Pantalla completa" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Máscara de exposición" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Dividir" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Ningún metadato" + +#~ msgid "Opening directory..." +#~ msgstr "Abriendo directorio..." Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/fi.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/fi.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/fi.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/fi.po --- rawstudio-1.1.1/po/fi.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/fi.po 2009-04-09 22:22:04.000000000 +0100 @@ -15,9 +15,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-04-18 07:45+0200\n" "Last-Translator: Olli H.\n" "Language-Team: Rawstudio development \n" @@ -27,207 +27,216 @@ "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Alkuperäinen tiedostonimi" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Kasvava laskuri" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Tärkeysmerkintä (A, B tai C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Valitse väriprofiili" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Kaikki tiedostot" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Väriprofiilit (icc ja icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Epäkelpo väriprofiili." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." msgstr "" "Valitsemasi tiedosto ei kelpaa väriprofiiliksi Rawstudion tälle versiolle" -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Ota värien hallinta käyttöön (kokeellinen toiminto)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Tuontiprofiili" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Sisäänrakennettu RGB-profiili" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Näytön profiili" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Vientiprofiili" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Rasterointiaie" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Havainnollinen" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Suhteellinen kolorimetrinen" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Värikylläisyys" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absoluuttinen kolorimetrinen" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Taustan renderöijä on aktiivinen" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Avataan kuvaa ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Kuvaa ei voitu avata" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Kuva on avattu" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Kuvan tärkeys muutettu (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Kuva merkitty poistettavaksi (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Kuvan tärkeys muutettu (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Asetukset" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Esikatselun taustan väri:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Histogrammin korkeus:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Näytä kuvien nimet pikkukuvien yhteydessä" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Käytä järjestelmän teemaa" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Sijoita asetukset sisältävät tiedostot kotihakemistoon" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Lataa 8-bittiset kuvat (jpeg, png, jne.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Esilataa kuvat" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Kansio:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Tiedoston nimi:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Tiedoston tyyppi:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Tiedostonimen esimerkki:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Tallenna pakkaamaton TIFF" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Yleistä" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Pikavienti" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Värit" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Avaa alihakemistot rekursiivisesti" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Työkalut" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Työjono" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Avaa" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Valmis" @@ -255,7 +264,7 @@ msgid "Percent:" msgstr "Prosenttia:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Vie tiedosto" @@ -263,7 +272,7 @@ msgid "Exporting file ..." msgstr "Viedään tiedostoa ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Tiedosto on viety" @@ -271,207 +280,198 @@ msgid "File export canceled" msgstr "Tiedoston vienti keskeytettiin" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bittinen TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Työstetään kuvia" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Peruuta" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Viimeinen kuva:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Aikaa jäljellä: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Aikaa jäljellä: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Ladataan %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Tallennetaan %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Pikkukuva" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Tiedostonimi" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Asetus" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Aloita" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Poista" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Poista kaikki" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Kuvan koko" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Vakiomittasuhteet" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Vakioleveys" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Vakiokorkeus" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Suurin koko" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Kuvan leveys:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "kuvapistettä" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Kuvan korkeus:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Kuvan mittakaava:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -480,7 +480,7 @@ "Vakioleveys:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -489,7 +489,7 @@ "Vakiokorkeus:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -498,7 +498,7 @@ "Vakiomittasuhteet:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -507,83 +507,83 @@ "Suurin koko:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Valitse kansio mihin viedään" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Kansio mihin viedään:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Tiedostonimen malli:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Muuta" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Viedyn kuvan mitat" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Kaikki kuvat (paitsi poistettavaksi merkityt)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Tärkeysmerkinnän 1 kuvat" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Tärkeysmerkinnän 2 kuvat" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Tärkeysmerkinnän 1 kuvat" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Tärkeysmerkitsemättömät kuvat" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Poistettavaksi merkityt kuvat" @@ -592,208 +592,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Tärkeysmerkinnät" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Avaa kansio" +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Koko" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Verkko" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Ei mitään" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Kultaiset leikkaukset" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Kolmanneksien sääntö" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Kultaiset kolmiot #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Kultaiset kolmiot #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Harmoniset kolmiot #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Harmoniset kolmiot #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Sivusuhde" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Vapaamuoto" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "A4 (ISO-standardin mukainen)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Kultainen neliö" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Rajaa" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Käännä kuva x-akselin suhteen" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Peilaa kuva y-akselin suhteen" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Käännä kuvaa 90 astetta myötäpäivään" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Käännä kuvaa 180 astetta" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Käännä kuvaa 90 astetta vastapäivään" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Muotoilut" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Värilämpötila/väri" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Palauta oletusarvo" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Avaa käyrä ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Tallenna käyrä nimellä ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Palauta käyrän oletusmuoto" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Säädä käyrän ääripäät automaattisesti" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Valotus" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Sävy" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Kontrasti" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Värilämpötila/väri" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Terävöitys" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Käyrä" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histrogrammi" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Avaa kansio" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Virhe vietäessä" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Virhe vietäessä kuvaa gimp-kuvienkäsittelyohjelmaan." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Poistetaan kuvia" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Tiedostosi poistetaan pysyvästi!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Poista kuvat" @@ -809,54 +843,54 @@ msgid "Select settings to paste" msgstr "Valitse liitettävät arvot" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Liitetyt arvot" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Liitettäviä asetuksia ei ole" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Välimuisti tyhjä" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Säädetään valkotasapaino automaattisesti" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Ei valkotasapainoarvoa josta asettaa" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Asetetaan kameran valkotasapainoarvoon" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Näytetään valotusmaski" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Piilotetaan valotusmaski" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr " %s lisättiin työjonoon" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s on jo lisätty työjonoon" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d kuvaa lisätty työjonoon" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -864,220 +898,264 @@ "Valitse mitkä asetukset\n" "lisätään työjonoon" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Poistettu työjonosta" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Ei työjonossa" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "RAW-kuvien muunnin GTK+/GNOME -työpöytäympäristöön" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Tiedosto" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Muokkaa" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Kuva" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Aseta tärkeys" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Valkotasapaino" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Näytä" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Työjono" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Ohje" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Avaa kansio" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Pikavienti" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "_Vie nimellä" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Vie Gimp-kuvankäsittelyohjelmaan" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Lataa kansio uudestaan" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Poista poistettavaksi merkityt kuvat" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Poistu" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Palauta arvot" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Kopioi arvot" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Liitä arvot" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Palauta oletusarvot" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Asetukset" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Merkitse kuva poistoa varten" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Poista tärkeysmerkintä" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Automaattinen" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Kamera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Rajaa" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Poista rajaus" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Suorista" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "_Poista suoristus" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Ryhmitä" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Poista ryhmitys" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Poista ryhmitys" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Edellinen kuva" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Seuraava kuva" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Zoomaa sopimaan" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zoomaa 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Lisää työjonoon" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Lisää kaikki pikkukuvat työjonoon" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Poista työjonosta" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Aloita" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Tietoja" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Pikkukuvat" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Työkalut" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Kokoruutu" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Valotusmaski" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Jaa" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Ei metadataa" +#~ msgid "Opening directory..." +#~ msgstr "Avaa kansio" + #~ msgid "Use dark theme" #~ msgstr "Käytä tummaa teemaa" Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/fr.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/fr.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/fr.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/fr.po --- rawstudio-1.1.1/po/fr.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/fr.po 2009-04-09 22:22:04.000000000 +0100 @@ -5,50 +5,59 @@ # msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-04-17 23:01+0100\n" "Last-Translator: Edouard Gomez \n" -"Language-Team: French\n" +"Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: French\n" "X-Poedit-Country: FRANCE\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Nom de fichier original" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Compteur incrémental" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Id de paramètres (A, B ou C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Sélectionner un profil colorimétrique" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Tous les fichiers" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Profils colorimétriques (ICC et ICM)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Profil colorimétrique invalide." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -56,169 +65,169 @@ "Le fichier sélectionné n'est pas un profil colorimétrique valide pour cette " "version de Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Activer la gestion colorimétrique (expérimental)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Profil d'entrée" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Profil RGB inclus" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Profil d'affichage" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Profil d'export" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Intention" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Perceptuel" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Colorimétrie relative" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Saturation" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Colorimétrie absolue" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Rendu actif en tâche de fond" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Ouverture de photo" -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "N'a pas pu ouvrir la photo" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Image ouverte" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Priorité de photo changée (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Priorité de photo changée (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Priorité de photo changée (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Préférences" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Couleur d'arrière plan de la prévisualisation :" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Hauteur de l'histogramme :" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Montrer le nom de fichier dans la vue par icônes" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Utiliser le thème système" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Placer le cache dans le répertoire de l'utilisateur" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Charger les photos 8 bit (JPEG, PNG, etc...)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Précharger les photos" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Répertoire :" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Nom de fichier :" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Type de fichier :" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Exemple de nom de fichier :" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Sauvegarder en TIFF non compressé" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Général" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Exportation rapide" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Couleurs" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Ouvrir récursivement" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Outils" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Lot" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Ouvrir" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Prêt" @@ -246,7 +255,7 @@ msgid "Percent:" msgstr "Pourcentage :" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Exporter le fichier" @@ -254,7 +263,7 @@ msgid "Exporting file ..." msgstr "Exportation du fichier en court..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Fichier exporté" @@ -262,207 +271,198 @@ msgid "File export canceled" msgstr "Exportation du fichier annulé" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Photos en cours de traitement" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Annuler" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Dernière image" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Temps restant: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Temps restant: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Chargement de %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Sauvegarde de %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Icône" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Nom de fichier" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Paramètre" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Démarrer" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Supprimer" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Supprimer tout" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Taille de la photo" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Rapport constant" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Largeur constante" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Hauteur constante" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Taille maximum" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Largeur de la photo :" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pixels" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Hauteur de la photo :" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Rapport de la photo :" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -471,7 +471,7 @@ "Largeur constante:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -480,7 +480,7 @@ "Hauteur constante :\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -489,7 +489,7 @@ "Rapport constant :\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -498,83 +498,83 @@ "Taille maximum :\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Choisir le répertoire d'enregistrement" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Répertoire d'enregistrement" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Motif de nom de fichier :" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Changer" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Exporter les dimensions" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Toutes les photos (y compris celles supprimées)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Photos de priorité 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Photos de priorité 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Photos de priorité 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Photos sans priorité" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Photos supprimées" @@ -583,208 +583,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Priorités" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Ouverture du répertoire..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Taille" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Grille" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Aucune" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Sections d'or" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Règle des tiers" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Triangles d'or #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Triangles d'or #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Triangles harmonieux #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Triangles harmonieux #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Aspect" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Libre" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "A4" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Rectangle d'or" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Recadrer" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Annuler le recadrage" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Retourne la photo selon l'axe horizontal" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Retourne la photo selon l'axe vertical" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Tourne la photo de 90°" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Tourne la photo de 180°" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Tourne la photo de 270°" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transformations" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Température/Teinte" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Réinitialiser ce paramètre" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Ouvrir la courbe ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Sauvegarder la courbe sous ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Réinitialiser la courbe" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Ajustement automatique des extrémités de courbe" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Exposition" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Teinte" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Contraste" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Température/Teinte" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Netteté" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Courbe" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogramme" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Ouvrir un répertoire" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Erreur lors de l'export" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Erreur lors de l'export vers GIMP" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Supression de photos" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Vos fichiers seront effacés définitivement." -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Supprimer les photos" @@ -800,54 +834,54 @@ msgid "Select settings to paste" msgstr "Sélectionner les paramètres à copier" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Paramètres collés" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Rien à coller" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Buffer vide" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Balance des blancs automatique" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Aucune balance des blancs disponible" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Balance des blancs de l'appareil photo" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Affichage du masque d'exposition" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Masquage du masque d'exposition" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "%s ajouté au traitement par lot" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s déjà ajouté au traitement par lot" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d photos ajoutées au traitement par lot" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -855,216 +889,260 @@ "Sélectionner les paramètres\n" "à ajouter au traitement par lot" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Supprimé du traitement par lot" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Pas dans le traitement par lot" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertisseur de fichier RAW pour GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Fichier" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Édition" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Photo" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "Choisir la _priorité" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Balance des blancs" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Vue" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Traitement par lot" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Aide" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "Ouvrir un répertoire" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Export rapide" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "Exporter _sous" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "Exporter vers _GIMP" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Recharger le répertoire" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Supprimer les photos marquées" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Quitter" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "Revenir aux _anciens paramètres" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "Copier les paramètres" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "Coller les paramètres" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "Réinitialiser les paramètres" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Préférences" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "Marquer la photo pour _suppression" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Supprimer la priorité" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Auto" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Appareil" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Cadrer" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "Annuler le _cadrage" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Redresser" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "Annuler le _redressement" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Grouper" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Dégrouper" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Dégrouper" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "Photo _précédente" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "Photo _suivante" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "Zoom à la taille de la _fenêtre" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zoom 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "Ajouter au traitement par lot" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "Ajouter la _vue courante au traitement par lot" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "Supprimer du traitement par lot" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Démarrer" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "À _propos" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Icônes" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Outils" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "Plein _écran" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Masque d'exposition" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Séparer" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Pas de métadonnées" + +#~ msgid "Opening directory..." +#~ msgstr "Ouverture du répertoire..." Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/it.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/it.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/it.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/it.po --- rawstudio-1.1.1/po/it.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/it.po 2009-04-09 22:22:04.000000000 +0100 @@ -5,9 +5,9 @@ # Simone Contini , 2008. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-04-19 19:26+0100\n" "Last-Translator: Simone Contini \n" "Language-Team: Rawstudio development \n" @@ -17,38 +17,47 @@ "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Nome file originale" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Contatore incrementale" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - ID impostazione (A, B o C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Selezione del profilo di colore" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Tutti i file" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Profili di colore (icc e icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Profilo colore non valido." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -56,169 +65,169 @@ "Il file selezionato non è un profilo di colore valido per la versione di " "Rawstudio in uso." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Abilita gestione del colore (sperimentale)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Profilo d'ingresso" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Profilo RGB incorporato" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Profilo di visualizzazione" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Profilo di esportazione" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Intento" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Percettivo" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Colorimetrico relativo" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Saturazione" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Colorimetrico assoluto" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Visualizzazione in sottofondo attiva" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Apertura foto in corso..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Impossibile aprire la foto" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Immagine caricata" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Cambiata la priorità della foto (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Cambiata la priorità della foto (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Cambiata la priorità della foto (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Preferenze" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Colore di sfondo nell'anteprima:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Altezza dell'istogramma:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Mostra il nome dei file sotto le anteprime" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Usa l'aspetto di sistema" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Memorizza le informazioni nella cartella utente" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Carica foto ad 8 bit (jpeg, png, ecc...)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Precarica le foto" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Cartella:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Nome file:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Tipo file:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Esempio nome file:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Salva TIFF non compresso" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Generale" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Esportazione rapida" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Colore" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Apri ricorsivamente" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Strumenti" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Esecuzione" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Apri" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Pronto" @@ -246,7 +255,7 @@ msgid "Percent:" msgstr "Ingrandimento:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Esporta file" @@ -254,7 +263,7 @@ msgid "Exporting file ..." msgstr "Esportazione file..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "File esportato" @@ -262,207 +271,198 @@ msgid "File export canceled" msgstr "Esportazione file cancellata" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Elaborazione foto" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Annulla" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Ultima immagine:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tempo rimanente: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Tempo rimanente: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Caricamento di %s..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Salvataggio di %s..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Icona" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Nome file" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Impostazione" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Avvia" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Rimuovi" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Rimuovi tutte" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Dimensione foto" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Scalatura fissa" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Larghezza fissa" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Altezza fissa" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Dimensione massima" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Larghezza foto:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pixel" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Altezza foto:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Scalatura foto:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -471,7 +471,7 @@ "Larghezza fissa:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -480,7 +480,7 @@ "Altezza fissa:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -489,7 +489,7 @@ "Scalatura fissa:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -498,83 +498,83 @@ "Dimensione massima:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Scegliere la cartella di destinazione" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Cartella di destinazione:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Modello nome file:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Modifica" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Dimensione di esportazione" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Tutte le foto (escluse quelle cancellate)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Foto con contrassegno 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Foto con contrassegno 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Foto con contrassegno 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Foto senza contrassegno" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Foto Cancellate" @@ -583,208 +583,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Contrassegni" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Apri cartella..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Dimensione" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Griglia" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Nessuna" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Sezione aurea" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Regola dei terzi" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Triangoli aurei #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Triangoli aurei #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Triangoli armoniosi #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Triangoli armoniosi #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Formato" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "libero" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "Carta ISO (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Doppio schermo XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Rettangolo aureo" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Ritaglia" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Annulla ritaglio" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Specchia la foto rispetto all'asse x" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Specchia la foto rispetto all'asse y" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Ruota la foto di 90 gradi in senso orario" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Ruota la foto di 180 gradi" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Ruota la foto di 90 gradi in senso antiorario" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Trasforma" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Temperatura di colore/Tinta" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Ripristina questo settaggio" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Apri curva..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Salva come..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Reimposta curva" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Corregge automaticamente la fine della curva" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Esposizione" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Tinta" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Contrasto" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Temperatura di colore/Tinta" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Nitidezza" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Curva" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Istogramma" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Apri cartella" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Errore nell'esportazione" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Errore nell'esportazione foto in GIMP." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Cancellazione foto in corso" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "I file saranno permanentemente cancellati!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Cancella foto" @@ -800,54 +834,54 @@ msgid "Select settings to paste" msgstr "Scelta delle impostazioni da trasferire" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Impostazioni trasferite" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Nessuna impostazione da trasferire" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Buffer vuoto" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Correzione del bilanciamento del bianco automatica" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Nessun bilanciamento del bianco da applicare" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Correzione del bilanciamento del bianco con l'impostazione di scatto" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Maschera di esposizione visualizzata" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Maschera di esposizione nascosta" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "%s aggiunto alla coda di elaborazione" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s già presente nella coda di elaborazione" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d foto aggiunte alla coda di elaborazione" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -855,220 +889,264 @@ "Selezionare i settaggi da\n" "aggiungere alla coda di elaborazione" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Rimosso dalla coda di elaborazione" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Non presente nella coda di elaborazione" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Un convertitore di immagini raw per GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_File" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Modifica" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Foto" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Imposta Contrassegno" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Bilanciamento del Bianco" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Visualizza" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Esecuzione" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Aiuto" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Apri Cartella" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "Esportazione _Rapida" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "Esporta _Come" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "Esporta in _GIMP" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Riapri Cartella" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Cancella foto contrassegnate" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Chiudi" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Annulla impostazioni" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Copia settaggio" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Incolla settaggio" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Ripristina settaggio" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Preferenze" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Contrassegna per cancellazione" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Rimuovi contrassegno" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Auto" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Macchina" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Ritaglia" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "Annulla _ritaglio" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Raddrizza" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "Annulla _raddrizza" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Raggruppa" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Suddividi" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Suddividi" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "Foto _Precedente" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "Foto _Successiva" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "Adatta _zoom" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zoom 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Aggiungi alla coda di elaborazione" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Aggiungi la vista corrente alla coda" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Rimuovi dalla coda di elaborazione" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Avvia" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Informazioni su..." -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Anteprime" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Strumenti" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Schermo intero" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Maschera di esposizione" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Vista affiancata" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Metadati non presenti" +#~ msgid "Opening directory..." +#~ msgstr "Apri cartella..." + #~ msgid "Added view to batch queue" #~ msgstr "Vista aggiunta alla coda di elaborazione" Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/nb.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/nb.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/nb.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/nb.po --- rawstudio-1.1.1/po/nb.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/nb.po 2009-04-09 22:22:04.000000000 +0100 @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-04-17 21:48+0100\n" "Last-Translator: Anders Kvist \n" "Language-Team: Rawstudio development \n" @@ -16,38 +16,47 @@ "X-Poedit-Language: Norwegian Bokmal\n" "X-Poedit-Country: NORWAY\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Opprinnelig filnavn" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Økende teller" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Innstilling (A, B eller C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Velg fargeprofil" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Alle filer" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Fargeprofiler (icc og icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Ikke en gyldig fargeprofil." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -55,169 +64,169 @@ "Filen du har valgt er ikke en gyldig fargeprofil for denne versjonen av " "Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Aktiver fargestyring (eksperimentelt)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Inndataprofil" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Innebygget RGB-profil" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Skjermprofil" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Eksportprofil" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Formål" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Oppfattelse" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Relativ fargemetrikk" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Metning" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absolutt fargemetrikk" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Ferdigstiller i bakgrunnen" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Åpner bilde..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Klarte ikke å åpne bilde" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Bilde åpnet" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Bildeprioritet endret (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Bildeprioritet endret (S)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Bildeprioritet endret (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Egenskaper" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Bakgrunnsfarge for forhåndsvisning:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Høyde på histogram:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Vis filnavn ved ikoner" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Bruk systeminnstillinger" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Mellomlagre i hjemmekatalogen" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Åpne 8-bits bildefiler (jpeg, png, osv.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Forhåndslast bilder" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Mappe:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Filnavn:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Filtype:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Eksempel på filnavn:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Lagre TIFF ukomprimert" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Generelt" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Hurtigeksportering" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Fargestyring" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Åpne rekursivt" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Verktøy" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Prosesseringskø" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Åpne" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Klar" @@ -245,7 +254,7 @@ msgid "Percent:" msgstr "Prosent:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Eksporter fil" @@ -253,7 +262,7 @@ msgid "Exporting file ..." msgstr "Eksporterer fil..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Fil eksportert" @@ -261,207 +270,198 @@ msgid "File export canceled" msgstr "Eksportering avbrutt" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital-negativ" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bits TIFF" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bits TIFF" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm" - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Prosesserer bilder" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Avbryt" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Siste bilde:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Gjenstående tid: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Gjenstående tid: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Leser %s..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Lagrer %s..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Ikon" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Filnavn" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Innstilling" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Start" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Fjern" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Fjern alle" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Bildestørrelse" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Konstant målestokk" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Konstant bredde" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Konstant høyde" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Maksimal størrelse" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Bildebredde: " -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr " piksler" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Bildehøyde: " -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Målestokk: " -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr " %" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -470,7 +470,7 @@ "Konstant bredde:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -479,7 +479,7 @@ "Konstant høyde:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -488,7 +488,7 @@ "Konstant målestokk:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -497,83 +497,83 @@ "Maksimal størrelse:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Velg katalog til utdata" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Resultatmappe:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Mal for filnavn:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Endre" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Eksporteringsdimensjoner" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Alle bilder (unntatt slettede)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Prioritet 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Prioritet 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Prioritet 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Uprioriterte bilder" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "S (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Slettede bilder" @@ -582,208 +582,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Prioritet" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Åpner mappe" +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Størrelse" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Rutenett" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Ingen" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Gylne snitt" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Tredjedelsregelen" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Gylne triangler #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Gylne triangler #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Harmoniske triangler #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Harmoniske triangler #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Forhold" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Fri" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "ISO-papir (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Gyllent rektangel" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Beskjær" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Ikke beskjær" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Speil bildet om x-aksen" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Speil bildet om y-aksen" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Rotér bildet 90° mot høyre" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Rotér bildet 180°" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Rotér bildet 90° mot venstre" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transformer" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Varme/nyanse" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Nullstill" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Åpne kurve..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Lagre kurve som..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Nullstill kurve" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Autojustér endepunkter" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Eksponering" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Fargetone" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Kontrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Varme/nyanse" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Gjør skarpere" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Kurve" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogram" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Åpne mappe" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Eksporteringen mislyktes" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Klarte ikke å eksportere bildet til gimp." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Sletter bilder" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Filene vil bli slettet for godt!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Slett bilder" @@ -799,54 +833,54 @@ msgid "Select settings to paste" msgstr "Lim inn følgende innstillinger:" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Innlimte innstillinger" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Ikke noe å lime inn" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Bufferet er tomt" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Justerer til automatisk hvitbalanse" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Ingen hvitbalanse å justere etter" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Justerer etter kameraets hvitbalanse" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Viser eksponeringsmaske" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Skjuler eksponeringsmaske" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "%s lagt til i prosesseringskø" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s finnes allerede i prosesseringskøen" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d bilder lagt til i prosesseringskø" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -854,220 +888,264 @@ "Velg hvilke innstillinger som skal\n" "gjelde for satsvis prosessering." -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Fjernet fra prosesseringskøen" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Ikke i prosesseringskøen" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "En råfilkonverterer for GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Fil" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Rediger" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "Bilde" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "Sett prioritet" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "Hvitbalanse" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Vis" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Prosesseringskø" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Hjelp" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "Åpne mappe" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "Hurtigeksportering" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "Eksporter som..." -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "E_ksporter til gimp" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "Les mappen på ny" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "Slett _merkede bilder" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Avslutt" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Nullstill endringer" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "Kopier innstillinger" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "Lim inn innstillinger" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "Nullstill" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "Egenskaper" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Merk bilde for sletting" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "Fjern prioritet" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Automatisk" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Fra kamera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Beskjær" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Fjern beskjæring" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Rett opp" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "_Fjern oppretting" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Gruppér" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Løs opp gruppe" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Løs opp gruppe" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Forrige bilde" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Neste bilde" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Beste tilpasning" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Piksel for piksel (100%)" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Legg til i prosesseringskø" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "Legg aktiv _visning i køen" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Fjern fra prosesseringskøen" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Start" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Om" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Ikoner" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Verktøy" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Fullskjerm" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Eksponeringsmaske" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Splitt" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm" + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Ingen metadata" +#~ msgid "Opening directory..." +#~ msgstr "Åpner mappe" + #~ msgid "Added view to batch queue" #~ msgstr "La til visningen i prosesseringskøen." Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/nl.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/nl.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/nl.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/nl.po --- rawstudio-1.1.1/po/nl.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/nl.po 2009-04-09 22:22:05.000000000 +0100 @@ -5,48 +5,57 @@ # msgid "" msgstr "" -"Project-Id-Version: 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-05-05 00:22+0100\n" "Last-Translator: O. Lavell \n" -"Language-Team: Rawstudio-dev \n" +"Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Originele bestandsnaam" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Oplopende teller" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Selecteer kleurprofiel" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Alle bestanden" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Kleurprofielen (ICC en ICM)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Geen geldig kleurprofiel." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -54,169 +63,169 @@ "Het geselecteerde bestand lijkt geen geldig kleurprofielte bevatten voor " "deze versie van Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Schakel kleurbeheer in (experimenteel)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Invoerprofiel" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "BuiltInRGBProfile" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Weergaveprofiel" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Exportprofiel" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Intent" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Perceptual" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Relative colormetric" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Verzadiging" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absolute colormetric" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Renderer op achtergrond actief" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Foto openen..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Kan foto niet openen" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Afbeelding geopend" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Voorkeuren" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Voorbeeld achtergrondkleur:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Hoogte histogram:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Bestandsnamen in pictogramweergave tonen" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Gebruik systeemthema" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Cache in persoonlijke map plaatsen" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "8-bit foto's laden (JPEG, PNG e.d.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Foto's vooruitladen" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Map:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Bestandsnaam:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Bestandstype:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Bestandsnaam voorbeeld:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Ongecomprimeerde TIFF opslaan" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Algemeen" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Snelle export" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Kleuren" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Recursief openen" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Gereedschappen" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Batch" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Openen" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Klaar" @@ -244,7 +253,7 @@ msgid "Percent:" msgstr "Percentage:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Bestand exporteren" @@ -252,7 +261,7 @@ msgid "Exporting file ..." msgstr "Bestand exporteren..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Bestand geëxporteerd" @@ -260,311 +269,302 @@ msgid "File export canceled" msgstr "Bestandsexport geannuleerd" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta RAW" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Foto's verwerken" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Annuleren" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Laatste afbeelding:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tijd over: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Tijd over: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Laden %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Bewaren %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Pictogram" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Bestandsnaam" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Instelling" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Start" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Verwijderen" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Alles verwijderen" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Afbeeldingsgrootte" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pixels" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" "%d" msgstr "" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" "%d" msgstr "" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" "%d" msgstr "" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" "%d x %d" msgstr "" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Verwijderde foto's" @@ -573,208 +573,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Prioriteiten" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Map openen..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Grootte" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Raster" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Geen" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Spiegelen om X-as" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Spiegelen om Y-as" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "90 graden roteren" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "180 graden roteren" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "270 graden roteren (90 graden tegen de klok)" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transformaties" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Temperatuur" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Curve openen..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Curve bewaren als..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Belichting" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Tint" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Contrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Temperatuur" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Verscherpen" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Curve" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogram" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Foto's verwijderen" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Bestanden zullen definitief verwijderd worden!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Foto's verwijderen" @@ -790,269 +824,313 @@ msgid "Select settings to paste" msgstr "Selecteer instellingen om te plakken" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Niets te plakken" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Aanpassen naar automatische witbalans" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Aanpassen naar camera witbalans" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" msgstr "" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Bestand" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "Be_werken" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Foto" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Prioriteit instellen" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Witbalans" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Weergave" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Batch" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Help" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "Map _openen" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Vlugge export" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "_Exporteer als..." -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Exporteer naar Gimp" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "Map _herladen" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Verwijder gemarkeerde foto's" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Afsluiten" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "Instellingen _herstellen" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "Instellingen _kopiëren" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "Instellingen _plakken" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "Instellingen _ongedaan maken" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Voorkeuren" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Markeer voor verwijderen" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Verwijder prioriteit" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Auto" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Camera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Snijden" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "Snijden ongedaan maken" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Rechtzetten" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "Rechtzetten ongedaan maken" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Groeperen" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "Groeperen ongedaan maken" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "Groeperen ongedaan maken" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Vorige foto" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "V_olgende foto" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Inpassen" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zoom naar 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Toevoegen aan batch-rij" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Start" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Info..." -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Miniaturen" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Gereedschappen" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Volledig scherm" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Splitsen" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Geen metagegevens" + +#~ msgid "Opening directory..." +#~ msgstr "Map openen..." Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/pl.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/pl.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/pl.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/pl.po --- rawstudio-1.1.1/po/pl.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/pl.po 2009-04-09 22:22:04.000000000 +0100 @@ -6,13 +6,14 @@ # Simone Contini , 2008. # Paweł Gołaszewski , 2008. # Krzysztof Kościuszkiewicz , 2008. +# Łukasz Romanowicz , 2008. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" -"PO-Revision-Date: 2008-04-18 19:22+0100\n" -"Last-Translator: Krzysztof Kościuszkiewicz \n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" +"PO-Revision-Date: 2008-09-24 01:00+0100\n" +"Last-Translator: Łukasz Romanowicz \n" "Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,7 +24,7 @@ "X-Poedit-Country: POLAND\n" # Comments for future translators -# Komentarz dla kolejnych tłumaczy: +# Uwagi dla kolejnych tłumaczy: # # Zastosowane konwencje: # @@ -32,44 +33,53 @@ # # Priorities to "priorytety", z braku pomysłu na coś bardziej # adekwatnego. -# +# # Export został zamieniony na "konwersję", bo po polsku raczej mówi się o # "konwersji plików RAW". # # Wszystkie komunikaty pojawiające się na pasku stanu programu zostały # przetłumaczone na formę bezosobową lub stronę bierną. -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Oryginalna nazwa pliku" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Numer zdjęcia w kolejce" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Zestaw parametrów (A, B lub C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Wybierz profil kolorów" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Wszystkie pliki" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Profile kolorów (icc oraz icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "To nie jest prawidłowy profil kolorów." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -77,171 +87,171 @@ "Wybrany plik wydaje się nie być prawidłowym profilem kolorów dla tej wersji " "Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Włącz zarządzanie kolorami (eksperymentalne)" # I'm not really sure is it the camera profile or some other? -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Profil wejściowy" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Wbudowany profil RGB" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Profil monitora" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Profil wyjściowy" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Tryb odwzorowania" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Percepcyjny" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Kolorymetryczny względny" # should be a different string for color rendering intent -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Nasycenie" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Kolorymetryczny bezwzględny" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Przygotowywanie obrazu" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Otwieranie zdjęcia ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Otworzenie zdjęcia nie powiodło się" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Zdjęcie otworzone" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Zmieniono priorytet zdjęcia (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Zaznaczono zdjęcie do usunięcia (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Zmieniono priorytet zdjęcia (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Ustawienia" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Kolor tła podglądu:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Wysokość histogramu:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Wyświetlaj nazwy plików pod miniaturami" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Użyj skórki systemowej" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Przechowuj pliki podręczne w katalogu domowym" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Otwieraj 8-bitowe zdjęcia (jpeg, png, itp.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Ładuj zdjęcia z wyprzedzeniem" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Katalog:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Nazwa pliku:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Typ pliku:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Przykładowa nazwa:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Zapisuj pliki TIFF bez kompresji" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Ogólne" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Szybka konwersja" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Kolory" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Przeszukuj podkatalogi" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Narzędzia" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Kolejka" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Otwórz" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Gotowe" @@ -269,7 +279,7 @@ msgid "Percent:" msgstr "Procent:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Konwertuj plik" @@ -277,7 +287,7 @@ msgid "Exporting file ..." msgstr "Konwertowanie do pliku ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Konwersja zakończona" @@ -285,207 +295,198 @@ msgid "File export canceled" msgstr "Konwersja anulowana" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "Olympus" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bitowy TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bitowy TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Przetwarzanie zdjęć" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Anuluj" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Ostatnie zdjęcie:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Pozostały czas: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Pozostały czas: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Ładowanie %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Zapisywanie %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Ikona" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Nazwa pliku" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Zestaw parametrów" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Rozpocznij konwersję" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Usuń" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Usuń wszystkie" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Wielkość zdjęcia" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Skaluj do" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Stała szerokość" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Stała wysokość" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Ogranicz oba wymiary" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Szerokość:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pikseli" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Wysokość:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Skaluj do:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -494,7 +495,7 @@ "Stała szerokość:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -503,7 +504,7 @@ "Stała wysokość:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -512,7 +513,7 @@ "Skaluj do:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -521,84 +522,84 @@ "Ogranicz wymiary do:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Wybierz katalog docelowy" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Katalog docelowy:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Wzorzec nazwy pliku:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Zmień" # "export dimensions" - maybe just plain "dimensions" instead? -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Wymiary zdjęć" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Wszystkie zdjęcia (bez usuniętych)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Zdjęcia z priorytetem 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Zdjęcia z priorytetem 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Zdjęcia z priorytetem 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Zdjęcia bez przypisanego priorytetu" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Zdjęcia do usunięcia" @@ -607,208 +608,244 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Priorytety" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Otwieranie katalogu..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" +"%s\n" +"\n" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "Ogniskowa: %dmm\n" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "Czas naświetlania: %.1fs\n" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "Czas naświetlania: 1/%.0fs\n" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "Przysłona: F/%.01f\n" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "ISO: %u\n" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "Data wykonania: %s" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Wymiary" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Siatka" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Brak" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Złoty podział" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Trójpodział" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Złote trójkąty #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Złote trójkąty #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Trójkąty harmoniczne #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Trójkąty harmoniczne #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Stosunek krawędzi" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Dowolnie" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "Papier A4" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Szerokie XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Podwójne XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Złoty podział" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Przytnij" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Anuluj" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Odbicie lustrzane w pionie" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Odbicie lustrzane w poziomie" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Obróc zdjęcie o 90 stopni zgodnie z ruchem wskazówek zegara" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Obróć zdjęcie o 180 stopni" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Obróć zdjęcie o 90 stopni przeciwnie do ruchu wskazówek zegara" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Przekształcenia" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Temperatura/zabarwienie" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Przywróć wartość domyślną" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Otwórz krzywą ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Zapisz krzywą jako ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Przywróć domyślną krzywą" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Automatycznie ustaw końce krzywej" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Ekspozycja" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Barwa" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Kontrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Temperatura/zabarwienie" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Wyostrzanie" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Krzywa" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogram" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Otwórz katalog" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Błąd podczas eksportu" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Błąd podczas eksportowania zdjęcia do gimp-a." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Usuwanie zdjęć" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Twoje pliki zostaną nieodwracalnie usunięte!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Usuń zdjęcia" @@ -824,56 +861,56 @@ msgid "Select settings to paste" msgstr "Wybierz parametry do zastąpienia" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Wklejono parametry" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Brak parametrów do zastosowania" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Bufor jest pusty" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Ustawiono automatyczny balans bieli" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Brak wzorca balansu bieli" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Ustawiono balans bieli z aparatu" # not entirely sure when this string shows up -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Włączono widok maski ekspozycji" # not entirely sure when this string shows up -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Ukryto widok maski ekspozycji" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr " %s - dodano do kolejki" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s znajduje się już w kolejce" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d zdjęć dodanych do kolejki" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -881,374 +918,243 @@ "Które zestawy parametrów\n" "dodać do kolejki?" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Usunięto z kolejki" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Zdjęcia nie ma w kolejce" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Program do konwersji plików RAW dla GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Plik" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Edycja" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Zdjęcie" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "Zmień _priorytet" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Balans bieli" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Widok" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "_Sortuj wg" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Kolejka" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Pomoc" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Otwórz katalog" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Szybka konwersja" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "_Konwertuj do..." -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Eksportuj do Gimp-a" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Przeładuj katalog" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Usuń oznaczone zdjęcia" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "Za_kończ" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Cofnij zmiany" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Kopiuj parametry" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Wklej parametry" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Parametry domyślne" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Ustawienia" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Oznacz do usunięcia" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Usuń priorytet" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Auto" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Z aparatu" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Przytnij" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Cofnij przycinanie" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Wyprostuj" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "_Cofnij prostowanie" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Grupuj" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Anuluj grupowanie" -#: src/rs-actions.c:837 -#, fuzzy +#: src/rs-actions.c:832 msgid "_Auto group" -msgstr "_Anuluj grupowanie" +msgstr "Grupuj a_utomatycznie" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Poprzednie zdjęcie" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Następne zdjęcie" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Dopasuj do okna" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Skala 1:1" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Dodaj do kolejki" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "Dodaj bieżący _widok do kolejki" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Usuń z kolejki" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Rozpocznij konwersję" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_O programie" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Miniaturki" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Panel narzędzi" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "Pełny _ekran" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Maska ekspozycji" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "Podgląd _dzielony" -#~ msgid "No metadata" -#~ msgstr "Brak metadanych" - -# not entirely sure when this string shows up -#, fuzzy -#~ msgid "Added view to batch queue" -#~ msgstr "Dodano widok do kolejki" - -#, fuzzy -#~ msgid "/File/_Open directory..." -#~ msgstr "/Plik/_Otwórz katalog..." - -#, fuzzy -#~ msgid "/File/_Quick export" -#~ msgstr "/Plik/_Szybki eksport" - -#, fuzzy -#~ msgid "/File/_Export as..." -#~ msgstr "/Plik/_Eksportuj jako..." - -#, fuzzy -#~ msgid "/File/_Reload" -#~ msgstr "/Plik/O_dśwież" - -#, fuzzy -#~ msgid "/_Edit/_Copy settings" -#~ msgstr "/_Edycja/_Kopiuj ustawienia" - -#, fuzzy -#~ msgid "/_Edit/_Paste settings" -#~ msgstr "/_Edycja/_Wklej ustawienia" - -#, fuzzy -#~ msgid "/_Edit/_Reset current settings" -#~ msgstr "/_Edycja/_Przywróć ustawienia początkowe" - -#, fuzzy -#~ msgid "/_Edit/sep1" -#~ msgstr "/_Edycja/sep1" - -#, fuzzy -#~ msgid "/_Edit/_Preferences" -#~ msgstr "/_Edycja/_Ustawienia" - -#, fuzzy -#~ msgid "/_Photo/_Set priority/_2" -#~ msgstr "/_Zdjęcie/_Zmień priorytet/_2" - -#, fuzzy -#~ msgid "/_Photo/_Set priority/_3" -#~ msgstr "/_Zdjęcie/_Zmień priorytet/_3" - -#, fuzzy -#~ msgid "/_Photo/_Set priority/_Remove priority" -#~ msgstr "/_Zdjęcie/_Zmień priorytet/_Usuń priorytet" - -#, fuzzy -#~ msgid "/_Photo/_White balance/_Auto" -#~ msgstr "/_Zdjęcie/_Balans bieli/_Auto" - -#, fuzzy -#~ msgid "/_Photo/_White balance/_Camera" -#~ msgstr "/_Zdjęcie/_Balans bieli/Z a_paratu" - -#, fuzzy -#~ msgid "/_Photo/_Uncrop" -#~ msgstr "/_Zdjęcie/Anuluj _przycięcie" - -#, fuzzy -#~ msgid "/_Photo/_Straighten" -#~ msgstr "/_Zdjęcie/P_rostuj" - -#, fuzzy -#~ msgid "/_Photo/_Unstraighten" -#~ msgstr "/_Zdjęcie/Anuluj p_rostowanie" - -#, fuzzy -#~ msgid "/_Photo/_Group photos" -#~ msgstr "/_Zdjęcie/_Groupuj" - -#, fuzzy -#~ msgid "/_Photo/_Ungroup photos" -#~ msgstr "/_Zdjęcie/Anuluj _grupowanie" - -#, fuzzy -#~ msgid "/_View/sep1" -#~ msgstr "/_Widok/sep1" - -#, fuzzy -#~ msgid "/_View/_Zoom in" -#~ msgstr "/_Widok/P_owiększ" - -#, fuzzy -#~ msgid "/_View/_Zoom out" -#~ msgstr "/_Widok/Po_mniejsz" - -#, fuzzy -#~ msgid "/_View/_Zoom to fit" -#~ msgstr "/_Widok/_Dopasuj do okna" - -#, fuzzy -#~ msgid "/_View/_Zoom to 100%" -#~ msgstr "/_Widok/_Skala 1:1" - -#, fuzzy -#~ msgid "/_View/sep2" -#~ msgstr "/_Widok/sep2" - -#, fuzzy -#~ msgid "/_View/_Icon Box" -#~ msgstr "/_Widok/Panel miniatur" - -#, fuzzy -#~ msgid "/_View/_Tool Box" -#~ msgstr "/_Widok/Panel narzędzi" - -#, fuzzy -#~ msgid "/_View/sep3" -#~ msgstr "/_Widok/sep3" - -#, fuzzy -#~ msgid "/_View/_Show exposure mask" -#~ msgstr "/_Widok/Pokaż _maskę ekspozycji" - -#, fuzzy -#~ msgid "/_Batch/_Add to batch queue" -#~ msgstr "/_Kolejka/_Dodaj do kolejki" - -#, fuzzy -#~ msgid "/_Batch/_Remove from batch queue" -#~ msgstr "/_Kolejka/_Usuń z kolejki" - -#, fuzzy -#~ msgid "/_Batch/_Start" -#~ msgstr "/_Kolejka/_Start" - -#~ msgid "Exp. mask" -#~ msgstr "Maska ekspozycji" - -#~ msgid "Toggle exposure mask" -#~ msgstr "Przełącz maskę ekspozycji" - -#~ msgid "Set zoom" -#~ msgstr "Ustaw powiększenie" - -#~ msgid "Zoom out" -#~ msgstr "Pomniejsz" - -#~ msgid "Zoom in" -#~ msgstr "Powiększ" - -#~ msgid "Zoom:" -#~ msgstr "Powiększenie:" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "Nazwy pliku" -#~ msgid "Apply" -#~ msgstr "Zastosuj" +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "Daty wykonania" + +#: src/rs-actions.c:863 +msgid "ISO" +msgstr "ISO" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "Przysłony" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "Ogniskowej" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "Czasu naświetlania" -#, fuzzy -#~ msgid "Split continuous" -#~ msgstr "Podział spójny" +#~ msgid "Opening directory..." +#~ msgstr "Otwieranie katalogu..." diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/POTFILES.in /tmp/lCx6zc4s8u/rawstudio-1.2/po/POTFILES.in --- rawstudio-1.1.1/po/POTFILES.in 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/po/POTFILES.in 2009-04-09 22:21:46.000000000 +0100 @@ -11,4 +11,4 @@ src/rs-preview-widget.c src/toolbox.c src/rs-actions.c -src/rs-dir-selector.c \ No newline at end of file +src/rs-dir-selector.c Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/pt_BR.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/pt_BR.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/pt_BR.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/pt_BR.po --- rawstudio-1.1.1/po/pt_BR.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/pt_BR.po 2009-04-09 22:22:05.000000000 +0100 @@ -5,216 +5,225 @@ # msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-05-20 18:29-0300\n" "Last-Translator: Rafael Sachetto \n" -"Language-Team: LANGUAGE \n" +"Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Arquivo original" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Selecione o perfil de cores" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Todos os arquivos" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Não é um perfil de cor válido." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." msgstr "" -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Perfil de entrada" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Exportar perfil" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Saturação" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Abrindo foto ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Imagem aberta" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Preferências" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Diretório:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Nome do arquivo:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Tipo do arquivo:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Exemplo de nome de arquivo:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Gera;" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Cores" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Abrir recursivamente" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Ferramentas" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Lote" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Abrir" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Pronto" @@ -242,7 +251,7 @@ msgid "Percent:" msgstr "Percentual:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Exportar arquivo" @@ -250,7 +259,7 @@ msgid "Exporting file ..." msgstr "Exportando arquivo ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Arquivo exportado" @@ -258,207 +267,198 @@ msgid "File export canceled" msgstr "Exportação de arquivo cancelada" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Processando fotos" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Cancelar" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Última imagem:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Tempo restante: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Tempo restante: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Carregando %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Salvando %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Ícone" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Nome do arquivo" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Configuração" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Começar" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Remover" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Remover todos" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Tamanho da foto" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Largura constante" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Altura constante" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Tamanho máximo" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Largura da foto:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pixels" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Altura da foto:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -467,7 +467,7 @@ "Largura constante:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -476,14 +476,14 @@ "Altura constante:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" "%d" msgstr "" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -492,83 +492,83 @@ "Maximum size:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Escolha o diretório de saída" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Diretório de saída:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Modificar" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Exportar dimensões" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Todas as fotos (exceto as apagadas)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Fotos sem prioridade" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Fotos apagadas" @@ -577,208 +577,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Prioridades" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Abrido diretório..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" + +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Tamanho" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Grade" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Nenhuma" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Aspecto" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "ISO paper (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Abrir curva ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Salvar curva como ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Reiniciar curva" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Curva" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histograma" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Apagando fotos" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Seus arquivos serão permanentemente apagado!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Apagar fotos" @@ -794,268 +828,312 @@ msgid "Select settings to paste" msgstr "" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Configurações coladas" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Nada para colar" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Buffer vazio" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" msgstr "" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Arquivo" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Editar" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Foto" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "Ajustar _prioridade" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Balanço de branco" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Visualizar" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Lote" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "A_juda" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Sair" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Remover prioridade" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 msgid "_Auto group" msgstr "" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Tela cheia" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Sem metadados" + +#~ msgid "Opening directory..." +#~ msgstr "Abrido diretório..." diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/rawstudio.pot /tmp/lCx6zc4s8u/rawstudio-1.2/po/rawstudio.pot --- rawstudio-1.1.1/po/rawstudio.pot 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/rawstudio.pot 2009-04-09 22:22:04.000000000 +0100 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,206 +16,215 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "" -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." msgstr "" -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "" -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "" @@ -243,7 +252,7 @@ msgid "Percent:" msgstr "" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "" @@ -251,7 +260,7 @@ msgid "Exporting file ..." msgstr "" -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "" @@ -259,311 +268,301 @@ msgid "File export canceled" msgstr "" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +msgid "Panasonic raw 2" +msgstr "" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "" - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "" - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "" - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "" - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "" -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "" -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "" -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" "%d" msgstr "" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" "%d" msgstr "" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" "%d" msgstr "" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" "%d x %d" msgstr "" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "" @@ -572,208 +571,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "" -#: src/rs-store.c:1004 -msgid "Opening directory..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" + +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "" -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "" -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr "" -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr "" -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr "" #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "" @@ -789,265 +822,293 @@ msgid "Select settings to paste" msgstr "" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" msgstr "" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 msgid "_Auto group" msgstr "" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "" + +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +msgid "ISO" +msgstr "" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/ru.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/ru.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/ru.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/ru.po --- rawstudio-1.1.1/po/ru.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/ru.po 2009-04-09 22:22:04.000000000 +0100 @@ -6,11 +6,11 @@ # Alexandre Prokoudine , 2007. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" -"PO-Revision-Date: 2008-04-17 22:03+0100\n" -"Last-Translator: Anders Kvist \n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" +"PO-Revision-Date: 2008-09-30 01:06+0300\n" +"Last-Translator: Alexandre Prokoudine \n" "Language-Team: Rawstudio development \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,38 +21,47 @@ "X-Poedit-Language: Russian\n" "X-Poedit-Country: RUSSIAN FEDERATION\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f — Исходное имя файла" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c — Увеличение номера" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s — Набор параметров (A, B или C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Выберите цветовой профиль" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Все файлы" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Цветовые профили (icc и icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Это некорректный цветовой профиль." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -60,169 +69,169 @@ "Указанный вами файл не похож на корректный цветовой профиль, который можно " "было бы использовать в Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Включить управление цветом" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Профиль камеры: " -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Встроенный профиль RGB" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Профиль монитора: " -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Профиль экспорта: " -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Цветопередача: " -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Воспринимаемая" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Относительная колориметрическая" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Насыщенность" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Абсолютная колориметрическая" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Фоновый отрисовщик активен" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Открывается снимок..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Не удалось открыть снимок" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Снимок открыт" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Изменён приоритет снимка (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Изменён приоритет снимка (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Изменён приоритет снимка (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Параметры" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Цвет фона:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Высота гистограммы:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Показывать имена файлов" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Использовать системный стиль оформления" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Хранить кэш в домашнем каталоге" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Загружать 8-разрядные снимки (JPEG, PNG и т.д.)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Удаленные снимки" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Каталог:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Имя файла:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Тип файла:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Пример имени файла:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Сохранить несжатый TIFF" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Общие" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Быстрый экспорт" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Цвета" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Открывать рекурсивно" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Инструменты" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Проявка" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Каталоги" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Готово" @@ -250,7 +259,7 @@ msgid "Percent:" msgstr "Процент:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Экспортировать снимок" @@ -258,7 +267,7 @@ msgid "Exporting file ..." msgstr "Экспортируется снимок..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Файл экспортирован" @@ -266,207 +275,198 @@ msgid "File export canceled" msgstr "Экспорт снимков отменен" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta RAW" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "Olympus" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic RAW" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic RAW" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax RAW" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital Negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "Epson" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-разрядный TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-разрядный TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dмм " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Проявка снимков" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Отменить" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Последний снимок:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Осталось времени: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Осталось времени: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Загружается %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Сохраняется %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Эскиз" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Имя файла" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Параметр" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Начать" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Удалить" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Удалить все" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Размер снимка:" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Масштабирование" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Постоянная ширина" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Постоянная высота" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Максимальный размер" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Ширина снимка:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "пикселов" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Высота снимка:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Масштаб снимка:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -475,7 +475,7 @@ "Постоянная ширина:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -484,7 +484,7 @@ "Постоянная высота:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -493,7 +493,7 @@ "Постоянный масштаб:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -502,83 +502,83 @@ "Максимальный размер:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Укажите каталог для экспорта" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Каталог вывода:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Шаблон имени файла:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Сменить" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Размеры при экспорте" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Все снимки (кроме удалённых)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Снимки с приоритетом 1" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Снимки с приоритетом 2" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Снимки с приоритетом 3" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Снимки без приоритета" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Удалённые снимки" @@ -587,208 +587,244 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Приоритеты" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Открывается каталог" +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" +"%s\n" +"\n" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "Фокусное расстояние: %dмм\n" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "Выдержка: %.1fс\n" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "Выдержка: 1/%.0fс\n" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "Апертура: F/%.01f\n" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "ISO: %u\n" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "Время: %s" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Размер" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "—" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Сетка" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Нет" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Золотое сечение" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Правило третей" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Золотые треугольники №1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Золотые треугольники №2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Гармоничные треугольники №1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Гармоничные треугольники №2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Соотношение" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Произвольное" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "Формат бумаги ISO (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35мм)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Золотой прямоугольник" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Кадрировать" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Не кадрировать" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Зеркально отразить по горизонтальной оси" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Зеркально отразить по вертикальной оси" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Повернуть снимок на 90° по часовой стрелке" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Повернуть снимок на 180°" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Повернуть снимок на 90° против часовой стрелки" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Преобразования" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Температура/краска" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Сбросить этот параметр" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Загрузить кривую из файла..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Сохранить кривую как..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Обнулить кривую" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Поправить концы кривой" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Экспозиция" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Тон" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Контраст" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Температура и оттенок" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Резкость" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Кривая" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Гистограмма" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Открыть каталог" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Ошибка при экспорте" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Ошибка при экспорте в GIMP" -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Удаляются снимки" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Ваши файлы будут удалены безвозвратно!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Удалить снимки" @@ -804,54 +840,54 @@ msgid "Select settings to paste" msgstr "Применяемые параметры" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Параметры проявки применены" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Нет применяемых параметров проявки" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Буфер пуст" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Выполняется коррекция с автоматическим балансом белого" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "Неоткуда взять баланс белого" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Выполняется коррекция по балансу белого камеры" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Показывается маска экспозиции" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Прячется маска экспозиции" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr "%s добавлен в очередь на проявку" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s уже добавлен в очередь на проявку" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d снимков добавлено в очередь на проявку" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -859,217 +895,259 @@ "Выберите, какие параметры\n" "добавить в очередь на проявку" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Удалён из очереди на проявку" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Не в очереди на проявку" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "Проявитель цифровых негативов для GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Файл" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Правка" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "С_нимок" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Указать приоритет" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "_Баланс белого" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Вид" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "_Сортировать по" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "Про_явка" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Справка" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Открыть каталог" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "Быстрый экспорт" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "Экспортировать _как" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Экспортировать в GIMP" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Перезагрузить каталог" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Удалить помеченные снимки" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "В_ыход" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Отменить изменения" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Скопировать параметры" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Вставить параметры" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Забыть параметры" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Параметры" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "По_метить для удаления" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Снять приоритет" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Авто" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Камера" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Кадрировать" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Снять кадрирование" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Выровнять" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "Сн_ять выравнивание" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "С_группировать" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Разгруппировать" -#: src/rs-actions.c:837 -#, fuzzy +#: src/rs-actions.c:832 msgid "_Auto group" -msgstr "_Разгруппировать" +msgstr "Сгруппировать _автоматически" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Предыдущий снимок" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Следующий снимок" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Уместить в окне" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Масштаб 1:1" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Добавить в очередь" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "Добавить _всю серию в очередь" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Удалить из очереди" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Начать проявку" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_О программе" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "Панель _эскизов" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "Панель _инструментов" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "П_олноэкранный режим" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "М_аска экспозиции" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Разделить" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "Имени" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "Времени" + +#: src/rs-actions.c:863 +msgid "ISO" +msgstr "ISO" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "Апертуре" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "Фокусному расстоянию" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "Выдержке" + +#~ msgid "Opening directory..." +#~ msgstr "Открывается каталог" + +#~ msgid "%dmm " +#~ msgstr "%dмм " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Нет метаданных" Binary files /tmp/F93zkhbnpI/rawstudio-1.1.1/po/sv.gmo and /tmp/lCx6zc4s8u/rawstudio-1.2/po/sv.gmo differ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/po/sv.po /tmp/lCx6zc4s8u/rawstudio-1.2/po/sv.po --- rawstudio-1.1.1/po/sv.po 2008-10-12 21:22:24.000000000 +0100 +++ rawstudio-1.2/po/sv.po 2009-04-09 22:22:04.000000000 +0100 @@ -5,9 +5,9 @@ # Simone Contini , 2008. msgid "" msgstr "" -"Project-Id-Version: Rawstudio 1.0\n" +"Project-Id-Version: Rawstudio 1.1.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-12 22:22+0200\n" +"POT-Creation-Date: 2009-04-09 23:22+0200\n" "PO-Revision-Date: 2008-05-03 12:21+0100\n" "Last-Translator: Patrik Jarl \n" "Language-Team: Rawstudio development \n" @@ -16,38 +16,47 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: English\n" -#: src/filename.c:215 +#: src/filename.c:263 #, c-format msgid "%f - Original filename" msgstr "%f - Ursprungligt filnamn" -#: src/filename.c:216 +#: src/filename.c:264 #, c-format msgid "%2c - Incremental counter" msgstr "%2c - Ökande räknare" -#: src/filename.c:217 +#: src/filename.c:265 #, c-format msgid "%s - Setting id (A, B or C)" msgstr "%s - Inställning (A, B or C)" -#: src/gtk-helper.c:441 +#: src/filename.c:266 +#, c-format +msgid "%d - Date from EXIF (YYYY-MM-DD)" +msgstr "" + +#: src/filename.c:267 +msgid "%t - Time from EXIF (HH:MM:SS)" +msgstr "" + +#: src/gtk-helper.c:442 msgid "Select color profile" msgstr "Välj färgprofil" -#: src/gtk-helper.c:471 +#: src/gtk-helper.c:472 msgid "All files" msgstr "Alla filer" -#: src/gtk-helper.c:472 +#: src/gtk-helper.c:473 msgid "Color profiles (icc and icm)" msgstr "Färgprofil (icc och icm)" -#: src/gtk-helper.c:486 +#: src/gtk-helper.c:487 msgid "Not a valid color profile." msgstr "Inte en giltig färgprofil." -#: src/gtk-helper.c:487 +#: src/gtk-helper.c:488 msgid "" "The file you selected does not appear to be a valid color profile for this " "version of Rawstudio." @@ -55,169 +64,169 @@ "Filen du valde verkar inte vara en giltig färgprofilför denna version av " "Rawstudio." -#: src/gtk-helper.c:589 +#: src/gtk-helper.c:590 msgid "Enable color management (experimental)" msgstr "Aktivera färghantering (exprementell)" -#: src/gtk-helper.c:597 +#: src/gtk-helper.c:598 msgid "Input profile" msgstr "Indata profil" -#: src/gtk-helper.c:600 +#: src/gtk-helper.c:601 msgid "BuiltInRGBProfile" msgstr "Inbyggd RGB-profilBuiltInRGBProfile" -#: src/gtk-helper.c:650 +#: src/gtk-helper.c:651 msgid "Display profile" msgstr "Skärmprofil" -#: src/gtk-helper.c:653 src/gtk-helper.c:706 +#: src/gtk-helper.c:654 src/gtk-helper.c:707 msgid "sRGB" msgstr "sRGB" -#: src/gtk-helper.c:703 +#: src/gtk-helper.c:704 msgid "Export profile" msgstr "Exportprofil" -#: src/gtk-helper.c:755 +#: src/gtk-helper.c:756 msgid "Intent" msgstr "Avsikt" -#: src/gtk-helper.c:758 +#: src/gtk-helper.c:759 msgid "Perceptual" msgstr "Uppfattning" -#: src/gtk-helper.c:759 +#: src/gtk-helper.c:760 msgid "Relative colormetric" msgstr "Relativ färgmetrisk" -#: src/gtk-helper.c:760 src/toolbox.c:440 src/rs-actions.c:352 +#: src/gtk-helper.c:761 src/toolbox.c:503 src/rs-actions.c:352 msgid "Saturation" msgstr "Mättnad" -#: src/gtk-helper.c:761 +#: src/gtk-helper.c:762 msgid "Absolute colormetric" msgstr "Absolut färgmetrisk" -#: src/gtk-interface.c:89 +#: src/gtk-interface.c:91 msgid "Background renderer active" msgstr "Bakgrundsrendering pågår" -#: src/gtk-interface.c:195 +#: src/gtk-interface.c:194 msgid "Opening photo ..." msgstr "Öppnar foto ..." -#: src/gtk-interface.c:210 +#: src/gtk-interface.c:209 msgid "Couldn't open photo" msgstr "Kunde inte öppna foto" -#: src/gtk-interface.c:215 +#: src/gtk-interface.c:214 msgid "Image opened" msgstr "Bild öppnad" -#: src/gtk-interface.c:216 src/gtk-interface.c:767 src/gtk-interface.c:877 -#: src/gtk-interface.c:905 +#: src/gtk-interface.c:215 src/gtk-interface.c:773 src/gtk-interface.c:896 +#: src/gtk-interface.c:924 msgid "Rawstudio" msgstr "Rawstudio" -#: src/gtk-interface.c:274 +#: src/gtk-interface.c:273 #, c-format msgid "Changed photo priority (*)" msgstr "Bildprioritet ändrad (*)" -#: src/gtk-interface.c:276 +#: src/gtk-interface.c:275 #, c-format msgid "Changed photo priority (D)" msgstr "Bildprioritet ändrad (D)" -#: src/gtk-interface.c:278 +#: src/gtk-interface.c:277 #, c-format msgid "Changed photo priority (%d)" msgstr "Bildprioritet ändrad (%d)" -#: src/gtk-interface.c:456 +#: src/gtk-interface.c:455 msgid "Preferences" msgstr "Egenskaper" -#: src/gtk-interface.c:471 +#: src/gtk-interface.c:470 msgid "Preview background color:" msgstr "Förhandsgranska bakgrundsfärger:" -#: src/gtk-interface.c:486 +#: src/gtk-interface.c:485 msgid "Histogram height:" msgstr "Histogram höjd:" -#: src/gtk-interface.c:496 +#: src/gtk-interface.c:495 msgid "Show filenames in iconview" msgstr "Visa filnamn i ikonvy" -#: src/gtk-interface.c:501 +#: src/gtk-interface.c:500 msgid "Use system theme" msgstr "Använd systemtema" -#: src/gtk-interface.c:508 +#: src/gtk-interface.c:507 msgid "Place cache in home directory" msgstr "Mellanlagra i hemkatalogen" -#: src/gtk-interface.c:511 +#: src/gtk-interface.c:510 msgid "Load 8 bit photos (jpeg, png, etc)" msgstr "Ladda 8 bitars foto (jpeg, png, etc)" -#: src/gtk-interface.c:514 +#: src/gtk-interface.c:513 msgid "Preload photos" msgstr "Förhandsladda foton" -#: src/gtk-interface.c:584 +#: src/gtk-interface.c:583 msgid "Directory:" msgstr "Katalog:" -#: src/gtk-interface.c:600 +#: src/gtk-interface.c:599 msgid "Filename:" msgstr "Filnamn:" -#: src/gtk-interface.c:626 +#: src/gtk-interface.c:625 msgid "File type:" msgstr "Filtyp:" #. set default -#: src/gtk-interface.c:632 +#: src/gtk-interface.c:631 msgid "Filename example:" msgstr "Filnamnsexampel:" -#: src/gtk-interface.c:636 src/gtk-save-dialog.c:126 +#: src/gtk-interface.c:635 src/gtk-save-dialog.c:126 msgid "Save uncompressed TIFF" msgstr "Spara i okomprimerad TIFF" -#: src/gtk-interface.c:662 +#: src/gtk-interface.c:661 msgid "General" msgstr "Allmän" #. gtk_notebook_append_page(GTK_NOTEBOOK(notebook), batch_page, gtk_label_new(_("Batch"))); -#: src/gtk-interface.c:664 +#: src/gtk-interface.c:663 msgid "Quick export" msgstr "Snabb export" -#: src/gtk-interface.c:665 +#: src/gtk-interface.c:664 msgid "Colors" msgstr "Färger" -#: src/gtk-interface.c:933 +#: src/gtk-interface.c:977 msgid "Open recursive" msgstr "Öppna rekursivt" -#: src/gtk-interface.c:942 +#: src/gtk-interface.c:986 msgid "Tools" msgstr "Verktyg" -#: src/gtk-interface.c:943 +#: src/gtk-interface.c:987 msgid "Batch" msgstr "Processering" -#: src/gtk-interface.c:944 +#: src/gtk-interface.c:988 msgid "Open" msgstr "Öppna" -#: src/gtk-interface.c:984 +#: src/gtk-interface.c:1029 msgid "Ready" msgstr "Färdig" @@ -245,7 +254,7 @@ msgid "Percent:" msgstr "Procent:" -#: src/gtk-save-dialog.c:266 src/toolbox.c:233 +#: src/gtk-save-dialog.c:266 src/toolbox.c:248 msgid "Export File" msgstr "Exportera Fil" @@ -253,7 +262,7 @@ msgid "Exporting file ..." msgstr "Exporterar fil ..." -#: src/gtk-save-dialog.c:344 src/rs-actions.c:219 +#: src/gtk-save-dialog.c:344 src/rs-actions.c:220 msgid "File exported" msgstr "Fil exporterad" @@ -261,207 +270,198 @@ msgid "File export canceled" msgstr "Filexport avbruten" -#: src/rawstudio.c:93 +#. Raw file formats +#: src/rawstudio.c:99 msgid "Canon CR2" msgstr "Canon CR2" -#: src/rawstudio.c:95 +#: src/rawstudio.c:100 msgid "Canon CIFF" msgstr "Canon CIFF" -#: src/rawstudio.c:97 +#: src/rawstudio.c:101 msgid "Nikon NEF" msgstr "Nikon NEF" -#: src/rawstudio.c:99 +#: src/rawstudio.c:102 msgid "Minolta raw" msgstr "Minolta raw" -#: src/rawstudio.c:101 +#: src/rawstudio.c:103 msgid "Canon TIFF" msgstr "Canon TIFF" -#: src/rawstudio.c:103 src/rawstudio.c:105 src/rawstudio.c:107 +#: src/rawstudio.c:104 src/rawstudio.c:105 src/rawstudio.c:106 msgid "Sony" msgstr "Sony" -#: src/rawstudio.c:109 src/rawstudio.c:111 +#: src/rawstudio.c:107 src/rawstudio.c:108 msgid "Kodak" msgstr "Kodak" -#: src/rawstudio.c:113 +#: src/rawstudio.c:109 msgid "Sigma" msgstr "Sigma" -#: src/rawstudio.c:117 +#: src/rawstudio.c:110 +msgid "Olympus" +msgstr "" + +#: src/rawstudio.c:111 msgid "Panasonic raw" msgstr "Panasonic raw" -#: src/rawstudio.c:119 +#: src/rawstudio.c:112 +#, fuzzy +msgid "Panasonic raw 2" +msgstr "Panasonic raw" + +#: src/rawstudio.c:113 msgid "Pentax raw" msgstr "Pentax raw" -#: src/rawstudio.c:121 +#: src/rawstudio.c:114 msgid "Adobe Digital negative" msgstr "Adobe Digital negative" -#: src/rawstudio.c:123 +#: src/rawstudio.c:115 msgid "Mamiya" msgstr "Mamiya" -#: src/rawstudio.c:125 +#: src/rawstudio.c:116 msgid "Hasselblad" msgstr "Hasselblad" -#: src/rawstudio.c:127 +#: src/rawstudio.c:117 +msgid "Epson" +msgstr "" + +#. GDK formats +#: src/rawstudio.c:120 src/rawstudio.c:131 msgid "JPEG (Joint Photographic Experts Group)" msgstr "JPEG (Joint Photographic Experts Group)" -#: src/rawstudio.c:129 +#: src/rawstudio.c:121 src/rawstudio.c:133 msgid "PNG (Portable Network Graphics)" msgstr "PNG (Portable Network Graphics)" -#: src/rawstudio.c:131 +#. TIFF is special - we need higher priority to try raw first +#: src/rawstudio.c:126 src/rawstudio.c:127 src/rawstudio.c:135 msgid "8-bit TIFF (Tagged Image File Format)" msgstr "8-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:133 +#: src/rawstudio.c:137 msgid "16-bit TIFF (Tagged Image File Format)" msgstr "16-bit TIFF (Tagged Image File Format)" -#: src/rawstudio.c:503 -#, c-format -msgid "%dmm " -msgstr "%dmm " - -#: src/rawstudio.c:505 -#, c-format -msgid "%.1fs " -msgstr "%.1fs " - -#: src/rawstudio.c:507 -#, c-format -msgid "1/%.0fs " -msgstr "1/%.0fs " - -#: src/rawstudio.c:509 -#, c-format -msgid "F/%.1f " -msgstr "F/%.1f " - -#: src/rawstudio.c:511 -#, c-format -msgid "ISO%d" -msgstr "ISO%d" - -#: src/rs-batch.c:215 src/rs-actions.c:667 +#: src/rs-batch.c:212 src/rs-actions.c:652 msgid "A" msgstr "A" -#: src/rs-batch.c:218 src/rs-actions.c:668 +#: src/rs-batch.c:215 src/rs-actions.c:653 msgid "B" msgstr "B" -#: src/rs-batch.c:221 src/rs-actions.c:669 +#: src/rs-batch.c:218 src/rs-actions.c:654 msgid "C" msgstr "C" -#: src/rs-batch.c:429 +#: src/rs-batch.c:425 msgid "Processing photos" msgstr "Bearbetar foton" -#: src/rs-batch.c:433 +#: src/rs-batch.c:429 msgid "Cancel" msgstr "Avbryt" -#: src/rs-batch.c:438 +#: src/rs-batch.c:434 msgid "Last image:" msgstr "Sista bild:" -#: src/rs-batch.c:471 +#: src/rs-batch.c:467 #, c-format msgid "Time left: %dh %dm %ds" msgstr "Återstående tid: %dh %dm %ds" -#: src/rs-batch.c:475 +#: src/rs-batch.c:471 msgid "Time left: ..." msgstr "Återstående tidt: ..." -#: src/rs-batch.c:489 +#: src/rs-batch.c:483 #, c-format msgid "Loading %s ..." msgstr "Läser %s ..." -#: src/rs-batch.c:539 +#: src/rs-batch.c:533 #, c-format msgid "Saving %s ..." msgstr "Sparar %s ..." -#: src/rs-batch.c:594 +#: src/rs-batch.c:587 msgid "Icon" msgstr "Ikon" -#: src/rs-batch.c:601 +#: src/rs-batch.c:594 msgid "Filename" msgstr "Filnamn" -#: src/rs-batch.c:608 +#: src/rs-batch.c:601 msgid "Setting" msgstr "Inställning" -#: src/rs-batch.c:699 +#: src/rs-batch.c:691 msgid "Start" msgstr "Starta" -#: src/rs-batch.c:702 +#: src/rs-batch.c:694 msgid "Remove" msgstr "Radera" -#: src/rs-batch.c:705 +#: src/rs-batch.c:697 msgid "Remove all" msgstr "Radera alla" -#: src/rs-batch.c:827 +#: src/rs-batch.c:819 msgid "Photo size" msgstr "Fotostorlek" -#: src/rs-batch.c:835 +#: src/rs-batch.c:827 msgid "Constant scale" msgstr "Konstant skalning" -#: src/rs-batch.c:836 +#: src/rs-batch.c:828 msgid "Constant width" msgstr "Konstant bredd" -#: src/rs-batch.c:837 +#: src/rs-batch.c:829 msgid "Constant height" msgstr "Konstant höjd" -#: src/rs-batch.c:838 +#: src/rs-batch.c:830 msgid "Maximum size" msgstr "Maximal storlek" -#: src/rs-batch.c:850 +#: src/rs-batch.c:842 msgid "Photo width:" msgstr "Fotobredd:" -#: src/rs-batch.c:852 src/rs-batch.c:861 +#: src/rs-batch.c:844 src/rs-batch.c:853 msgid "pixels" msgstr "pixels" -#: src/rs-batch.c:859 +#: src/rs-batch.c:851 msgid "Photo height:" msgstr "Fotohöjd:" -#: src/rs-batch.c:868 +#: src/rs-batch.c:860 msgid "Photo scale:" msgstr "Fotoskala:" -#: src/rs-batch.c:870 +#: src/rs-batch.c:862 msgid "%" msgstr "%" -#: src/rs-batch.c:906 +#: src/rs-batch.c:898 #, c-format msgid "" "Constant width:\n" @@ -470,7 +470,7 @@ "Konstant bredd:\n" "%d" -#: src/rs-batch.c:909 +#: src/rs-batch.c:901 #, c-format msgid "" "Constant height:\n" @@ -479,7 +479,7 @@ "Konstant höjd:\n" "%d" -#: src/rs-batch.c:912 +#: src/rs-batch.c:904 #, c-format msgid "" "Constant Scale:\n" @@ -488,7 +488,7 @@ "Konstant skala:\n" "%d" -#: src/rs-batch.c:916 +#: src/rs-batch.c:908 #, c-format msgid "" "Maximum size:\n" @@ -497,83 +497,83 @@ "Maximal storlek:\n" "%d x %d" -#: src/rs-batch.c:938 +#: src/rs-batch.c:930 msgid "Choose output directory" msgstr "Välj destinationskatalog" -#: src/rs-batch.c:946 +#: src/rs-batch.c:937 msgid "Output directory:" msgstr "Destinationskatalog:" -#: src/rs-batch.c:950 +#: src/rs-batch.c:941 msgid "Filename template:" msgstr "Filnamnsmall:" -#: src/rs-batch.c:961 +#: src/rs-batch.c:952 msgid "Change" msgstr "Ändra" -#: src/rs-batch.c:966 +#: src/rs-batch.c:957 msgid "Export dimensions" msgstr "Exportera dimensioner" #. All -#: src/rs-store.c:243 src/rs-store.c:577 +#: src/rs-store.c:276 src/rs-store.c:810 #, c-format msgid "* (%d)" msgstr "* (%d)" -#: src/rs-store.c:244 +#: src/rs-store.c:277 msgid "All photos (excluding deleted)" msgstr "Alla foton (förutom raderade)" #. 1 -#: src/rs-store.c:247 src/rs-store.c:578 +#: src/rs-store.c:280 src/rs-store.c:811 #, c-format msgid "1 (%d)" msgstr "1 (%d)" -#: src/rs-store.c:248 +#: src/rs-store.c:281 msgid "Priority 1 photos" msgstr "Prioritet 1 foton" #. 2 -#: src/rs-store.c:251 src/rs-store.c:579 +#: src/rs-store.c:284 src/rs-store.c:812 #, c-format msgid "2 (%d)" msgstr "2 (%d)" -#: src/rs-store.c:252 +#: src/rs-store.c:285 msgid "Priority 2 photos" msgstr "Prioritet 2 foton" #. 3 -#: src/rs-store.c:255 src/rs-store.c:580 +#: src/rs-store.c:288 src/rs-store.c:813 #, c-format msgid "3 (%d)" msgstr "3 (%d)" -#: src/rs-store.c:256 +#: src/rs-store.c:289 msgid "Priority 3 photos" msgstr "Prioritet 3 foton" #. Unsorted -#: src/rs-store.c:259 src/rs-store.c:581 +#: src/rs-store.c:292 src/rs-store.c:814 #, c-format msgid "U (%d)" msgstr "U (%d)" -#: src/rs-store.c:260 +#: src/rs-store.c:293 msgid "Unprioritized photos" msgstr "Oprioriterade foton" #. Deleted -#: src/rs-store.c:263 src/rs-store.c:582 +#: src/rs-store.c:296 src/rs-store.c:815 #, c-format msgid "D (%d)" msgstr "D (%d)" -#: src/rs-store.c:264 +#: src/rs-store.c:297 msgid "Deleted photos" msgstr "Raderade foton" @@ -582,208 +582,242 @@ #. understanding of our interface. I was thinking about adding a button instead #. that said "ROCK ON!" to instantly play "AC/DC - Highway to Hell", but I #. believe this will be better for the end user -#: src/rs-store.c:299 +#: src/rs-store.c:332 msgid "Priorities" msgstr "Prioriteter" -#: src/rs-store.c:1004 -msgid "Opening directory..." -msgstr "Öppnar katalog..." +#: src/rs-store.c:521 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" -#: src/rs-preview-widget.c:704 +#: src/rs-store.c:524 +#, c-format +msgid "Focal length: %dmm\n" +msgstr "" + +#: src/rs-store.c:527 +#, c-format +msgid "Shutter speed: %.1fs\n" +msgstr "" + +#: src/rs-store.c:529 +#, c-format +msgid "Shutter speed: 1/%.0fs\n" +msgstr "" + +#: src/rs-store.c:532 +#, c-format +msgid "Aperture: F/%.01f\n" +msgstr "" + +#: src/rs-store.c:535 +#, c-format +msgid "ISO: %u\n" +msgstr "" + +#: src/rs-store.c:538 +#, c-format +msgid "Time: %s" +msgstr "" + +#: src/rs-preview-widget.c:733 msgid "Size" msgstr "Storlek" -#: src/rs-preview-widget.c:712 +#: src/rs-preview-widget.c:741 msgid "-" msgstr "-" -#: src/rs-preview-widget.c:718 +#: src/rs-preview-widget.c:747 msgid "Grid" msgstr "Rutnät" -#: src/rs-preview-widget.c:723 +#: src/rs-preview-widget.c:752 msgid "None" msgstr "Ingen" -#: src/rs-preview-widget.c:724 +#: src/rs-preview-widget.c:753 msgid "Golden sections" msgstr "Gyllene snittet" -#: src/rs-preview-widget.c:725 +#: src/rs-preview-widget.c:754 msgid "Rule of thirds" msgstr "Tredjedels-regeln" -#: src/rs-preview-widget.c:726 +#: src/rs-preview-widget.c:755 msgid "Golden triangles #1" msgstr "Gyllene trianglar #1" -#: src/rs-preview-widget.c:727 +#: src/rs-preview-widget.c:756 msgid "Golden triangles #2" msgstr "Gyllene trianglar #2" -#: src/rs-preview-widget.c:728 +#: src/rs-preview-widget.c:757 msgid "Harmonious triangles #1" msgstr "Harmoniska trianglar #1" -#: src/rs-preview-widget.c:729 +#: src/rs-preview-widget.c:758 msgid "Harmonious triangles #2" msgstr "Harmoniska trianglar #2" -#: src/rs-preview-widget.c:738 +#: src/rs-preview-widget.c:767 msgid "Aspect" msgstr "Förhållande" -#: src/rs-preview-widget.c:743 +#: src/rs-preview-widget.c:772 msgid "Freeform" msgstr "Fri form" -#: src/rs-preview-widget.c:744 +#: src/rs-preview-widget.c:773 msgid "ISO paper (A4)" msgstr "ISO papper (A4)" -#: src/rs-preview-widget.c:745 +#: src/rs-preview-widget.c:774 msgid "3:2 (35mm)" msgstr "3:2 (35mm)" -#: src/rs-preview-widget.c:746 +#: src/rs-preview-widget.c:775 msgid "4:3" msgstr "4:3" -#: src/rs-preview-widget.c:747 +#: src/rs-preview-widget.c:776 msgid "10:8 (SXGA)" msgstr "10:8 (SXGA)" -#: src/rs-preview-widget.c:748 +#: src/rs-preview-widget.c:777 msgid "16:10 (Wide XGA)" msgstr "16:10 (Wide XGA)" -#: src/rs-preview-widget.c:749 +#: src/rs-preview-widget.c:778 msgid "8:3 (Dualhead XGA)" msgstr "8:3 (Dualhead XGA)" -#: src/rs-preview-widget.c:750 +#: src/rs-preview-widget.c:779 msgid "1:1" msgstr "1:1" -#: src/rs-preview-widget.c:751 +#: src/rs-preview-widget.c:780 msgid "Golden rectangle" msgstr "Gyllene retangel" -#: src/rs-preview-widget.c:759 src/rs-preview-widget.c:769 +#: src/rs-preview-widget.c:788 src/rs-preview-widget.c:798 msgid "Crop" msgstr "Beskär" -#: src/rs-preview-widget.c:761 +#: src/rs-preview-widget.c:790 msgid "Don't crop" msgstr "Beskär inte" -#: src/toolbox.c:138 +#: src/toolbox.c:142 msgid "Flip the photo over the x-axis" msgstr "Vänd fotot lodrätt" -#: src/toolbox.c:139 +#: src/toolbox.c:143 msgid "Mirror the photo over the y-axis" msgstr "Vänd fotot vågrätt" -#: src/toolbox.c:140 +#: src/toolbox.c:144 msgid "Rotate the photo 90 degrees clockwise" msgstr "Rotera fotot 90 grader medsols" -#: src/toolbox.c:141 +#: src/toolbox.c:145 msgid "Rotate the photo 180 degrees" msgstr "Rotera fotot 180 grader" -#: src/toolbox.c:142 +#: src/toolbox.c:146 msgid "Rotate the photo 90 degrees counter clockwise" msgstr "Rotera fotot 90 grader motsols" -#: src/toolbox.c:158 +#: src/toolbox.c:162 msgid "Transforms" msgstr "Transformera" -#: src/toolbox.c:174 -msgid "Warmth/tint" -msgstr "Värme/nyans" - -#: src/toolbox.c:213 +#: src/toolbox.c:228 msgid "Reset this setting" msgstr "Återställ inställning" -#: src/toolbox.c:281 src/toolbox.c:338 +#: src/toolbox.c:292 src/toolbox.c:345 msgid "Open curve ..." msgstr "Öppna kurva ..." -#: src/toolbox.c:342 +#: src/toolbox.c:349 msgid "Save curve as ..." msgstr "Spara kurva som ..." -#: src/toolbox.c:346 +#: src/toolbox.c:353 msgid "Reset curve" msgstr "Återställ kurva" -#: src/toolbox.c:350 +#: src/toolbox.c:357 msgid "Auto adjust curve ends" msgstr "Autojustera kurvändpunkter" -#: src/toolbox.c:423 src/rs-actions.c:866 +#: src/toolbox.c:478 src/rs-actions.c:871 msgid " A " msgstr " A " -#: src/toolbox.c:424 src/rs-actions.c:867 +#: src/toolbox.c:479 src/rs-actions.c:872 msgid " B " msgstr " B " -#: src/toolbox.c:425 src/rs-actions.c:868 +#: src/toolbox.c:480 src/rs-actions.c:873 msgid " C " msgstr " C " #. Build GUI -#: src/toolbox.c:433 src/rs-actions.c:351 +#: src/toolbox.c:502 src/rs-actions.c:351 msgid "Exposure" msgstr "Exponering" -#: src/toolbox.c:447 src/rs-actions.c:353 +#: src/toolbox.c:504 src/rs-actions.c:353 msgid "Hue" msgstr "Färgmättnad" -#: src/toolbox.c:454 src/rs-actions.c:354 +#: src/toolbox.c:505 src/rs-actions.c:354 msgid "Contrast" msgstr "Konstrast" -#: src/toolbox.c:467 src/rs-actions.c:356 +#. Box it! +#: src/toolbox.c:522 +msgid "Warmth/tint" +msgstr "Värme/nyans" + +#: src/toolbox.c:528 src/rs-actions.c:356 msgid "Sharpen" msgstr "Mer skärpa" -#: src/toolbox.c:477 src/rs-actions.c:357 +#: src/toolbox.c:546 src/rs-actions.c:357 msgid "Curve" msgstr "Kurva" -#: src/toolbox.c:498 +#: src/toolbox.c:568 msgid "Histogram" msgstr "Histogram" -#: src/rs-actions.c:137 +#: src/rs-actions.c:138 msgid "Open directory" msgstr "Öppna katalog" -#: src/rs-actions.c:237 +#: src/rs-actions.c:238 msgid "Error exporting" msgstr "Misslyckad export" -#: src/rs-actions.c:238 +#: src/rs-actions.c:239 msgid "Error exporting photo to gimp." msgstr "Misslyckades exportera foto till gimp." -#: src/rs-actions.c:261 src/rs-actions.c:279 +#: src/rs-actions.c:262 src/rs-actions.c:280 msgid "Deleting photos" msgstr "Raderar foton" -#: src/rs-actions.c:262 +#: src/rs-actions.c:263 msgid "Your files will be permanently deleted!" msgstr "Dina filer kommer raderas permanent!" -#: src/rs-actions.c:264 +#: src/rs-actions.c:265 msgid "Delete photos" msgstr "Radera foton" @@ -800,54 +834,54 @@ msgid "Select settings to paste" msgstr "Välj inställning att klistra in" -#: src/rs-actions.c:457 +#: src/rs-actions.c:441 msgid "Pasted settings" msgstr "Inklistrad inställning" -#: src/rs-actions.c:460 +#: src/rs-actions.c:444 msgid "Nothing to paste" msgstr "Inget att klistra in" -#: src/rs-actions.c:463 +#: src/rs-actions.c:447 msgid "Buffer empty" msgstr "Buffert tom" -#: src/rs-actions.c:507 +#: src/rs-actions.c:492 msgid "Adjusting to auto white balance" msgstr "Justerar till automatisk vitbalans" -#: src/rs-actions.c:517 +#: src/rs-actions.c:502 msgid "No white balance to set from" msgstr "No white balance to set from" -#: src/rs-actions.c:520 +#: src/rs-actions.c:505 msgid "Adjusting to camera white balance" msgstr "Justerar till kamerans vitbalans" -#: src/rs-actions.c:620 +#: src/rs-actions.c:605 msgid "Showing exposure mask" msgstr "Visar exponeringsmask" -#: src/rs-actions.c:622 +#: src/rs-actions.c:607 msgid "Hiding exposure mask" msgstr "Döljer exponeringsmask" -#: src/rs-actions.c:645 +#: src/rs-actions.c:630 #, c-format msgid " %s added to batch queue" msgstr " %s lägger till processeringskön" -#: src/rs-actions.c:647 +#: src/rs-actions.c:632 #, c-format msgid "%s already added to batch queue" msgstr "%s redan tillagd i processeringskön" -#: src/rs-actions.c:654 src/rs-actions.c:726 +#: src/rs-actions.c:639 src/rs-actions.c:711 #, c-format msgid "%d photos added to batch queue" msgstr "%d foton tillagda i processeringskön" -#: src/rs-actions.c:691 +#: src/rs-actions.c:676 msgid "" "Select which settings to\n" "add to batch queue" @@ -855,216 +889,260 @@ "Välj vilken inställning som\n" "ska gälla för processeringkön" -#: src/rs-actions.c:744 +#: src/rs-actions.c:729 msgid "Removed from batch queue" msgstr "Borttagen från processeringkön" -#: src/rs-actions.c:746 +#: src/rs-actions.c:731 msgid "Not in batch queue" msgstr "Inte i satsprocesseringskön" -#: src/rs-actions.c:771 +#: src/rs-actions.c:760 msgid "A raw image converter for GTK+/GNOME" msgstr "En råfilskonvertering för GTK+/GNOME" -#: src/rs-actions.c:797 +#: src/rs-actions.c:791 msgid "_File" msgstr "_Fil" -#: src/rs-actions.c:798 +#: src/rs-actions.c:792 msgid "_Edit" msgstr "_Redigera" -#: src/rs-actions.c:799 +#: src/rs-actions.c:793 msgid "_Photo" msgstr "_Foto" -#: src/rs-actions.c:800 +#: src/rs-actions.c:794 msgid "_Set Priority" msgstr "_Sätt prioritet" -#: src/rs-actions.c:801 +#: src/rs-actions.c:795 msgid "_White Balance" msgstr "Vit_balans" -#: src/rs-actions.c:802 +#: src/rs-actions.c:796 msgid "_View" msgstr "_Visa" -#: src/rs-actions.c:803 +#: src/rs-actions.c:797 +msgid "_Sort by" +msgstr "" + +#: src/rs-actions.c:798 msgid "_Batch" msgstr "_Processeringskö" -#: src/rs-actions.c:804 +#: src/rs-actions.c:799 msgid "_Help" msgstr "_Hjälp" #. File menu -#: src/rs-actions.c:808 +#: src/rs-actions.c:803 msgid "_Open Directory" msgstr "_Öppna katalog" -#: src/rs-actions.c:809 +#: src/rs-actions.c:804 msgid "_Quick Export" msgstr "_Snabbexportering" -#: src/rs-actions.c:810 +#: src/rs-actions.c:805 msgid "_Export As" msgstr "_Exportera som" -#: src/rs-actions.c:811 +#: src/rs-actions.c:806 msgid "_Export to Gimp" msgstr "_Exportera till Gimp" -#: src/rs-actions.c:812 +#: src/rs-actions.c:807 msgid "_Reload directory" msgstr "_Läs om katalog" -#: src/rs-actions.c:813 +#: src/rs-actions.c:808 msgid "_Delete flagged photos" msgstr "_Radera markerade foton" -#: src/rs-actions.c:814 +#: src/rs-actions.c:809 msgid "_Quit" msgstr "_Avsluta" #. Edit menu -#: src/rs-actions.c:817 +#: src/rs-actions.c:812 msgid "_Revert settings" msgstr "_Återställ inställningar" -#: src/rs-actions.c:818 +#: src/rs-actions.c:813 msgid "_Copy settings" msgstr "_Kopiera inställningar" -#: src/rs-actions.c:819 +#: src/rs-actions.c:814 msgid "_Paste settings" msgstr "_Klistra in inställningar" -#: src/rs-actions.c:820 +#: src/rs-actions.c:815 msgid "_Reset settings" msgstr "_Nollställ inställningar" -#: src/rs-actions.c:821 +#: src/rs-actions.c:816 msgid "_Preferences" msgstr "_Egenskaper" #. Photo menu -#: src/rs-actions.c:824 +#: src/rs-actions.c:819 msgid "_Flag photo for deletion" msgstr "_Märk foto för radering" -#: src/rs-actions.c:825 +#: src/rs-actions.c:820 msgid "_1" msgstr "_1" -#: src/rs-actions.c:826 +#: src/rs-actions.c:821 msgid "_2" msgstr "_2" -#: src/rs-actions.c:827 +#: src/rs-actions.c:822 msgid "_3" msgstr "_3" -#: src/rs-actions.c:828 +#: src/rs-actions.c:823 msgid "_Remove priority" msgstr "_Ta bort prioritet" -#: src/rs-actions.c:829 +#: src/rs-actions.c:824 msgid "_Auto" msgstr "_Autojustera" -#: src/rs-actions.c:830 +#: src/rs-actions.c:825 msgid "_Camera" msgstr "_Kamera" -#: src/rs-actions.c:831 +#: src/rs-actions.c:826 msgid "_Crop" msgstr "_Beskär" -#: src/rs-actions.c:832 +#: src/rs-actions.c:827 msgid "_Uncrop" msgstr "_Beskär inte" -#: src/rs-actions.c:833 +#: src/rs-actions.c:828 msgid "_Straighten" msgstr "_Rätta upp" -#: src/rs-actions.c:834 +#: src/rs-actions.c:829 msgid "_Unstraighten" msgstr "_Rätta inte upp" -#: src/rs-actions.c:835 +#: src/rs-actions.c:830 msgid "_Group" msgstr "_Gruppera" -#: src/rs-actions.c:836 +#: src/rs-actions.c:831 msgid "_Ungroup" msgstr "_Gruppera inte" -#: src/rs-actions.c:837 +#: src/rs-actions.c:832 #, fuzzy msgid "_Auto group" msgstr "_Gruppera inte" #. View menu -#: src/rs-actions.c:840 +#: src/rs-actions.c:835 msgid "_Previous photo" msgstr "_Föregående foto" -#: src/rs-actions.c:841 +#: src/rs-actions.c:836 msgid "_Next Photo" msgstr "_Efterföljande foto" -#: src/rs-actions.c:842 +#: src/rs-actions.c:837 msgid "_Zoom to fit" msgstr "_Anpassad zoom" -#: src/rs-actions.c:843 +#: src/rs-actions.c:838 msgid "_Zoom to 100%" msgstr "_Zooma till 100%" #. Batch menu -#: src/rs-actions.c:846 +#: src/rs-actions.c:841 msgid "_Add to batch queue" msgstr "_Lägg i processeringskö" -#: src/rs-actions.c:847 +#: src/rs-actions.c:842 msgid "_Add current view to queue" msgstr "_Lägg till aktuell vy till kö" -#: src/rs-actions.c:848 +#: src/rs-actions.c:843 msgid "_Remove from batch queue" msgstr "_Ta bort från processeringskö" -#: src/rs-actions.c:849 +#: src/rs-actions.c:844 msgid "_Start" msgstr "_Starta" #. help menu -#: src/rs-actions.c:852 +#: src/rs-actions.c:847 msgid "_About" msgstr "_Om" -#: src/rs-actions.c:857 +#: src/rs-actions.c:852 msgid "_Iconbox" msgstr "_Ikonlåda" -#: src/rs-actions.c:858 +#: src/rs-actions.c:853 msgid "_Toolbox" msgstr "_Verktygslåda" -#: src/rs-actions.c:859 +#: src/rs-actions.c:854 msgid "_Fullscreen" msgstr "_Fullskärm" -#: src/rs-actions.c:860 +#: src/rs-actions.c:855 msgid "_Exposure mask" msgstr "_Exponeringsmask" -#: src/rs-actions.c:861 +#: src/rs-actions.c:856 msgid "_Split" msgstr "_Dela" +#: src/rs-actions.c:861 +msgid "Name" +msgstr "" + +#: src/rs-actions.c:862 +msgid "Timestamp" +msgstr "" + +#: src/rs-actions.c:863 +#, fuzzy +msgid "ISO" +msgstr "ISO%d" + +#: src/rs-actions.c:864 +msgid "Aperture" +msgstr "" + +#: src/rs-actions.c:865 +msgid "Focallength" +msgstr "" + +#: src/rs-actions.c:866 +msgid "Shutterspeed" +msgstr "" + +#~ msgid "%dmm " +#~ msgstr "%dmm " + +#~ msgid "%.1fs " +#~ msgstr "%.1fs " + +#~ msgid "1/%.0fs " +#~ msgstr "1/%.0fs " + +#~ msgid "F/%.1f " +#~ msgstr "F/%.1f " + #~ msgid "No metadata" #~ msgstr "Inget metadata" + +#~ msgid "Opening directory..." +#~ msgstr "Öppnar katalog..." diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/adobe-coeff.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/adobe-coeff.c --- rawstudio-1.1.1/src/adobe-coeff.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/adobe-coeff.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/adobe-coeff.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/adobe-coeff.h --- rawstudio-1.1.1/src/adobe-coeff.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/adobe-coeff.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/arch-generic.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/arch-generic.c --- rawstudio-1.1.1/src/arch-generic.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/arch-generic.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/arch-x86.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/arch-x86.c --- rawstudio-1.1.1/src/arch-x86.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/arch-x86.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -91,12 +91,14 @@ * Function definitions *****************************************************************************/ -#define cpuid(cmd, eax, ebx, ecx, edx) \ +#define cpuid(cmd, eax, edx) \ do { \ - eax = ebx = ecx = edx = 0; \ + eax = edx = 0; \ asm ( \ - "cpuid" \ - : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) \ + "push %%"REG_b"\n\t"\ + "cpuid\n\t" \ + "pop %%"REG_b"\n\t" \ + : "=a" (eax), "=d" (edx) \ : "0" (cmd) \ ); \ } while(0) @@ -105,13 +107,12 @@ rs_detect_cpu_features() { guint eax; - guint ebx; - guint ecx; guint edx; guint cpuflags = 0; /* Test cpuid presence comparing eflags */ asm ( + "push %%"REG_b"\n\t" "pushf\n\t" "pop %%"REG_a"\n\t" "mov %%"REG_a", %%"REG_b"\n\t" @@ -124,9 +125,10 @@ "je notfound\n\t" "mov $1, %0\n\t" "notfound:\n\t" + "pop %%"REG_b"\n\t" : "=r" (eax) : - : REG_a, REG_b + : REG_a ); @@ -136,12 +138,12 @@ guint ext_dsc; /* Get the standard level */ - cpuid(0x00000000, std_dsc, ebx, ecx, edx); + cpuid(0x00000000, std_dsc, edx); if (std_dsc) { /* Request for standard features */ - cpuid(0x00000001, std_dsc, ebx, ecx, edx); + cpuid(0x00000001, std_dsc, edx); if (edx & 0x00800000) cpuflags |= _MMX; @@ -152,12 +154,12 @@ } /* Is there extensions */ - cpuid(0x80000000, ext_dsc, ebx, ecx, edx); + cpuid(0x80000000, ext_dsc, edx); if (ext_dsc) { /* Request for extensions */ - cpuid(0x80000001, eax, ebx, ecx, edx); + cpuid(0x80000001, eax, edx); if (edx & 0x80000000) cpuflags |= _3DNOW; diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/ciff-meta.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/ciff-meta.c --- rawstudio-1.1.1/src/ciff-meta.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/ciff-meta.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -24,11 +24,12 @@ #include "ciff-meta.h" #include "adobe-coeff.h" #include "rs-utils.h" +#include "rs-metadata.h" -gboolean raw_crw_walker(RAWFILE *rawfile, guint offset, guint length, RS_METADATA *meta); +gboolean raw_crw_walker(RAWFILE *rawfile, guint offset, guint length, RSMetadata *meta); gboolean -raw_crw_walker(RAWFILE *rawfile, guint offset, guint length, RS_METADATA *meta) +raw_crw_walker(RAWFILE *rawfile, guint offset, guint length, RSMetadata *meta) { guint valuedata=0; gushort records=0; @@ -177,10 +178,14 @@ } void -rs_ciff_load_meta(const gchar *filename, RS_METADATA *meta) +rs_ciff_load_meta(const gchar *filename, RSMetadata *meta) { guint root=0; + GdkPixbuf *pixbuf = NULL, *pixbuf2 = NULL; + gdouble ratio; + guint start=0, length=0;//, root=0; RAWFILE *rawfile; + rawfile = raw_open_file(filename); if (!rawfile) return; @@ -189,43 +194,19 @@ return; raw_get_uint(rawfile, 2, &root); raw_crw_walker(rawfile, root, raw_get_filesize(rawfile)-root, meta); - raw_close_file(rawfile); adobe_coeff_set(&meta->adobe_coeff, meta->model_ascii, meta->model_ascii); - return; -} - -GdkPixbuf * -rs_ciff_load_thumb(const gchar *src) -{ - GdkPixbuf *pixbuf = NULL, *pixbuf2 = NULL; - gdouble ratio; - guint start=0, length=0, root=0; - RS_METADATA *m; - RAWFILE *rawfile; - - raw_init(); - rawfile = raw_open_file(src); - if (!rawfile) return(NULL); - - raw_init_file_tiff(rawfile, 0); - if (!raw_strcmp(rawfile, 6, "HEAPCCDR", 8)) - return(NULL); - raw_get_uint(rawfile, 2, &root); - m = rs_metadata_new(); - raw_crw_walker(rawfile, root, raw_get_filesize(rawfile)-root, m); - - if ((m->thumbnail_start>0) && (m->thumbnail_length>0)) + if ((meta->thumbnail_start>0) && (meta->thumbnail_length>0)) { - start = m->thumbnail_start; - length = m->thumbnail_length; + start = meta->thumbnail_start; + length = meta->thumbnail_length; } - else if ((m->preview_start>0) && (m->preview_length>0)) + else if ((meta->preview_start>0) && (meta->preview_length>0)) { - start = m->preview_start; - length = m->preview_length; + start = meta->preview_start; + length = meta->preview_length; } if ((start>0) && (length>0)) @@ -239,7 +220,7 @@ pixbuf2 = gdk_pixbuf_scale_simple(pixbuf, (gint) (128.0*ratio), 128, GDK_INTERP_BILINEAR); g_object_unref(pixbuf); pixbuf = pixbuf2; - switch (m->orientation) + switch (meta->orientation) { /* this is very COUNTER-intuitive - gdk_pixbuf_rotate_simple() is wierd */ case 90: @@ -253,8 +234,8 @@ pixbuf = pixbuf2; break; } + meta->thumbnail = pixbuf; } raw_close_file(rawfile); - rs_metadata_free(m); - return(pixbuf); + return; } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/ciff-meta.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/ciff-meta.h --- rawstudio-1.1.1/src/ciff-meta.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/ciff-meta.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -17,5 +17,4 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -void rs_ciff_load_meta(const gchar *filename, RS_METADATA *meta); -GdkPixbuf *rs_ciff_load_thumb(const gchar *src); +void rs_ciff_load_meta(const gchar *filename, RSMetadata *meta); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/color.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/color.h --- rawstudio-1.1.1/src/color.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/color.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/conf_interface.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/conf_interface.c --- rawstudio-1.1.1/src/conf_interface.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/conf_interface.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -32,19 +32,8 @@ static GStaticMutex lock = G_STATIC_MUTEX_INIT; #ifdef WITH_GCONF - #include + #include #define GCONF_PATH "/apps/rawstudio/" -static GConfEngine * -get_gconf_engine(void) -{ - /* Initialize *engine first time we're called. Otherwise just return the one we've got. */ - g_static_mutex_lock(&lock); - static GConfEngine *engine = NULL; - if (!engine) - engine = gconf_engine_get_default(); - g_static_mutex_unlock(&lock); - return engine; -} #else #ifdef G_OS_WIN32 #include @@ -59,13 +48,13 @@ gboolean ret = FALSE; #ifdef WITH_GCONF GConfValue *gvalue; - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); - if (engine) + if (client) { g_static_mutex_lock(&lock); - gvalue = gconf_engine_get(engine, fullname->str, NULL); + gvalue = gconf_client_get(client, fullname->str, NULL); g_static_mutex_unlock(&lock); if (gvalue) { @@ -77,6 +66,7 @@ } gconf_value_free(gvalue); } + g_object_unref(client); } g_string_free(fullname, TRUE); #endif @@ -94,13 +84,13 @@ *boolean_value = default_value; #ifdef WITH_GCONF GConfValue *gvalue; - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); - if (engine) + if (client) { g_static_mutex_lock(&lock); - gvalue = gconf_engine_get(engine, fullname->str, NULL); + gvalue = gconf_client_get(client, fullname->str, NULL); g_static_mutex_unlock(&lock); if (gvalue) { @@ -112,6 +102,7 @@ } gconf_value_free(gvalue); } + g_object_unref(client); } g_string_free(fullname, TRUE); #endif @@ -126,12 +117,15 @@ { gboolean ret = FALSE; #ifdef WITH_GCONF - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); g_static_mutex_lock(&lock); - if (engine) - ret = gconf_engine_set_bool(engine, fullname->str, bool_value, NULL); + if (client) + { + ret = gconf_client_set_bool(client, fullname->str, bool_value, NULL); + g_object_unref(client); + } g_static_mutex_unlock(&lock); g_string_free(fullname, TRUE); #endif @@ -147,13 +141,13 @@ gchar *ret=NULL; #ifdef WITH_GCONF GConfValue *gvalue; - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); - if (engine) + if (client) { g_static_mutex_lock(&lock); - gvalue = gconf_engine_get(engine, fullname->str, NULL); + gvalue = gconf_client_get(client, fullname->str, NULL); g_static_mutex_unlock(&lock); if (gvalue) { @@ -161,6 +155,7 @@ ret = g_strdup(gconf_value_get_string(gvalue)); gconf_value_free(gvalue); } + g_object_unref(client); } g_string_free(fullname, TRUE); #endif @@ -193,18 +188,15 @@ { gboolean ret = FALSE; #ifdef WITH_GCONF - GConfValue *gvalue; - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); - if (engine) + if (client) { g_static_mutex_lock(&lock); - gvalue = gconf_value_new(GCONF_VALUE_STRING); - gconf_value_set_string(gvalue, string_value); - ret = gconf_engine_set(engine, fullname->str, gvalue, NULL); - gconf_value_free(gvalue); + ret = gconf_client_set_string(client, fullname->str, string_value, NULL); g_static_mutex_unlock(&lock); + g_object_unref(client); } g_string_free(fullname, TRUE); #endif @@ -218,7 +210,7 @@ } RegCloseKey(hKey); #endif - return(ret); + return ret; } gboolean @@ -227,13 +219,13 @@ gboolean ret=FALSE; #ifdef WITH_GCONF GConfValue *gvalue; - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); - if (engine) + if (client) { g_static_mutex_lock(&lock); - gvalue = gconf_engine_get(engine, fullname->str, NULL); + gvalue = gconf_client_get(client, fullname->str, NULL); g_static_mutex_unlock(&lock); if (gvalue) { @@ -244,6 +236,7 @@ } gconf_value_free(gvalue); } + g_object_unref(client); } g_string_free(fullname, TRUE); #endif @@ -277,12 +270,15 @@ { gboolean ret = FALSE; #ifdef WITH_GCONF - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); g_static_mutex_lock(&lock); - if (engine) - ret = gconf_engine_set_int(engine, fullname->str, integer_value, NULL); + if (client) + { + ret = gconf_client_set_int(client, fullname->str, integer_value, NULL); + g_object_unref(client); + } g_static_mutex_unlock(&lock); g_string_free(fullname, TRUE); #endif @@ -463,13 +459,13 @@ gboolean ret=FALSE; #ifdef WITH_GCONF GConfValue *gvalue; - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); - if (engine) + if (client) { g_static_mutex_lock(&lock); - gvalue = gconf_engine_get(engine, fullname->str, NULL); + gvalue = gconf_client_get(client, fullname->str, NULL); g_static_mutex_unlock(&lock); if (gvalue) { @@ -480,6 +476,7 @@ } gconf_value_free(gvalue); } + g_object_unref(client); } g_string_free(fullname, TRUE); #endif @@ -513,12 +510,15 @@ { gboolean ret = FALSE; #ifdef WITH_GCONF - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); g_static_mutex_lock(&lock); - if (engine) - ret = gconf_engine_set_float(engine, fullname->str, float_value, NULL); + if (client) + { + ret = gconf_client_set_float(client, fullname->str, float_value, NULL); + g_object_unref(client); + } g_static_mutex_unlock(&lock); g_string_free(fullname, TRUE); #endif @@ -540,13 +540,16 @@ { GSList *list = NULL; #ifdef WITH_GCONF - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); g_static_mutex_lock(&lock); - if (engine) - list = gconf_engine_get_list(engine, fullname->str, GCONF_VALUE_STRING, NULL); + if (client) + { + list = gconf_client_get_list(client, fullname->str, GCONF_VALUE_STRING, NULL); + g_object_unref(client); + } g_static_mutex_unlock(&lock); g_string_free(fullname, TRUE); #else @@ -560,13 +563,16 @@ { gboolean ret = FALSE; #ifdef WITH_GCONF - GConfEngine *engine = get_gconf_engine(); + GConfClient *client = gconf_client_get_default(); GString *fullname = g_string_new(GCONF_PATH); g_string_append(fullname, name); g_static_mutex_lock(&lock); - if (engine) - ret = gconf_engine_set_list(engine, fullname->str, GCONF_VALUE_STRING, list, NULL); + if (client) + { + ret = gconf_client_set_list(client, fullname->str, GCONF_VALUE_STRING, list, NULL); + g_object_unref(client); + } g_static_mutex_unlock(&lock); g_string_free(fullname, TRUE); #else diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/conf_interface.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/conf_interface.h --- rawstudio-1.1.1/src/conf_interface.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/conf_interface.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -17,6 +17,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "rawstudio.h" /* RS_FILETYPE */ + #define CONF_LWD "last_working_directory" #define CONF_PREBGCOLOR "preview_background_color" #define CONF_HISTHEIGHT "histogram_height" @@ -72,6 +74,7 @@ #define CONF_TOOLBOX_WIDTH "toolbox_width" #define CONF_SPLIT_CONTINUOUS "split_continuous" #define CONF_LAST_PRIORITY_PAGE "last_priority_page" +#define CONF_STORE_SORT_METHOD "store_sort_method" #define DEFAULT_CONF_EXPORT_DIRECTORY "exports/" #define DEFAULT_CONF_EXPORT_FILENAME "%f_%2c" diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/dcraw_api.cc /tmp/lCx6zc4s8u/rawstudio-1.2/src/dcraw_api.cc --- rawstudio-1.1.1/src/dcraw_api.cc 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/dcraw_api.cc 2009-04-09 22:21:45.000000000 +0100 @@ -2,7 +2,7 @@ * UFRaw - Unidentified Flying Raw converter for digital camera images * * dcraw_api.cc - API for DCRaw - * Copyright 2004-2008 by Udi Fuchs + * Copyright 2004-2009 by Udi Fuchs * * based on dcraw by Dave Coffin * http://www.cybercom.net/~dcoffin/ @@ -16,6 +16,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif + #include #include #include @@ -181,8 +182,11 @@ h->fourColorFilters = d->filters; d->dcraw_message(DCRAW_VERBOSE,_("Loading %s %s image from %s ...\n"), d->make, d->model, d->ifname_display); - fseek (d->ifp, d->data_offset, SEEK_SET); + fseek(d->ifp, 0, SEEK_END); + d->ifpSize = ftell(d->ifp); + fseek(d->ifp, d->data_offset, SEEK_SET); (d->*d->load_raw)(); + if (d->data_error) d->lastStatus = DCRAW_ERROR; if (d->zero_is_bad) d->remove_zeroes(); d->bad_pixels(NULL); if (d->is_foveon) { diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/dcraw_api.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/dcraw_api.h --- rawstudio-1.1.1/src/dcraw_api.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/dcraw_api.h 2009-04-09 22:21:45.000000000 +0100 @@ -16,6 +16,10 @@ #ifndef _DCRAW_API_H #define _DCRAW_API_H +#ifdef HAVE_LENSFUN +#include +#endif /* HAVE_LENSFUN */ + #ifdef __cplusplus extern "C" { #endif @@ -45,7 +49,8 @@ float iso_speed, shutter, aperture, focal_len; time_t timestamp; char make[80], model[80]; - int thumbType, thumbOffset, thumbBufferLength; + int thumbType, thumbOffset; + size_t thumbBufferLength; } dcraw_data; enum { dcraw_ahd_interpolation, diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/dcraw.cc /tmp/lCx6zc4s8u/rawstudio-1.2/src/dcraw.cc --- rawstudio-1.1.1/src/dcraw.cc 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/dcraw.cc 2009-04-09 22:21:45.000000000 +0100 @@ -1,7 +1,7 @@ /* dcraw.cc - Dave Coffin's raw photo decoder - C++ adaptation - Copyright 1997-2008 by Dave Coffin, dcoffin a cybercom o net - Copyright 2004-2008 by Udi Fuchs, udifuchs a gmail o com + Copyright 1997-2009 by Dave Coffin, dcoffin a cybercom o net + Copyright 2004-2009 by Udi Fuchs, udifuchs a gmail o com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -11,8 +11,8 @@ This is a adaptation of Dave Coffin's original dcraw.c to C++. It can work as either a command-line tool or called by other programs. - $Revision: 1.404 $ - $Date: 2008/08/12 19:39:17 $ + $Revision: 1.421 $ + $Date: 2009/03/10 00:53:36 $ */ /* @@ -22,10 +22,10 @@ pserver:anonymous@ufraw.cvs.sourceforge.net:/cvsroot/ufraw Current revisions: -dcraw.cc [1.141] -dcraw.h [1.43] -dcraw_api.cc [1.48] -dcraw_api.h [1.31] +dcraw.cc [1.168] +dcraw.h [1.48] +dcraw_api.cc [1.52] +dcraw_api.h [1.33] - Thanks Dave and Udi, you rock! @@ -35,7 +35,7 @@ #include "config.h" #endif -#define DCRAW_VERSION "8.87" +#define DCRAW_VERSION "8.93" //#define _GNU_SOURCE #define _USE_MATH_DEFINES @@ -137,6 +137,7 @@ CLASS DCRaw() { shot_select=0, multi_out=0, aber[0] = aber[1] = aber[2] = aber[3] = 1; +gamm[0] = 0.45, gamm[1] = 4.5, gamm[2] = gamm[3] = gamm[4] = 0; bright=1, user_mul[0] = user_mul[1] = user_mul[2] = user_mul[3] = 0; threshold=0, half_size=0, four_color_rgb=0, document_mode=0, highlight=0; verbose=0, use_auto_wb=0, use_camera_wb=0, use_camera_matrix=-1; @@ -147,6 +148,10 @@ lastStatus = DCRAW_SUCCESS; ifname = NULL; ifname_display = NULL; +ifpReadCount = 0; +ifpSize = 0; +ifpStepProgress = 0; +progressHandle = NULL; } CLASS ~DCRaw() @@ -155,6 +160,61 @@ free(ifname_display); } +void CLASS ifpProgress(unsigned readCount) { + ifpReadCount += readCount; + if (ifpSize==0) return; + unsigned newStepProgress = STEPS * ifpReadCount / ifpSize; + if (newStepProgress!=ifpStepProgress && progressHandle!=NULL ) + (*progressHandle)(progressUserData, (double)ifpReadCount/ifpSize); + ifpStepProgress = newStepProgress; +} + +#ifndef WITH_MMAP_HACK + +size_t CLASS fread(void *ptr, size_t size, size_t nmemb, FILE *stream) { + size_t num = ::fread(ptr, size, nmemb, stream); + if ( num != nmemb ) +// Maybe this should be a DCRAW_WARNING + dcraw_message(DCRAW_VERBOSE, "%s: fread %d != %d\n", + ifname_display, num, nmemb); + if (stream==ifp) ifpProgress(size*nmemb); + return num; +} + +size_t CLASS fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) { + size_t num = ::fwrite(ptr, size, nmemb, stream); + if ( num != nmemb ) + dcraw_message(DCRAW_WARNING, "%s: fwrite %d != %d\n", + ifname_display, num, nmemb); + return num; +} + +char *CLASS fgets(char *s, int size, FILE *stream) { + char *str = ::fgets(s, size, stream); + if ( str==NULL ) +// Maybe this should be a DCRAW_WARNING + dcraw_message(DCRAW_VERBOSE, "%s: fgets returned NULL\n", + ifname_display); + if (stream==ifp) ifpProgress(strlen(s)); + return str; +} + +int CLASS fgetc(FILE *stream) { + int chr = ::fgetc(stream); + if (stream==ifp) ifpProgress(1); + return chr; +} + +int CLASS fscanf(FILE *stream, const char *format, void *ptr) { + int count = ::fscanf(stream, format, ptr); + if ( count != 1 ) + dcraw_message(DCRAW_WARNING, "%s: fscanf %d != 1\n", + ifname_display, count); + return 1; +} + +#endif /* #ifndef WITH_MMAP_HACK */ + #define FORC(cnt) for (c=0; c < cnt; c++) #define FORC3 FORC(3) #define FORC4 FORC(4) @@ -573,9 +633,9 @@ for (row=-top_margin; row < raw_height-top_margin; row++) { read_shorts (dp=data, raw_width * 10 / 16); for (col=-left_margin; col < raw_width-left_margin; col++) { - if (vbits < 10) + if ((vbits -= 10) < 0) buf = (vbits += 16, (buf << 16) + *dp++); - pixel = buf >> (vbits -= 10) & 0x3ff; + pixel = buf >> vbits & 0x3ff; if ((unsigned) row < height && (unsigned) col < width) BAYER(row,col) = pixel; else if (col > 1-left_margin && col != width) @@ -849,20 +909,19 @@ enough to decode Canon, Kodak and Adobe DNG images. */ struct jhead { - int bits, high, wide, clrs, sraw, psv, restart, vpred[4]; - struct CLASS decode *huff[4]; + int bits, high, wide, clrs, sraw, psv, restart, vpred[6]; + struct CLASS decode *huff[6]; ushort *row; }; int CLASS ljpeg_start (struct jhead *jh, int info_only) { - int i, tag, len; + int c, tag, len; uchar data[0x10000], *dp; - init_decoder(); + if (!info_only) init_decoder(); memset (jh, 0, sizeof *jh); - for (i=0; i < 4; i++) - jh->huff[i] = free_decode; + FORC(6) jh->huff[c] = free_decode; jh->restart = INT_MAX; fread (data, 2, 1, ifp); if (data[1] != 0xd8) return 0; @@ -874,7 +933,7 @@ fread (data, 1, len, ifp); switch (tag) { case 0xffc3: - jh->sraw = data[7] == 0x21; + jh->sraw = ((data[7] >> 4) * (data[7] & 15) - 1) & 3; case 0xffc0: jh->bits = data[0]; jh->high = data[1] << 8 | data[2]; @@ -891,6 +950,7 @@ break; case 0xffda: jh->psv = data[1+data[0]*2]; + jh->bits -= data[3+data[0]*2] & 15; break; case 0xffdd: jh->restart = data[0] << 8 | data[1]; @@ -898,8 +958,8 @@ } while (tag != 0xffda); if (info_only) return 1; if (jh->sraw) { - jh->huff[3] = jh->huff[2] = jh->huff[1]; - jh->huff[1] = jh->huff[0]; + FORC(4) jh->huff[2+c] = jh->huff[1]; + FORC(jh->sraw) jh->huff[1+c] = jh->huff[0]; } jh->row = (ushort *) calloc (jh->wide*jh->clrs, 4); merror (jh->row, "ljpeg_start()"); @@ -923,11 +983,11 @@ ushort * CLASS ljpeg_row (int jrow, struct jhead *jh) { - int col, c, diff, pred; + int col, c, diff, pred, spred=0; ushort mark=0, *row[3]; if (jrow * jh->wide % jh->restart == 0) { - FORC4 jh->vpred[c] = 1 << (jh->bits-1); + FORC(6) jh->vpred[c] = 1 << (jh->bits-1); if (jrow) do mark = (mark << 8) + (c = fgetc(ifp)); while (c != EOF && mark >> 4 != 0xffd); @@ -937,8 +997,8 @@ for (col=0; col < jh->wide; col++) FORC(jh->clrs) { diff = ljpeg_diff (jh->huff[c]); - if (jh->sraw && c < 2 && (col | c)) - pred = row[0][(c << 1)-3]; + if (jh->sraw && c <= jh->sraw && (col | c)) + pred = spred; else if (col) pred = row[0][-jh->clrs]; else pred = (jh->vpred[c] += diff) - diff; if (jrow && col) switch (jh->psv) { @@ -952,6 +1012,7 @@ default: pred = 0; } if ((**row = pred + diff) >> jh->bits) derror(); + if (c <= jh->sraw) spred = **row; row[0]++; row[1]++; } return row[2]; @@ -1005,42 +1066,65 @@ void CLASS canon_sraw_load_raw() { struct jhead jh; - short *rp=0, *ip; + short *rp=0, (*ip)[4]; int jwide, slice, scol, ecol, row, col, jrow=0, jcol=0, pix[3], c; + int v[3]={0,0,0}, ver, hue; + char *cp; if (!ljpeg_start (&jh, 0)) return; - jwide = (jh.wide >>= 1) * 4; + jwide = (jh.wide >>= 1) * jh.clrs; for (ecol=slice=0; slice <= cr2_slice[0]; slice++) { scol = ecol; - ecol += cr2_slice[1] >> 1; - if (!cr2_slice[0] || ecol > width-1) ecol = width & -2; - for (row=0; row < height; row++) { - ip = (short *) image[row*width+scol]; - for (col=scol; col < ecol; col+=2, jcol+=4, ip+=8) { + ecol += cr2_slice[1] * 2 / jh.clrs; + if (!cr2_slice[0] || ecol > raw_width-1) ecol = raw_width & -2; + for (row=0; row < height; row += (jh.clrs >> 1) - 1) { + ip = (short (*)[4]) image + row*width; + for (col=scol; col < ecol; col+=2, jcol+=jh.clrs) { if ((jcol %= jwide) == 0) rp = (short *) ljpeg_row (jrow++, &jh); - ip[0] = rp[jcol]; - ip[4] = rp[jcol+1]; - ip[1] = (short) (rp[jcol+2] << 2) >> 2; - ip[2] = (short) (rp[jcol+3] << 2) >> 2; + if (col >= width) continue; + FORC (jh.clrs-2) + ip[col + (c >> 1)*width + (c & 1)][0] = rp[jcol+c]; + ip[col][1] = rp[jcol+jh.clrs-2] - 16384; + ip[col][2] = rp[jcol+jh.clrs-1] - 16384; } } } - for (row=0; row < height; row++) { - ip = (short *) image[row*width+1]; - for (col=1; col < width-1; col+=2, ip+=8) { - ip[1] = (ip[-3] + ip[5] + 1) >> 1; - ip[2] = (ip[-2] + ip[6] + 1) >> 1; - } - if (col < width) { ip[1] = ip[-3]; ip[2] = ip[-2]; } - ip = (short *) image[row*width]; - for (col=0; col < width; col++, ip+=4) { - pix[0] = ip[2] + ip[0]; - pix[2] = ip[1] + ip[0]; - pix[1] = ((ip[0] << 12) - ip[1]*778 - (ip[2] << 11)) >> 12; - FORC3 ip[c] = CLIP((pix[c] - 512) * sraw_mul[c] >> 10); + for (cp=model2; *cp && !isdigit(*cp); cp++) {}; + sscanf (cp, "%d.%d.%d", v, v+1, v+2); + ver = (v[0]*1000 + v[1])*1000 + v[2]; + hue = (jh.sraw+1) << 2; + if (unique_id == 0x80000218 && ver > 1000006 && ver < 3000000) + hue = jh.sraw << 1; + ip = (short (*)[4]) image; + rp = ip[0]; + for (row=0; row < height; row++, ip+=width) { + if (row & (jh.sraw >> 1)) + for (col=0; col < width; col+=2) + for (c=1; c < 3; c++) + if (row == height-1) + ip[col][c] = ip[col-width][c]; + else ip[col][c] = (ip[col-width][c] + ip[col+width][c] + 1) >> 1; + for (col=1; col < width; col+=2) + for (c=1; c < 3; c++) + if (col == width-1) + ip[col][c] = ip[col-1][c]; + else ip[col][c] = (ip[col-1][c] + ip[col+1][c] + 1) >> 1; + } + for ( ; rp < ip[0]; rp+=4) { + if (unique_id < 0x80000200) { + pix[0] = rp[0] + rp[2] - 512; + pix[2] = rp[0] + rp[1] - 512; + pix[1] = rp[0] + ((-778*rp[1] - (rp[2] << 11)) >> 12) - 512; + } else { + rp[1] = (rp[1] << 2) + hue; + rp[2] = (rp[2] << 2) + hue; + pix[0] = rp[0] + (( 200*rp[1] + 22929*rp[2]) >> 14); + pix[1] = rp[0] + ((-5640*rp[1] - 11751*rp[2]) >> 14); + pix[2] = rp[0] + ((29040*rp[1] - 101*rp[2]) >> 14); } + FORC3 rp[c] = CLIP(pix[c] * sraw_mul[c] >> 10); } free (jh.row); maximum = 0x3fff; @@ -1120,16 +1204,31 @@ free (pixel); } +void CLASS pentax_tree() +{ + ushort bit[2][13]; + struct decode *cur; + int c, i, j; + + init_decoder(); + FORC(13) bit[0][c] = get2(); + FORC(13) bit[1][c] = fgetc(ifp) & 15; + FORC(13) { + cur = first_decode; + for (i=0; i < bit[1][c]; i++) { + j = bit[0][c] >> (11-i) & 1; + if (!cur->branch[j]) cur->branch[j] = ++free_decode; + cur = cur->branch[j]; + } + cur->leaf = c; + } +} + void CLASS pentax_k10_load_raw() { - static const uchar pentax_tree[] = - { 0,2,3,1,1,1,1,1,1,2,0,0,0,0,0,0, - 3,4,2,5,1,6,0,7,8,9,10,11,12 }; int row, col, diff; ushort vpred[2][2] = {{0,0},{0,0}}, hpred[2]; - init_decoder(); - make_decoder (pentax_tree, 0); getbits(-1); for (row=0; row < height; row++) for (col=0; col < raw_width; col++) { @@ -1159,7 +1258,7 @@ 7,6,8,5,9,4,10,3,11,12,2,0,1,13,14 } }; struct decode *dindex; ushort ver0, ver1, vpred[2][2], hpred[2], csize; - int i, max, step=0, huff=0, split=0, row, col, len, shl, diff; + int i, min, max, step=0, huff=0, split=0, row, col, len, shl, diff; fseek (ifp, meta_offset, SEEK_SET); ver0 = fgetc(ifp); @@ -1182,14 +1281,16 @@ split = get2(); } else if (ver0 != 0x46 && csize <= 0x4001) read_shorts (curve, max=csize); + while (curve[max-2] == curve[max-1]) max--; init_decoder(); make_decoder (nikon_tree[huff], 0); fseek (ifp, data_offset, SEEK_SET); getbits(-1); - for (row=0; row < height; row++) { + for (min=row=0; row < height; row++) { if (split && row == split) { init_decoder(); make_decoder (nikon_tree[huff+1], 0); + max += (min = 16) << 1; } for (col=0; col < raw_width; col++) { for (dindex=first_decode; dindex->branch[0]; ) @@ -1201,34 +1302,9 @@ diff -= (1 << len) - !shl; if (col < 2) hpred[col] = vpred[row & 1][col] += diff; else hpred[col & 1] += diff; - if (hpred[col & 1] >= max) derror(); - if ((unsigned) (col-left_margin) < width) - BAYER(row,col-left_margin) = curve[hpred[col & 1] & 0x3fff]; - } - } -} - -void CLASS nikon_load_raw() -{ - int irow, row, col, i; - - getbits(-1); - for (irow=0; irow < height; irow++) { - row = irow; - if (make[0] == 'O' || model[0] == 'E') { - row = irow * 2 % height + irow / (height/2); - if (row == 1 && data_offset == 0) { - fseek (ifp, 0, SEEK_END); - fseek (ifp, ftell(ifp)/2, SEEK_SET); - getbits(-1); - } - } - for (col=0; col < raw_width; col++) { - i = getbits(12); + if ((ushort)(hpred[col & 1] + min) >= max) derror(); if ((unsigned) (col-left_margin) < width) - BAYER(row,col-left_margin) = i; - if (tiff_compress > 32768 && (col % 10) == 9) - if (getbits(8)) derror(); + BAYER(row,col-left_margin) = curve[LIM((short)hpred[col & 1],0,0x3fff)]; } } } @@ -1314,14 +1390,14 @@ */ int CLASS minolta_z2() { - int i; + int i, nz; char tail[424]; fseek (ifp, -sizeof tail, SEEK_END); fread (tail, 1, sizeof tail, ifp); - for (i=0; i < (int) sizeof tail; i++) - if (tail[i]) return 1; - return 0; + for (nz=i=0; i < (int) sizeof tail; i++) + if (tail[i]) nz++; + return nz > 20; } /* Here raw_width is in bytes, not pixels. */ @@ -1341,34 +1417,6 @@ } } -void CLASS nikon_e2100_load_raw() -{ - uchar data[4608], *dp; - ushort pixel[3072], *pix; - int row, col; - - for (row=0; row <= height; row+=2) { - if (row == height) { - fseek (ifp, 0, SEEK_END); - fseek (ifp, ftell(ifp)/2, SEEK_SET); - row = 1; - } - fread (data, 1, width*3/2, ifp); - for (dp=data, pix=pixel; pix < pixel+width; dp+=12, pix+=8) { - pix[0] = (dp[2] >> 4) + (dp[ 3] << 4); - pix[1] = (dp[2] << 8) + dp[ 1]; - pix[2] = (dp[7] >> 4) + (dp[ 0] << 4); - pix[3] = (dp[7] << 8) + dp[ 6]; - pix[4] = (dp[4] >> 4) + (dp[ 5] << 4); - pix[5] = (dp[4] << 8) + dp[11]; - pix[6] = (dp[9] >> 4) + (dp[10] << 4); - pix[7] = (dp[9] << 8) + dp[ 8]; - } - for (col=0; col < width; col++) - BAYER(row,col) = (pixel[col] & 0xfff); - } -} - /* The Fuji Super CCD is just a Bayer grid rotated 45 degrees. */ @@ -1684,11 +1732,10 @@ if (nbits == -1) return bitbuf = vbits = 0; if (nbits == 0) return 0; - if (vbits < nbits) { + if ((vbits -= nbits) < 0) { bitbuf = bitbuf << 32 | get4(); vbits += 32; } - vbits -= nbits; return bitbuf << (64-nbits-vbits) >> (64-nbits); } @@ -1720,7 +1767,7 @@ len[0] = len[1] = 14; else if ((col & 7) == 0) for (i=0; i < 2; i++) { - for (j=0; j < 5 && !ph1_bits(1); j++); + for (j=0; j < 5 && !ph1_bits(1); j++) {}; if (j--) len[i] = length[j*2 + ph1_bits(1)]; } if ((i = len[col & 1]) == 14) @@ -1751,6 +1798,7 @@ if (!ljpeg_start (&jh, 0)) return; free (jh.row); + order = 0x4949; ph1_bits(-1); for (row=-top_margin; row < height; row++) { pred[0] = pred[1] = 0x8000; @@ -1764,6 +1812,7 @@ diff = ph1_bits(len[i]); if ((diff & (1 << (len[i]-1))) == 0) diff -= (1 << len[i]) - 1; + if (diff == 65535) diff = -32768; pred[i] += diff; if (row >= 0 && (unsigned)(col+i) < width) BAYER(row,col+i) = pred[i]; @@ -1848,19 +1897,40 @@ void CLASS packed_12_load_raw() { - int row, col; + int vbits=0, rbits=0, irow, row, col; + UINT64 bitbuf=0; - if (raw_width * 2 < width * 3) - raw_width = raw_width * 3 / 2; /* Convert raw_width to bytes */ - getbits(-1); - for (row=0; row < height; row++) { - for (col=0; col < left_margin; col++) - getbits(12); - for (col=0; col < width; col++) - BAYER(row,col) = getbits(12); - for (col = (width+left_margin)*3/2; col < raw_width; col++) - if (getbits(8) && raw_width-col < 35 && width != 3896) derror(); + if (raw_width * 2 >= width * 3) { /* If raw_width is in bytes, */ + rbits = raw_width * 8; + raw_width = raw_width * 2 / 3; /* convert it to pixels and */ + rbits -= raw_width * 12; /* save the remainder. */ } + order = load_flags & 1 ? 0x4949 : 0x4d4d; + for (irow=0; irow < height; irow++) { + row = irow; + if (load_flags & 2 && + (row = irow * 2 % height + irow / (height/2)) == 1 && + load_flags & 4) { + if (vbits=0, tiff_compress) + fseek (ifp, data_offset - (-width*height*3/4 & -2048), SEEK_SET); + else { + fseek (ifp, 0, SEEK_END); + fseek (ifp, ftell(ifp)/2, SEEK_SET); + } + } + for (col=0; col < raw_width; col++) { + if ((vbits -= 12) < 0) { + bitbuf = bitbuf << 32 | get4(); + vbits += 32; + } + if ((unsigned) (col-left_margin) < width) + BAYER(row,col-left_margin) = bitbuf << (52-vbits) >> 52; + if (load_flags & 8 && (col % 10) == 9) + if (vbits=0, bitbuf & 255) derror(); + } + vbits -= rbits; + } + if (!strcmp(make,"OLYMPUS")) black >>= 4; } void CLASS unpacked_load_raw() @@ -1868,7 +1938,7 @@ ushort *pixel; int row, col, bits=0; - while (1 << ++bits < (int) maximum); + while (1 << ++bits < (int) maximum) {}; fseek (ifp, (top_margin*raw_width + left_margin) * 2, SEEK_CUR); pixel = (ushort *) calloc (width, sizeof *pixel); merror (pixel, "unpacked_load_raw()"); @@ -1913,8 +1983,8 @@ if (!nbits) return vbits=0; if (!vbits) { - fread (buf+pana_shift, 1, 0x4000-pana_shift, ifp); - fread (buf, 1, pana_shift, ifp); + fread (buf+load_flags, 1, 0x4000-load_flags, ifp); + fread (buf, 1, load_flags, ifp); } vbits = (vbits - nbits) & 0x1ffff; byte = vbits >> 3 ^ 0x3ff0; @@ -1930,15 +2000,15 @@ for (col=0; col < raw_width; col++) { if ((i = col % 14) == 0) pred[0] = pred[1] = nonz[0] = nonz[1] = 0; - if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); + if (i % 3 == 2) sh = 4 >> (3 - pana_bits(2)); if (nonz[i & 1]) { if ((j = pana_bits(8))) { if ((pred[i & 1] -= 0x80 << sh) < 0 || sh == 4) pred[i & 1] &= ~(-1 << sh); pred[i & 1] += j << sh; - } - } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) - pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); + } + } else if ((nonz[i & 1] = pana_bits(8)) || i > 11) + pred[i & 1] = nonz[i & 1] << 4 | pana_bits(4); if (col < width) if ((BAYER(row,col) = pred[col & 1]) > 4098) derror(); } @@ -1983,7 +2053,7 @@ for (col=0; col < width; col++) { carry = acarry[col & 1]; i = 2 * (carry[2] < 3); - for (nbits=2+i; (ushort) carry[0] >> (nbits+i); nbits++); + for (nbits=2+i; (ushort) carry[0] >> (nbits+i); nbits++) {}; sign = getbit() * -1; low = getbits(2); for (high=0; high < 12; high++) @@ -2012,22 +2082,6 @@ } } -void CLASS olympus_cseries_load_raw() -{ - int irow, row, col; - - for (irow=0; irow < height; irow++) { - row = irow * 2 % height + irow / (height/2); - if (row < 2) { - fseek (ifp, data_offset - row*(-width*height*3/4 & -2048), SEEK_SET); - getbits(-1); - } - for (col=0; col < width; col++) - BAYER(row,col) = getbits(12); - } - black >>= 4; -} - void CLASS minolta_rd175_load_raw() { uchar pixel[768]; @@ -2652,7 +2706,7 @@ min = 0x7ff & val >> 11; imax = 0x0f & val >> 22; imin = 0x0f & val >> 26; - for (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++); + for (sh=0; sh < 4 && 0x80 << sh <= max-min; sh++) {}; for (bit=30, i=0; i < 16; i++) if (i == imax) pix[i] = max; else if (i == imin) pix[i] = min; @@ -2706,11 +2760,11 @@ carry = nbits - 8; } count = ((((data-range+1) & 0xffff) << 2) - 1) / (high >> 4); - for (bin=0; hist[s][bin+5] > count; bin++); + for (bin=0; hist[s][bin+5] > count; bin++) {}; low = hist[s][bin+5] * (high >> 4) >> 2; if (bin) high = hist[s][bin+4] * (high >> 4) >> 2; high -= low; - for (nbits=0; high << nbits < 128; nbits++); + for (nbits=0; high << nbits < 128; nbits++) {}; range = (range+low) << nbits; high <<= nbits; next = hist[s][1]; @@ -3492,12 +3546,12 @@ strcpy (cp, "/.badpixels"); if ((fp = fopen (fname, "r"))) break; if (cp == fname) break; - while (*--cp != '/'); + while (*--cp != '/') {}; } free (fname); } if (!fp) return; - while (fgets (line, 128, fp)) { + while (::fgets (line, 128, fp)) { cp = strchr (line, '#'); if (cp) *cp = 0; if (sscanf (line, "%d %d %d", &col, &row, &time) != 3) continue; @@ -3737,7 +3791,7 @@ if ((nc = colors) == 3 && filters) nc++; FORC(nc) { /* denoise R,G1,B,G3 individually */ for (i=0; i < size; i++) - fimg[i] = sqrt((unsigned) (image[i][c] << (scale+16))); + fimg[i] = 256 * sqrt(image[i][c] << scale); for (hpass=lev=0; lev < 5; lev++) { lpass = size*((lev & 1)+1); for (row=0; row < iheight; row++) { @@ -3886,9 +3940,9 @@ if (uc > (unsigned)(iwidth-2)) continue; fc -= uc; pix = img + ur*iwidth + uc; - image[row*iwidth+col][c] = (ushort) - ((pix[ 0]*(1-fc) + pix[ 1]*fc) * (1-fr) + - (pix[iwidth]*(1-fc) + pix[iwidth+1]*fc) * fr); + image[row*iwidth+col][c] = (ushort)( + (pix[ 0]*(1-fc) + pix[ 1]*fc) * (1-fr) + + (pix[iwidth]*(1-fc) + pix[iwidth+1]*fc) * fr); } } free(img); @@ -4317,7 +4371,7 @@ #undef TS /* End of functions copied to dcraw_indi.c (UF) */ -void CLASS median_filter () +void CLASS median_filter() { ushort (*pix)[4]; int pass, c, i, j, k, med[9]; @@ -4580,14 +4634,17 @@ if (tag == 2 && strstr(make,"NIKON")) iso_speed = (get2(),get2()); if (tag == 4 && len > 26 && len < 35) { - iso_speed = 50 * pow (2, (get4(),get2())/32.0 - 4); - if ((i=(get2(),get2())) != 0x7fff) + if ((i=(get4(),get2())) != 0x7fff && !iso_speed) + iso_speed = 50 * pow (2, i/32.0 - 4); + if ((i=(get2(),get2())) != 0x7fff && !aperture) aperture = pow (2, i/64.0); - if ((i=get2()) != 0xffff) + if ((i=get2()) != 0xffff && !shutter) shutter = pow (2, (short) i/-32.0); wbi = (get2(),get2()); shot_order = (get2(),get2()); } + if (tag == 7 && type == 2 && len > 20) + fgets (model2, 64, ifp); if (tag == 8 && type == 4) shot_order = get4(); if (tag == 9 && !strcmp(make,"Canon")) @@ -4687,6 +4744,10 @@ black = (get2()+get2()+get2()+get2())/4; if (tag == 0x201 && len == 4) goto get2_rggb; + if (tag == 0x220 && len == 53) { + fseek (ifp, 14, SEEK_CUR); + pentax_tree(); + } if (tag == 0x401 && len == 4) { black = (get4()+get4()+get4()+get4())/4; } @@ -4732,7 +4793,9 @@ cam_mul[0] = get2() / 256.0; cam_mul[2] = get2() / 256.0; } - if (tag == 0x2010 && type == 13) + if ((tag | 0x70) == 0x2070 && type == 4) + fseek (ifp, get4()+base, SEEK_SET); + if (tag == 0x2010 && type != 7) load_raw = &CLASS olympus_e410_load_raw; if (tag == 0x2020) parse_thumb_note (base, 257, 258); @@ -4742,8 +4805,8 @@ fseek (ifp, get4(), SEEK_SET); parse_thumb_note (base, 136, 137); } - if (tag == 0x4001 && type == 3) { - i = len == 582 ? 50 : len == 653 ? 68 : 126; + if (tag == 0x4001 && len > 500) { + i = len == 582 ? 50 : len == 653 ? 68 : len == 5120 ? 142 : 126; fseek (ifp, i, SEEK_CUR); get2_rggb: FORC4 cam_mul[c ^ (c >> 1)] = get2(); @@ -4855,7 +4918,7 @@ static const char *mod[] = { "","DCB2","Volare","Cantare","CMost","Valeo 6","Valeo 11","Valeo 22", "Valeo 11p","Valeo 17","","Aptus 17","Aptus 22","Aptus 75","Aptus 65", - "Aptus 54S","Aptus 65S","Aptus 75S" }; + "Aptus 54S","Aptus 65S","Aptus 75S","AFi 5","AFi 6","AFi 7" }; float romm_cam[3][3]; fseek (ifp, offset, SEEK_SET); @@ -4965,9 +5028,12 @@ double dblack, cc[4][4], cm[4][3], cam_xyz[4][3], num; double ab[]={ 1,1,1,1 }, asn[] = { 0,0,0,0 }, xyz[] = { 1,1,1 }; int sony_curve[] = { 0,0,0,0,0,4095 }; - unsigned *buf, sony_offset=0, sony_length=0, sony_key=0; - struct jhead jh; +#ifndef WITH_MMAP_HACK + unsigned *buf; FILE *sfp; +#endif /* WITH_MMAP_HACK */ + unsigned sony_offset=0, sony_length=0, sony_key=0; + struct jhead jh; if (tiff_nifds >= (int) sizeof tiff_ifd / (int) sizeof tiff_ifd[0]) return 1; @@ -5025,6 +5091,10 @@ case 272: /* Model */ fgets (model, 64, ifp); break; + case 280: /* Panasonic RW2 offset */ + if (type != 4) break; + load_raw = &CLASS panasonic_load_raw; + load_flags = 0x2008; case 273: /* StripOffset */ case 513: tiff_ifd[ifd].offset = get4()+base; @@ -5049,16 +5119,11 @@ case 514: tiff_ifd[ifd].bytes = get4(); break; - case 280: /* Panasonic RW2 offset */ - if (tiff_ifd[ifd].offset != -1) break; - tiff_ifd[ifd].offset = get4()+base; - pana_shift = 0x2008; - load_raw = &CLASS panasonic_load_raw; - break; - case 305: /* Software */ + case 305: case 11: /* Software */ fgets (software, 64, ifp); if (!strncmp(software,"Adobe",5) || !strncmp(software,"dcraw",5) || + !strncmp(software,"UFRaw",5) || !strncmp(software,"Bibble",6) || !strncmp(software,"Nikon Scan",10) || !strcmp (software,"Digital Photo Professional")) @@ -5116,6 +5181,9 @@ case 29443: FORC4 cam_mul[c ^ (c < 2)] = get2(); break; + case 29459: + FORC4 cam_mul[c ^ (c >> 1)] = get2(); + break; case 33405: /* Model2 */ fgets (model2, 64, ifp); break; @@ -5194,6 +5262,7 @@ ima_len = len; break; case 46279: + if (!ima_len) break; fseek (ifp, 78, SEEK_CUR); raw_width = get4(); raw_height = get4(); @@ -5231,6 +5300,9 @@ sscanf (cp+8, "%f %f %f", cam_mul, cam_mul+1, cam_mul+2); free (cbuf); break; + case 50458: + if (!make[0]) strcpy (make, "Hasselblad"); + break; case 50459: /* Hasselblad tag */ i = order; j = ftell(ifp); @@ -5244,6 +5316,8 @@ break; case 50706: /* DNGVersion */ FORC4 dng_version = (dng_version << 8) + fgetc(ifp); + if (!make[0]) strcpy (make, "DNG"); + is_raw = 1; break; case 50710: /* CFAPlaneColor */ if (len > 4) len = 4; @@ -5327,6 +5401,7 @@ } fseek (ifp, save, SEEK_SET); } +#ifndef WITH_MMAP_HACK if (sony_length && (buf = (unsigned *) malloc(sony_length))) { fseek (ifp, sony_offset, SEEK_SET); fread (buf, sony_length, 1, ifp); @@ -5341,6 +5416,7 @@ ifp = sfp; free (buf); } +#endif /* WITH_MMAP_HACK */ for (i=0; i < colors; i++) FORCC cc[i][c] *= ab[i]; if (use_cm) { @@ -5406,16 +5482,14 @@ switch (tiff_bps) { case 8: load_raw = &CLASS eight_bit_load_raw; break; case 12: load_raw = &CLASS packed_12_load_raw; - if (!strncmp(make,"NIKON",5)) - load_raw = &CLASS nikon_load_raw; + if (tiff_ifd[raw].phint == 2) + load_flags = 6; if (strncmp(make,"PENTAX",6)) break; case 14: case 16: load_raw = &CLASS unpacked_load_raw; break; } if (tiff_ifd[raw].bytes*5 == raw_width*raw_height*8) load_raw = &CLASS olympus_e300_load_raw; - if (tiff_bps == 12 && tiff_ifd[raw].phint == 2) - load_raw = &CLASS olympus_cseries_load_raw; break; case 6: case 7: case 99: load_raw = &CLASS lossless_jpeg_load_raw; break; @@ -5428,7 +5502,7 @@ raw_height += 8; load_raw = &CLASS sony_arw_load_raw; break; case 32769: - load_raw = &CLASS nikon_load_raw; break; + load_flags = 8; case 32773: load_raw = &CLASS packed_12_load_raw; break; case 34713: @@ -5533,14 +5607,16 @@ file++; if (!ext || strlen(ext) != 4 || ext-file != 8) return; jname = (char *) malloc (strlen(ifname) + 1); - merror (jname, "parse_external()"); + merror (jname, "parse_external_jpeg()"); strcpy (jname, ifname); jfile = file - ifname + jname; jext = ext - ifname + jname; if (strcasecmp (ext, ".jpg")) { strcpy (jext, isupper(ext[1]) ? ".JPG":".jpg"); - memcpy (jfile, file+4, 4); - memcpy (jfile+4, file, 4); + if (isdigit(*file)) { + memcpy (jfile, file+4, 4); + memcpy (jfile+4, file, 4); + } } else while (isdigit(*--jext)) { if (*jext != '9') { @@ -5768,7 +5844,7 @@ void CLASS parse_phase_one (int base) { - unsigned entries, tag, type, len, data, save, i, c; + unsigned entries, tag, type, len, data, save, i, j, c; float romm_cam[3][3]; char *cp; @@ -5776,7 +5852,7 @@ fseek (ifp, base, SEEK_SET); order = get4() & 0xffff; if (get4() >> 8 != 0x526177) return; /* "Raw" */ - fseek (ifp, base+get4(), SEEK_SET); + fseek (ifp, get4()+base, SEEK_SET); entries = get4(); get4(); while (entries--) { @@ -5789,8 +5865,9 @@ switch (tag) { case 0x100: flip = "0653"[data & 3]-'0'; break; case 0x106: - for (i=0; i < 9; i++) - romm_cam[0][i] = getreal(11); + for (i=0; i < 3; i++) + for (j=0; j < 3; j++) + romm_cam[i][j] = getreal(11); romm_coeff (romm_cam); break; case 0x107: @@ -5897,18 +5974,26 @@ order = 0x4949; fread (tag, 4, 1, ifp); size = get4(); + end = ftell(ifp) + size; if (!memcmp(tag,"RIFF",4) || !memcmp(tag,"LIST",4)) { - end = ftell(ifp) + size; get4(); - while ((unsigned) ftell(ifp) < end) + while ((unsigned)(ftell(ifp)+7) < end) parse_riff(); + } else if (!memcmp(tag,"nctg",4)) { + while ((unsigned)(ftell(ifp)+7) < end) { + i = get2(); + size = get2(); + if ((i+1) >> 1 == 10 && size == 20) + get_timestamp(0); + else fseek (ifp, size, SEEK_CUR); + } } else if (!memcmp(tag,"IDIT",4) && size < 64) { fread (date, 64, 1, ifp); date[size] = 0; memset (&t, 0, sizeof t); if (sscanf (date, "%*s %s %d %d:%d:%d %d", month, &t.tm_mday, &t.tm_hour, &t.tm_min, &t.tm_sec, &t.tm_year) == 6) { - for (i=0; i < 12 && strcmp(mon[i],month); i++); + for (i=0; i < 12 && strcasecmp(mon[i],month); i++) {}; t.tm_mon = i; t.tm_year -= 1900; if (mktime(&t) > 0) @@ -6101,6 +6186,8 @@ { 9805,-2689,-1312,-5803,13064,3068,-2438,3075,8775 } }, { "Canon EOS D60", 0, 0xfa0, { 6188,-1341,-890,-7168,14489,2937,-2640,3228,8483 } }, + { "Canon EOS 5D Mark II", 0, 0x3cf0, + { 4716,603,-830,-7798,15474,2480,-1496,1937,6651 } }, { "Canon EOS 5D", 0, 0xe6c, { 6347,-479,-972,-8297,15954,2480,-1968,2131,7649 } }, { "Canon EOS 10D", 0, 0xfa0, @@ -6113,6 +6200,8 @@ { 6257,-303,-1000,-7880,15621,2396,-1714,1904,7046 } }, { "Canon EOS 40D", 0, 0x3f60, { 6071,-747,-856,-7653,15365,2441,-2025,2553,7315 } }, + { "Canon EOS 50D", 0, 0x3d93, + { 4920,616,-593,-6493,13964,2784,-1774,3178,7005 } }, { "Canon EOS 300D", 0, 0xfa0, { 8197,-2000,-1118,-6714,14335,2592,-2536,3178,8266 } }, { "Canon EOS 350D", 0, 0xfff, @@ -6122,7 +6211,7 @@ { "Canon EOS 450D", 0, 0x390d, { 5784,-262,-821,-7539,15064,2672,-1982,2681,7427 } }, { "Canon EOS 1000D", 0, 0xe43, - { 7054,-1501,-990,-8156,15544,2812,-1278,1414,7796 } }, + { 6771,-1139,-977,-7818,15123,2928,-1244,1437,7533 } }, { "Canon EOS-1Ds Mark III", 0, 0x3bb0, { 5859,-211,-930,-8255,16017,2353,-1732,1887,7448 } }, { "Canon EOS-1Ds Mark II", 0, 0xe80, @@ -6143,6 +6232,8 @@ { -5300,9846,1776,3436,684,3939,-5540,9879,6200,-1404,11175,217 } }, { "Canon PowerShot A5", 0, 0, { -4801,9475,1952,2926,1611,4094,-5259,10164,5947,-1554,10883,547 } }, + { "Canon PowerShot G10", 0, 0, + { 11093,-3906,-1028,-5047,12492,2879,-1003,1750,5561 } }, { "Canon PowerShot G1", 0, 0, { -4778,9467,2172,4743,-1141,4344,-5146,9908,6077,-1566,11051,557 } }, { "Canon PowerShot G2", 0, 0, @@ -6177,6 +6268,8 @@ { 15591,-6402,-1592,-5365,13198,2168,-1300,1824,5075 } }, { "Canon PowerShot A620", 0, 0, /* DJC */ { 15265,-6193,-1558,-4125,12116,2010,-888,1639,5220 } }, + { "Canon PowerShot A630", 0, 0, /* DJC */ + { 14201,-5308,-1757,-6087,14472,1617,-2191,3105,5348 } }, { "Canon PowerShot A640", 0, 0, /* DJC */ { 13124,-5329,-1390,-3602,11658,1944,-1612,2863,4885 } }, { "Canon PowerShot A650", 0, 0, /* DJC */ @@ -6237,6 +6330,8 @@ { 12343,-4515,-1285,-7165,14899,2435,-1895,2496,8800 } }, { "FUJIFILM IS-1", 0, 0, { 21461,-10807,-1441,-2332,10599,1999,289,875,7703 } }, + { "FUJIFILM IS Pro", 0, 0, + { 12300,-5110,-1304,-9117,17143,1998,-1947,2448,8100 } }, { "Imacon Ixpress", 0, 0, /* DJC */ { 7025,-1415,-704,-5188,13765,1424,-1248,2742,6038 } }, { "KODAK NC2000", 0, 0, @@ -6343,8 +6438,8 @@ { 7732,-2422,-789,-8238,15884,2498,-859,783,7330 } }, { "NIKON D80", 0, 0, { 8629,-2410,-883,-9055,16940,2171,-1490,1363,8520 } }, - { "NIKON D90", 0, 0xf00, /* DJC */ - { 9692,-2519,-831,-5396,13053,2344,-1818,2682,7084 } }, + { "NIKON D90", 0, 0xf00, + { 7309,-1403,-519,-8474,16008,2622,-2434,2826,8064 } }, { "NIKON D200", 0, 0xfbc, { 8367,-2248,-763,-8758,16447,2422,-1527,1550,8053 } }, { "NIKON D300", 0, 0, @@ -6375,6 +6470,8 @@ { 8489,-2583,-1036,-8051,15583,2643,-1307,1407,7354 } }, { "NIKON E8800", 0, 0, { 7971,-2314,-913,-8451,15762,2894,-1442,1520,7610 } }, + { "NIKON COOLPIX P6000", 0, 0, + { 9698,-3367,-914,-4706,12584,2368,-837,968,5801 } }, { "OLYMPUS C5050", 0, 0, { 10508,-3124,-1273,-6079,14294,1901,-1653,2306,6237 } }, { "OLYMPUS C5060", 0, 0, @@ -6441,10 +6538,16 @@ { 9427,-2714,-868,-7493,16092,1373,-2199,3264,7180 } }, { "PENTAX K200D", 0, 0, { 9186,-2678,-907,-8693,16517,2260,-1129,1094,8524 } }, + { "PENTAX K2000", 0, 0, + { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, + { "PENTAX K-m", 0, 0, + { 11057,-3604,-1155,-5152,13046,2329,-282,375,8104 } }, { "Panasonic DMC-FZ8", 0, 0xf7f0, { 8986,-2755,-802,-6341,13575,3077,-1476,2144,6379 } }, { "Panasonic DMC-FZ18", 0, 0, { 9932,-3060,-935,-5809,13331,2753,-1267,2155,5575 } }, + { "Panasonic DMC-FZ28", 15, 0xfff, + { 10109,-3488,-993,-5412,12812,2916,-1305,2140,5543 } }, { "Panasonic DMC-FZ30", 0, 0xf94c, { 10976,-4029,-1141,-7918,15491,2600,-1670,2071,8246 } }, { "Panasonic DMC-FZ50", 0, 0xfff0, /* aka "LEICA V-LUX1" */ @@ -6459,6 +6562,12 @@ { 10704,-4187,-1230,-8314,15952,2501,-920,945,8927 } }, { "Panasonic DMC-LX2", 0, 0, /* aka "LEICA D-LUX3" */ { 8048,-2810,-623,-6450,13519,3272,-1700,2146,7049 } }, + { "Panasonic DMC-LX3", 15, 0xfff, /* aka "LEICA D-LUX4" */ + { 8128,-2668,-655,-6134,13307,3161,-1782,2568,6083 } }, + { "Panasonic DMC-FX150", 15, 0xfff, + { 9082,-2907,-925,-6119,13377,3058,-1797,2641,5609 } }, + { "Panasonic DMC-G1", 15, 0xfff, + { 8199,-2065,-1056,-8124,16156,2033,-2458,3022,7220 } }, { "Phase One H 20", 0, 0, /* DJC */ { 1313,1855,-109,-6715,15908,808,-327,1840,6020 } }, { "Phase One P 2", 0, 0, @@ -6486,19 +6595,22 @@ { "SONY DSLR-A350", 0, 0xffc, { 6038,-1484,-578,-9146,16746,2513,-875,746,7217 } }, { "SONY DSLR-A700", 254, 0x1ffe, - { 5775,-805,-359,-8574,16295,2391,-1943,2341,7249 } } + { 5775,-805,-359,-8574,16295,2391,-1943,2341,7249 } }, + { "SONY DSLR-A900", 254, 0x1ffe, + { 5209,-1072,-397,-8845,16120,2919,-1618,1803,8654 } } }; double cam_xyz[4][3]; char name[130]; - int i, j; + int i, j, k; sprintf (name, "%s %s", make, model); for (i=0; i < (int) sizeof table / (int) sizeof *table; i++) if (!strncmp (name, table[i].prefix, strlen(table[i].prefix))) { if (table[i].black) black = (ushort) table[i].black; if (table[i].maximum) maximum = (ushort) table[i].maximum; - for (j=0; j < 12; j++) - cam_xyz[0][j] = table[i].trans[j] / 10000.0; + for (j=0; j < 4; j++) + for (k=0; k < 3; k++) + cam_xyz[j][k] = table[i].trans[3*j+k] / 10000.0; cam_xyz_coeff (cam_xyz); break; } @@ -6619,6 +6731,8 @@ { 4841984, "PENTAX", "Optio S" ,1 }, { 6114240, "PENTAX", "Optio S4" ,1 }, /* or S4i, CASIO EX-Z4 */ { 10702848, "PENTAX", "Optio 750Z" ,1 }, + { 16098048, "SAMSUNG", "S85" ,1 }, + { 16215552, "SAMSUNG", "S85" ,1 }, { 12582980, "Sinar", "" ,0 }, { 33292868, "Sinar", "" ,0 }, { 44390468, "Sinar", "" ,0 } }; @@ -6638,7 +6752,7 @@ load_raw = thumb_load_raw = 0; write_thumb = &CLASS jpeg_thumb; data_offset = meta_length = tiff_bps = tiff_compress = 0; - kodak_cbpp = zero_after_ff = dng_version = pana_shift = 0; + kodak_cbpp = zero_after_ff = dng_version = load_flags = 0; timestamp = shot_order = tiff_samples = black = is_foveon = 0; mix_green = profile_length = data_error = zero_is_bad = 0; pixel_aspect = is_raw = raw_color = use_gamma = 1; @@ -6775,6 +6889,8 @@ { height = 2616; width = 3896; } if (height == 3136 && width == 4864) /* Pentax K20D */ { height = 3124; width = 4688; } + if (height == 3014 && width == 4096) /* Ricoh GX200 */ + width = 4014; if (dng_version) { if (filters == UINT_MAX) filters = 0; if (filters) is_raw = tiff_samples; @@ -6788,8 +6904,12 @@ if ((is_canon = !strcmp(make,"Canon"))) load_raw = memcmp (head+6,"HEAPCCDR",8) ? &CLASS lossless_jpeg_load_raw : &CLASS canon_compressed_load_raw; - if (!strcmp(make,"NIKON") && !load_raw) - load_raw = &CLASS nikon_load_raw; + if (!strcmp(make,"NIKON")) { + if (!load_raw) + load_raw = &CLASS packed_12_load_raw; + if (model[0] == 'E') + load_flags |= !data_offset << 2 | 2; + } if (!strcmp(make,"CASIO")) { load_raw = &CLASS packed_12_load_raw; maximum = 0xf7f; @@ -6803,7 +6923,11 @@ filters = 0; load_raw = &CLASS foveon_load_raw; simple_coeff(0); - } else if (is_canon && tiff_samples == 4) { + } else if (is_canon && tiff_bps == 15) { + switch (width) { + case 3344: width -= 66; + case 3872: width -= 6; + } filters = 0; load_raw = &CLASS canon_sraw_load_raw; } else if (!strcmp(model,"PowerShot 600")) { @@ -7011,6 +7135,27 @@ top_margin = 34; left_margin = 90; goto canon_cr2; + } else if (is_canon && raw_width == 4480) { + height = 3326; + width = 4432; + top_margin = 10; + left_margin = 12; + filters = 0x49494949; + } else if (is_canon && raw_width == 1208) { + top_margin = 51; + left_margin = 62; + raw_width = width *= 4; + goto canon_cr2; + } else if (is_canon && raw_width == 1448) { + top_margin = 51; + left_margin = 158; + raw_width = width *= 4; + goto canon_cr2; + } else if (is_canon && raw_width == 1448) { + top_margin = 51; + left_margin = 158; + raw_width = width *= 4; + goto canon_cr2; } else if (is_canon && raw_width == 5108) { top_margin = 13; left_margin = 98; @@ -7045,7 +7190,8 @@ width -= 42; } else if (!strcmp(model,"D100")) { if (tiff_compress == 34713 && !nikon_is_compressed()) { - load_raw = &CLASS nikon_load_raw; + load_raw = &CLASS packed_12_load_raw; + load_flags |= 8; raw_width = (width += 3) + 3; } } else if (!strcmp(model,"D200")) { @@ -7060,6 +7206,9 @@ else width -= 8; } else if (!strcmp(model,"D300")) { width -= 32; + } else if (!strcmp(model,"COOLPIX P6000")) { + load_flags = 1; + filters = 0x94949494; } else if (fsize == 1581060) { height = 963; width = 1287; @@ -7085,7 +7234,8 @@ width = 2064; colors = 4; filters = 0xe1e1e1e1; - load_raw = &CLASS nikon_load_raw; + load_raw = &CLASS packed_12_load_raw; + load_flags = 6; if (!timestamp && nikon_e995()) strcpy (model, "E995"); if (strcmp(model,"E995")) { @@ -7099,7 +7249,7 @@ if (!timestamp && !nikon_e2100()) goto cp_e2500; height = 1206; width = 1616; - load_raw = &CLASS nikon_e2100_load_raw; + load_flags = 7; } else if (!strcmp(model,"E2500")) { cp_e2500: strcpy (model, "E2500"); @@ -7110,7 +7260,8 @@ } else if (fsize == 4775936) { height = 1542; width = 2064; - load_raw = &CLASS nikon_e2100_load_raw; + load_raw = &CLASS packed_12_load_raw; + load_flags = 7; pre_mul[0] = 1.818; pre_mul[2] = 1.618; if (!timestamp) nikon_3700(); @@ -7130,8 +7281,8 @@ strcpy (make, "Minolta"); strcpy (model,"DiMAGE Z2"); } - if (make[0] == 'M') - load_raw = &CLASS nikon_e2100_load_raw; + load_raw = &CLASS packed_12_load_raw; + load_flags = 6 + (make[0] == 'M'); } else if (!strcmp(model,"E4500")) { height = 1708; width = 2288; @@ -7146,7 +7297,8 @@ height = 2118; width = 2832; maximum = 0xf83; - load_raw = &CLASS nikon_e2100_load_raw; + load_raw = &CLASS packed_12_load_raw; + load_flags = 7; } else if (!strcmp(model,"FinePix S5100") || !strcmp(model,"FinePix S5500")) { height -= top_margin = 6; @@ -7251,7 +7403,15 @@ } else if (!strcmp(model,"Optio 750Z")) { height = 2302; width = 3072; - load_raw = &CLASS nikon_e2100_load_raw; + load_raw = &CLASS packed_12_load_raw; + load_flags = 7; + } else if (!strcmp(model,"S85")) { + height = 2448; + width = 3264; + raw_width = fsize/height/2; + order = 0x4d4d; + load_raw = &CLASS unpacked_load_raw; + maximum = 0xffff; } else if (!strcmp(model,"STV680 VGA")) { height = 484; width = 644; @@ -7348,6 +7508,11 @@ top_margin = 4; left_margin = 7; filters = 0x61616161; + } else if (raw_width == 4090) { + strcpy (model, "V96C"); + height -= (top_margin = 6); + width -= (left_margin = 3) + 7; + filters = 0x61616161; } } else if (!strcmp(make,"Sinar")) { if (!memcmp(head,"8BPS",4)) { @@ -7361,6 +7526,9 @@ maximum = 0x3fff; } else if (!strcmp(make,"Leaf")) { maximum = 0x3fff; + fseek (ifp, data_offset, SEEK_SET); + if (ljpeg_start (&jh, 1) && jh.bits == 15) + maximum = 0x1fff; if (tiff_samples > 1) filters = 0; if (tiff_samples > 1 || tile_length < raw_height) load_raw = &CLASS leaf_hdr_load_raw; @@ -7424,52 +7592,57 @@ zero_is_bad = 1; adobe_coeff ("Panasonic","DMC-L1"); break; case 3304: - width -= 16; + width -= 17; zero_is_bad = 1; adobe_coeff ("Panasonic","DMC-FZ30"); break; case 3330: - width = 3291; - left_margin = 9; + width += 43; + left_margin = -6; maximum = 0xf7f0; - goto fz18; case 3370: - width = 3288; - left_margin = 15; -fz18: if (height > 2480) + width -= 82; + left_margin += 15; + if (height > 2480) height = 2480 - (top_margin = 10); filters = 0x49494949; zero_is_bad = 1; - break; + adobe_coeff ("Panasonic","DMC-FZ18"); break; case 3690: - height += 36; + height -= 2; left_margin = (ushort)-14; - filters = 0x49494949; maximum = 0xf7f0; case 3770: width = 3672; - if ((height -= 39) == 2760) + if (--height == 2798 && (height = 2760)) top_margin = 15; + else filters = 0x49494949; left_margin += 17; zero_is_bad = 1; adobe_coeff ("Panasonic","DMC-FZ50"); break; case 3710: width = 3682; filters = 0x49494949; - break; + adobe_coeff ("Panasonic","DMC-L10"); break; case 3724: width -= 14; case 3836: - width += 36; - case 4060: - width -= 78; - filters = 0x16161616; - maximum = 0xfff; + width -= 42; +lx3: filters = 0x16161616; + if (make[0] != 'P') + adobe_coeff ("Panasonic","DMC-LX3"); break; case 3880: width -= 22; left_margin = 6; zero_is_bad = 1; adobe_coeff ("Panasonic","DMC-LX1"); break; + case 4060: + width = 3982; + if (height == 2250) goto lx3; + width = 4018; + filters = 0x49494949; + zero_is_bad = 1; + adobe_coeff ("Panasonic","DMC-G1"); break; case 4290: height += 38; left_margin = (ushort)-14; @@ -7480,12 +7653,18 @@ top_margin = 15; left_margin += 17; adobe_coeff ("Panasonic","DMC-LX2"); break; + case 4508: + height -= 6; + width = 4429; + filters = 0x16161616; + adobe_coeff ("Panasonic","DMC-FX150"); break; } } else if (!strcmp(model,"C770UZ")) { height = 1718; width = 2304; filters = 0x16161616; - load_raw = &CLASS nikon_e2100_load_raw; + load_raw = &CLASS packed_12_load_raw; + load_flags = 7; } else if (!strcmp(make,"OLYMPUS")) { height += height & 1; filters = exif_cfa; @@ -7595,6 +7774,8 @@ colors = 1; filters = 0; } + if (!strcmp(model+4,"20X")) + strcpy (cdesc, "MYCY"); if (strstr(model,"DC25")) { strcpy (model, "DC25"); data_offset = 15424; @@ -7655,14 +7836,21 @@ filters = 0x61616161; simple_coeff(2); } else if (!strcmp(model,"QuickTake 100")) { - data_offset = 736; + fseek (ifp, 544, SEEK_SET); + height = get2(); + width = get2(); + data_offset = (get4(),get2()) == 30 ? 738:736; + if (height > width) { + SWAP(height,width); + fseek (ifp, data_offset-6, SEEK_SET); + flip = ~get2() & 3 ? 5:6; + } load_raw = &CLASS quicktake_100_load_raw; - goto qt_common; + filters = 0x61616161; } else if (!strcmp(model,"QuickTake 150")) { data_offset = 738 - head[5]; if (head[5]) strcpy (model+10, "200"); load_raw = &CLASS kodak_radc_load_raw; -qt_common: height = 480; width = 640; filters = 0x61616161; @@ -7849,7 +8037,7 @@ int row, col, c, i, j, k; ushort *img; float out[3], out_cam[3][4]; - double num, inverse[3][3]; + double num, inverse[3][3], bnd[2]={0,0}; static const double xyzd50_srgb[3][3] = { { 0.436083, 0.385083, 0.143055 }, { 0.222507, 0.716888, 0.060608 }, @@ -7889,6 +8077,18 @@ static const unsigned pwhite[] = { 0xf351, 0x10000, 0x116cc }; unsigned pcurve[] = { 0x63757276, 0, 1, 0x1000000 }; + bnd[gamm[1] >= 1] = 1; + if (gamm[1] && (gamm[1]-1)*(gamm[0]-1) <= 0) { + for (i=0; i < 36; i++) { + gamm[2] = (bnd[0] + bnd[1])/2; + bnd[(pow(gamm[2]/gamm[1],-gamm[0])-1)/gamm[0]-1/gamm[2] > -1] = gamm[2]; + } + gamm[3] = gamm[2]*(1/gamm[0]-1); + gamm[2] /= gamm[1]; + } + gamm[4] = 1 / (gamm[1]/2*SQR(gamm[2]) - gamm[3]*(1-gamm[2]) + + (1-pow(gamm[2],1+gamm[0]))*(1+gamm[3])/(1+gamm[0])) - 1; + memcpy (out_cam, rgb_cam, sizeof out_cam); raw_color |= colors == 1 || document_mode || output_color < 1 || output_color > 5; @@ -7907,11 +8107,7 @@ oprof[pbody[5]/4+2] = strlen(name[output_color-1]) + 1; memcpy ((char *)oprof+pbody[8]+8, pwhite, sizeof pwhite); if (output_bps == 8) -#ifdef SRGB_GAMMA - pcurve[3] = 0x2330000; -#else - pcurve[3] = 0x1f00000; -#endif + pcurve[3] = (short)(256/gamm[4]+0.5) << 16; for (i=4; i < 7; i++) memcpy ((char *)oprof+pbody[i*3+2], pcurve, sizeof pcurve); pseudoinverse ((double (*)[3]) out_rgb[output_color-1], inverse, 3); @@ -8055,12 +8251,8 @@ white *= 8 / bright; for (i=0; i < 0x10000; i++) { r = i / white; - val = (int)(256 * ( !use_gamma ? r : -#ifdef SRGB_GAMMA - r <= 0.00304 ? r*12.92 : pow(r,2.5/6)*1.055-0.055 )); -#else - r <= 0.018 ? r*4.5 : pow(r,0.45)*1.099-0.099 )); -#endif + val = 256 * ( !use_gamma ? r : + r <= gamm[2] ? r*gamm[1] : pow(r,gamm[0])*(1+gamm[3])-gamm[3]); if (val > 255) val = 255; lut[i] = val; } @@ -8304,6 +8496,7 @@ puts(_("-j Don't stretch or rotate raw pixels")); puts(_("-W Don't automatically brighten the image")); puts(_("-b Adjust brightness (default = 1.0)")); + puts(_("-g

Set custom gamma curve (default = 2.222 4.5)")); puts(_("-q [0-3] Set the interpolation quality")); puts(_("-h Half-size color image (twice as fast as \"-q 0\")")); puts(_("-f Interpolate RGGB as four colors")); @@ -8317,8 +8510,8 @@ argv[argc] = ""; for (arg=1; (((opm = argv[arg][0]) - 2) | 2) == '+'; ) { opt = argv[arg++][1]; - if ((cp = strchr (sp="nbrkStqmHAC", opt))) - for (i=0; i < "11411111142"[cp-sp]-'0'; i++) + if ((cp = strchr (sp="nbrkStqmHACg", opt))) + for (i=0; i < "114111111422"[cp-sp]-'0'; i++) if (!isdigit(argv[arg+i][0])) { dcraw_message (DCRAW_ERROR,_("Non-numeric argument to \"-%c\"\n"), opt); return 1; @@ -8330,6 +8523,8 @@ FORC4 user_mul[c] = atof(argv[arg++]); break; case 'C': aber[0] = 1 / atof(argv[arg++]); aber[2] = 1 / atof(argv[arg++]); break; + case 'g': gamm[0] = 1 / atof(argv[arg++]); + gamm[1] = atof(argv[arg++]); break; case 'k': user_black = atoi(argv[arg++]); break; case 'S': user_sat = atoi(argv[arg++]); break; case 't': user_flip = atoi(argv[arg++]); break; diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/dcraw.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/dcraw.h --- rawstudio-1.1.1/src/dcraw.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/dcraw.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,7 +1,7 @@ /* dcraw.h - Dave Coffin's raw photo decoder - header for C++ adaptation - Copyright 1997-2008 by Dave Coffin, dcoffin a cybercom o net - Copyright 2004-2008 by Udi Fuchs, udifuchs a gmail o com + Copyright 1997-2009 by Dave Coffin, dcoffin a cybercom o net + Copyright 2004-2009 by Udi Fuchs, udifuchs a gmail o com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,11 +50,11 @@ unsigned tiff_nifds, tiff_samples, tiff_bps, tiff_compress; unsigned black, maximum, mix_green, raw_color, use_gamma, zero_is_bad; unsigned zero_after_ff, is_raw, dng_version, is_foveon, data_error; -unsigned tile_width, tile_length, gpsdata[32], pana_shift; +unsigned tile_width, tile_length, gpsdata[32], load_flags; ushort raw_height, raw_width, height, width, top_margin, left_margin; ushort shrink, iheight, iwidth, fuji_width, thumb_width, thumb_height; int flip, tiff_flip, colors; -double pixel_aspect, aber[4]; +double pixel_aspect, aber[4], gamm[5]; ushort (*image)[4], white[8][8], curve[0x4001], cr2_slice[3], sraw_mul[4]; float bright, user_mul[4], threshold; int half_size, four_color_rgb, document_mode, highlight; @@ -89,6 +89,25 @@ char *messageBuffer; int lastStatus; +unsigned ifpReadCount; +unsigned ifpSize; +unsigned ifpStepProgress; +#define STEPS 50 +void (*progressHandle)(void *user_data, double progress); +void *progressUserData; +void ifpProgress(unsigned readCount); +#ifndef WITH_MMAP_HACK +// Override standard io function for integrity checks and progress report +size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); +size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); +char *fgets(char *s, int size, FILE *stream); +int fgetc(FILE *stream); +// dcraw only calls fscanf for single variables +int fscanf(FILE *stream, const char *format, void *ptr); +// calling with more variables would triger a link error +int fscanf(FILE *stream, const char *format, void *ptr1, void *ptr2, ...); +#endif /* WITH_MMAP_HACK */ + /* Initialization of the variables is done here */ DCRaw(); ~DCRaw(); @@ -131,16 +150,15 @@ void adobe_copy_pixel (int row, int col, ushort **rp); void adobe_dng_load_raw_lj(); void adobe_dng_load_raw_nc(); +void pentax_tree(); void pentax_k10_load_raw(); void nikon_compressed_load_raw(); -void nikon_load_raw(); int nikon_is_compressed(); int nikon_e995(); int nikon_e2100(); void nikon_3700(); int minolta_z2(); void nikon_e900_load_raw(); -void nikon_e2100_load_raw(); void fuji_load_raw(); void jpeg_thumb (FILE *tfp); void ppm_thumb (FILE *tfp); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/filename.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/filename.c --- rawstudio-1.1.1/src/filename.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/filename.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -28,6 +28,7 @@ #include "conf_interface.h" #include "gettext.h" #include "gtk-helper.h" +#include "rs-metadata.h" static void filename_entry_changed_writeback(GtkEntry *entry, gpointer user_data); static void filename_entry_changed_writeconf(GtkEntry *entry, gpointer user_data); @@ -53,12 +54,19 @@ gboolean file_exists = FALSE; gint i = 1; gchar *basename; + RSMetadata *metadata = rs_metadata_new_from_file(filename); if (filename == NULL) return NULL; if (in == NULL) return NULL; basename = g_path_get_basename(filename); output = g_strrstr(basename, "."); + + /* Prepare time/date */ + struct tm *tm = g_new0(struct tm, 1); + time_t tt = (time_t) metadata->timestamp; + gmtime_r(&tt, tm); + if (output != NULL) { *output = '\0'; } @@ -144,6 +152,30 @@ m += 1; n += 2; break; + case 'd': + { + gchar *result = g_new0(gchar, 11); + strftime(result, 11, "%Y-%m-%d", tm); + strcpy(&temp[m], result); + + n += 2; + m += strlen(result); + + g_free(result); + break; + } + case 't': + { + gchar *result = g_new0(gchar, 9); + strftime(result, 9, "%H:%M:%S", tm); + strcpy(&temp[m], result); + + n += 2; + m += strlen(result); + + g_free(result); + break; + } default: temp[m++] = in[n]; temp[m++] = in[n+1]; @@ -177,6 +209,8 @@ } while (file_exists == TRUE); g_free(basename); + g_free(tm); + g_object_unref(metadata); return output; } @@ -209,12 +243,28 @@ static void add_s(GtkMenuItem *menuitem, GtkEntry *entry) { gtk_entry_append_text(entry, "%s"); }; static void +add_d(GtkMenuItem *menuitem, GtkBin *combo) +{ + GtkWidget *entry = gtk_bin_get_child(combo); + gtk_entry_append_text(GTK_ENTRY(entry), "%d"); +}; + +static void +add_t(GtkMenuItem *menuitem, GtkBin *combo) +{ + GtkWidget *entry = gtk_bin_get_child(combo); + gtk_entry_append_text(GTK_ENTRY(entry), "%t"); +}; + +static void filename_add_clicked(GtkButton *button, gpointer user_data) { gui_menu_popup(GTK_WIDGET(button), user_data, _("%f - Original filename"), add_f, _("%2c - Incremental counter"), add_c, _("%s - Setting id (A, B or C)"), add_s, + _("%d - Date from EXIF (YYYY-MM-DD)"), add_d, + _("%t - Time from EXIF (HH:MM:SS)"), add_t, -1 ); } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/filename.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/filename.h --- rawstudio-1.1.1/src/filename.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/filename.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gettext.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/gettext.h --- rawstudio-1.1.1/src/gettext.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gettext.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-helper.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-helper.c --- rawstudio-1.1.1/src/gtk-helper.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-helper.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -53,6 +53,7 @@ static gboolean rs_gtk_tree_model_count_helper(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gint rs_gtk_tree_model_count(GtkTreeModel *model); static inline guint8 convert_color_channel (guint8 src, guint8 alpha); +static gboolean label_new_with_mouseover_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data); static const gchar *color_profiles[] = { "*.icc", @@ -1116,3 +1117,77 @@ return button; } + +static gboolean +label_new_with_mouseover_cb(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data) +{ + /* Do some mangling to get the GtkLabel */ + GtkLabel *label = GTK_LABEL(gtk_bin_get_child(GTK_BIN(widget))); + const gchar *key; + + /* Get the relevant key - if any */ + switch (event->type) + { + case GDK_ENTER_NOTIFY: + key = "rs-mouseover-enter"; + gtk_widget_set_state(widget, GTK_STATE_PRELIGHT); + break; + case GDK_LEAVE_NOTIFY: + key = "rs-mouseover-leave"; + gtk_widget_set_state(widget, GTK_STATE_NORMAL); + break; + default: + key = NULL; + break; + } + + /* Set new text */ + if (key) + gtk_label_set_text(label, g_object_get_data(G_OBJECT(label), key)); + + /* No need to propagate this event */ + return TRUE; +} + +/** + * This will create a new GtkLabel that can alternate text when the pointer is + * hovering above it. + * @param normal_text The text to display when pointer is not hovering above + * @param hover_text The text to display when pointer is hovering above the label + * @return A new GtkLabel + */ +GtkWidget * +gui_label_new_with_mouseover(const gchar *normal_text, const gchar *hover_text) +{ + GtkWidget *eventbox; + GtkWidget *label; + gint max_width; + + g_assert(normal_text != NULL); + g_assert(hover_text != NULL); + + label = gtk_label_new(normal_text); + + /* Align right */ + gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); + + /* Calculate the maximum amount of characters displayed to avoid flickering */ + max_width = MAX(g_utf8_strlen(normal_text, -1), g_utf8_strlen(hover_text, -1)); + gtk_label_set_width_chars(GTK_LABEL(label), max_width); + + /* Keep these in memory - AND free them with the GtkLabel */ + g_object_set_data_full(G_OBJECT(label), "rs-mouseover-leave", g_strdup(normal_text), g_free); + g_object_set_data_full(G_OBJECT(label), "rs-mouseover-enter", g_strdup(hover_text), g_free); + + /* Use an event box, since GtkLabel has no window of its own */ + eventbox = gtk_event_box_new(); + + /* Listen for enter/leave events */ + gtk_widget_set_events(eventbox, GDK_ENTER_NOTIFY_MASK|GDK_LEAVE_NOTIFY_MASK); + g_signal_connect(eventbox, "enter-notify-event", G_CALLBACK(label_new_with_mouseover_cb), NULL); + g_signal_connect(eventbox, "leave-notify-event", G_CALLBACK(label_new_with_mouseover_cb), NULL); + + gtk_container_add(GTK_CONTAINER(eventbox), label); + + return eventbox; +} diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-helper.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-helper.h --- rawstudio-1.1.1/src/gtk-helper.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-helper.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -70,3 +70,12 @@ * @return a new GtkButton */ extern GtkWidget *gui_button_new_from_stock_with_label(const gchar *stock_id, const gchar *label); + +/** + * This will create a new GtkLabel that can alternate text when the pointer is + * hovering above it. + * @param normal_text The text to display when pointer is not hovering above + * @param hover_text The text to display when pointer is hovering above the label + * @return A new GtkLabel + */ +extern GtkWidget *gui_label_new_with_mouseover(const gchar *normal_text, const gchar *hover_text); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-interface.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-interface.c --- rawstudio-1.1.1/src/gtk-interface.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-interface.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -47,14 +47,15 @@ #include "rs-external-editor.h" #include "rs-actions.h" #include "rs-dir-selector.h" +#include "rs-metadata.h" static gchar *filenames[] = {DEFAULT_CONF_EXPORT_FILENAME, "%f", "%f_%c", "%f_output_%4c", NULL}; static GtkStatusbar *statusbar; static gboolean fullscreen; GtkWindow *rawstudio_window; static gint busycount = 0; -static GtkWidget *valuefield; -static GtkWidget *hbox; +//static GtkWidget *valuefield[3]; +//static GtkWidget *hbox; GdkGC *dashed; GdkGC *grid; @@ -65,6 +66,7 @@ static void gui_preference_iconview_show_filenames_changed(GtkToggleButton *togglebutton, gpointer user_data); static GtkWidget *gui_make_menubar(RS_BLOB *rs); static void drag_data_received(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, RS_BLOB *rs); +static gboolean gui_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data); static GtkWidget *gui_window_make(RS_BLOB *rs); static void rs_open_file_delayed(RS_BLOB *rs, const gchar *filename); static void rs_open_file(RS_BLOB *rs, const gchar *filename); @@ -155,29 +157,26 @@ open_photo(RS_BLOB *rs, const gchar *filename) { RS_PHOTO *photo; - RS_FILETYPE *filetype; extern GtkLabel *infolabel; gchar *label; - if ((filetype = rs_filetype_get(filename, TRUE))) + rs_preview_widget_set_photo(RS_PREVIEW_WIDGET(rs->preview), NULL); + photo = rs_photo_load_from_file(filename, FALSE); + + if (photo) + rs_photo_close(rs->photo); + else { - rs_preview_widget_set_photo(RS_PREVIEW_WIDGET(rs->preview), NULL); - photo = rs_photo_load_from_file(filename, FALSE); + gui_set_busy(FALSE); + return FALSE; + } - if (photo) - rs_photo_close(rs->photo); - else - { - gui_set_busy(FALSE); - return FALSE; - } + label = rs_metadata_get_short_description(photo->metadata); + gtk_label_set_text(infolabel, label); + g_free(label); - label = rs_metadata_get_short_description(photo->metadata); - gtk_label_set_text(infolabel, label); - g_free(label); + rs_set_photo(rs, photo); - rs_set_photo(rs, photo); - } return TRUE; } @@ -485,7 +484,7 @@ histsize_hbox = gtk_hbox_new(FALSE, 0); histsize_label = gtk_label_new(_("Histogram height:")); gtk_misc_set_alignment(GTK_MISC(histsize_label), 0.0, 0.5); - histsize_adj = gtk_adjustment_new(histogram_height, 15.0, 500.0, 1.0, 10.0, 10.0); + histsize_adj = gtk_adjustment_new(histogram_height, 15.0, 500.0, 1.0, 10.0, 0.0); g_signal_connect(histsize_adj, "value_changed", G_CALLBACK(gui_histogram_height_changed), rs); histsize = gtk_spin_button_new(GTK_ADJUSTMENT(histsize_adj), 1, 0); @@ -757,6 +756,13 @@ return; } +static gboolean +gui_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) +{ + rs_core_action_group_activate("Quit"); + return TRUE; +} + static GtkWidget * gui_window_make(RS_BLOB *rs) { @@ -765,7 +771,7 @@ rawstudio_window = GTK_WINDOW(gtk_window_new (GTK_WINDOW_TOPLEVEL)); gtk_window_resize((GtkWindow *) rawstudio_window, 800, 600); gtk_window_set_title (GTK_WINDOW (rawstudio_window), _("Rawstudio")); - g_signal_connect((gpointer) rawstudio_window, "delete_event", G_CALLBACK(rs_shutdown), rs); + g_signal_connect((gpointer) rawstudio_window, "delete_event", G_CALLBACK(gui_window_delete), NULL); g_signal_connect((gpointer) rawstudio_window, "key_press_event", G_CALLBACK(window_key_press_event), NULL); gtk_drag_dest_set(GTK_WIDGET(rawstudio_window), GTK_DEST_DEFAULT_ALL, targets, 1, GDK_ACTION_COPY); @@ -787,12 +793,25 @@ } void -preview_motion(RSPreviewWidget *preview, RS_PREVIEW_CALLBACK_DATA *cbdata, RS_BLOB *rs) +preview_motion(RSPreviewWidget *preview, RS_PREVIEW_CALLBACK_DATA *cbdata, GtkLabel **valuefield) { + gint c; gchar tmp[20]; - g_snprintf(tmp, 20, "%u %u %u", cbdata->pixel8[R], cbdata->pixel8[G], cbdata->pixel8[B]); - gtk_label_set_text(GTK_LABEL(valuefield), tmp); + for(c=0;c<3;c++) + { + g_snprintf(tmp, 20, "%u", cbdata->pixel8[c]); + gtk_label_set_markup (valuefield[c], tmp); + } +} + +void +preview_leave(RSPreviewWidget *preview, RS_PREVIEW_CALLBACK_DATA *cbdata, GtkLabel **valuefield) +{ + gint c; + + for(c=0;c<3;c++) + gtk_label_set_text(valuefield[c], "-"); } static gboolean @@ -903,6 +922,10 @@ GdkColor grid_fg = {0, 32767, 32767, 32767}; GdkColor bgcolor = {0, 0, 0, 0 }; GString *window_title = g_string_new(_("Rawstudio")); + GdkColor tmpcolor; + GtkWidget *hbox; /* for statusbar */ + GtkWidget *valuefield[3]; + gtk_window_set_default_icon_from_file(PACKAGE_DATA_DIR "/icons/" PACKAGE ".png", NULL); rs->window = gui_window_make(rs); @@ -920,9 +943,30 @@ /* Build status bar */ statusbar = GTK_STATUSBAR(gtk_statusbar_new()); - valuefield = gtk_label_new(NULL); + + valuefield[R] = gtk_label_new(NULL); + gtk_label_set_width_chars (GTK_LABEL(valuefield[R]), 3); + gtk_misc_set_alignment (GTK_MISC(valuefield[R]), 1.0, 0.5); + gdk_color_parse("#ef2929", &tmpcolor); /* Scarlet Red */ + gtk_widget_modify_fg (GTK_WIDGET(valuefield[R]), GTK_STATE_NORMAL, &tmpcolor); + + valuefield[G] = gtk_label_new(NULL); + gtk_label_set_width_chars (GTK_LABEL(valuefield[G]), 3); + gtk_misc_set_alignment (GTK_MISC(valuefield[G]), 1.0, 0.5); + gdk_color_parse("#8ae234", &tmpcolor); /* Chameleon */ + gtk_widget_modify_fg (GTK_WIDGET(valuefield[G]), GTK_STATE_NORMAL, &tmpcolor); + + valuefield[B] = gtk_label_new(NULL); + gtk_label_set_width_chars (GTK_LABEL(valuefield[B]), 3); + gtk_misc_set_alignment (GTK_MISC(valuefield[B]), 1.0, 0.5); + gdk_color_parse("#729fcf", &tmpcolor); /* Sky Blue */ + gtk_widget_modify_fg (GTK_WIDGET(valuefield[B]), GTK_STATE_NORMAL, &tmpcolor); + hbox = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), valuefield, FALSE, TRUE, 0); + gtk_box_set_spacing(GTK_BOX(hbox), 3); + gtk_box_pack_start (GTK_BOX (hbox), valuefield[R], FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), valuefield[G], FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), valuefield[B], FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (statusbar), TRUE, TRUE, 0); /* Build toolbox */ @@ -963,7 +1007,8 @@ rs_conf_get_color(CONF_PREBGCOLOR, &bgcolor); rs_preview_widget_set_bgcolor(RS_PREVIEW_WIDGET(rs->preview), &bgcolor); g_signal_connect(G_OBJECT(rs->preview), "wb-picked", G_CALLBACK(preview_wb_picked), rs); - g_signal_connect(G_OBJECT(rs->preview), "motion", G_CALLBACK(preview_motion), rs); + g_signal_connect(G_OBJECT(rs->preview), "motion", G_CALLBACK(preview_motion), valuefield); + g_signal_connect(G_OBJECT(rs->preview), "leave", G_CALLBACK(preview_leave), valuefield); /* Split pane below iconbox */ pane = gtk_hpaned_new (); @@ -1040,6 +1085,9 @@ lwd = rs_conf_get_string(CONF_LWD); if (!lwd) lwd = g_get_current_dir(); + + /* rs_store_load_directory() MUST have the GDK lock! */ + gdk_threads_enter(); if (rs_store_load_directory(rs->store, lwd)) { gint last_priority_page = 0; @@ -1051,6 +1099,7 @@ } else rs_conf_set_integer(CONF_LAST_PRIORITY_PAGE, 0); + gdk_threads_leave(); rs_dir_selector_expand_path(RS_DIR_SELECTOR(dir_selector), lwd); g_free(lwd); } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-interface.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-interface.h --- rawstudio-1.1.1/src/gtk-interface.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-interface.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-progress.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-progress.c --- rawstudio-1.1.1/src/gtk-progress.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-progress.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-progress.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-progress.h --- rawstudio-1.1.1/src/gtk-progress.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-progress.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-save-dialog.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-save-dialog.c --- rawstudio-1.1.1/src/gtk-save-dialog.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-save-dialog.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/gtk-save-dialog.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/gtk-save-dialog.h --- rawstudio-1.1.1/src/gtk-save-dialog.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/gtk-save-dialog.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/Makefile.am /tmp/lCx6zc4s8u/rawstudio-1.2/src/Makefile.am --- rawstudio-1.1.1/src/Makefile.am 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/Makefile.am 2009-04-09 22:21:45.000000000 +0100 @@ -6,7 +6,7 @@ @PACKAGE_CFLAGS@ AM_CFLAGS =\ - -Wall\ + -Wall -fno-strict-aliasing\ -O4\ -DWITH_GCONF\ -DDCRAW_NOMAIN\ @@ -25,6 +25,8 @@ rawstudio_SOURCES = \ rawstudio.c rawstudio.h \ + rs-filetypes.c rs-filetypes.h \ + rs-settings.c rs-settings.h \ rs-utils.c rs-utils.h \ rs-job.c rs-job.h \ rs-actions.c rs-actions.h \ @@ -69,6 +71,7 @@ rs-pixbuf.c rs-pixbuf.h \ rs-external-editor.c rs-external-editor.h \ rs-dir-selector.c rs-dir-selector.h \ + rs-metadata.c rs-metadata.h \ rs-exif.cc rs-exif.h rawstudio_LDADD = @PACKAGE_LIBS@ @LIBJPEG@ @LIBTIFF@ $(INTLLIBS) diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/Makefile.in /tmp/lCx6zc4s8u/rawstudio-1.2/src/Makefile.in --- rawstudio-1.1.1/src/Makefile.in 2008-10-12 21:22:13.000000000 +0100 +++ rawstudio-1.2/src/Makefile.in 2009-04-09 22:21:52.000000000 +0100 @@ -44,23 +44,24 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(uidir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) -am_rawstudio_OBJECTS = rawstudio.$(OBJEXT) rs-utils.$(OBJEXT) \ - rs-job.$(OBJEXT) rs-actions.$(OBJEXT) rs-math.$(OBJEXT) \ - rs-preload.$(OBJEXT) gtk-helper.$(OBJEXT) \ - gtk-interface.$(OBJEXT) gtk-save-dialog.$(OBJEXT) \ - gtk-progress.$(OBJEXT) conf_interface.$(OBJEXT) \ - adobe-coeff.$(OBJEXT) rs-cms.$(OBJEXT) rs-cache.$(OBJEXT) \ - rs-batch.$(OBJEXT) toolbox.$(OBJEXT) rawfile.$(OBJEXT) \ - mmap-hack.$(OBJEXT) tiff-meta.$(OBJEXT) ciff-meta.$(OBJEXT) \ - mrw-meta.$(OBJEXT) x3f-meta.$(OBJEXT) raf-meta.$(OBJEXT) \ - rs-image.$(OBJEXT) rs-photo.$(OBJEXT) dcraw_api.$(OBJEXT) \ - dcraw.$(OBJEXT) rs-jpeg.$(OBJEXT) rs-tiff.$(OBJEXT) \ - arch-generic.$(OBJEXT) arch-x86.$(OBJEXT) filename.$(OBJEXT) \ - rs-spline.$(OBJEXT) rs-store.$(OBJEXT) \ - rs-color-transform.$(OBJEXT) rs-preview-widget.$(OBJEXT) \ - rs-histogram.$(OBJEXT) eog-pixbuf-cell-renderer.$(OBJEXT) \ - rs-curve.$(OBJEXT) rs-pixbuf.$(OBJEXT) \ - rs-external-editor.$(OBJEXT) rs-dir-selector.$(OBJEXT) \ +am_rawstudio_OBJECTS = rawstudio.$(OBJEXT) rs-filetypes.$(OBJEXT) \ + rs-settings.$(OBJEXT) rs-utils.$(OBJEXT) rs-job.$(OBJEXT) \ + rs-actions.$(OBJEXT) rs-math.$(OBJEXT) rs-preload.$(OBJEXT) \ + gtk-helper.$(OBJEXT) gtk-interface.$(OBJEXT) \ + gtk-save-dialog.$(OBJEXT) gtk-progress.$(OBJEXT) \ + conf_interface.$(OBJEXT) adobe-coeff.$(OBJEXT) \ + rs-cms.$(OBJEXT) rs-cache.$(OBJEXT) rs-batch.$(OBJEXT) \ + toolbox.$(OBJEXT) rawfile.$(OBJEXT) mmap-hack.$(OBJEXT) \ + tiff-meta.$(OBJEXT) ciff-meta.$(OBJEXT) mrw-meta.$(OBJEXT) \ + x3f-meta.$(OBJEXT) raf-meta.$(OBJEXT) rs-image.$(OBJEXT) \ + rs-photo.$(OBJEXT) dcraw_api.$(OBJEXT) dcraw.$(OBJEXT) \ + rs-jpeg.$(OBJEXT) rs-tiff.$(OBJEXT) arch-generic.$(OBJEXT) \ + arch-x86.$(OBJEXT) filename.$(OBJEXT) rs-spline.$(OBJEXT) \ + rs-store.$(OBJEXT) rs-color-transform.$(OBJEXT) \ + rs-preview-widget.$(OBJEXT) rs-histogram.$(OBJEXT) \ + eog-pixbuf-cell-renderer.$(OBJEXT) rs-curve.$(OBJEXT) \ + rs-pixbuf.$(OBJEXT) rs-external-editor.$(OBJEXT) \ + rs-dir-selector.$(OBJEXT) rs-metadata.$(OBJEXT) \ rs-exif.$(OBJEXT) rawstudio_OBJECTS = $(am_rawstudio_OBJECTS) am__DEPENDENCIES_1 = @@ -206,7 +207,7 @@ @PACKAGE_CFLAGS@ AM_CFLAGS = \ - -Wall\ + -Wall -fno-strict-aliasing\ -O4\ -DWITH_GCONF\ -DDCRAW_NOMAIN\ @@ -221,6 +222,8 @@ rawstudio_SOURCES = \ rawstudio.c rawstudio.h \ + rs-filetypes.c rs-filetypes.h \ + rs-settings.c rs-settings.h \ rs-utils.c rs-utils.h \ rs-job.c rs-job.h \ rs-actions.c rs-actions.h \ @@ -265,6 +268,7 @@ rs-pixbuf.c rs-pixbuf.h \ rs-external-editor.c rs-external-editor.h \ rs-dir-selector.c rs-dir-selector.h \ + rs-metadata.c rs-metadata.h \ rs-exif.cc rs-exif.h rawstudio_LDADD = @PACKAGE_LIBS@ @LIBJPEG@ @LIBTIFF@ $(INTLLIBS) @@ -361,15 +365,18 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-dir-selector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-exif.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-external-editor.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-filetypes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-histogram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-job.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-jpeg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-math.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-metadata.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-photo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-pixbuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-preload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-preview-widget.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-settings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-spline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-store.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rs-tiff.Po@am__quote@ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/mmap-hack.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/mmap-hack.c --- rawstudio-1.1.1/src/mmap-hack.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/mmap-hack.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -71,6 +71,9 @@ case SEEK_END: stream->offset = stream->size + offset; } + + /* clamp */ + stream->offset = (stream->offset > stream->size) ? stream->size : ((stream->offset < 0) ? 0 : stream->offset); return(0); } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/mmap-hack.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/mmap-hack.h --- rawstudio-1.1.1/src/mmap-hack.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/mmap-hack.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/mrw-meta.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/mrw-meta.c --- rawstudio-1.1.1/src/mrw-meta.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/mrw-meta.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -22,11 +22,12 @@ #include "rawfile.h" #include "mrw-meta.h" #include "tiff-meta.h" +#include "rs-metadata.h" -static void raw_mrw_walker(RAWFILE *rawfile, guint offset, RS_METADATA *meta); +static void raw_mrw_walker(RAWFILE *rawfile, guint offset, RSMetadata *meta); static void -raw_mrw_walker(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +raw_mrw_walker(RAWFILE *rawfile, guint offset, RSMetadata *meta) { guint rawstart=0; guint tag=0, len=0; @@ -68,49 +69,27 @@ } void -rs_mrw_load_meta(const gchar *filename, RS_METADATA *meta) -{ - RAWFILE *rawfile; - raw_init(); - if (!(rawfile = raw_open_file(filename))) - return; - - raw_mrw_walker(rawfile, 0, meta); - - raw_close_file(rawfile); - return; -} - -GdkPixbuf * -rs_mrw_load_thumb(const gchar *src) +rs_mrw_load_meta(const gchar *filename, RSMetadata *meta) { RAWFILE *rawfile; GdkPixbuf *pixbuf=NULL, *pixbuf2=NULL; - RS_METADATA meta; guint start=0, length=0; raw_init(); + if (!(rawfile = raw_open_file(filename))) + return; - meta.thumbnail_start = 0; - meta.thumbnail_length = 0; - meta.preview_start = 0; - meta.preview_length = 0; - meta.make = MAKE_MINOLTA; - - if (!(rawfile = raw_open_file(src))) - return(NULL); - raw_mrw_walker(rawfile, 0, &meta); + raw_mrw_walker(rawfile, 0, meta); - if ((meta.thumbnail_start>0) && (meta.thumbnail_length>0)) + if ((meta->thumbnail_start>0) && (meta->thumbnail_length>0)) { - start = meta.thumbnail_start; - length = meta.thumbnail_length; + start = meta->thumbnail_start; + length = meta->thumbnail_length; } - - else if ((meta.preview_start>0) && (meta.preview_length>0)) + else if ((meta->preview_start>0) && (meta->preview_length>0)) { - start = meta.preview_start; - length = meta.preview_length; + start = meta->preview_start; + length = meta->preview_length; } if ((start>0) && (length>0)) @@ -131,7 +110,7 @@ gdk_pixbuf_loader_close(pl, NULL); g_free(thumbbuffer); - if (pixbuf==NULL) return(NULL); + if (pixbuf==NULL) return; ratio = ((gdouble) gdk_pixbuf_get_width(pixbuf))/((gdouble) gdk_pixbuf_get_height(pixbuf)); if (ratio>1.0) pixbuf2 = gdk_pixbuf_scale_simple(pixbuf, 128, (gint) (128.0/ratio), GDK_INTERP_BILINEAR); @@ -139,7 +118,7 @@ pixbuf2 = gdk_pixbuf_scale_simple(pixbuf, (gint) (128.0*ratio), 128, GDK_INTERP_BILINEAR); g_object_unref(pixbuf); pixbuf = pixbuf2; - switch (meta.orientation) + switch (meta->orientation) { /* this is very COUNTER-intuitive - gdk_pixbuf_rotate_simple() is wierd */ case 90: @@ -153,9 +132,10 @@ pixbuf = pixbuf2; break; } + meta->thumbnail = pixbuf; } raw_close_file(rawfile); - return(pixbuf); + return; } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/mrw-meta.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/mrw-meta.h --- rawstudio-1.1.1/src/mrw-meta.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/mrw-meta.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -20,7 +20,6 @@ #ifndef MRW_META_H #define MRW_META_H -extern void rs_mrw_load_meta(const gchar *filename, RS_METADATA *meta); -extern GdkPixbuf *rs_mrw_load_thumb(const gchar *src); +extern void rs_mrw_load_meta(const gchar *filename, RSMetadata *meta); #endif diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/raf-meta.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/raf-meta.c --- rawstudio-1.1.1/src/raf-meta.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/raf-meta.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -25,9 +25,10 @@ #include "tiff-meta.h" #include "color.h" #include "rs-utils.h" +#include "rs-metadata.h" void -rs_raf_load_meta(const gchar *filename, RS_METADATA *meta) +rs_raf_load_meta(const gchar *filename, RSMetadata *meta) { RAWFILE *rawfile; guint directory; diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/raf-meta.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/raf-meta.h --- rawstudio-1.1.1/src/raf-meta.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/raf-meta.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -19,5 +19,5 @@ #include "rawstudio.h" -extern void rs_raf_load_meta(const gchar *filename, RS_METADATA *meta); +extern void rs_raf_load_meta(const gchar *filename, RSMetadata *meta); extern GdkPixbuf *rs_raf_load_thumb(const gchar *src); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rawfile.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rawfile.c --- rawstudio-1.1.1/src/rawfile.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rawfile.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rawfile.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rawfile.h --- rawstudio-1.1.1/src/rawfile.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rawfile.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rawstudio.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rawstudio.c --- rawstudio-1.1.1/src/rawstudio.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rawstudio.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -50,19 +50,20 @@ #include "rs-photo.h" #include "rs-math.h" #include "rs-exif.h" +#include "rs-metadata.h" +#include "rs-filetypes.h" +#include "rs-utils.h" -static void photo_settings_changed(RS_PHOTO *photo, gint mask, RS_BLOB *rs); +static void photo_settings_changed(RS_PHOTO *photo, RSSettingsMask mask, RS_BLOB *rs); static void photo_spatial_changed(RS_PHOTO *photo, RS_BLOB *rs); -static RS_SETTINGS *rs_settings_new(); -static GdkPixbuf *rs_thumb_gdk(const gchar *src); +static void rs_gdk_load_meta(const gchar *src, RSMetadata *metadata); RS_FILETYPE *filetypes; static void rs_add_filetype(gchar *id, gint filetype, const gchar *ext, gchar *description, RS_IMAGE16 *(*load)(const gchar *, gboolean), - GdkPixbuf *(*thumb)(const gchar *), - void (*load_meta)(const gchar *, RS_METADATA *), + void (*load_meta)(const gchar *, RSMetadata *), gboolean (*save)(RS_PHOTO *photo, const gchar *filename, gint filetype, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot, RS_CMS *cms)) { RS_FILETYPE *cur = filetypes; @@ -78,9 +79,6 @@ cur->filetype = filetype; cur->ext = ext; cur->description = description; - cur->load = load; - cur->thumb = thumb; - cur->load_meta = load_meta; cur->save = save; cur->next = NULL; return; @@ -89,58 +87,55 @@ static void rs_init_filetypes(void) { + + rs_filetype_init(); + +#define REGISTER_FILETYPE(extension, description, load, meta) do { \ + rs_filetype_register_loader(extension, description, load, 10); \ + rs_filetype_register_meta_loader(extension, description, meta, 10); \ +} while(0) + + /* Raw file formats */ + REGISTER_FILETYPE(".cr2", _("Canon CR2"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".crw", _("Canon CIFF"), rs_image16_open_dcraw, rs_ciff_load_meta); + REGISTER_FILETYPE(".nef", _("Nikon NEF"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".mrw", _("Minolta raw"), rs_image16_open_dcraw, rs_mrw_load_meta); + REGISTER_FILETYPE(".tif", _("Canon TIFF"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".arw", _("Sony"), rs_image16_open_dcraw, rs_sony_load_meta); + REGISTER_FILETYPE(".sr2", _("Sony"), rs_image16_open_dcraw, rs_sony_load_meta); + REGISTER_FILETYPE(".srf", _("Sony"), rs_image16_open_dcraw, rs_sony_load_meta); + REGISTER_FILETYPE(".kdc", _("Kodak"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".dcr", _("Kodak"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".x3f", _("Sigma"), rs_image16_open_dcraw, rs_x3f_load_meta); + REGISTER_FILETYPE(".orf", _("Olympus"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".raw", _("Panasonic raw"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".rw2", _("Panasonic raw 2"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".pef", _("Pentax raw"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".dng", _("Adobe Digital negative"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".mef", _("Mamiya"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".3fr", _("Hasselblad"), rs_image16_open_dcraw, rs_tiff_load_meta); + REGISTER_FILETYPE(".erf", _("Epson"), rs_image16_open_dcraw, rs_tiff_load_meta); + + /* GDK formats */ + REGISTER_FILETYPE(".jpg", _("JPEG (Joint Photographic Experts Group)"), rs_image16_open_gdk, rs_gdk_load_meta); + REGISTER_FILETYPE(".png", _("PNG (Portable Network Graphics)"), rs_image16_open_gdk, rs_gdk_load_meta); + +#undef REGISTER_FILETYPE + + /* TIFF is special - we need higher priority to try raw first */ + rs_filetype_register_loader(".tif", _("8-bit TIFF (Tagged Image File Format)"), rs_image16_open_gdk, 20); + rs_filetype_register_meta_loader(".tif", _("8-bit TIFF (Tagged Image File Format)"), rs_gdk_load_meta, 20); + + /* Old-style savers - FIXME: Port to RSFiletype */ filetypes = NULL; - rs_add_filetype("cr2", FILETYPE_RAW, ".cr2", _("Canon CR2"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("crw", FILETYPE_RAW, ".crw", _("Canon CIFF"), - rs_image16_open_dcraw, rs_ciff_load_thumb, rs_ciff_load_meta, NULL); - rs_add_filetype("nef", FILETYPE_RAW, ".nef", _("Nikon NEF"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("mrw", FILETYPE_RAW, ".mrw", _("Minolta raw"), - rs_image16_open_dcraw, rs_mrw_load_thumb, rs_mrw_load_meta, NULL); - rs_add_filetype("cr-tiff", FILETYPE_RAW, ".tif", _("Canon TIFF"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("arw", FILETYPE_RAW, ".arw", _("Sony"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("sr2", FILETYPE_RAW, ".sr2", _("Sony"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("sr2", FILETYPE_RAW, ".srf", _("Sony"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("kdc", FILETYPE_RAW, ".kdc", _("Kodak"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("kdc", FILETYPE_RAW, ".dcr", _("Kodak"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("x3f", FILETYPE_RAW, ".x3f", _("Sigma"), - rs_image16_open_dcraw, rs_x3f_load_thumb, rs_x3f_load_meta, NULL); - rs_add_filetype("orf", FILETYPE_RAW, ".orf", "", - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("raw", FILETYPE_RAW, ".raw", _("Panasonic raw"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("pef", FILETYPE_RAW, ".pef", _("Pentax raw"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("dng", FILETYPE_RAW, "dng", _("Adobe Digital negative"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("mef", FILETYPE_RAW, "mef", _("Mamiya"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); - rs_add_filetype("3fr", FILETYPE_RAW, "3fr", _("Hasselblad"), - rs_image16_open_dcraw, rs_tiff_load_thumb, rs_tiff_load_meta, NULL); rs_add_filetype("jpeg", FILETYPE_JPEG, ".jpg", _("JPEG (Joint Photographic Experts Group)"), - rs_image16_open_gdk, rs_thumb_gdk, NULL, rs_photo_save); + rs_image16_open_gdk, rs_gdk_load_meta, rs_photo_save); rs_add_filetype("png", FILETYPE_PNG, ".png", _("PNG (Portable Network Graphics)"), - rs_image16_open_gdk, rs_thumb_gdk, NULL, rs_photo_save); + rs_image16_open_gdk, rs_gdk_load_meta, rs_photo_save); rs_add_filetype("tiff8", FILETYPE_TIFF8, ".tif", _("8-bit TIFF (Tagged Image File Format)"), - rs_image16_open_gdk, rs_thumb_gdk, NULL, rs_photo_save); + rs_image16_open_gdk, rs_gdk_load_meta, rs_photo_save); rs_add_filetype("tiff16", FILETYPE_TIFF16, ".tif", _("16-bit TIFF (Tagged Image File Format)"), - rs_image16_open_gdk, rs_thumb_gdk, NULL, rs_photo_save); - return; -} - -void -rs_reset(RS_BLOB *rs) -{ - gint c; - for(c=0;c<3;c++) - rs_settings_reset(rs->settings[c], MASK_ALL); + rs_image16_open_gdk, rs_gdk_load_meta, rs_photo_save); return; } @@ -152,7 +147,7 @@ } static void -photo_settings_changed(RS_PHOTO *photo, gint mask, RS_BLOB *rs) +photo_settings_changed(RS_PHOTO *photo, RSSettingsMask mask, RS_BLOB *rs) { const gint snapshot = mask>>24; mask &= 0x00ffffff; @@ -164,21 +159,12 @@ if (photo == rs->photo) { /* Update histogram */ - rs_color_transform_set_from_settings(rs->histogram_transform, rs->photo->settings[rs->current_setting], mask); - rs_histogram_set_color_transform(RS_HISTOGRAM_WIDGET(rs->histogram), rs->histogram_transform); + rs_histogram_set_settings(RS_HISTOGRAM_WIDGET(rs->histogram), rs->photo->settings[rs->current_setting]); /* Update histogram in curve */ - rs_curve_draw_histogram(RS_CURVE_WIDGET(rs->settings[rs->current_setting]->curve), + rs_curve_draw_histogram(RS_CURVE_WIDGET(rs->curve[rs->current_setting]), rs->histogram_dataset, rs->photo->settings[rs->current_setting]); - - /* Update local settings according to photo */ - rs->mute_signals_to_photo = TRUE; - /* FIXME: This 'if' is just a workaround for a bug in rs_photo_apply_settings() */ - if (mask) - rs_settings_double_to_rs_settings(rs->photo->settings[rs->current_setting], - rs->settings[rs->current_setting], mask); - rs->mute_signals_to_photo = FALSE; } } @@ -197,6 +183,7 @@ rs_histogram_set_image(RS_HISTOGRAM_WIDGET(rs->histogram), rs->histogram_dataset); + /* Force update of histograms */ photo_settings_changed(photo, MASK_ALL, rs); } } @@ -211,12 +198,20 @@ g_object_unref(rs->photo); rs->photo = NULL; - rs_reset(rs); - /* Apply settings from photo */ - rs_settings_double_to_rs_settings(photo->settings[0], rs->settings[0], MASK_ALL); - rs_settings_double_to_rs_settings(photo->settings[1], rs->settings[1], MASK_ALL); - rs_settings_double_to_rs_settings(photo->settings[2], rs->settings[2], MASK_ALL); + rs_settings_copy(photo->settings[0], MASK_ALL, rs->settings[0]); + rs_settings_copy(photo->settings[1], MASK_ALL, rs->settings[1]); + rs_settings_copy(photo->settings[2], MASK_ALL, rs->settings[2]); + + /* make sure we're synchronized */ + rs_settings_link(rs->settings[0], photo->settings[0]); + rs_settings_link(rs->settings[1], photo->settings[1]); + rs_settings_link(rs->settings[2], photo->settings[2]); + + /* ... both ways */ + rs_settings_link(photo->settings[0], rs->settings[0]); + rs_settings_link(photo->settings[1], rs->settings[1]); + rs_settings_link(photo->settings[2], rs->settings[2]); /* Set photo in preview-widget */ rs_preview_widget_set_photo(RS_PREVIEW_WIDGET(rs->preview), photo); @@ -250,288 +245,6 @@ photo_settings_changed(rs->photo, MASK_ALL|(snapshot<<24), rs); } -void -rs_settings_to_rs_settings_double(RS_SETTINGS *rs_settings, RS_SETTINGS_DOUBLE *rs_settings_double) -{ - if (rs_settings==NULL) - return; - if (rs_settings_double==NULL) - return; - rs_settings_double->exposure = GETVAL(rs_settings->exposure); - rs_settings_double->saturation = GETVAL(rs_settings->saturation); - rs_settings_double->hue = GETVAL(rs_settings->hue); - rs_settings_double->contrast = GETVAL(rs_settings->contrast); - rs_settings_double->warmth = GETVAL(rs_settings->warmth); - rs_settings_double->tint = GETVAL(rs_settings->tint); - rs_settings_double->sharpen = GETVAL(rs_settings->sharpen); - rs_curve_widget_get_knots(RS_CURVE_WIDGET(rs_settings->curve), &rs_settings_double->curve_knots, &rs_settings_double->curve_nknots); - return; -} - -void -rs_settings_double_to_rs_settings(RS_SETTINGS_DOUBLE *rs_settings_double, RS_SETTINGS *rs_settings, gint mask) -{ - if (rs_settings_double==NULL) - return; - if (rs_settings==NULL) - return; - - if (mask == 0) - return; - if (mask & MASK_EXPOSURE) - SETVAL(rs_settings->exposure, rs_settings_double->exposure); - if (mask & MASK_SATURATION) - SETVAL(rs_settings->saturation, rs_settings_double->saturation); - if (mask & MASK_HUE) - SETVAL(rs_settings->hue, rs_settings_double->hue); - if (mask & MASK_CONTRAST) - SETVAL(rs_settings->contrast, rs_settings_double->contrast); - if (mask & MASK_WARMTH) - SETVAL(rs_settings->warmth, rs_settings_double->warmth); - if (mask & MASK_TINT) - SETVAL(rs_settings->tint, rs_settings_double->tint); - if (mask & MASK_SHARPEN) - SETVAL(rs_settings->sharpen, rs_settings_double->sharpen); - if (mask & MASK_CURVE) - { - gulong handler = g_signal_handler_find(rs_settings->curve, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, update_preview_callback, NULL); - g_signal_handler_block(rs_settings->curve, handler); - rs_curve_widget_reset(RS_CURVE_WIDGET(rs_settings->curve)); - if (rs_settings_double->curve_nknots>0) - { - gint i; - for(i=0;icurve_nknots;i++) - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rs_settings->curve), rs_settings_double->curve_knots[i*2+0], - rs_settings_double->curve_knots[i*2+1]); - } - else - { - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rs_settings->curve), 0.0f, 0.0f); - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rs_settings->curve), 1.0f, 1.0f); - } - g_signal_handler_unblock(rs_settings->curve, handler); - } - return; -} - -void -rs_settings_reset(RS_SETTINGS *rss, guint mask) -{ - if (mask & MASK_EXPOSURE) - gtk_adjustment_set_value((GtkAdjustment *) rss->exposure, 0.0); - if (mask & MASK_SATURATION) - gtk_adjustment_set_value((GtkAdjustment *) rss->saturation, 1.0); - if (mask & MASK_HUE) - gtk_adjustment_set_value((GtkAdjustment *) rss->hue, 0.0); - if (mask & MASK_CONTRAST) - gtk_adjustment_set_value((GtkAdjustment *) rss->contrast, 1.0); - if (mask & MASK_WARMTH) - gtk_adjustment_set_value((GtkAdjustment *) rss->warmth, 0.0); - if (mask & MASK_TINT) - gtk_adjustment_set_value((GtkAdjustment *) rss->tint, 0.0); - if (mask & MASK_SHARPEN) - gtk_adjustment_set_value((GtkAdjustment *) rss->sharpen, 0.0); - if (mask & MASK_CURVE) - { - rs_curve_widget_reset(RS_CURVE_WIDGET(rss->curve)); - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rss->curve), 0.0f, 0.0f); - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rss->curve), 1.0f, 1.0f); - } - return; -} - -static RS_SETTINGS * -rs_settings_new(void) -{ - RS_SETTINGS *rss; - rss = g_malloc(sizeof(RS_SETTINGS)); - rss->exposure = gtk_adjustment_new(0.0, -3.0, 3.0, 0.1, 0.5, 0.0); - rss->saturation = gtk_adjustment_new(1.0, 0.0, 3.0, 0.1, 0.5, 0.0); - rss->hue = gtk_adjustment_new(0.0, -180.0, 180.0, 0.1, 30.0, 0.0); - rss->contrast = gtk_adjustment_new(1.0, 0.0, 3.0, 0.1, 0.5, 0.0); - rss->warmth = gtk_adjustment_new(0.0, -2.0, 2.0, 0.1, 0.5, 0.0); - rss->tint = gtk_adjustment_new(0.0, -2.0, 2.0, 0.1, 0.5, 0.0); - rss->sharpen = gtk_adjustment_new(0.0, 0.0, 10.0, 0.1, 0.5, 0.0); - rss->curve = rs_curve_widget_new(); - return(rss); -} - -RS_SETTINGS_DOUBLE * -rs_settings_double_new(void) -{ - RS_SETTINGS_DOUBLE *rssd; - rssd = g_malloc(sizeof(RS_SETTINGS_DOUBLE)); - rssd->exposure = 0.0; - rssd->saturation = 1.0; - rssd->hue = 0.0; - rssd->contrast = 1.0; - rssd->warmth = 0.0; - rssd->tint = 0.0; - rssd->sharpen = 0.0; - - /* Initialize curve with some sane values */ - rssd->curve_nknots = 2; - rssd->curve_knots = g_new(gfloat, 4); - rssd->curve_knots[0] = 0.0; - rssd->curve_knots[1] = 0.0; - rssd->curve_knots[2] = 1.0; - rssd->curve_knots[3] = 1.0; - return rssd; -} - -void -rs_settings_double_copy(const RS_SETTINGS_DOUBLE *in, RS_SETTINGS_DOUBLE *out, gint mask) -{ - g_assert(in); - g_assert(out); - if (mask & MASK_EXPOSURE) - out->exposure = in->exposure; - if (mask & MASK_SATURATION) - out->saturation = in->saturation; - if (mask & MASK_HUE) - out->hue = in->hue; - if (mask & MASK_CONTRAST) - out->contrast = in->contrast; - if (mask & MASK_WARMTH) - out->warmth = in->warmth; - if (mask & MASK_TINT) - out->tint = in->tint; - if (mask & MASK_SHARPEN) - out->sharpen = in->sharpen; - if (mask & MASK_CURVE) - { - - if (in->curve_nknots>1) - { - gint i; - - out->curve_nknots = in->curve_nknots; - if (out->curve_knots) - g_free(out->curve_knots); - out->curve_knots = g_new(gfloat, out->curve_nknots*2); - - for(i=0;icurve_nknots*2;i++) - out->curve_knots[i] = in->curve_knots[i]; - } - } - return; -} - -void -rs_settings_double_free(RS_SETTINGS_DOUBLE *rssd) -{ - g_free(rssd); - return; -} - -RS_METADATA * -rs_metadata_new(void) -{ - RS_METADATA *metadata; - gint i; - metadata = g_malloc(sizeof(RS_METADATA)); - metadata->make = MAKE_UNKNOWN; - metadata->make_ascii = NULL; - metadata->model_ascii = NULL; - metadata->time_ascii = NULL; - metadata->timestamp = -1; - metadata->orientation = 0; - metadata->aperture = -1.0; - metadata->iso = 0; - metadata->shutterspeed = -1.0; - metadata->thumbnail_start = 0; - metadata->thumbnail_length = 0; - metadata->preview_start = 0; - metadata->preview_length = 0; - metadata->preview_planar_config = 0; - metadata->preview_width = 0; - metadata->preview_height = 0; - metadata->cam_mul[0] = -1.0; - metadata->contrast = -1.0; - metadata->saturation = -1.0; - metadata->sharpness = -1.0; - metadata->color_tone = -1.0; - metadata->focallength = -1; - for(i=0;i<4;i++) - metadata->cam_mul[i] = 1.0f; - matrix4_identity(&metadata->adobe_coeff); - return(metadata); -} - -void -rs_metadata_free(RS_METADATA *metadata) -{ - if (metadata->make_ascii) - g_free(metadata->make_ascii); - if (metadata->model_ascii) - g_free(metadata->model_ascii); - if (metadata->time_ascii) - g_free(metadata->time_ascii); - g_free(metadata); - return; -} - -/** - * Load metadata from file - */ -gboolean -rs_metadata_load(const gchar *filename, RS_METADATA *metadata) -{ - gboolean ret = FALSE; - RS_FILETYPE *filetype; - - g_assert(filename != NULL); - - filetype = rs_filetype_get(filename, TRUE); - - if (filetype && filetype->load_meta) - { - filetype->load_meta(filename, metadata); - ret = TRUE; - } - - return ret; -} - -gchar * -rs_metadata_get_short_description(RS_METADATA *metadata) -{ - GString *label = g_string_new(""); - gchar *ret = NULL; - - if (metadata->focallength>0) - g_string_append_printf(label, _("%dmm "), metadata->focallength); - if (metadata->shutterspeed > 0.0 && metadata->shutterspeed < 4) - g_string_append_printf(label, _("%.1fs "), 1/metadata->shutterspeed); - else if (metadata->shutterspeed >= 4) - g_string_append_printf(label, _("1/%.0fs "), metadata->shutterspeed); - if (metadata->aperture!=0.0) - g_string_append_printf(label, _("F/%.1f "), metadata->aperture); - if (metadata->iso!=0) - g_string_append_printf(label, _("ISO%d"), metadata->iso); - - ret = label->str; - - g_string_free(label, FALSE); - - return ret; -} - -void -rs_metadata_normalize_wb(RS_METADATA *meta) -{ - gdouble div; - if ((meta->cam_mul[1]+meta->cam_mul[3])!=0.0) - { - div = 2/(meta->cam_mul[1]+meta->cam_mul[3]); - meta->cam_mul[0] *= div; - meta->cam_mul[1] = 1.0; - meta->cam_mul[2] *= div; - meta->cam_mul[3] = 1.0; - } - return; -} - gboolean rs_photo_save(RS_PHOTO *photo, const gchar *filename, gint filetype, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot, RS_CMS *cms) { @@ -643,9 +356,7 @@ guint c; rs = g_malloc(sizeof(RS_BLOB)); rs->histogram_dataset = NULL; - rs->histogram_transform = rs_color_transform_new(); rs->settings_buffer = NULL; - rs->mute_signals_to_photo = FALSE; rs->photo = NULL; rs->queue = rs_batch_new_queue(); rs->current_setting = 0; @@ -654,150 +365,10 @@ return(rs); } -RS_FILETYPE * -rs_filetype_get(const gchar *filename, gboolean load) -{ - RS_FILETYPE *filetype = filetypes; - RS_FILETYPE *ret = NULL; - gchar *iname; - gint n; - gboolean load_gdk = FALSE; - rs_conf_get_boolean(CONF_LOAD_GDK, &load_gdk); - iname = g_ascii_strdown(filename,-1); - n = 0; - while(filetype) - { - if (g_str_has_suffix(iname, filetype->ext)) - { - if ((!load) || (filetype->load)) - { - if (filetype->filetype == FILETYPE_RAW) - ret = filetype; - else if ((filetype->filetype != FILETYPE_RAW) && (load_gdk)) - ret = filetype; - break; - } - } - filetype = filetype->next; - } - g_free(iname); - return ret; -} - -gchar * -rs_confdir_get() -{ - static gchar *dir = NULL; - - if (!dir) - { - GString *gs = g_string_new(g_get_home_dir()); - g_string_append(gs, G_DIR_SEPARATOR_S); - g_string_append(gs, ".rawstudio/"); - dir = gs->str; - g_string_free(gs, FALSE); - } - - g_mkdir_with_parents(dir, 00755); - - return dir; -} - -gchar * -rs_dotdir_get(const gchar *filename) -{ - gchar *ret; - gchar *directory; - GString *dotdir; - gboolean dotdir_is_local = FALSE; - rs_conf_get_boolean(CONF_CACHEDIR_IS_LOCAL, &dotdir_is_local); - - directory = g_path_get_dirname(filename); - if (dotdir_is_local) - { - dotdir = g_string_new(g_get_home_dir()); - dotdir = g_string_append(dotdir, G_DIR_SEPARATOR_S); - dotdir = g_string_append(dotdir, DOTDIR); - dotdir = g_string_append(dotdir, G_DIR_SEPARATOR_S); - dotdir = g_string_append(dotdir, directory); - } - else - { - dotdir = g_string_new(directory); - dotdir = g_string_append(dotdir, G_DIR_SEPARATOR_S); - dotdir = g_string_append(dotdir, DOTDIR); - } - - if (!g_file_test(dotdir->str, (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) - { - if (g_mkdir_with_parents(dotdir->str, 0700) != 0) - ret = NULL; - else - ret = dotdir->str; - } - else - ret = dotdir->str; - g_free(directory); - g_string_free(dotdir, FALSE); - return (ret); -} - -gchar * -rs_thumb_get_name(const gchar *src) +void +rs_gdk_load_meta(const gchar *src, RSMetadata *metadata) { - gchar *ret=NULL; - gchar *dotdir, *filename; - GString *out; - dotdir = rs_dotdir_get(src); - filename = g_path_get_basename(src); - if (dotdir) - { - out = g_string_new(dotdir); - out = g_string_append(out, G_DIR_SEPARATOR_S); - out = g_string_append(out, filename); - out = g_string_append(out, ".thumb.png"); - ret = out->str; - g_string_free(out, FALSE); - g_free(dotdir); - } - g_free(filename); - return(ret); -} - -static GdkPixbuf * -rs_thumb_gdk(const gchar *src) -{ - GdkPixbuf *pixbuf=NULL; - - pixbuf = gdk_pixbuf_new_from_file_at_size(src, 128, 128, NULL); - - return(pixbuf); -} - -GdkPixbuf * -rs_load_thumb(RS_FILETYPE *filetype, const gchar *src) -{ - GdkPixbuf * pixbuf = NULL; - gchar *thumbname = rs_thumb_get_name(src); - - if (thumbname) - { - pixbuf = gdk_pixbuf_new_from_file(thumbname, NULL); - - if (!pixbuf && filetype->thumb) - { - pixbuf = filetype->thumb(src); - - if (pixbuf) - gdk_pixbuf_save(pixbuf, thumbname, "png", NULL, NULL); - } - - g_free(thumbname); - } - else if (filetype->thumb) - pixbuf = filetype->thumb(src); - - return pixbuf; + metadata->thumbnail = gdk_pixbuf_new_from_file_at_size(src, 128, 128, NULL); } void @@ -838,263 +409,9 @@ } whitepoint = (gdouble) i / (gdouble) 255; - rs_curve_widget_move_knot(RS_CURVE_WIDGET(rs->settings[rs->current_setting]->curve),0,blackpoint,0.0); - rs_curve_widget_move_knot(RS_CURVE_WIDGET(rs->settings[rs->current_setting]->curve),-1,whitepoint,1.0); - } -} - -void -rs_apply_settings_from_double(RS_SETTINGS *rss, RS_SETTINGS_DOUBLE *rsd, gint mask) -{ - if (mask & MASK_EXPOSURE) - SETVAL(rss->exposure,rsd->exposure); - if (mask & MASK_SATURATION) - SETVAL(rss->saturation,rsd->saturation); - if (mask & MASK_HUE) - SETVAL(rss->hue,rsd->hue); - if (mask & MASK_CONTRAST) - SETVAL(rss->contrast,rsd->contrast); - if (mask & MASK_WARMTH) - SETVAL(rss->warmth,rsd->warmth); - if (mask & MASK_TINT) - SETVAL(rss->tint,rsd->tint); - if (mask & MASK_CURVE) { - rs_curve_widget_reset(RS_CURVE_WIDGET(rss->curve)); - - if (rsd->curve_nknots>1) - { - gint i; - for(i=0;icurve_nknots;i++) - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rss->curve), - rsd->curve_knots[i*2+0], - rsd->curve_knots[i*2+1] - ); - } - else - { - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rss->curve), 0.0f, 0.0f); - rs_curve_widget_add_knot(RS_CURVE_WIDGET(rss->curve), 1.0f, 1.0f); - } - } - return; -} - -void -rs_rect_normalize(RS_RECT *in, RS_RECT *out) -{ - gint n; - gint x1,y1; - gint x2,y2; - - x1 = in->x2; - x2 = in->x1; - y1 = in->y1; - y2 = in->y2; - - if (x1>x2) - { - n = x1; - x1 = x2; - x2 = n; - } - if (y1>y2) - { - n = y1; - y1 = y2; - y2 = n; + rs_curve_widget_move_knot(RS_CURVE_WIDGET(rs->curve[rs->current_setting]),0,blackpoint,0.0); + rs_curve_widget_move_knot(RS_CURVE_WIDGET(rs->curve[rs->current_setting]),-1,whitepoint,1.0); } - - out->x1 = x1; - out->x2 = x2; - out->y1 = y1; - out->y2 = y2; -} - -void -rs_rect_flip(RS_RECT *in, RS_RECT *out, gint w, gint h) -{ - gint x1,y1; - gint x2,y2; - - x1 = in->x1; - x2 = in->x2; - y1 = h - in->y2 - 1; - y2 = h - in->y1 - 1; - - out->x1 = x1; - out->x2 = x2; - out->y1 = y1; - out->y2 = y2; - rs_rect_normalize(out, out); - - return; -} - -void -rs_rect_mirror(RS_RECT *in, RS_RECT *out, gint w, gint h) -{ - gint x1,y1; - gint x2,y2; - - x1 = w - in->x2 - 1; - x2 = w - in->x1 - 1; - y1 = in->y1; - y2 = in->y2; - - out->x1 = x1; - out->x2 = x2; - out->y1 = y1; - out->y2 = y2; - rs_rect_normalize(out, out); - - return; -} - -void -rs_rect_rotate(RS_RECT *in, RS_RECT *out, gint w, gint h, gint quarterturns) -{ - gint x1,y1; - gint x2,y2; - - x1 = in->x2; - x2 = in->x1; - y1 = in->y1; - y2 = in->y2; - - switch(quarterturns) - { - case 1: - x1 = h - in->y1-1; - x2 = h - in->y2-1; - y1 = in->x1; - y2 = in->x2; - break; - case 2: - x1 = w - in->x1 - 1; - x2 = w - in->x2 - 1; - y1 = h - in->y1 - 1; - y2 = h - in->y2 - 1; - break; - case 3: - x1 = in->y1; - x2 = in->y2; - y1 = w - in->x1 - 1; - y2 = w - in->x2 - 1; - break; - } - - out->x1 = x1; - out->x2 = x2; - out->y1 = y1; - out->y2 = y2; - rs_rect_normalize(out, out); - - return; -} - -inline void -rs_rect_from_gdkrectangle(GdkRectangle *in, RS_RECT *out) -{ - out->x1 = in->x; - out->y1 = in->y; - out->x2 = in->x+in->width; - out->y2 = in->y+in->height; -} - -void -check_install() -{ -#define TEST_FILE_ACCESS(path) do { if (g_access(path, R_OK)!=0) g_debug("Cannot access %s\n", path);} while (0) - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/icons/" PACKAGE ".png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_priority1.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_priority2.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_priority3.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_deleted.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_exported.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_flip.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_mirror.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_90.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_180.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_270.png"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/" PACKAGE "/ui.xml"); - TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/" PACKAGE "/rawstudio.gtkrc"); -#undef TEST_FILE_ACCESS -} - -gboolean -rs_has_gimp(gint major, gint minor, gint micro) { - FILE *fp; - char line[128]; - int _major, _minor, _micro; - gboolean retval = FALSE; - - fp = popen("gimp -v","r"); - fgets( line, sizeof line, fp); - pclose(fp); - -#if GLIB_CHECK_VERSION(2,14,0) - GRegex *regex; - gchar **tokens; - - regex = g_regex_new(".*([0-9])\x2E([0-9]+)\x2E([0-9]+).*", 0, 0, NULL); - tokens = g_regex_split(regex, line, 0); - g_regex_unref(regex); - - if (tokens[1]) - _major = atoi(tokens[1]); - else - { - g_strfreev(tokens); - return FALSE; - } - - if (_major > major) { - retval = TRUE; - } else if (_major == major) { - - if (tokens[2]) - _minor = atoi(tokens[2]); - else - { - g_strfreev(tokens); - return FALSE; - } - - if (_minor > minor) { - retval = TRUE; - } else if (_minor == minor) { - - if (tokens[3]) - _micro = atoi(tokens[3]); - else - { - g_strfreev(tokens); - return FALSE; - } - - if (_micro >= micro) { - retval = TRUE; - } - } - } - g_strfreev(tokens); -#else - sscanf(line,"GNU Image Manipulation Program version %d.%d.%d", &_major, &_minor, &_micro); - - if (_major > major) { - retval = TRUE; - } else if (_major == major) { - if (_minor > minor) { - retval = TRUE; - } else if (_minor == minor) { - if (_micro >= micro) { - retval = TRUE; - } - } - } -#endif - - return retval; } /** @@ -1127,53 +444,48 @@ gboolean wb_ok = FALSE; gboolean focallength_ok = FALSE; - RS_METADATA *metadata = rs_metadata_new(); - g_strstrip(filename); - RS_FILETYPE *filetype = rs_filetype_get(filename, TRUE); - if (filetype) + if (rs_filetype_can_load(filename)) { + RS_PHOTO *photo = NULL; filetype_ok = TRUE; - if (filetype->load) + photo = rs_photo_load_from_file(filename, TRUE); + if (photo) { - RS_PHOTO *photo = NULL; - photo = rs_photo_load_from_file(filename, TRUE); - if (photo) - { - load_ok = TRUE; - g_object_unref(photo); - } + load_ok = TRUE; + g_object_unref(photo); } - pixbuf = rs_load_thumb(filetype, filename); + RSMetadata *metadata = rs_metadata_new_from_file(filename); + + load_meta_ok = TRUE; + + if (metadata->make != MAKE_UNKNOWN) + make_ok = TRUE; + if (metadata->make_ascii != NULL) + make_ascii_ok = TRUE; + if (metadata->model_ascii != NULL) + model_ascii_ok = TRUE; + if (metadata->aperture > 0.0) + aperture_ok = TRUE; + if (metadata->iso > 0) + iso_ok = TRUE; + if (metadata->shutterspeed > 1.0) + shutterspeed_ok = TRUE; + if (metadata->cam_mul[0] > 0.1 && metadata->cam_mul[0] != 1.0) + wb_ok = TRUE; + if (metadata->focallength > 0.0) + focallength_ok = TRUE; + + /* FIXME: Port to RSFiletype */ + pixbuf = rs_metadata_get_thumbnail(metadata); if (pixbuf) { thumbnail_ok = TRUE; g_object_unref(pixbuf); } - - if (filetype->load_meta) - { - load_meta_ok = TRUE; - filetype->load_meta(filename, metadata); - if (metadata->make != MAKE_UNKNOWN) - make_ok = TRUE; - if (metadata->make_ascii != NULL) - make_ascii_ok = TRUE; - if (metadata->model_ascii != NULL) - model_ascii_ok = TRUE; - if (metadata->aperture > 0.0) - aperture_ok = TRUE; - if (metadata->iso > 0) - iso_ok = TRUE; - if (metadata->shutterspeed > 1.0) - shutterspeed_ok = TRUE; - if (metadata->cam_mul[0] > 0.1 && metadata->cam_mul[0] != 1.0) - wb_ok = TRUE; - if (metadata->focallength > 0.0) - focallength_ok = TRUE; - } + g_object_unref(metadata); } @@ -1212,13 +524,29 @@ g_free(basename); g_free(filename); - rs_metadata_free(metadata); } printf("Passed: %d Failed: %d (%d%%)\n", good, bad, (good*100)/(good+bad)); g_io_channel_shutdown(io, TRUE, NULL); exit(0); } +/* We use out own reentrant locking for GDK/GTK */ + +static GStaticRecMutex gdk_lock = G_STATIC_REC_MUTEX_INIT; + +static void +rs_gdk_lock() +{ + g_static_rec_mutex_lock (&gdk_lock); +} + +static void +rs_gdk_unlock() +{ + g_static_rec_mutex_unlock (&gdk_lock); +} + + int main(int argc, char **argv) { @@ -1239,6 +567,7 @@ } } + gdk_threads_set_lock_functions(rs_gdk_lock, rs_gdk_unlock); g_thread_init(NULL); gdk_threads_init(); @@ -1256,6 +585,9 @@ textdomain(GETTEXT_PACKAGE); #endif + /* Make sure the GType system is initialized */ + g_type_init(); + /* Switch to rawstudio theme before any drawing if needed */ rs_conf_get_boolean_with_default(CONF_USE_SYSTEM_THEME, &use_system_theme, DEFAULT_CONF_USE_SYSTEM_THEME); if (!use_system_theme) @@ -1276,117 +608,3 @@ /* This is so fucking evil, but Rawstudio will deadlock in some GTK atexit() function from time to time :-/ */ _exit(0); } - -gboolean -rs_shutdown(GtkWidget *dummy1, GdkEvent *dummy2, RS_BLOB *rs) -{ - rs_photo_close(rs->photo); - rs_conf_set_integer(CONF_LAST_PRIORITY_PAGE, rs_store_get_current_page(rs->store)); - gtk_main_quit(); - return(TRUE); -} - -#if !GLIB_CHECK_VERSION(2,8,0) - -/* Include our own g_mkdir_with_parents() in case of old glib. -Copied almost verbatim from glib-2.10.0/glib/gfileutils.c */ -int -g_mkdir_with_parents (const gchar *pathname, - int mode) -{ - gchar *fn, *p; - - if (pathname == NULL || *pathname == '\0') - { - return -1; - } - - fn = g_strdup (pathname); - - if (g_path_is_absolute (fn)) - p = (gchar *) g_path_skip_root (fn); - else - p = fn; - - do - { - while (*p && !G_IS_DIR_SEPARATOR (*p)) - p++; - - if (!*p) - p = NULL; - else - *p = '\0'; - - if (!g_file_test (fn, G_FILE_TEST_EXISTS)) - { - if (g_mkdir (fn, mode) == -1) - { - g_free (fn); - return -1; - } - } - else if (!g_file_test (fn, G_FILE_TEST_IS_DIR)) - { - g_free (fn); - return -1; - } - if (p) - { - *p++ = G_DIR_SEPARATOR; - while (*p && G_IS_DIR_SEPARATOR (*p)) - p++; - } - } - while (p); - - g_free (fn); - - return 0; -} - -/* Include our own g_access() in case of old glib. -Copied almost verbatim from glib-2.12.13/glib/gstdio.h */ -int -g_access (const gchar *filename, - int mode) -{ -#ifdef G_OS_WIN32 - if (G_WIN32_HAVE_WIDECHAR_API ()) - { - wchar_t *wfilename = g_utf8_to_utf16 (filename, -1, NULL, NULL, NULL); - int retval; - - if (wfilename == NULL) - { - return -1; - } - - retval = _waccess (wfilename, mode); - - g_free (wfilename); - - return retval; - } - else - { - gchar *cp_filename = g_locale_from_utf8 (filename, -1, NULL, NULL, NULL); - int retval; - - if (cp_filename == NULL) - { - return -1; - } - - retval = access (cp_filename, mode); - - g_free (cp_filename); - - return retval; - } -#else - return access (filename, mode); -#endif -} - -#endif diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rawstudio.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rawstudio.h --- rawstudio-1.1.1/src/rawstudio.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rawstudio.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -27,22 +27,11 @@ #include "rs-arch.h" #include "rs-cms.h" -#define BUH printf("%s:%d\n", __FILE__, __LINE__); - -#define __RS_USE_OMP 1 - /* Check for thread support */ #if (!defined(G_THREADS_ENABLED) || defined(G_THREADS_IMPL_NONE)) #error GLib was not compiled with thread support, Rawstudio needs threads - sorry. #endif -#define PITCH(width) ((((width)+15)/16)*16) - -#define SWAP( a, b ) a ^= b ^= a ^= b - -#define DOTDIR ".rawstudio" -#define HISTOGRAM_DATASET_WIDTH (250) - #define ORIENTATION_RESET(orientation) orientation = 0 #define ORIENTATION_90(orientation) orientation = (orientation&4) | ((orientation+1)&3) #define ORIENTATION_180(orientation) orientation = (orientation^2) @@ -50,57 +39,6 @@ #define ORIENTATION_FLIP(orientation) orientation = (orientation^4) #define ORIENTATION_MIRROR(orientation) orientation = ((orientation&4)^4) | ((orientation+2)&3) -#define GETVAL(adjustment) \ - gtk_adjustment_get_value((GtkAdjustment *) adjustment) -#define SETVAL(adjustment, value) \ - gtk_adjustment_set_value((GtkAdjustment *) adjustment, value) - -enum { - MASK_EXPOSURE = 1, - MASK_SATURATION = 2, - MASK_HUE = 4, - MASK_CONTRAST = 8, - MASK_WARMTH = 16, - MASK_TINT = 32, - MASK_CURVE = 64, - MASK_SHARPEN = 128, - MASK_ALL = 0x00ffffff, -}; - -#define MASK_WB (MASK_WARMTH|MASK_TINT) - -enum { - MAKE_UNKNOWN = 0, - MAKE_CANON, - MAKE_FUJIFILM, - MAKE_KODAK, - MAKE_LEICA, - MAKE_MINOLTA, - MAKE_NIKON, - MAKE_OLYMPUS, - MAKE_PANASONIC, - MAKE_PENTAX, - MAKE_PHASEONE, - MAKE_SAMSUNG, - MAKE_SIGMA, - MAKE_SONY, -}; - -enum { - MASK_OVER = 128, - MASK_UNDER = 64, -}; - -enum { - ROI_GRID_NONE = 0, - ROI_GRID_GOLDEN, - ROI_GRID_THIRDS, - ROI_GRID_GOLDEN_TRIANGLES1, - ROI_GRID_GOLDEN_TRIANGLES2, - ROI_GRID_HARMONIOUS_TRIANGLES1, - ROI_GRID_HARMONIOUS_TRIANGLES2, -}; - #if __GNUC__ >= 3 #define likely(x) __builtin_expect (!!(x), 1) #define unlikely(x) __builtin_expect (!!(x), 0) @@ -129,27 +67,19 @@ /* Defined in rs-color-transform.c */ typedef struct _RSColorTransform RSColorTransform; +/* Defined in rs-metadata.h */ +typedef struct _RSMetadata RSMetadata; + +/* Defined in rs-image.h */ +typedef struct _rs_image16 RS_IMAGE16; + +#include "rs-settings.h" /* FIXME: This is getting pathetic */ + typedef struct {double coeff[3][3]; } RS_MATRIX3; typedef struct {int coeff[3][3]; } RS_MATRIX3Int; typedef struct {double coeff[4][4]; } RS_MATRIX4; typedef struct {int coeff[4][4]; } RS_MATRIX4Int; -typedef struct _rs_image16 { - GObject parent; - gint w; - gint h; - gint pitch; - gint rowstride; - guint channels; - guint pixelsize; /* the size of a pixel in SHORTS */ - guint orientation; - gushort *pixels; - guint filters; - guint fourColorFilters; - gboolean preview; - gboolean dispose_has_run; -} RS_IMAGE16; - typedef struct { gint x1; gint y1; @@ -157,64 +87,15 @@ gint y2; } RS_RECT; -typedef struct { - GtkObject *exposure; - GtkObject *saturation; - GtkObject *hue; - GtkObject *contrast; - GtkObject *warmth; - GtkObject *tint; - GtkObject *sharpen; - GtkWidget *curve; -} RS_SETTINGS; - -typedef struct { - gdouble exposure; - gdouble saturation; - gdouble hue; - gdouble contrast; - gdouble warmth; - gdouble tint; - gdouble sharpen; - guint curve_nknots; - gfloat *curve_knots; -} RS_SETTINGS_DOUBLE; - -typedef struct _metadata { - gint make; - gchar *make_ascii; - gchar *model_ascii; - gchar *time_ascii; - GTime timestamp; - gushort orientation; - gfloat aperture; - gushort iso; - gfloat shutterspeed; - guint thumbnail_start; - guint thumbnail_length; - guint preview_start; - guint preview_length; - guint16 preview_planar_config; - guint preview_width; - guint preview_height; - guint16 preview_bits [3]; - gdouble cam_mul[4]; - gdouble contrast; - gdouble saturation; - gdouble sharpness; - gdouble color_tone; - gshort focallength; - RS_MATRIX4 adobe_coeff; -} RS_METADATA; - typedef struct _photo { GObject parent; gchar *filename; RS_IMAGE16 *input; - RS_SETTINGS_DOUBLE *settings[3]; + RSSettings *settings[3]; + gulong settings_signal[3]; gint priority; guint orientation; - RS_METADATA *metadata; + RSMetadata *metadata; RS_RECT *crop; gdouble angle; gboolean exported; @@ -222,14 +103,13 @@ } RS_PHOTO; typedef struct { - gboolean mute_signals_to_photo; RS_PHOTO *photo; - RS_SETTINGS_DOUBLE *settings_buffer; - RS_SETTINGS *settings[3]; + RSSettings *settings_buffer; + RSSettings *settings[3]; + GtkWidget *curve[3]; gint current_setting; RS_IMAGE16 *histogram_dataset; GtkWidget *histogram; - RSColorTransform *histogram_transform; RS_QUEUE *queue; RS_CMS *cms; RSStore *store; @@ -254,56 +134,17 @@ gint filetype; const gchar *ext; gchar *description; - RS_IMAGE16 *(*load)(const gchar *, gboolean); - GdkPixbuf *(*thumb)(const gchar *); - void (*load_meta)(const gchar *, RS_METADATA *); gboolean (*save)(RS_PHOTO *photo, const gchar *filename, gint filetype, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot, RS_CMS *cms); struct _rs_filetype *next; } RS_FILETYPE; -#ifdef __RS_USE_OMP -extern GMutex *omp_lock; -#endif /* __RS_USE_OMP */ - -GdkPixbuf *rs_load_thumb(RS_FILETYPE *filetype, const gchar *src); -void rs_local_cachedir(gboolean new_value); -void rs_load_gdk(gboolean new_value); -void rs_reset(RS_BLOB *rs); -void rs_settings_to_rs_settings_double(RS_SETTINGS *rs_settings, RS_SETTINGS_DOUBLE *rs_settings_double); -void rs_settings_double_to_rs_settings(RS_SETTINGS_DOUBLE *rs_settings_double, RS_SETTINGS *rs_settings, gint mask); -void rs_settings_reset(RS_SETTINGS *rss, guint mask); gboolean rs_photo_save(RS_PHOTO *photo, const gchar *filename, gint filetype, gint width, gint height, gboolean keep_aspect, gdouble scale, gint snapshot, RS_CMS *cms); -RS_SETTINGS_DOUBLE *rs_settings_double_new(void); -void rs_settings_double_copy(const RS_SETTINGS_DOUBLE *in, RS_SETTINGS_DOUBLE *out, gint mask); -void rs_settings_double_free(RS_SETTINGS_DOUBLE *rssd); -RS_METADATA *rs_metadata_new(); -void rs_metadata_free(RS_METADATA *metadata); -gboolean rs_metadata_load(const gchar *filename, RS_METADATA *metadata); -gchar * rs_metadata_get_short_description(RS_METADATA *metadata); -void rs_metadata_normalize_wb(RS_METADATA *meta); RS_BLOB *rs_new(); void rs_free(RS_BLOB *rs); void rs_set_photo(RS_BLOB *rs, RS_PHOTO *photo); void rs_set_snapshot(RS_BLOB *rs, gint snapshot); -RS_FILETYPE *rs_filetype_get(const gchar *filename, gboolean load); -gchar *rs_confdir_get(); -gchar *rs_dotdir_get(const gchar *filename); -gchar *rs_thumb_get_name(const gchar *src); void rs_white_black_point(RS_BLOB *rs); -void rs_render_pixel_to_srgb(RS_BLOB *rs, gint x, gint y, guchar *dest); -void rs_apply_settings_from_double(RS_SETTINGS *rss, RS_SETTINGS_DOUBLE *rsd, gint mask); -void rs_rect_normalize(RS_RECT *in, RS_RECT *out); -gboolean rs_shutdown(GtkWidget *dummy1, GdkEvent *dummy2, RS_BLOB *rs); -gboolean rs_has_gimp(gint major, gint minor, gint micro); -void rs_rect_flip(RS_RECT *in, RS_RECT *out, gint w, gint h); -void rs_rect_mirror(RS_RECT *in, RS_RECT *out, gint w, gint h); -void rs_rect_rotate(RS_RECT *in, RS_RECT *out, gint w, gint h, gint quarterturns); -extern inline void rs_rect_from_gdkrectangle(GdkRectangle *in, RS_RECT *out); -#if !GLIB_CHECK_VERSION(2,8,0) -int g_mkdir_with_parents (const gchar *pathname, int mode); -int g_access (const gchar *filename, int mode); -#endif /* Contains a list of supported filetypes */ extern RS_FILETYPE *filetypes; diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-actions.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-actions.c --- rawstudio-1.1.1/src/rs-actions.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-actions.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -37,6 +37,7 @@ #include "rs-cache.h" #include "rs-preview-widget.h" #include "rs-batch.h" +#include "rs-metadata.h" static GtkActionGroup *core_action_group = NULL; GStaticMutex rs_actions_spinlock = G_STATIC_MUTEX_INIT; @@ -55,7 +56,7 @@ { GString *gs = g_string_new("Action not implemented: "); g_string_append(gs, gtk_action_get_name(action)); - g_warning(gs->str); + g_warning("%s", gs->str); gui_status_notify(gs->str); g_string_free(gs, TRUE); } @@ -116,7 +117,7 @@ photos_selected = (RS_IS_PHOTO(rs->photo) || (num_selected > 0)); - rs_core_action_group_set_sensivity("AddToBatch", photos_selected); + rs_core_action_group_set_sensivity("AddToBatch", photos_selected && !rs_batch_exists_in_queue(rs->queue, rs->photo->filename, rs->current_setting)); rs_core_action_group_set_sensivity("RemoveFromBatch", photos_selected && rs->photo && rs_batch_exists_in_queue(rs->queue, rs->photo->filename, rs->current_setting)); rs_core_action_group_set_sensivity("ProcessBatch", (rs_batch_num_entries(rs->queue)>0)); g_list_free(selected); @@ -251,7 +252,7 @@ ACTION(delete_flagged) { - gchar *thumb, *cache; + gchar *cache; GtkWidget *dialog; GList *photos_d = NULL; gint items = 0, i; @@ -284,11 +285,7 @@ if(0 == g_unlink(fullname)) { - if ((thumb = rs_thumb_get_name(fullname))) - { - g_unlink(thumb); - g_free(thumb); - } + rs_metadata_delete_cache(fullname); if ((cache = rs_cache_get_name(fullname))) { g_unlink(cache); @@ -321,7 +318,10 @@ ACTION(quit) { - rs_shutdown(NULL, NULL, rs); + if (rs->photo) + rs_photo_close(rs->photo); + rs_conf_set_integer(CONF_LAST_PRIORITY_PAGE, rs_store_get_current_page(rs->store)); + gtk_main_quit(); } ACTION(revert_settings) @@ -333,15 +333,15 @@ ACTION(copy_settings) { if (!rs->settings_buffer) - rs->settings_buffer = g_new(RS_SETTINGS_DOUBLE, 1); - rs_settings_to_rs_settings_double(rs->settings[rs->current_setting], rs->settings_buffer); + rs->settings_buffer = rs_settings_new(); + rs_settings_copy(rs->settings[rs->current_setting], MASK_ALL, rs->settings_buffer); gui_status_notify(_("Copied settings")); } ACTION(paste_settings) { - gint mask = 0xffffff; - + gint mask = 0xffffff; /* Should be RSSettingsMask, is gint to satisfy rs_conf_get_integer() */ + GtkWidget *dialog, *cb_box; GtkWidget *cb_exposure, *cb_saturation, *cb_hue, *cb_contrast, *cb_whitebalance, *cb_curve, *cb_sharpen; @@ -415,7 +415,6 @@ if(mask > 0) { RS_PHOTO *photo; - RS_FILETYPE *filetype; gint cur; GList *selected = NULL; gint num_selected; @@ -429,30 +428,15 @@ /* This is nothing but a hack around rs_cache_*() */ photo = rs_photo_new(); photo->filename = g_strdup(g_list_nth_data(selected, cur)); - if ((filetype = rs_filetype_get(photo->filename, TRUE))) - { - if (rs_metadata_load(photo->filename, photo->metadata)) - { - switch (photo->metadata->orientation) - { - case 90: ORIENTATION_90(photo->orientation); - break; - case 180: ORIENTATION_180(photo->orientation); - break; - case 270: ORIENTATION_270(photo->orientation); - break; - } - } - new_mask = rs_cache_load(photo); - rs_settings_double_copy(rs->settings_buffer, photo->settings[rs->current_setting], mask); - rs_cache_save(photo, new_mask | mask); - } + new_mask = rs_cache_load(photo); + rs_settings_copy(rs->settings_buffer, mask, photo->settings[rs->current_setting]); + rs_cache_save(photo, new_mask | mask); g_object_unref(photo); } g_list_free(selected); /* Apply to current photo */ - rs_photo_apply_settings_double(rs->photo, rs->current_setting, rs->settings_buffer, mask); + rs_settings_copy(rs->settings_buffer, mask, rs->settings[rs->current_setting]); gui_status_notify(_("Pasted settings")); } @@ -475,6 +459,7 @@ { gui_make_preference_window(rs); } + ACTION(flag_for_deletion) { gui_setprio(rs, PRIO_D); @@ -749,6 +734,10 @@ ACTION(ProcessBatch) { + /* Save current photo just in case it's in the queue */ + if (RS_IS_PHOTO(rs->photo)) + rs_cache_save(rs->photo, MASK_ALL); + rs_batch_process(rs->queue); } @@ -781,6 +770,11 @@ rs_preview_widget_set_snapshot(RS_PREVIEW_WIDGET(rs->preview), 1, gtk_radio_action_get_current_value(radioaction)); } +RADIOACTION(sort_by_popup) +{ + rs_store_set_sort_method(rs->store, gtk_radio_action_get_current_value(radioaction)); +} + #ifndef GTK_STOCK_FULLSCREEN #define GTK_STOCK_FULLSCREEN NULL #endif @@ -800,6 +794,7 @@ { "PriorityMenu", NULL, _("_Set Priority") }, { "WhiteBalanceMenu", "NULL", _("_White Balance") }, { "ViewMenu", NULL, _("_View") }, + { "SortByMenu", NULL, _("_Sort by") }, { "BatchMenu", NULL, _("_Batch"), NULL, NULL, ACTION_CB(batch_menu) }, { "HelpMenu", NULL, _("_Help") }, { "PreviewPopup", NULL, NULL, NULL, NULL, ACTION_CB(preview_popup) }, @@ -862,6 +857,16 @@ }; static guint n_toggleentries = G_N_ELEMENTS (toggleentries); + GtkRadioActionEntry sort_by_popup[] = { + { "SortByName", NULL, _("Name"), NULL, NULL, RS_STORE_SORT_BY_NAME }, + { "SortByTimestamp", NULL, _("Timestamp"), NULL, NULL, RS_STORE_SORT_BY_TIMESTAMP }, + { "SortByISO", NULL, _("ISO"), NULL, NULL, RS_STORE_SORT_BY_ISO }, + { "SortByAperture", NULL, _("Aperture"), NULL, NULL, RS_STORE_SORT_BY_APERTURE }, + { "SortByFocallength", NULL, _("Focallength"), NULL, NULL, RS_STORE_SORT_BY_FOCALLENGTH }, + { "SortByShutterspeed", NULL, _("Shutterspeed"), NULL, NULL, RS_STORE_SORT_BY_SHUTTERSPEED }, + }; + static guint n_sort_by_popup = G_N_ELEMENTS (sort_by_popup); + GtkRadioActionEntry right_popup[] = { { "RightA", NULL, _(" A "), NULL, NULL, 0 }, { "RightB", NULL, _(" B "), NULL, NULL, 1 }, @@ -876,6 +881,7 @@ /* FIXME: gtk_action_group_set_translation_domain */ gtk_action_group_add_actions (core_action_group, actionentries, n_actionentries, rs); gtk_action_group_add_toggle_actions(core_action_group, toggleentries, n_toggleentries, rs); + gtk_action_group_add_radio_actions(core_action_group, sort_by_popup, n_sort_by_popup, rs_store_get_sort_method(rs->store), ACTION_CB(sort_by_popup), rs); gtk_action_group_add_radio_actions(core_action_group, right_popup, n_right_popup, 1, ACTION_CB(right_popup), rs); } g_static_mutex_unlock(&rs_actions_spinlock); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-actions.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-actions.h --- rawstudio-1.1.1/src/rs-actions.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-actions.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-arch.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-arch.h --- rawstudio-1.1.1/src/rs-arch.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-arch.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-batch.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-batch.c --- rawstudio-1.1.1/src/rs-batch.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-batch.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -33,6 +33,9 @@ #include "rs-color-transform.h" #include "rs-image.h" #include "rs-photo.h" +#include "rs-metadata.h" +#include "rs-utils.h" +#include "rs-actions.h" extern GtkWindow *rawstudio_window; @@ -90,13 +93,7 @@ g_assert(queue != NULL); if (!batch_queue_filename) - { - const gchar *confdir = rs_confdir_get(); - GString *gs = g_string_new(confdir); - g_string_append(gs, "batch-queue.xml"); - batch_queue_filename = gs->str; - g_string_free(gs, FALSE); - } + batch_queue_filename = g_build_filename(rs_confdir_get(), "batch-queue.xml", NULL); if (!g_file_test(batch_queue_filename, G_FILE_TEST_IS_REGULAR)) return; @@ -203,8 +200,8 @@ gboolean ret = FALSE; if (!rs_batch_exists_in_queue(queue, filename, setting_id)) { + RSMetadata *metadata; gchar *filename_short, *setting_id_abc; - RS_FILETYPE *filetype; GdkPixbuf *pixbuf = NULL, *missing_thumb, *pixbuf_temp; filename_short = g_path_get_basename(filename); @@ -224,59 +221,58 @@ return ret; } - filetype = rs_filetype_get(filename, TRUE); - if (filetype) - { - missing_thumb = gtk_widget_render_icon(GTK_WIDGET(rawstudio_window), - GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_DIALOG, NULL); + missing_thumb = gtk_widget_render_icon(GTK_WIDGET(rawstudio_window), + GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_DIALOG, NULL); - pixbuf = rs_load_thumb(filetype, filename); - if (pixbuf) - { - gint w,h,temp,size = 48; + metadata = rs_metadata_new_from_file(filename); + pixbuf = rs_metadata_get_thumbnail(metadata); + g_object_unref(metadata); - w = gdk_pixbuf_get_width(pixbuf); - h = gdk_pixbuf_get_height(pixbuf); + if (pixbuf) + { + gint w,h,temp,size = 48; - if (w > h) - { - temp = 1000*h/w; - pixbuf_temp = gdk_pixbuf_scale_simple(pixbuf, size, size*temp/1000, GDK_INTERP_BILINEAR); - g_object_unref(pixbuf); - pixbuf = pixbuf_temp; - } - else - { - temp = 1000*w/h; - pixbuf_temp = gdk_pixbuf_scale_simple(pixbuf, size*temp/1000, size, GDK_INTERP_BILINEAR); - g_object_unref(pixbuf); - pixbuf = pixbuf_temp; - } + w = gdk_pixbuf_get_width(pixbuf); + h = gdk_pixbuf_get_height(pixbuf); + + if (w > h) + { + temp = 1000*h/w; + pixbuf_temp = gdk_pixbuf_scale_simple(pixbuf, size, size*temp/1000, GDK_INTERP_BILINEAR); + g_object_unref(pixbuf); + pixbuf = pixbuf_temp; } else { - pixbuf = missing_thumb; - g_object_ref (pixbuf); + temp = 1000*w/h; + pixbuf_temp = gdk_pixbuf_scale_simple(pixbuf, size*temp/1000, size, GDK_INTERP_BILINEAR); + g_object_unref(pixbuf); + pixbuf = pixbuf_temp; } - g_object_unref(missing_thumb); + } + else + { + pixbuf = missing_thumb; + g_object_ref (pixbuf); + } + g_object_unref(missing_thumb); - if (!rs_batch_exists_in_queue(queue, filename, setting_id)) - { - GtkTreeIter iter; + if (!rs_batch_exists_in_queue(queue, filename, setting_id)) + { + GtkTreeIter iter; - gtk_list_store_append (GTK_LIST_STORE(queue->list), &iter); - gtk_list_store_set (GTK_LIST_STORE(queue->list), &iter, - RS_QUEUE_ELEMENT_FILENAME, filename, - RS_QUEUE_ELEMENT_FILENAME_SHORT, filename_short, - RS_QUEUE_ELEMENT_SETTING_ID, setting_id, - RS_QUEUE_ELEMENT_SETTING_ID_ABC, setting_id_abc, - RS_QUEUE_ELEMENT_THUMBNAIL, pixbuf, - -1); - ret = TRUE; - } - g_object_unref(pixbuf); - g_free(filename_short); + gtk_list_store_append (GTK_LIST_STORE(queue->list), &iter); + gtk_list_store_set (GTK_LIST_STORE(queue->list), &iter, + RS_QUEUE_ELEMENT_FILENAME, filename, + RS_QUEUE_ELEMENT_FILENAME_SHORT, filename_short, + RS_QUEUE_ELEMENT_SETTING_ID, setting_id, + RS_QUEUE_ELEMENT_SETTING_ID_ABC, setting_id_abc, + RS_QUEUE_ELEMENT_THUMBNAIL, pixbuf, + -1); + ret = TRUE; } + g_object_unref(pixbuf); + g_free(filename_short); } batch_queue_save(queue); @@ -483,70 +479,67 @@ RS_QUEUE_ELEMENT_FILENAME, &filename_in, RS_QUEUE_ELEMENT_SETTING_ID, &setting_id, -1); - if (rs_filetype_get(filename_in, TRUE)) - { - basename = g_path_get_basename(filename_in); - g_string_printf(status, _("Loading %s ..."), basename); - gtk_label_set_text(GTK_LABEL(label), status->str); - while (gtk_events_pending()) gtk_main_iteration(); - g_free(basename); + basename = g_path_get_basename(filename_in); + g_string_printf(status, _("Loading %s ..."), basename); + gtk_label_set_text(GTK_LABEL(label), status->str); + while (gtk_events_pending()) gtk_main_iteration(); + g_free(basename); - photo = rs_photo_load_from_file(filename_in, FALSE); + photo = rs_photo_load_from_file(filename_in, FALSE); + if (photo) + { rs_image16_demosaic(photo->input, RS_DEMOSAIC_PPG); - if (photo) + rs_metadata_load_from_file(photo->metadata, filename_in); + filename = g_string_new(queue->directory); + g_string_append(filename, G_DIR_SEPARATOR_S); + g_string_append(filename, queue->filename); + g_string_append(filename, "."); + + switch (queue->filetype) { - rs_metadata_load(filename_in, photo->metadata); - filename = g_string_new(queue->directory); - g_string_append(filename, G_DIR_SEPARATOR_S); - g_string_append(filename, queue->filename); - g_string_append(filename, "."); + case FILETYPE_JPEG: + g_string_append(filename, "jpg"); + break; + case FILETYPE_PNG: + g_string_append(filename, "png"); + break; + case FILETYPE_TIFF8: + g_string_append(filename, "tif"); + break; + case FILETYPE_TIFF16: + g_string_append(filename, "tif"); + break; + } - switch (queue->filetype) - { - case FILETYPE_JPEG: - g_string_append(filename, "jpg"); - break; - case FILETYPE_PNG: - g_string_append(filename, "png"); - break; - case FILETYPE_TIFF8: - g_string_append(filename, "tif"); - break; - case FILETYPE_TIFF16: - g_string_append(filename, "tif"); - break; - } + rs_cache_load(photo); - rs_cache_load(photo); + parsed_filename = filename_parse(filename->str, filename_in, setting_id); - parsed_filename = filename_parse(filename->str, filename_in, setting_id); + image = rs_image16_transform(photo->input, NULL, + NULL, NULL, photo->crop, 200, 200, TRUE, -1.0, + photo->angle, photo->orientation, NULL); + if (pixbuf) g_object_unref(pixbuf); + pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, image->w, image->h); + + /* Render preview image */ + rs_color_transform_set_from_settings(rct, photo->settings[setting_id], MASK_ALL); + rs_color_transform_transform(rct, image->w, image->h, image->pixels, + image->rowstride, gdk_pixbuf_get_pixels(pixbuf), + gdk_pixbuf_get_rowstride(pixbuf)); + gtk_image_set_from_pixbuf((GtkImage *) preview, pixbuf); + rs_image16_free(image); - image = rs_image16_transform(photo->input, NULL, - NULL, NULL, photo->crop, 200, 200, TRUE, -1.0, - photo->angle, photo->orientation, NULL); - if (pixbuf) g_object_unref(pixbuf); - pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, image->w, image->h); - - /* Render preview image */ - rs_color_transform_set_from_settings(rct, photo->settings[setting_id], MASK_ALL); - rs_color_transform_transform(rct, image->w, image->h, image->pixels, - image->rowstride, gdk_pixbuf_get_pixels(pixbuf), - gdk_pixbuf_get_rowstride(pixbuf)); - gtk_image_set_from_pixbuf((GtkImage *) preview, pixbuf); - rs_image16_free(image); - - basename = g_path_get_basename(parsed_filename); - g_string_printf(status, _("Saving %s ..."), basename); - gtk_label_set_text(GTK_LABEL(label), status->str); - while (gtk_events_pending()) gtk_main_iteration(); - g_free(basename); - - rs_photo_save(photo, parsed_filename, queue->filetype, - width, height, TRUE, scale, setting_id, queue->cms); - g_free(parsed_filename); - g_string_free(filename, TRUE); - g_object_unref(photo); - } + basename = g_path_get_basename(parsed_filename); + g_string_printf(status, _("Saving %s ..."), basename); + gtk_label_set_text(GTK_LABEL(label), status->str); + while (gtk_events_pending()) gtk_main_iteration(); + g_free(basename); + + rs_photo_save(photo, parsed_filename, queue->filetype, + width, height, TRUE, scale, setting_id, queue->cms); + g_free(parsed_filename); + g_string_free(filename, TRUE); + g_object_unref(photo); photo = NULL; } gtk_list_store_remove(GTK_LIST_STORE(queue->list), &iter); @@ -656,8 +649,7 @@ static void batch_button_start_clicked(GtkWidget *button, RS_QUEUE *queue) { - rs_batch_process(queue); - return; + rs_core_action_group_activate("ProcessBatch"); } static void @@ -937,7 +929,6 @@ chooser = gtk_file_chooser_button_new(_("Choose output directory"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); - gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(chooser), TRUE); if (g_path_is_absolute(queue->directory)) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), queue->directory); g_signal_connect (chooser, "current_folder_changed", diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-batch.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-batch.h --- rawstudio-1.1.1/src/rs-batch.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-batch.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-cache.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-cache.c --- rawstudio-1.1.1/src/rs-cache.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-cache.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -28,7 +28,7 @@ /* This will be written to XML files for making backward compatibility easier to implement */ #define CACHEVERSION 2 -static guint rs_cache_load_setting(RS_SETTINGS_DOUBLE *rss, xmlDocPtr doc, xmlNodePtr cur); +static guint rs_cache_load_setting(RSSettings *rss, xmlDocPtr doc, xmlNodePtr cur); gchar * rs_cache_get_name(const gchar *src) @@ -53,7 +53,7 @@ } void -rs_cache_save(RS_PHOTO *photo, guint mask) +rs_cache_save(RS_PHOTO *photo, const RSSettingsMask mask) { gint id, i; xmlTextWriterPtr writer; @@ -126,11 +126,11 @@ } static guint -rs_cache_load_setting(RS_SETTINGS_DOUBLE *rss, xmlDocPtr doc, xmlNodePtr cur) +rs_cache_load_setting(RSSettings *rss, xmlDocPtr doc, xmlNodePtr cur) { - guint mask = 0; + RSSettingsMask mask = 0; xmlChar *val; - gdouble *target=NULL; + gfloat *target=NULL; xmlNodePtr curve = NULL; while(cur) { @@ -223,14 +223,14 @@ guint rs_cache_load(RS_PHOTO *photo) { - guint mask = 0; + RSSettingsMask mask = 0; xmlDocPtr doc; xmlNodePtr cur; xmlChar *val; gchar *cachename; gint id; gint version = 0; - RS_SETTINGS_DOUBLE *settings; + RSSettings *settings; cachename = rs_cache_get_name(photo->filename); if (!cachename) return mask; @@ -261,10 +261,10 @@ xmlFree(val); if (id>2) id=0; if (id<0) id=0; - settings = rs_settings_double_new(); + settings = rs_settings_new(); mask |= rs_cache_load_setting(settings, doc, cur->xmlChildrenNode); - rs_photo_apply_settings_double(photo, id, settings, MASK_ALL); - rs_settings_double_free(settings); + rs_photo_apply_settings(photo, id, settings, MASK_ALL); + g_object_unref(settings); } else if ((!xmlStrcmp(cur->name, BAD_CAST "priority"))) { @@ -395,7 +395,7 @@ rs_cache_save_flags(const gchar *filename, const guint *priority, const gboolean *exported) { RS_PHOTO *photo; - guint mask; + RSSettingsMask mask; g_assert(filename != NULL); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-cache.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-cache.h --- rawstudio-1.1.1/src/rs-cache.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-cache.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -21,7 +21,7 @@ #define RS_CACHE_H extern gchar *rs_cache_get_name(const gchar *src); -extern void rs_cache_save(RS_PHOTO *photo, guint mask); +extern void rs_cache_save(RS_PHOTO *photo, const RSSettingsMask mask); extern guint rs_cache_load(RS_PHOTO *photo); extern void rs_cache_load_quick(const gchar *filename, gint *priority, gboolean *exported); extern void rs_cache_save_flags(const gchar *filename, const guint *priority, const gboolean *exported); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-cms.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-cms.c --- rawstudio-1.1.1/src/rs-cms.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-cms.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-cms.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-cms.h --- rawstudio-1.1.1/src/rs-cms.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-cms.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-color-transform.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-color-transform.c --- rawstudio-1.1.1/src/rs-color-transform.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-color-transform.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -21,6 +21,7 @@ #include "color.h" #include "rs-color-transform.h" #include "rs-spline.h" +#include "rs-image.h" static void make_tables(RSColorTransform *rct); static gboolean select_render(RSColorTransform *rct); @@ -52,9 +53,7 @@ RS_MATRIX4 adobe_matrix; guchar *table8; gushort *table16; - rs_spline_t *spline; gint nknots; - gfloat *knots; gfloat *curve_samples; void *cms_transform; }; @@ -95,9 +94,7 @@ rct->bits_per_color = 8; matrix4_identity(&rct->color_matrix); matrix4_identity(&rct->adobe_matrix); - rct->spline = NULL; rct->nknots = 0; - rct->knots = NULL; rct->curve_samples = g_new(gfloat, 65536); for(i=0;i<65536;i++) rct->curve_samples[i] = ((gfloat)i)/65536.0; @@ -203,7 +200,7 @@ } void -rs_color_transform_set_from_settings(RSColorTransform *rct, RS_SETTINGS_DOUBLE *settings, guint mask) +rs_color_transform_set_from_settings(RSColorTransform *rct, RSSettings *settings, const RSSettingsMask mask) { gboolean update_tables = FALSE; @@ -217,61 +214,52 @@ else rct->color_matrix = rct->adobe_matrix; - matrix4_color_exposure(&rct->color_matrix, settings->exposure); - matrix4_color_saturate(&rct->color_matrix, settings->saturation); - matrix4_color_hue(&rct->color_matrix, settings->hue); + matrix4_color_exposure(&rct->color_matrix, rs_settings_get_exposure(settings)); + matrix4_color_saturate(&rct->color_matrix, rs_settings_get_saturation(settings)); + matrix4_color_hue(&rct->color_matrix, rs_settings_get_hue(settings)); } if (mask & MASK_WB) { - rct->pre_mul[R] = (1.0+settings->warmth)*(2.0-settings->tint); + const gfloat warmth = rs_settings_get_warmth(settings); + const gfloat tint = rs_settings_get_tint(settings); + rct->pre_mul[R] = (1.0+warmth)*(2.0-tint); rct->pre_mul[G] = 1.0; - rct->pre_mul[B] = (1.0-settings->warmth)*(2.0-settings->tint); + rct->pre_mul[B] = (1.0-warmth)*(2.0-tint); rct->pre_mul[G2] = 1.0; } if (mask & MASK_CONTRAST) { - if (rct->contrast != settings->contrast) + if (rct->contrast != rs_settings_get_contrast(settings)) { update_tables = TRUE; - rct->contrast = settings->contrast; + rct->contrast = rs_settings_get_contrast(settings); } } if (mask & MASK_CURVE) { - if (settings->curve_nknots < 2) + const gint nknots = rs_settings_get_curve_nknots(settings); + + if (nknots > 1) { - if (rct->knots) + gfloat *knots = rs_settings_get_curve_knots(settings); + if (knots) { - g_free(rct->knots); - rct->knots = NULL; - rct->nknots = 0; + rct->nknots = nknots; + rs_spline_t *spline = rs_spline_new(knots, rct->nknots, NATURAL); + rs_spline_sample(spline, rct->curve_samples, 65536); + rs_spline_destroy(spline); + g_free(knots); update_tables = TRUE; } } - if ((settings->curve_nknots > 1) && (rct->nknots != settings->curve_nknots)) - { - rct->nknots = settings->curve_nknots; - if (rct->knots) - { - g_free(rct->knots); - rct->knots = NULL; - } - rct->knots = g_new0(gfloat, rct->nknots*2); - } - if ((settings->curve_nknots > 1) && (rct->nknots == settings->curve_nknots)) + else { - if (memcmp(rct->knots, settings->curve_knots, rct->nknots*sizeof(gfloat)*2) != 0) - { - memcpy(rct->knots, settings->curve_knots, rct->nknots*sizeof(gfloat)*2); - if (rct->spline) - rs_spline_destroy(rct->spline); - rct->spline = rs_spline_new(rct->knots, rct->nknots, NATURAL); - rs_spline_sample(rct->spline, rct->curve_samples, 65536); - update_tables = TRUE; - } + gint i; + for(i=0;i<65536;i++) + rct->curve_samples[i] = ((gfloat)i)/65536.0; } } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-color-transform.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-color-transform.h --- rawstudio-1.1.1/src/rs-color-transform.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-color-transform.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -23,6 +23,7 @@ #include #include "rawstudio.h" #include "rs-math.h" +#include "rs-settings.h" #define RS_TYPE_COLOR_TRANSFORM rs_color_transform_get_type() #define RS_COLOR_TRANSFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_COLOR_TRANSFORM, RSColorTransform)) @@ -51,7 +52,7 @@ extern gboolean rs_color_transform_set_contrast(RSColorTransform *rct, gdouble contrast); extern gboolean rs_color_transform_set_premul(RSColorTransform *rct, gfloat *premul); extern gboolean rs_color_transform_set_matrix(RSColorTransform *rct, RS_MATRIX4 *matrix); -void rs_color_transform_set_from_settings(RSColorTransform *rct, RS_SETTINGS_DOUBLE *settings, guint mask); +void rs_color_transform_set_from_settings(RSColorTransform *rct, RSSettings *settings, const RSSettingsMask mask); extern gboolean rs_color_transform_set_curve(RSColorTransform *rct, gfloat *curve); extern void rs_color_transform_set_all(RSColorTransform *rct, gdouble gamma, gdouble contrast, gfloat *premul, RS_MATRIX4 *matrix, gfloat *curve); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-curve.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-curve.c --- rawstudio-1.1.1/src/rs-curve.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-curve.c 2009-04-09 22:21:45.000000000 +0100 @@ -44,7 +44,7 @@ guint histogram_data[4][256]; guchar *bg_buffer; RSColorTransform *rct; - RS_SETTINGS_DOUBLE *settings; + RSSettings *settings; }; struct _RSCurveWidgetClass @@ -122,7 +122,7 @@ curve->spline = rs_spline_new(NULL, 0, NATURAL); curve->marker = -1.0; curve->bg_buffer = NULL; - curve->settings = rs_settings_double_new(); + curve->settings = rs_settings_new(); curve->settings->saturation = 0.0f; /* We want the histogram to be desaturated */ curve->rct = rs_color_transform_new(); rs_color_transform_set_gamma(curve->rct, GAMMA); @@ -198,9 +198,9 @@ * @param setting Settings to use, curve and saturation will be ignored */ void -rs_curve_draw_histogram(RSCurveWidget *curve, RS_IMAGE16 *image, RS_SETTINGS_DOUBLE *settings) +rs_curve_draw_histogram(RSCurveWidget *curve, RS_IMAGE16 *image, RSSettings *settings) { - rs_settings_double_copy(settings, curve->settings, MASK_ALL-MASK_CURVE); + rs_settings_copy(settings, MASK_ALL-MASK_CURVE-MASK_SATURATION, curve->settings); rs_color_transform_set_from_settings(curve->rct, curve->settings, MASK_ALL); rs_color_transform_make_histogram(curve->rct, image, curve->histogram_data); @@ -305,6 +305,36 @@ } /** + * Set knots of a RSCurveWidget + * @param curve A RSCurveWidget + * @param knots An array of knots (two values/knot) + * @param nknots Number of knots + */ +void +rs_curve_widget_set_knots(RSCurveWidget *curve, const gfloat *knots, const guint nknots) +{ + gint i; + + g_assert(RS_IS_CURVE_WIDGET(curve)); + + /* Free thew current spline */ + rs_spline_destroy(curve->spline); + + /* Allocate new spline */ + curve->spline = rs_spline_new(NULL, 0, NATURAL); + + /* Add the knot */ + for(i=0;ispline, knots[i*2], knots[i*2+1]); + + /* Redraw the widget */ + rs_curve_draw(curve); + + /* Propagate the change */ + rs_curve_changed(curve); +} + +/** * Get knots from a RSCurveWidget * @param curve A RSCurveWidget * @param knots An array of knots (two values/knot) (out) diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-curve.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-curve.h --- rawstudio-1.1.1/src/rs-curve.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-curve.h 2009-04-09 22:21:45.000000000 +0100 @@ -62,7 +62,7 @@ * @param setting Settings to use, curve and saturation will be ignored */ extern void -rs_curve_draw_histogram(RSCurveWidget *curve, RS_IMAGE16 *image, RS_SETTINGS_DOUBLE *settings); +rs_curve_draw_histogram(RSCurveWidget *curve, RS_IMAGE16 *image, RSSettings *settings); /** * Add a knot to a curve widget @@ -94,6 +94,15 @@ rs_curve_widget_sample(RSCurveWidget *curve, gfloat *samples, guint nbsamples); /** + * Set knots of a RSCurveWidget + * @param curve A RSCurveWidget + * @param knots An array of knots (two values/knot) + * @param nknots Number of knots + */ +extern void +rs_curve_widget_set_knots(RSCurveWidget *curve, const gfloat *knots, const guint nknots); + +/** * Get knots from a RSCurveWidget * @param curve A RSCurveWidget * @param knots An array of knots (two values/knot) (out) diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-dir-selector.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-dir-selector.c --- rawstudio-1.1.1/src/rs-dir-selector.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-dir-selector.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-dir-selector.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-dir-selector.h --- rawstudio-1.1.1/src/rs-dir-selector.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-dir-selector.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-exif.cc /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-exif.cc --- rawstudio-1.1.1/src/rs-exif.cc 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-exif.cc 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -58,7 +58,16 @@ #if EXIV2_TEST_VERSION(0,13,0) "Exif.Nikon3.Preview", #endif - "Exif.Nikon3.NEFThumbnailSize", + +#if EXIV2_TEST_VERSION(0,18,0) + "Exif.Nikon3.RawImageCenter", +#else + "Exif.Nikon3.NEFThumbnailSize", +#endif + +#if EXIV2_TEST_VERSION(0,17,91) + "Exif.NikonPreview.JPEGInterchangeFormat", +#endif #if EXIV2_TEST_VERSION(0,15,99) /* Exiv2 0.16-pre1 */ // Pentax thumbnail data @@ -106,13 +115,20 @@ rs_exif_load_from_file(const gchar *filename) { RS_EXIF_DATA *exif_data; - Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename); - assert(image.get() != 0); - image->readMetadata(); + try + { + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename); + assert(image.get() != 0); + image->readMetadata(); - exif_data = new Exiv2::ExifData(image->exifData()); + exif_data = new Exiv2::ExifData(image->exifData()); - exif_data_init(exif_data); + exif_data_init(exif_data); + } + catch (Exiv2::AnyError& e) + { + return NULL; + } return exif_data; } @@ -121,15 +137,22 @@ rs_exif_load_from_rawfile(RAWFILE *rawfile) { RS_EXIF_DATA *rs_exif_data; - Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open( - (const Exiv2::byte*) raw_get_map(rawfile), raw_get_filesize(rawfile)); + try + { + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open( + (const Exiv2::byte*) raw_get_map(rawfile), raw_get_filesize(rawfile)); - assert(image.get() != 0); - image->readMetadata(); + assert(image.get() != 0); + image->readMetadata(); - rs_exif_data = new Exiv2::ExifData(image->exifData()); + rs_exif_data = new Exiv2::ExifData(image->exifData()); - exif_data_init(rs_exif_data); + exif_data_init(rs_exif_data); + } + catch (Exiv2::AnyError& e) + { + return NULL; + } return rs_exif_data; } @@ -140,11 +163,18 @@ if (!d) return; - Exiv2::ExifData *data = (Exiv2::ExifData *) d; - Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename); + try + { + Exiv2::ExifData *data = (Exiv2::ExifData *) d; + Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(filename); - image->setExifData(*data); - image->writeMetadata(); + image->setExifData(*data); + image->writeMetadata(); + } + catch (Exiv2::AnyError& e) + { + g_warning("Couldn't add EXIF data to %s", filename); + } } void diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-exif.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-exif.h --- rawstudio-1.1.1/src/rs-exif.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-exif.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-external-editor.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-external-editor.c --- rawstudio-1.1.1/src/rs-external-editor.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-external-editor.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006, 2007, 2008 Anders Brander and + * Copyright (C) 2006, 2007, 2008, 2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -26,6 +26,8 @@ #include "rawstudio.h" #include "rs-photo.h" +static gboolean rs_has_gimp(gint major, gint minor, gint micro); + #define EXPORT_TO_GIMP_TIMEOUT_SECONDS 30 gboolean @@ -59,7 +61,10 @@ reply = dbus_connection_send_with_reply_and_block (bus, message, -1, NULL); if (!reply) { - system("gimp &"); + gint retval = system("gimp &"); + if (retval != 0) + g_warning("system(\"gimp &\") returned: %d\n", retval); + gint i = 0; // FIXME: We need to sleep a bit with GIMP 2.6 as it doesn't wait until it has opened the photo before it replies... @@ -89,3 +94,83 @@ else return FALSE; } + +static gboolean +rs_has_gimp(gint major, gint minor, gint micro) { + FILE *fp; + char line[128]; + int _major, _minor, _micro; + gboolean retval = FALSE; + + fp = popen("gimp -v","r"); + if (fgets( line, sizeof line, fp) == NULL) + { + g_warning("fgets returned: %d\n", retval); + return FALSE; + } + pclose(fp); + +#if GLIB_CHECK_VERSION(2,14,0) + GRegex *regex; + gchar **tokens; + + regex = g_regex_new(".*([0-9])\x2E([0-9]+)\x2E([0-9]+).*", 0, 0, NULL); + tokens = g_regex_split(regex, line, 0); + g_regex_unref(regex); + + if (tokens[1]) + _major = atoi(tokens[1]); + else + { + g_strfreev(tokens); + return FALSE; + } + + if (_major > major) { + retval = TRUE; + } else if (_major == major) { + + if (tokens[2]) + _minor = atoi(tokens[2]); + else + { + g_strfreev(tokens); + return FALSE; + } + + if (_minor > minor) { + retval = TRUE; + } else if (_minor == minor) { + + if (tokens[3]) + _micro = atoi(tokens[3]); + else + { + g_strfreev(tokens); + return FALSE; + } + + if (_micro >= micro) { + retval = TRUE; + } + } + } + g_strfreev(tokens); +#else + sscanf(line,"GNU Image Manipulation Program version %d.%d.%d", &_major, &_minor, &_micro); + + if (_major > major) { + retval = TRUE; + } else if (_major == major) { + if (_minor > minor) { + retval = TRUE; + } else if (_minor == minor) { + if (_micro >= micro) { + retval = TRUE; + } + } + } +#endif + + return retval; +} diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-external-editor.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-external-editor.h --- rawstudio-1.1.1/src/rs-external-editor.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-external-editor.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006, 2007, 2008 Anders Brander and + * Copyright (C) 2006, 2007, 2008, 2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-filetypes.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-filetypes.c --- rawstudio-1.1.1/src/rs-filetypes.c 1970-01-01 01:00:00.000000000 +0100 +++ rawstudio-1.2/src/rs-filetypes.c 2009-04-09 22:21:45.000000000 +0100 @@ -0,0 +1,233 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "rs-filetypes.h" +#include "conf_interface.h" + +static gint tree_sort(gconstpointer a, gconstpointer b); +static gpointer filetype_search(GTree *tree, const gchar *filename, gint *priority); +static void filetype_add_to_tree(GTree *tree, const gchar *extension, const gchar *description, const gpointer func, const gint priority); + +static gboolean rs_filetype_is_initialized = FALSE; +static GStaticMutex lock = G_STATIC_MUTEX_INIT; +static GTree *loaders = NULL; +static GTree *meta_loaders = NULL; + +typedef struct { + gchar *extension; + gchar *description; + gint priority; +} RSFiletype; + +struct search_needle { + gchar *extension; + gint *priority; + RSFileLoaderFunc *func; +}; + +static gint +tree_sort(gconstpointer a, gconstpointer b) +{ + gint extension; + RSFiletype *type_a = (RSFiletype *) a; + RSFiletype *type_b = (RSFiletype *) b; + + extension = g_utf8_collate(type_a->extension, type_b->extension); + if (extension == 0) + return type_a->priority - type_b->priority; + else + return extension; +} + +gboolean +filetype_search_traverse(gpointer key, gpointer value, gpointer data) +{ + RSFiletype *type = key; + RSFileLoaderFunc *func = value; + struct search_needle *needle = data; + + if (g_utf8_collate(needle->extension, type->extension) == 0) + { + if (type->priority > *(needle->priority)) + { + needle->func = func; + *(needle->priority) = type->priority; + return TRUE; + } + } + + return FALSE; +} + +static gpointer +filetype_search(GTree *tree, const gchar *filename, gint *priority) +{ + gpointer func = NULL; + const gchar *extension; + gboolean load_8bit = FALSE; + + extension = g_strrstr(filename, "."); + + if (extension) + { + struct search_needle needle; + + needle.extension = g_utf8_strdown(extension, -1); + needle.priority = priority; + needle.func = NULL; + + g_static_mutex_lock(&lock); + g_tree_foreach(tree, filetype_search_traverse, &needle); + g_static_mutex_unlock(&lock); + + g_free(needle.extension); + func = needle.func; + } + + /* This is just a nasty hack to make "Load 8-bit photos" work in release 1.2 */ + rs_conf_get_boolean(CONF_LOAD_GDK, &load_8bit); + if ((!load_8bit) && (func == rs_image16_open_gdk)) + func = NULL; + + return func; +} + +static void +filetype_add_to_tree(GTree *tree, const gchar *extension, const gchar *description, const gpointer func, const gint priority) +{ + RSFiletype *filetype = g_new(RSFiletype, 1); + + g_assert(rs_filetype_is_initialized); + g_assert(tree != NULL); + g_assert(extension != NULL); + g_assert(extension[0] == '.'); + g_assert(description != NULL); + g_assert(func != NULL); + g_assert(priority > 0); + + filetype->extension = g_strdup(extension); + filetype->description = g_strdup(description); + filetype->priority = priority; + + g_static_mutex_lock(&lock); + g_tree_insert(tree, filetype, func); + g_static_mutex_unlock(&lock); +} + +/** + * Initialize the RSFiletype subsystem, this MUST be called before any other + * rs_filetype_*-functions + */ +void +rs_filetype_init() +{ + g_static_mutex_lock(&lock); + if (rs_filetype_is_initialized) + return; + rs_filetype_is_initialized = TRUE; + loaders = g_tree_new(tree_sort); + meta_loaders = g_tree_new(tree_sort); + g_static_mutex_unlock(&lock); +} + +/** + * Register a new image loader + * @param extension The filename extension including the dot, ie: ".cr2" + * @param description A human readable description of the file-format/loader + * @param loader The loader function + * @param priority A loader priority, lowest is served first. + */ +void +rs_filetype_register_loader(const gchar *extension, const gchar *description, const RSFileLoaderFunc loader, const gint priority) +{ + filetype_add_to_tree(loaders, extension, description, loader, priority); +} + +/** + * Register a new metadata loader + * @param extension The filename extension including the dot, ie: ".cr2" + * @param description A human readable description of the file-format/loader + * @param meta_loader The loader function + * @param priority A loader priority, lowest is served first. + */ +void +rs_filetype_register_meta_loader(const gchar *extension, const gchar *description, const RSFileMetaLoaderFunc meta_loader, const gint priority) +{ + filetype_add_to_tree(meta_loaders, extension, description, meta_loader, priority); +} + +/** + * Check if we support loading a given extension + * @param filename A filename or extension to look-up + */ +gboolean +rs_filetype_can_load(const gchar *filename) +{ + gboolean can_load = FALSE; + gint priority = 0; + + g_assert(rs_filetype_is_initialized); + g_assert(filename != NULL); + + if (filetype_search(loaders, filename, &priority)) + can_load = TRUE; + + return can_load; +} + +/** + * Load an image according to registered loaders + * @param filename The file to load + * @param half_size Set to TRUE to avoid preparing image for debayer + * @return A new RS_IMAGE16 or NULL if the loading failed + */ +RS_IMAGE16 * +rs_filetype_load(const gchar *filename, const gboolean half_size) +{ + RS_IMAGE16 *image = NULL; + gint priority = 0; + RSFileLoaderFunc loader; + + g_assert(rs_filetype_is_initialized); + g_assert(filename != NULL); + + while((loader = filetype_search(loaders, filename, &priority)) && !image) + image = loader(filename, half_size); + + return image; +} + +/** + * Load metadata from a specified file + * @param filename The file to load metadata from + * @param meta A RSMetadata structure to load everything into + */ +void +rs_filetype_meta_load(const gchar *filename, RSMetadata *meta) +{ + gint priority = 0; + RSFileMetaLoaderFunc loader; + + g_assert(rs_filetype_is_initialized); + g_assert(filename != NULL); + g_assert(RS_IS_METADATA(meta)); + + if((loader = filetype_search(meta_loaders, filename, &priority))) + loader(filename, meta); +} diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-filetypes.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-filetypes.h --- rawstudio-1.1.1/src/rs-filetypes.h 1970-01-01 01:00:00.000000000 +0100 +++ rawstudio-1.2/src/rs-filetypes.h 2009-04-09 22:21:45.000000000 +0100 @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#ifndef RS_FILETYPES_H +#define RS_FILETYPES_H + +#include "rs-metadata.h" +#include "rs-image.h" + +typedef RS_IMAGE16 *(*RSFileLoaderFunc)(const gchar *filename, const gboolean half_size); +typedef void (*RSFileMetaLoaderFunc)(const gchar *filename, RSMetadata *meta); +typedef gboolean (*RSFileSaverFunc)(RS_PHOTO *photo, const gchar *filename, const gint width, const gint height, const gboolean keep_aspect, const gdouble scale, const gint snapshot, const RS_CMS *cms); + +/** + * Initialize the RSFiletype subsystem, this MUST be called before any other + * rs_filetype_*-functions + */ +extern void rs_filetype_init(); + +/** + * Register a new image loader + * @param extension The filename extension including the dot, ie: ".cr2" + * @param description A human readable description of the file-format/loader + * @param loader The loader function + * @param priority A loader priority, lowest is served first. + */ +extern void rs_filetype_register_loader(const gchar *extension, const gchar *description, const RSFileLoaderFunc loader, const gint priority); + +/** + * Register a new metadata loader + * @param extension The filename extension including the dot, ie: ".cr2" + * @param description A human readable description of the file-format/loader + * @param meta_loader The loader function + * @param priority A loader priority, lowest is served first. + */ +extern void rs_filetype_register_meta_loader(const gchar *extension, const gchar *description, const RSFileMetaLoaderFunc meta_loader, const gint priority); + +/** + * Check if we support loading a given extension + * @param filename A filename or extension to look-up + */ +extern gboolean rs_filetype_can_load(const gchar *filename); + +/** + * Load an image according to registered loaders + * @param filename The file to load + * @param half_size Set to TRUE to avoid preparing image for debayer + * @return A new RS_IMAGE16 or NULL if the loading failed + */ +extern RS_IMAGE16 *rs_filetype_load(const gchar *filename, const gboolean half_size); + +/** + * Load metadata from a specified file + * @param filename The file to load metadata from + * @param meta A RSMetadata structure to load everything into + */ +extern void rs_filetype_meta_load(const gchar *filename, RSMetadata *meta); + +#endif /* RS_FILETYPES_H */ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-histogram.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-histogram.c --- rawstudio-1.1.1/src/rs-histogram.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-histogram.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -21,6 +21,9 @@ #include "rs-histogram.h" #include "rs-color-transform.h" #include "rs-math.h" +#include "rs-color-transform.h" + +/* FIXME: Do some cleanup in finalize! */ struct _RSHistogramWidget { @@ -29,6 +32,7 @@ gint height; GdkPixmap *blitter; RS_IMAGE16 *image; + RSSettings *settings; RSColorTransform *rct; guint input_samples[4][256]; guint *output_samples[4]; @@ -69,7 +73,8 @@ hist->output_samples[2] = NULL; hist->output_samples[3] = NULL; hist->image = NULL; - hist->rct = NULL; + hist->settings = NULL; + hist->rct = rs_color_transform_new(); hist->blitter = NULL; g_signal_connect(G_OBJECT(hist), "size-allocate", G_CALLBACK(size_allocate), NULL); @@ -135,17 +140,22 @@ } /** - * Set color transform to be used when rendering histogram + * Set a RSSettings to use * @param histogram A RSHistogramWidget - * @param rct A RSColorTransform + * @param settings A RSSettings object to use */ void -rs_histogram_set_color_transform(RSHistogramWidget *histogram, RSColorTransform *rct) +rs_histogram_set_settings(RSHistogramWidget *histogram, RSSettings *settings) { g_return_if_fail (RS_IS_HISTOGRAM_WIDGET(histogram)); - g_return_if_fail (rct); + g_return_if_fail (RS_IS_SETTINGS(settings)); + + if (histogram->settings) + g_object_unref(histogram->settings); + + histogram->settings = g_object_ref(settings); - histogram->rct = rct; + rs_color_transform_set_from_settings(histogram->rct, histogram->settings, MASK_ALL); rs_histogram_redraw(histogram); } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-histogram.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-histogram.h --- rawstudio-1.1.1/src/rs-histogram.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-histogram.h 2009-04-09 22:21:45.000000000 +0100 @@ -22,11 +22,11 @@ extern void rs_histogram_set_image(RSHistogramWidget *histogram, RS_IMAGE16 *image); /** - * Set color transform to be used when rendering histogram + * Set a RSSettings to use * @param histogram A RSHistogramWidget - * @param rct A RSColorTransform + * @param settings A RSSettings object to use */ -extern void rs_histogram_set_color_transform(RSHistogramWidget *histogram, RSColorTransform *rct); +extern void rs_histogram_set_settings(RSHistogramWidget *histogram, RSSettings *settings); /** * Redraw a RSHistogramWidget diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-image.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-image.c --- rawstudio-1.1.1/src/rs-image.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-image.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -29,6 +29,9 @@ #include "rawstudio.h" #include "rs-image.h" +#define PITCH(width) ((((width)+15)/16)*16) +#define SWAP( a, b ) a ^= b ^= a ^= b + struct struct_program { gint divisor; gint scale[9]; @@ -807,6 +810,7 @@ rsi->rowstride = rsi->pitch * pixelsize; rsi->channels = channels; rsi->pixelsize = pixelsize; + rsi->filters = 0; rsi->pixels = g_new0(gushort, rsi->h*rsi->rowstride); return(rsi); } @@ -920,7 +924,7 @@ + program->scale[6] * *line2 + program->scale[7] * *line2 + program->scale[8] * *(line2+input->pixelsize); - accu /= program->divisor; + accu = (accu+128)>>8; _CLAMP65535(accu); *dest = accu; line0++; line1++; line2++; dest++; @@ -940,7 +944,7 @@ + program->scale[6] * *(line2-input->pixelsize) + program->scale[7] * *line2 + program->scale[8] * *(line2+input->pixelsize); - accu /= program->divisor; + accu = (accu+128)>>8; _CLAMP65535(accu); *dest = accu; line0++; line1++; line2++; dest++; @@ -959,7 +963,7 @@ + program->scale[6] * *(line2-input->pixelsize) + program->scale[7] * *line2 + program->scale[8] * *line2; - accu /= program->divisor; + accu = (accu+128)>>8; _CLAMP65535(accu); *dest = accu; line0++; line1++; line2++; dest++; @@ -998,7 +1002,6 @@ program->scale[6] = (gint) (matrix->coeff[2][0]*256.0); program->scale[7] = (gint) (matrix->coeff[2][1]*256.0); program->scale[8] = (gint) (matrix->coeff[2][2]*256.0); - program->divisor = (gint) (scaler * 256.0); for(row = 0; row < input->h; row++) { @@ -1221,7 +1224,7 @@ { dcraw_load_raw(raw); - if (half_size) + if (half_size || (raw->filters == 0)) { image = rs_image16_new(raw->raw.width, raw->raw.height, raw->raw.colors, 4); rs_image16_open_dcraw_apply_black_and_shift_half_size(raw, image); @@ -1253,7 +1256,15 @@ { gushort *dst, *src; gint row, col; - gint64 shift = (gint64) (16.0-log((gdouble) raw->rgbMax)/log(2.0)+0.5); + gint rawsize = raw->raw.width * raw->raw.height * 3; + gint max = raw->rgbMax; + + /* dcraw calculates 'wrong' rgbMax for Sigma's, let's calculate our own */ + if (raw->raw.colors == 3) + for(row=0;rowraw.image)[row], max); + + gint64 shift = (gint64) (16.0-log((gdouble) max)/log(2.0)+0.5); for(row=0;row<(raw->raw.height);row++) { diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-image.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-image.h --- rawstudio-1.1.1/src/rs-image.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-image.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -21,6 +21,7 @@ #define RS_IMAGE_H #include +#include "rawstudio.h" #define RS_TYPE_IMAGE16 (rs_image16_get_type ()) #define RS_IMAGE16(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_IMAGE16, RS_IMAGE16)) @@ -29,6 +30,22 @@ #define RS_IS_IMAGE16_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_IMAGE16)) #define RS_IMAGE16_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_IMAGE16, RS_IMAGE16Class)) +struct _rs_image16 { + GObject parent; + gint w; + gint h; + gint pitch; + gint rowstride; + guint channels; + guint pixelsize; /* the size of a pixel in SHORTS */ + guint orientation; + gushort *pixels; + guint filters; + guint fourColorFilters; + gboolean preview; + gboolean dispose_has_run; +}; + typedef struct _RS_IMAGE16Class RS_IMAGE16Class; struct _RS_IMAGE16Class { diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-jpeg.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-jpeg.c --- rawstudio-1.1.1/src/rs-jpeg.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-jpeg.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -107,9 +107,11 @@ if (st.st_size>0) if ((fd = open(profile_filename, O_RDONLY)) != -1) { + gint bytes_read = 0; len = st.st_size; buffer = g_malloc(len); - read(fd, buffer, len); + while(bytes_read < len) + bytes_read += read(fd, buffer+bytes_read, len-bytes_read); close(fd); rs_jpeg_write_icc_profile(&cinfo, buffer, len); g_free(buffer); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-jpeg.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-jpeg.h --- rawstudio-1.1.1/src/rs-jpeg.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-jpeg.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-math.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-math.c --- rawstudio-1.1.1/src/rs-math.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-math.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-math.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-math.h --- rawstudio-1.1.1/src/rs-math.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-math.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-metadata.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-metadata.c --- rawstudio-1.1.1/src/rs-metadata.c 1970-01-01 01:00:00.000000000 +0100 +++ rawstudio-1.2/src/rs-metadata.c 2009-04-09 22:21:45.000000000 +0100 @@ -0,0 +1,465 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include /* g_unlink() */ +#include +#include +#include +#include "gettext.h" +#include "rs-metadata.h" +#include "rawstudio.h" +#include "rs-math.h" +#include "rs-filetypes.h" +#include "rs-utils.h" + +G_DEFINE_TYPE (RSMetadata, rs_metadata, G_TYPE_OBJECT) + +static void +rs_metadata_dispose (GObject *object) +{ + RSMetadata *metadata = RS_METADATA(object); + + if (!metadata->dispose_has_run) + { + metadata->dispose_has_run = TRUE; + + if (metadata->make_ascii) + g_free(metadata->make_ascii); + if (metadata->model_ascii) + g_free(metadata->model_ascii); + if (metadata->time_ascii) + g_free(metadata->time_ascii); + if (metadata->thumbnail) + g_object_unref(metadata->thumbnail); + } + + /* Chain up */ + if (G_OBJECT_CLASS (rs_metadata_parent_class)->dispose) + G_OBJECT_CLASS (rs_metadata_parent_class)->dispose (object); +} + +static void +rs_metadata_finalize (GObject *object) +{ + if (G_OBJECT_CLASS (rs_metadata_parent_class)->finalize) + G_OBJECT_CLASS (rs_metadata_parent_class)->finalize (object); +} + +static void +rs_metadata_class_init (RSMetadataClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = rs_metadata_dispose; + object_class->finalize = rs_metadata_finalize; +} + +static void +rs_metadata_init (RSMetadata *metadata) +{ + gint i; + + metadata->dispose_has_run = FALSE; + metadata->make = MAKE_UNKNOWN; + metadata->make_ascii = NULL; + metadata->model_ascii = NULL; + metadata->time_ascii = NULL; + metadata->timestamp = -1; + metadata->orientation = 0; + metadata->aperture = -1.0; + metadata->iso = 0; + metadata->shutterspeed = -1.0; + metadata->thumbnail_start = 0; + metadata->thumbnail_length = 0; + metadata->preview_start = 0; + metadata->preview_length = 0; + metadata->preview_planar_config = 0; + metadata->preview_width = 0; + metadata->preview_height = 0; + metadata->cam_mul[0] = -1.0; + metadata->contrast = -1.0; + metadata->saturation = -1.0; + metadata->color_tone = -1.0; + metadata->focallength = -1; + for(i=0;i<4;i++) + metadata->cam_mul[i] = 1.0f; + matrix4_identity(&metadata->adobe_coeff); + metadata->thumbnail = NULL; +} + +RSMetadata* +rs_metadata_new (void) +{ + return g_object_new (RS_TYPE_METADATA, NULL); +} + +#define METACACHEVERSION 1 +static void +rs_metadata_cache_save(RSMetadata *metadata, const gchar *filename) +{ + gchar *basename; + gchar *dotdir = rs_dotdir_get(filename); + gchar *cache_filename; + gchar *thumb_filename; + xmlTextWriterPtr writer; + + if (!dotdir) + return; + + basename = g_path_get_basename(filename); + + cache_filename = g_strdup_printf("%s/%s.metacache.xml", dotdir, basename); + + writer = xmlNewTextWriterFilename(cache_filename, 0); + if (writer) + { + xmlTextWriterSetIndent(writer, 1); + + xmlTextWriterStartDocument(writer, NULL, "ISO-8859-1", NULL); + xmlTextWriterStartElement(writer, BAD_CAST "rawstudio-metadata"); + xmlTextWriterWriteFormatAttribute(writer, BAD_CAST "version", "%d", METACACHEVERSION); + if (metadata->make != MAKE_UNKNOWN) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "make", "%d", metadata->make); + if (metadata->make_ascii) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "make_ascii", metadata->make_ascii); + if (metadata->make_ascii) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "model_ascii", metadata->model_ascii); + if (metadata->time_ascii) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "time_ascii", metadata->time_ascii); + if (metadata->timestamp > -1) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "timestamp", "%d", metadata->timestamp); + /* Can we make orientation conditional? */ + xmlTextWriterWriteFormatElement(writer, BAD_CAST "orientation", "%u", metadata->orientation); + if (metadata->aperture > -1.0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "aperture", "%f", metadata->aperture); + if (metadata->iso > 0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "iso", "%u", metadata->iso); + if (metadata->shutterspeed > -1.0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "shutterspeed", "%f", metadata->shutterspeed); + if (metadata->cam_mul[0] > 0.0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "cam_mul", "%f %f %f %f", metadata->cam_mul[0], metadata->cam_mul[1], metadata->cam_mul[2], metadata->cam_mul[3]); + if (metadata->contrast > -1.0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "contrast", "%f", metadata->contrast); + if (metadata->saturation > -1.0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "saturation", "%f", metadata->saturation); + if (metadata->color_tone > -1.0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "color_tone", "%f", metadata->color_tone); + if (metadata->focallength > 0) + xmlTextWriterWriteFormatElement(writer, BAD_CAST "focallength", "%d", metadata->focallength); + xmlTextWriterEndDocument(writer); + xmlFreeTextWriter(writer); + } + g_free(cache_filename); + + if (metadata->thumbnail) + { + thumb_filename = g_strdup_printf("%s/%s.thumb.png", dotdir, basename); + gdk_pixbuf_save(metadata->thumbnail, thumb_filename, "png", NULL, NULL); + g_free(thumb_filename); + } + + g_free(basename); +} + +static gboolean +rs_metadata_cache_load(RSMetadata *metadata, const gchar *filename) +{ + gboolean ret = FALSE; + gchar *basename; + gchar *dotdir = rs_dotdir_get(filename); + gchar *cache_filename; + gchar *thumb_filename; + xmlDocPtr doc; + xmlNodePtr cur; + xmlChar *val; + gint version = 0; + + if (!dotdir) + return FALSE; + + basename = g_path_get_basename(filename); + + cache_filename = g_strdup_printf("%s/%s.metacache.xml", dotdir, basename); + if (!g_file_test(cache_filename, G_FILE_TEST_IS_REGULAR)) + { + g_free(basename); + g_free(cache_filename); + return FALSE; + } + + doc = xmlParseFile(cache_filename); + if(!doc) + return FALSE; + + cur = xmlDocGetRootElement(doc); + + if ((!xmlStrcmp(cur->name, BAD_CAST "rawstudio-metadata"))) + { + val = xmlGetProp(cur, BAD_CAST "version"); + if (val) + version = atoi((gchar *) val); + } + + if (version == METACACHEVERSION) + { + cur = cur->xmlChildrenNode; + while(cur) + { + if ((!xmlStrcmp(cur->name, BAD_CAST "make"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->make = atoi((gchar *) val); + xmlFree(val); + } + + else if ((!xmlStrcmp(cur->name, BAD_CAST "make_ascii"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->make_ascii = g_strdup((gchar *)val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "model_ascii"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->model_ascii = g_strdup((gchar *)val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "time_ascii"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->time_ascii = g_strdup((gchar *)val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "timestamp"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->timestamp = atoi((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "orientation"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->orientation = atoi((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "aperture"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->aperture = rs_atof((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "iso"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->iso = atoi((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "shutterspeed"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->shutterspeed = rs_atof((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "cam_mul"))) + { + gchar **vals; + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + vals = g_strsplit((gchar *)val, " ", 4); + if (vals[0]) + { + metadata->cam_mul[0] = atoi((gchar *) vals[0]); + if (vals[1]) + { + metadata->cam_mul[1] = atoi((gchar *) vals[1]); + if (vals[2]) + { + metadata->cam_mul[2] = atoi((gchar *) vals[2]); + if (vals[3]) + metadata->cam_mul[3] = atoi((gchar *) vals[3]); + } + } + } + g_strfreev(vals); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "contrast"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->contrast = rs_atof((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "saturation"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->saturation = rs_atof((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "color_tone"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->color_tone = rs_atof((gchar *) val); + xmlFree(val); + } + else if ((!xmlStrcmp(cur->name, BAD_CAST "focallength"))) + { + val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); + metadata->focallength = atoi((gchar *) val); + xmlFree(val); + } + + cur = cur->next; + } + ret = TRUE; + } + + xmlFreeDoc(doc); + g_free(cache_filename); + + if (ret == TRUE) + { + thumb_filename = g_strdup_printf("%s/%s.thumb.png", dotdir, basename); + metadata->thumbnail = gdk_pixbuf_new_from_file(thumb_filename, NULL); + g_free(thumb_filename); + if (!metadata->thumbnail) + ret = FALSE; + } + + g_free(basename); + + return ret; +} +#undef METACACHEVERSION + +RSMetadata * +rs_metadata_new_from_file(const gchar *filename) +{ + RSMetadata *metadata = rs_metadata_new(); + + if (!rs_metadata_cache_load(metadata, filename)) + { + rs_metadata_load_from_file(metadata, filename); + rs_metadata_cache_save(metadata, filename); + } + + return metadata; +} + +gboolean +rs_metadata_load_from_file(RSMetadata *metadata, const gchar *filename) +{ + gboolean ret = FALSE; + + g_assert(filename != NULL); + g_assert(RS_IS_METADATA(metadata)); + + /* FIXME: Fix the damned return value from meta-loaders! */ + ret = TRUE; + rs_filetype_meta_load(filename, metadata); + + return ret; +} + +void +rs_metadata_normalize_wb(RSMetadata *metadata) +{ + gdouble div; + + g_assert(RS_IS_METADATA(metadata)); + + if ((metadata->cam_mul[1]+metadata->cam_mul[3])!=0.0) + { + div = 2/(metadata->cam_mul[1]+metadata->cam_mul[3]); + metadata->cam_mul[0] *= div; + metadata->cam_mul[1] = 1.0; + metadata->cam_mul[2] *= div; + metadata->cam_mul[3] = 1.0; + } + return; +} + +gchar * +rs_metadata_get_short_description(RSMetadata *metadata) +{ + GString *label = g_string_new(""); + gchar *ret = NULL; + + g_assert(RS_IS_METADATA(metadata)); + + if (metadata->focallength>0) + g_string_append_printf(label, _("%dmm "), metadata->focallength); + if (metadata->shutterspeed > 0.0 && metadata->shutterspeed < 4) + g_string_append_printf(label, _("%.1fs "), 1/metadata->shutterspeed); + else if (metadata->shutterspeed >= 4) + g_string_append_printf(label, _("1/%.0fs "), metadata->shutterspeed); + if (metadata->aperture!=0.0) + g_string_append_printf(label, _("F/%.1f "), metadata->aperture); + if (metadata->iso!=0) + g_string_append_printf(label, _("ISO%d"), metadata->iso); + + ret = label->str; + + g_string_free(label, FALSE); + + return ret; +} + +GdkPixbuf * +rs_metadata_get_thumbnail(RSMetadata *metadata) +{ + g_assert(RS_IS_METADATA(metadata)); + + if (metadata->thumbnail) + g_object_ref(metadata->thumbnail); + + return metadata->thumbnail; +} + +/** + * Deletes the on-disk cache (if any) for a photo + * @param filename The full path to the photo - not the cache itself + */ +void +rs_metadata_delete_cache(const gchar *filename) +{ + gchar *basename; + gchar *dotdir = rs_dotdir_get(filename); + gchar *cache_filename; + gchar *thumb_filename; + + if (!dotdir) + return; + + g_assert(filename); + + basename = g_path_get_basename(filename); + + /* Delete the metadata cache itself */ + cache_filename = g_strdup_printf("%s/%s.metacache.xml", dotdir, basename); + g_unlink(cache_filename); + g_free(cache_filename); + + /* Delete the thumbnail */ + thumb_filename = g_strdup_printf("%s/%s.thumb.png", dotdir, basename); + g_unlink(thumb_filename); + g_free(thumb_filename); + + /* Clean up please */ + g_free(dotdir); + g_free(basename); +} diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-metadata.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-metadata.h --- rawstudio-1.1.1/src/rs-metadata.h 1970-01-01 01:00:00.000000000 +0100 +++ rawstudio-1.2/src/rs-metadata.h 2009-04-09 22:21:45.000000000 +0100 @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef RS_METADATA_H +#define RS_METADATA_H + +#include +#include "rawstudio.h" /* FIXME: This is so broken! */ + +G_BEGIN_DECLS + +#define RS_TYPE_METADATA rs_metadata_get_type() +#define RS_METADATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_METADATA, RSMetadata)) +#define RS_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_METADATA, RSMetadataClass)) +#define RS_IS_METADATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_METADATA)) +#define RS_IS_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_METADATA)) +#define RS_METADATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_METADATA, RSMetadataClass)) + +typedef enum { + MAKE_UNKNOWN = 0, + MAKE_CANON, + MAKE_EPSON, + MAKE_FUJIFILM, + MAKE_KODAK, + MAKE_LEICA, + MAKE_MINOLTA, + MAKE_NIKON, + MAKE_OLYMPUS, + MAKE_PANASONIC, + MAKE_PENTAX, + MAKE_PHASEONE, + MAKE_SAMSUNG, + MAKE_SIGMA, + MAKE_SONY, +} RS_MAKE; + +struct _RSMetadata { + GObject parent; + gboolean dispose_has_run; + RS_MAKE make; + gchar *make_ascii; + gchar *model_ascii; + gchar *time_ascii; + GTime timestamp; + gushort orientation; + gfloat aperture; + gushort iso; + gfloat shutterspeed; + guint thumbnail_start; + guint thumbnail_length; + guint preview_start; + guint preview_length; + guint16 preview_planar_config; + guint preview_width; + guint preview_height; + guint16 preview_bits [3]; + gdouble cam_mul[4]; + gdouble contrast; + gdouble saturation; + gdouble color_tone; + gshort focallength; + RS_MATRIX4 adobe_coeff; + GdkPixbuf *thumbnail; +}; + +typedef struct { + GObjectClass parent_class; +} RSMetadataClass; + +GType rs_metadata_get_type (void); + +extern RSMetadata *rs_metadata_new (void); +extern RSMetadata *rs_metadata_new_from_file(const gchar *filename); +extern gboolean rs_metadata_load_from_file(RSMetadata *metadata, const gchar *filename); +extern void rs_metadata_normalize_wb(RSMetadata *metadata); +extern gchar *rs_metadata_get_short_description(RSMetadata *metadata); +extern GdkPixbuf *rs_metadata_get_thumbnail(RSMetadata *metadata); + +/** + * Deletes the on-disk cache (if any) for a photo + * @param filename The filename of the PHOTO - not the cache itself + */ +extern void rs_metadata_delete_cache(const gchar *filename); + +G_END_DECLS + +#endif /* RS_METADATA_H */ + diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-photo.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-photo.c --- rawstudio-1.1.1/src/rs-photo.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-photo.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -23,6 +23,9 @@ #include "rs-cache.h" #include "rs-curve.h" #include "rs-preload.h" +#include "rs-metadata.h" +#include "rs-filetypes.h" +#include "rs-utils.h" static void rs_photo_class_init (RS_PHOTOClass *klass); @@ -38,6 +41,7 @@ static GObjectClass *parent_class = NULL; +static void photo_settings_changed_cb(RSSettings *settings, RSSettingsMask mask, gpointer user_data); static void rs_photo_dispose (GObject *obj) { @@ -60,13 +64,16 @@ g_free(photo->filename); if (photo->metadata) - rs_metadata_free(photo->metadata); + g_object_unref(photo->metadata); if (photo->input) g_object_unref(photo->input); for(c=0;c<3;c++) - rs_settings_double_free(photo->settings[c]); + { + g_signal_handler_disconnect(photo->settings[c], photo->settings_signal[c]); + g_object_unref(photo->settings[c]); + } if (photo->crop) g_free(photo->crop); @@ -113,12 +120,31 @@ photo->priority = PRIO_U; photo->metadata = rs_metadata_new(); for(c=0;c<3;c++) - photo->settings[c] = rs_settings_double_new(); + { + photo->settings[c] = rs_settings_new(); + photo->settings_signal[c] = g_signal_connect(photo->settings[c], "settings-changed", G_CALLBACK(photo_settings_changed_cb), photo); + } photo->crop = NULL; photo->angle = 0.0; photo->exported = FALSE; } +static void +photo_settings_changed_cb(RSSettings *settings, RSSettingsMask mask, gpointer user_data) +{ + gint i; + RS_PHOTO *photo = RS_PHOTO(user_data); + + if (mask) + /* Find changed snapshot */ + for(i=0;i<3;i++) + if (settings == photo->settings[i]) + { + g_signal_emit(photo, signals[SETTINGS_CHANGED], 0, mask|(i<<24)); + break; + } +} + /** * Allocates a new RS_PHOTO * @return A new RS_PHOTO @@ -227,140 +253,65 @@ return photo->angle; } +/* Macro to create functions for getting single parameters */ +#define RS_PHOTO_GET_GDOUBLE_VALUE(setting) \ +gdouble \ +rs_photo_get_##setting(RS_PHOTO *photo, const gint snapshot) \ +{ \ + g_assert (RS_IS_PHOTO(photo)); \ + g_assert ((snapshot>=0) && (snapshot<=2)); \ + return photo->settings[snapshot]->setting; \ +} + +RS_PHOTO_GET_GDOUBLE_VALUE(exposure) +RS_PHOTO_GET_GDOUBLE_VALUE(saturation) +RS_PHOTO_GET_GDOUBLE_VALUE(hue) +RS_PHOTO_GET_GDOUBLE_VALUE(contrast) +RS_PHOTO_GET_GDOUBLE_VALUE(warmth) +RS_PHOTO_GET_GDOUBLE_VALUE(tint) +RS_PHOTO_GET_GDOUBLE_VALUE(sharpen) + +#undef RS_PHOTO_GET_GDOUBLE_VALUE + /* Macro to create functions for changing single parameters */ -#define RS_PHOTO_SET_GDOUBLE_VALUE(setting) \ +#define RS_PHOTO_SET_GDOUBLE_VALUE(setting, uppersetting) \ void \ rs_photo_set_##setting(RS_PHOTO *photo, const gint snapshot, const gdouble value) \ { \ - if (!photo) return; \ - g_return_if_fail ((snapshot>=0) && (snapshot<=2)); \ + /*if (!photo) return;*/ \ + /*g_return_if_fail ((snapshot>=0) && (snapshot<=2));*/ \ photo->settings[snapshot]->setting = value; \ - g_signal_emit(photo, signals[SETTINGS_CHANGED], 0, MASK_ALL|(snapshot<<24)); \ + g_signal_emit(photo, signals[SETTINGS_CHANGED], 0, MASK_##uppersetting|(snapshot<<24)); \ } -RS_PHOTO_SET_GDOUBLE_VALUE(exposure) -RS_PHOTO_SET_GDOUBLE_VALUE(saturation) -RS_PHOTO_SET_GDOUBLE_VALUE(hue) -RS_PHOTO_SET_GDOUBLE_VALUE(contrast) -RS_PHOTO_SET_GDOUBLE_VALUE(warmth) -RS_PHOTO_SET_GDOUBLE_VALUE(tint) -RS_PHOTO_SET_GDOUBLE_VALUE(sharpen) +RS_PHOTO_SET_GDOUBLE_VALUE(exposure, EXPOSURE) +RS_PHOTO_SET_GDOUBLE_VALUE(saturation, SATURATION) +RS_PHOTO_SET_GDOUBLE_VALUE(hue, HUE) +RS_PHOTO_SET_GDOUBLE_VALUE(contrast, CONTRAST) +RS_PHOTO_SET_GDOUBLE_VALUE(warmth, WARMTH) +RS_PHOTO_SET_GDOUBLE_VALUE(tint, TINT) +RS_PHOTO_SET_GDOUBLE_VALUE(sharpen, SHARPEN) #undef RS_PHOTO_SET_GDOUBLE_VALUE /** - * Apply settings to a RS_PHOTO from a RS_SETTINGS + * Apply settings to a RS_PHOTO from a RSSettings * @param photo A RS_PHOTO * @param snapshot Which snapshot to affect * @param rs_settings The settings to apply * @param mask A mask for defining which settings to apply */ void -rs_photo_apply_settings(RS_PHOTO *photo, const gint snapshot, const RS_SETTINGS *rs_settings, const gint mask) +rs_photo_apply_settings(RS_PHOTO *photo, const gint snapshot, RSSettings *settings, RSSettingsMask mask) { - gint changed_mask = 0; - - if (!photo) return; - if (!rs_settings) return; - g_return_if_fail ((snapshot>=0) && (snapshot<=2)); + g_assert(RS_IS_PHOTO(photo)); + g_assert(RS_IS_SETTINGS(settings)); + g_assert((snapshot>=0) && (snapshot<=2)); if (mask == 0) return; - if (mask & MASK_EXPOSURE) - if (photo->settings[snapshot]->exposure != GETVAL(rs_settings->exposure)) - { - photo->settings[snapshot]->exposure = GETVAL(rs_settings->exposure); - changed_mask |= MASK_EXPOSURE; - } - - if (mask & MASK_SATURATION) - if (photo->settings[snapshot]->saturation != GETVAL(rs_settings->saturation)) - { - photo->settings[snapshot]->saturation = GETVAL(rs_settings->saturation); - changed_mask |= MASK_SATURATION; - } - - if (mask & MASK_HUE) - if (photo->settings[snapshot]->hue != GETVAL(rs_settings->hue)) - { - photo->settings[snapshot]->hue = GETVAL(rs_settings->hue); - changed_mask |= MASK_HUE; - } - - if (mask & MASK_CONTRAST) - if (photo->settings[snapshot]->contrast != GETVAL(rs_settings->contrast)) - { - photo->settings[snapshot]->contrast = GETVAL(rs_settings->contrast); - changed_mask |= MASK_CONTRAST; - } - - if (mask & MASK_WARMTH) - if (photo->settings[snapshot]->warmth != GETVAL(rs_settings->warmth)) - { - photo->settings[snapshot]->warmth = GETVAL(rs_settings->warmth); - changed_mask |= MASK_WARMTH; - } - - if (mask & MASK_TINT) - if (photo->settings[snapshot]->tint != GETVAL(rs_settings->tint)) - { - photo->settings[snapshot]->tint = GETVAL(rs_settings->tint); - changed_mask |= MASK_TINT; - } - - if (mask & MASK_SHARPEN) - if (photo->settings[snapshot]->sharpen != GETVAL(rs_settings->sharpen)) - { - photo->settings[snapshot]->sharpen = GETVAL(rs_settings->sharpen); - changed_mask |= MASK_SHARPEN; - } - - if (mask & MASK_CURVE) - { - gfloat *knots; - guint nknots; - gint i; - - rs_curve_widget_get_knots(RS_CURVE_WIDGET(rs_settings->curve), &knots, &nknots); - if (nknots != photo->settings[snapshot]->curve_nknots) - { - rs_curve_widget_get_knots(RS_CURVE_WIDGET(rs_settings->curve), &photo->settings[snapshot]->curve_knots, &photo->settings[snapshot]->curve_nknots); - changed_mask |= MASK_CURVE; - } - else - for(i=0;i<(nknots*2);i++) - { - if (knots[i] != photo->settings[snapshot]->curve_knots[i]) - { - rs_curve_widget_get_knots(RS_CURVE_WIDGET(rs_settings->curve), &photo->settings[snapshot]->curve_knots, &photo->settings[snapshot]->curve_nknots); - changed_mask |= MASK_CURVE; - break; - } - } - } - - if (changed_mask) - g_signal_emit(photo, signals[SETTINGS_CHANGED], 0, changed_mask|(snapshot<<24)); -} - -/** - * Apply settings to a RS_PHOTO from a RS_SETTINGS_DOUBLE - * @param photo A RS_PHOTO - * @param snapshot Which snapshot to affect - * @param rs_settings_double The settings to apply - * @param mask A mask for defining which settings to apply - */ -void -rs_photo_apply_settings_double(RS_PHOTO *photo, const gint snapshot, const RS_SETTINGS_DOUBLE *rs_settings_double, const gint mask) -{ - if (!photo) return; - if (!rs_settings_double) return; - g_return_if_fail ((snapshot>=0) && (snapshot<=2)); - - rs_settings_double_copy(rs_settings_double, photo->settings[snapshot], mask); - - g_signal_emit(photo, signals[SETTINGS_CHANGED], 0, mask|(snapshot<<24)); + rs_settings_copy(settings, mask, photo->settings[snapshot]); } /** @@ -416,8 +367,7 @@ g_assert(RS_IS_PHOTO(photo)); g_return_if_fail ((snapshot>=0) && (snapshot<=2)); - photo->settings[snapshot]->warmth = warmth; - photo->settings[snapshot]->tint = tint; + rs_settings_set_wb(photo->settings[snapshot], warmth, tint); g_signal_emit(photo, signals[SETTINGS_CHANGED], 0, MASK_WB|(snapshot<<24)); } @@ -452,11 +402,10 @@ buf[R] *= (1.0/buf[G]); buf[B] *= (1.0/buf[G]); buf[G] = 1.0; - buf[G2] = 1.0; tint = (buf[B] + buf[R] - 4.0)/-2.0; warmth = (buf[R]/(2.0-tint))-1.0; - rs_photo_set_wb_from_wt(photo, snapshot, warmth, tint); + rs_settings_set_wb(photo->settings[snapshot], warmth, tint); } /** @@ -560,22 +509,17 @@ rs_photo_load_from_file(const gchar *filename, gboolean half_size) { RS_PHOTO *photo = NULL; - RS_FILETYPE *filetype; RS_IMAGE16 *image; - guint mask; + RSSettingsMask mask; gint i; /* Try preloaded first! */ photo = rs_get_preloaded(filename); - if (photo) - return photo; - - filetype = rs_filetype_get(filename, TRUE); - if (filetype && filetype->load) + /* If photo not found in cache, try to load it */ + if (!photo) { - image = filetype->load(filename, half_size); - + image = rs_filetype_load(filename, half_size); if (image) { photo = rs_photo_new(); @@ -585,40 +529,44 @@ /* Set input image */ photo->input = image; + } + } - /* Load metadata */ - if (rs_metadata_load(filename, photo->metadata)) + /* If photo available, read & process metadata */ + if (photo) + { + /* Load metadata */ + if (rs_metadata_load_from_file(photo->metadata, filename)) + { + /* Rotate photo inplace */ + switch (photo->metadata->orientation) { - /* Rotate photo inplace */ - switch (photo->metadata->orientation) - { - case 90: ORIENTATION_90(photo->orientation); - break; - case 180: ORIENTATION_180(photo->orientation); - break; - case 270: ORIENTATION_270(photo->orientation); - break; - } + case 90: ORIENTATION_90(photo->orientation); + break; + case 180: ORIENTATION_180(photo->orientation); + break; + case 270: ORIENTATION_270(photo->orientation); + break; } + } - /* Load cache */ - mask = rs_cache_load(photo); - /* If we have no cache, try to set some sensible defaults */ - for (i=0;i<3;i++) - { - /* White balance */ - if (!(mask & MASK_WB)) - if (!rs_photo_set_wb_from_camera(photo, i)) - rs_photo_set_wb_auto(photo, i); - - /* Contrast */ - if (!(mask & MASK_CONTRAST) && (photo->metadata->contrast != -1.0)) - rs_photo_set_contrast(photo, i, photo->metadata->contrast); - - /* Saturation */ - if (!(mask & MASK_SATURATION) && (photo->metadata->saturation != -1.0)) - rs_photo_set_saturation(photo, i, photo->metadata->saturation); - } + /* Load cache */ + mask = rs_cache_load(photo); + /* If we have no cache, try to set some sensible defaults */ + for (i=0;i<3;i++) + { + /* White balance */ + if (!(mask & MASK_WB)) + if (!rs_photo_set_wb_from_camera(photo, i)) + rs_photo_set_wb_auto(photo, i); + + /* Contrast */ + if (!(mask & MASK_CONTRAST) && (photo->metadata->contrast != -1.0)) + rs_photo_set_contrast(photo, i, photo->metadata->contrast); + + /* Saturation */ + if (!(mask & MASK_SATURATION) && (photo->metadata->saturation != -1.0)) + rs_photo_set_saturation(photo, i, photo->metadata->saturation); } } @@ -626,6 +574,16 @@ } /** + * Get the metadata belonging to the RS_PHOTO + * @param photo A RS_PHOTO + * @return A RSMetadata, this must be unref'ed + */ +extern RSMetadata *rs_photo_get_metadata(RS_PHOTO *photo) +{ + return g_object_ref(photo->metadata); +} + +/** * Closes a RS_PHOTO - this basically means saving cache * @param photo A RS_PHOTO */ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-photo.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-photo.h --- rawstudio-1.1.1/src/rs-photo.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-photo.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -92,6 +92,62 @@ extern gdouble rs_photo_get_angle(RS_PHOTO *photo); /** + * Get the exposure of a RS_PHOTO + * @param photo A RS_PHOTO + * @param snapshot A snapshot + * @return The current value + */ +extern gdouble rs_photo_get_exposure(RS_PHOTO *photo, const gint snapshot); + +/** + * Get the saturation of a RS_PHOTO + * @param photo A RS_PHOTO + * @param snapshot A snapshot + * @return The current value + */ +extern gdouble rs_photo_get_saturation(RS_PHOTO *photo, const gint snapshot); + +/** + * Get the hue of a RS_PHOTO + * @param photo A RS_PHOTO + * @param snapshot A snapshot + * @return The current value + */ +extern gdouble rs_photo_get_hue(RS_PHOTO *photo, const gint snapshot); + +/** + * Get the contrast of a RS_PHOTO + * @param photo A RS_PHOTO + * @param snapshot A snapshot + * @return The current value + */ +extern gdouble rs_photo_get_contrast(RS_PHOTO *photo, const gint snapshot); + +/** + * Get the warmth of a RS_PHOTO + * @param photo A RS_PHOTO + * @param snapshot A snapshot + * @return The current value + */ +extern gdouble rs_photo_get_warmth(RS_PHOTO *photo, const gint snapshot); + +/** + * Get the tint of a RS_PHOTO + * @param photo A RS_PHOTO + * @param snapshot A snapshot + * @return The current value + */ +extern gdouble rs_photo_get_tint(RS_PHOTO *photo, const gint snapshot); + +/** + * Get the sharpen of a RS_PHOTO + * @param photo A RS_PHOTO + * @param snapshot A snapshot + * @return The current value + */ +extern gdouble rs_photo_get_sharpen(RS_PHOTO *photo, const gint snapshot); + +/** * Set the exposure of a RS_PHOTO * @param photo A RS_PHOTO * @param snapshot Which snapshot to affect @@ -148,22 +204,13 @@ extern void rs_photo_set_sharpen(RS_PHOTO *photo, const gint snapshot, const gdouble value); /** - * Apply settings to a RS_PHOTO from a RS_SETTINGS + * Apply settings to a RS_PHOTO from a RSSettings * @param photo A RS_PHOTO * @param snapshot Which snapshot to affect * @param rs_settings The settings to apply * @param mask A mask for defining which settings to apply */ -extern void rs_photo_apply_settings(RS_PHOTO *photo, const gint snapshot, const RS_SETTINGS *rs_settings, const gint mask); - -/** - * Apply settings to a RS_PHOTO from a RS_SETTINGS_DOUBLE - * @param photo A RS_PHOTO - * @param snapshot Which snapshot to affect - * @param rs_settings_double The settings to apply - * @param mask A mask for defining which settings to apply - */ -extern void rs_photo_apply_settings_double(RS_PHOTO *photo, const gint snapshot, const RS_SETTINGS_DOUBLE *rs_settings_double, const gint mask); +extern void rs_photo_apply_settings(RS_PHOTO *photo, const gint snapshot, RSSettings *settings, RSSettingsMask mask); /** * Flips a RS_PHOTO @@ -218,7 +265,14 @@ * @return TRUE on success, FALSE on error */ extern gboolean rs_photo_set_wb_from_camera(RS_PHOTO *photo, const gint snapshot); - + +/** + * Get the metadata belonging to the RS_PHOTO + * @param photo A RS_PHOTO + * @return A RSMetadata, this must be unref'ed + */ +extern RSMetadata *rs_photo_get_metadata(RS_PHOTO *photo); + /** * Closes a RS_PHOTO - this basically means saving cache * @param photo A RS_PHOTO diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-pixbuf.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-pixbuf.c --- rawstudio-1.1.1/src/rs-pixbuf.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-pixbuf.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-pixbuf.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-pixbuf.h --- rawstudio-1.1.1/src/rs-pixbuf.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-pixbuf.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-preload.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-preload.c --- rawstudio-1.1.1/src/rs-preload.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-preload.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-preload.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-preload.h --- rawstudio-1.1.1/src/rs-preload.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-preload.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-preview-widget.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-preview-widget.c --- rawstudio-1.1.1/src/rs-preview-widget.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-preview-widget.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -31,8 +31,20 @@ #include "rs-photo.h" #include "rs-actions.h" #include "rs-job.h" +#include "rs-metadata.h" /* FIXME: Remove this line and add rs_metadata_get_adobe_matrix() */ +#include "rs-utils.h" #include +enum { + ROI_GRID_NONE = 0, + ROI_GRID_GOLDEN, + ROI_GRID_THIRDS, + ROI_GRID_GOLDEN_TRIANGLES1, + ROI_GRID_GOLDEN_TRIANGLES2, + ROI_GRID_HARMONIOUS_TRIANGLES1, + ROI_GRID_HARMONIOUS_TRIANGLES2, +}; + typedef enum { NORMAL = 0x000F, /* 0000 0000 0000 1111 */ WB_PICKER = 0x0001, /* 0000 0000 0000 0001 */ @@ -139,6 +151,8 @@ GdkPixbuf *buffer[MAX_VIEWS]; RSColorTransform *rct[MAX_VIEWS]; gint dirty[MAX_VIEWS]; /* Dirty flag, used for multiple things */ + + gboolean prev_inside_image; /* For motion and leave function*/ }; /* Define the boiler plate stuff using the predefined macro */ @@ -156,6 +170,7 @@ enum { WB_PICKED, MOTION_SIGNAL, + LEAVE_SIGNAL, LAST_SIGNAL }; @@ -171,7 +186,8 @@ static void adjustment_changed(GtkAdjustment *adjustment, gpointer user_data); static gboolean button(GtkWidget *widget, GdkEventButton *event, RSPreviewWidget *preview); static gboolean motion(GtkWidget *widget, GdkEventMotion *event, gpointer user_data); -static void settings_changed(RS_PHOTO *photo, gint mask, RSPreviewWidget *preview); +static gboolean leave(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data); +static void settings_changed(RS_PHOTO *photo, RSSettingsMask mask, RSPreviewWidget *preview); static void spatial_changed(RS_PHOTO *photo, RSPreviewWidget *preview); static void input_changed(RS_IMAGE16 *image, RSPreviewWidget *preview); static void sharpened_changed(RS_IMAGE16 *image, RSPreviewWidget *preview); @@ -212,6 +228,14 @@ NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); + signals[LEAVE_SIGNAL] = g_signal_new ("leave", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + 0, /* Is this right? */ + NULL, + NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); } /** @@ -244,12 +268,15 @@ G_CALLBACK (button), preview); g_signal_connect (G_OBJECT (preview->canvas), "motion_notify_event", G_CALLBACK (motion), preview); + g_signal_connect (G_OBJECT (preview->canvas), "leave_notify_event", + G_CALLBACK (leave), preview); /* Let us know about pointer movements */ gtk_widget_set_events(GTK_WIDGET(preview->canvas), 0 | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - | GDK_POINTER_MOTION_MASK); + | GDK_POINTER_MOTION_MASK + | GDK_LEAVE_NOTIFY_MASK); preview->state = WB_PICKER; preview->split = SPLIT_VERTICAL; @@ -295,6 +322,8 @@ g_signal_connect(G_OBJECT(preview->canvas), "size-allocate", G_CALLBACK(size_allocate), preview); g_signal_connect(G_OBJECT(preview), "realize", G_CALLBACK(realize), NULL); g_signal_connect(G_OBJECT(preview->canvas), "scroll_event", G_CALLBACK (scroll), preview); + + preview->prev_inside_image = FALSE; } /** @@ -883,13 +912,13 @@ if (preview->split == SPLIT_VERTICAL) { xoffset = view * (GTK_WIDGET(preview)->allocation.width/preview->views + SPLITTER_WIDTH/2); - width = (width - preview->views*SPLITTER_WIDTH)/preview->views; + width = (GTK_WIDGET(preview)->allocation.width - preview->views*SPLITTER_WIDTH)/preview->views; } if (preview->split == SPLIT_HORIZONTAL) { yoffset = view * (GTK_WIDGET(preview)->allocation.height/preview->views + SPLITTER_WIDTH/2); - height = (height - preview->views*SPLITTER_WIDTH)/preview->views; + height = (GTK_WIDGET(preview)->allocation.height - preview->views*SPLITTER_WIDTH)/preview->views; } placement->x = xoffset; @@ -904,8 +933,10 @@ gint xoffset = 0, yoffset = 0; gint width, height; - g_return_val_if_fail(preview->scaled[view], FALSE); - g_return_val_if_fail(VIEW_IS_VALID(view), FALSE); + if (!preview->scaled[view]) + return FALSE; + if (!VIEW_IS_VALID(view)) + return FALSE; width = GTK_WIDGET(preview)->allocation.width; height = GTK_WIDGET(preview)->allocation.height; @@ -1006,9 +1037,11 @@ RS_IMAGE16 *source; GdkRectangle clip, image; - g_return_if_fail(preview->photo); g_return_if_fail(VIEW_IS_VALID(view)); + if (!preview->photo) + return; + if (!ISDIRTY(preview->dirty[view], BUFFER)) return; @@ -1853,11 +1886,39 @@ if (make_cbdata(preview, view, &cbdata, scaled_x, scaled_y, real_x, real_y)) g_signal_emit (G_OBJECT (preview), signals[MOTION_SIGNAL], 0, &cbdata); } + + /* Check not to generate superfluous signals "leave"*/ + if (inside_image != preview->prev_inside_image) + { + preview->prev_inside_image = inside_image; + if (!inside_image && g_signal_has_handler_pending(preview, signals[LEAVE_SIGNAL], 0, FALSE)) + { + RS_PREVIEW_CALLBACK_DATA cbdata; + if (make_cbdata(preview, view, &cbdata, scaled_x, scaled_y, real_x, real_y)) + g_signal_emit (G_OBJECT (preview), signals[LEAVE_SIGNAL], 0, &cbdata); + } + } + + return TRUE; +} + +static gboolean +leave(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data) +{ + RSPreviewWidget *preview = RS_PREVIEW_WIDGET(user_data); + + /* Check not to generate superfluous signals "leave"*/ + if (preview->prev_inside_image) + { + preview->prev_inside_image = FALSE; + if (g_signal_has_handler_pending(preview, signals[LEAVE_SIGNAL], 0, FALSE)) + g_signal_emit (G_OBJECT (preview), signals[LEAVE_SIGNAL], 0, NULL); + } return TRUE; } static void -settings_changed(RS_PHOTO *photo, gint mask, RSPreviewWidget *preview) +settings_changed(RS_PHOTO *photo, RSSettingsMask mask, RSPreviewWidget *preview) { gboolean update = FALSE; gint view; diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-preview-widget.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-preview-widget.h --- rawstudio-1.1.1/src/rs-preview-widget.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-preview-widget.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-settings.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-settings.c --- rawstudio-1.1.1/src/rs-settings.c 1970-01-01 01:00:00.000000000 +0100 +++ rawstudio-1.2/src/rs-settings.c 2009-04-09 22:21:45.000000000 +0100 @@ -0,0 +1,369 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "rs-settings.h" +#include /* memcmp() */ + +G_DEFINE_TYPE (RSSettings, rs_settings, G_TYPE_OBJECT) + +enum { + SETTINGS_CHANGED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +static void +rs_settings_finalize (GObject *object) +{ + if (G_OBJECT_CLASS (rs_settings_parent_class)->finalize) + G_OBJECT_CLASS (rs_settings_parent_class)->finalize (object); +} + +static void +rs_settings_class_init (RSSettingsClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + object_class->finalize = rs_settings_finalize; + + signals[SETTINGS_CHANGED] = g_signal_new ("settings-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + 0, /* Is this right? */ + NULL, + NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, G_TYPE_INT); +} + +static void +rs_settings_init (RSSettings *self) +{ + self->commit = 0; + self->commit_todo = 0; + self->curve_knots = NULL; + rs_settings_reset(self, MASK_ALL); +} + +RSSettings * +rs_settings_new (void) +{ + return g_object_new (RS_TYPE_SETTINGS, NULL); +} + +/** + * Reset a RSSettings + * @param settings A RSSettings + * @param mask A mask for only resetting some values + */ +void +rs_settings_reset(RSSettings *settings, const RSSettingsMask mask) +{ + g_assert(RS_IS_SETTINGS(settings)); + + if (mask & MASK_EXPOSURE) + settings->exposure = 0; + + if (mask & MASK_SATURATION) + settings->saturation = 1.0; + + if (mask & MASK_HUE) + settings->hue = 0.0; + + if (mask & MASK_CONTRAST) + settings->contrast = 1.0; + + if (mask & MASK_WARMTH) + settings->warmth = 0.0; + + if (mask & MASK_TINT) + settings->tint = 0.0; + + if (mask & MASK_SHARPEN) + settings->sharpen = 0.0; + + if (mask && MASK_CURVE) + { + if (settings->curve_knots) + g_free(settings->curve_knots); + settings->curve_knots = g_new(gfloat, 4); + settings->curve_knots[0] = 0.0; + settings->curve_knots[1] = 0.0; + settings->curve_knots[2] = 1.0; + settings->curve_knots[3] = 1.0; + settings->curve_nknots = 2; + } + + if (mask > 0) + g_signal_emit(settings, signals[SETTINGS_CHANGED], 0, mask); +} + +/** + * Stop signal emission from a RSSettings and queue up signals + * @param settings A RSSettings + */ +void +rs_settings_commit_start(RSSettings *settings) +{ + g_assert(RS_IS_SETTINGS(settings)); + g_assert(settings->commit >= 0); + + /* If we have no current commit running, reset todo */ + if (settings->commit == 0) + settings->commit_todo = 0; + + /* Increment commit */ + settings->commit++; +} + +/** + * Restart signal emission and process signal queue if any + * @param settings A RSSettings + * @return The mask of changes since rs_settings_commit_start() + */ +RSSettingsMask +rs_settings_commit_stop(RSSettings *settings) +{ + g_assert(RS_IS_SETTINGS(settings)); + g_assert(settings->commit >= 0); + + /* If this is the last nested commit, do the todo */ + if ((settings->commit == 1) && (settings->commit_todo != 0)) + { + g_signal_emit(settings, signals[SETTINGS_CHANGED], 0, settings->commit_todo); + } + + /* Make sure we never go below 0 */ + settings->commit = MAX(settings->commit-1, 0); + + return settings->commit_todo; +} + +/** + * Copy settings from one RSSettins to another + * @param source The source RSSettings + * @param mask A RSSettingsMask to do selective copying + * @param target The target RSSettings + */ +RSSettingsMask +rs_settings_copy(RSSettings *source, RSSettingsMask mask, RSSettings *target) +{ + RSSettingsMask changed_mask = 0; + + g_assert(RS_IS_SETTINGS(source)); + g_assert(RS_IS_SETTINGS(target)); + + /* Convenience macro */ +#define SETTINGS_COPY(upper, lower) \ +do { \ + if ((mask & MASK_##upper) && (target->lower != source->lower)) \ + { \ + changed_mask |= MASK_ ##upper; \ + target->lower = source->lower; \ + } \ +} while(0) + + SETTINGS_COPY(EXPOSURE, exposure); + SETTINGS_COPY(SATURATION, saturation); + SETTINGS_COPY(HUE, hue); + SETTINGS_COPY(CONTRAST, contrast); + SETTINGS_COPY(WARMTH, warmth); + SETTINGS_COPY(TINT, tint); + SETTINGS_COPY(SHARPEN, sharpen); +#undef SETTINGS_COPY + + if (mask & MASK_CURVE) + { + /* Check if we actually have changed */ + if (target->curve_nknots != source->curve_nknots) + changed_mask |= MASK_CURVE; + else + { + if (memcmp(source->curve_knots, target->curve_knots, sizeof(gfloat)*2*source->curve_nknots)!=0) + changed_mask |= MASK_CURVE; + } + + /* Copy the knots if needed */ + if (changed_mask & MASK_CURVE) + { + g_free(target->curve_knots); + target->curve_knots = g_memdup(source->curve_knots, sizeof(gfloat)*2*source->curve_nknots); + target->curve_nknots = source->curve_nknots; + } + } + + /* Emit seignal if needed */ + if (changed_mask > 0) + g_signal_emit(target, signals[SETTINGS_CHANGED], 0, changed_mask); + + return changed_mask; +} + +/* Macro to create functions for changing single parameters, programmers are lazy */ +#define RS_SETTINGS_SET(upper, lower) \ +gfloat \ +rs_settings_set_##lower(RSSettings *settings, const gfloat lower) \ +{ \ + gfloat previous; \ + g_assert(RS_IS_SETTINGS(settings)); \ +\ + previous = settings->lower; \ +\ + if (settings->lower != lower) \ + { \ + settings->lower = lower; \ +\ + if (settings->commit > 0) \ + { \ + settings->commit_todo |= MASK_##upper; \ + } \ + else \ + g_signal_emit(settings, signals[SETTINGS_CHANGED], 0, MASK_##upper); \ + } \ + return previous; \ +} + +RS_SETTINGS_SET(EXPOSURE, exposure) +RS_SETTINGS_SET(SATURATION, saturation) +RS_SETTINGS_SET(HUE, hue) +RS_SETTINGS_SET(CONTRAST, contrast) +RS_SETTINGS_SET(WARMTH, warmth) +RS_SETTINGS_SET(TINT, tint) +RS_SETTINGS_SET(SHARPEN, sharpen) + +#undef RS_SETTINGS_SET + +/** + * Set curve knots + * @param settings A RSSettings + * @param knots Knots for curve + * @param nknots Number of knots + */ +void +rs_settings_set_curve_knots(RSSettings *settings, const gfloat *knots, const gint nknots) +{ + g_assert(RS_IS_SETTINGS(settings)); + g_assert(nknots > 0); + g_assert(knots != NULL); + + g_free(settings->curve_knots); + + settings->curve_knots = g_memdup(knots, sizeof(gfloat)*2*nknots); + settings->curve_nknots = nknots; + + g_signal_emit(settings, signals[SETTINGS_CHANGED], 0, MASK_CURVE); +} + +/** + * Set the warmth and tint values of a RSSettings + * @param settings A RSSettings + * @param exposure New value + */ +void +rs_settings_set_wb(RSSettings *settings, const gfloat warmth, const gfloat tint) +{ + g_assert(RS_IS_SETTINGS(settings)); + + rs_settings_commit_start(settings); + rs_settings_set_warmth(settings, warmth); + rs_settings_set_tint(settings, tint); + rs_settings_commit_stop(settings); +} + +/* Programmers write programs to write programs */ +#define RS_SETTINGS_GET(lower) \ +gfloat \ +rs_settings_get_##lower(RSSettings *settings) \ +{ \ + g_assert(RS_IS_SETTINGS(settings)); \ + return settings->lower; \ +} + +RS_SETTINGS_GET(exposure); +RS_SETTINGS_GET(saturation); +RS_SETTINGS_GET(hue); +RS_SETTINGS_GET(contrast); +RS_SETTINGS_GET(warmth); +RS_SETTINGS_GET(tint); +RS_SETTINGS_GET(sharpen); + +#undef RS_SETTINGS_GET + +/** + * Get the knots from the curve + * @param settings A RSSettings + * @return All knots as a newly allocated array + */ +gfloat * +rs_settings_get_curve_knots(RSSettings *settings) +{ + g_assert(RS_IS_SETTINGS(settings)); + + return g_memdup(settings->curve_knots, sizeof(gfloat)*2*settings->curve_nknots); +} + +/** + * Get number of knots in curve in a RSSettings + * @param settings A RSSettings + * @return Number of knots + */ +gint +rs_settings_get_curve_nknots(RSSettings *settings) +{ + g_assert(RS_IS_SETTINGS(settings)); + + return settings->curve_nknots; +} + +/** + * Link two RSSettings together, if source gets updated, it will propagate to target + * @param source A RSSettings + * @param target A RSSettings + */ +void +rs_settings_link(RSSettings *source, RSSettings *target) +{ + g_assert(RS_IS_SETTINGS(source)); + g_assert(RS_IS_SETTINGS(target)); + + /* Add a weak reference to target, we would really like to know if it disappears */ + g_object_weak_ref(G_OBJECT(target), (GWeakNotify) rs_settings_unlink, source); + + /* Use glib signals to propagate changes */ + g_signal_connect(source, "settings-changed", G_CALLBACK(rs_settings_copy), target); +} + +/** + * Unlink two RSSettings - this will be done automaticly if target from a + * previous rs_settings_link() is finalized + * @param source A RSSettings + * @param target A RSSettings - can be destroyed, doesn't matter, we just need the pointer + */ +void +rs_settings_unlink(RSSettings *source, RSSettings *target) +{ + gulong signal_id; + + g_assert(RS_IS_SETTINGS(source)); + + /* If we can find a signal linking these two pointers, disconnect it */ + signal_id = g_signal_handler_find(source, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, target); + if (signal_id > 0) + g_signal_handler_disconnect(source, signal_id); +} diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-settings.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-settings.h --- rawstudio-1.1.1/src/rs-settings.h 1970-01-01 01:00:00.000000000 +0100 +++ rawstudio-1.2/src/rs-settings.h 2009-04-09 22:21:45.000000000 +0100 @@ -0,0 +1,215 @@ +/* + * Copyright (C) 2006-2009 Anders Brander and + * Anders Kvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef RS_SETTINGS_H +#define RS_SETTINGS_H + +#include + +G_BEGIN_DECLS + +#define RS_TYPE_SETTINGS rs_settings_get_type() + +#define RS_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), RS_TYPE_SETTINGS, RSSettings)) +#define RS_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), RS_TYPE_SETTINGS, RSSettingsClass)) +#define RS_IS_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RS_TYPE_SETTINGS)) +#define RS_IS_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), RS_TYPE_SETTINGS)) +#define RS_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), RS_TYPE_SETTINGS, RSSettingsClass)) + +typedef enum { + MASK_EXPOSURE = (1<<0), + MASK_SATURATION = (1<<1), + MASK_HUE = (1<<2), + MASK_CONTRAST = (1<<3), + MASK_WARMTH = (1<<4), + MASK_TINT = (1<<5), + MASK_WB = MASK_WARMTH | MASK_TINT, + MASK_CURVE = (1<<6), + MASK_SHARPEN = (1<<7), + MASK_ALL = 0x00ffffff, +} RSSettingsMask; + +typedef struct _RSsettings { + GObject parent; + gint commit; + RSSettingsMask commit_todo; + gfloat exposure; + gfloat saturation; + gfloat hue; + gfloat contrast; + gfloat warmth; + gfloat tint; + gfloat sharpen; + gint curve_nknots; + gfloat *curve_knots; +} RSSettings; + +typedef struct { + GObjectClass parent_class; +} RSSettingsClass; + +GType rs_settings_get_type (void); + +RSSettings *rs_settings_new (void); + +/** + * Reset a RSSettings + * @param settings A RSSettings + * @param mask A mask for only resetting some values + */ +extern void rs_settings_reset(RSSettings *settings, const RSSettingsMask mask); + +/** + * Stop signal emission from a RSSettings and queue up signals + * @param settings A RSSettings + */ +extern void rs_settings_commit_start(RSSettings *settings); + +/** + * Restart signal emission and process signal queue if any + * @param settings A RSSettings + * @return The mask of changes since rs_settings_commit_start() + */ +extern RSSettingsMask rs_settings_commit_stop(RSSettings *settings); + +/** + * Copy settings from one RSSettins to another + * @param source The source RSSettings + * @param mask A RSSettingsMask to do selective copying + * @param target The target RSSettings + */ +extern RSSettingsMask rs_settings_copy(RSSettings *source, const RSSettingsMask mask, RSSettings *target); + +/** + * Set the exposure value of a RSSettings + * @param settings A RSSettings + * @param exposure New value + * @return Old value + */ +extern gfloat rs_settings_set_exposure(RSSettings *settings, const gfloat exposure); + +/** + * Set the saturation value of a RSSettings + * @param settings A RSSettings + * @param saturation New value + * @return Old value + */ +extern gfloat rs_settings_set_saturation(RSSettings *settings, const gfloat saturation); + +/** + * Set the hue value of a RSSettings + * @param settings A RSSettings + * @param hue New value + * @return Old value + */ +extern gfloat rs_settings_set_hue(RSSettings *settings, const gfloat hue); + +/** + * Set the contrast value of a RSSettings + * @param settings A RSSettings + * @param contrast New value + * @return Old value + */ +extern gfloat rs_settings_set_contrast(RSSettings *settings, const gfloat contrast); + +/** + * Set the warmth value of a RSSettings + * @param settings A RSSettings + * @param warmth New value + * @return Old value + */ +extern gfloat rs_settings_set_warmth(RSSettings *settings, const gfloat warmth); + +/** + * Set the tint value of a RSSettings + * @param settings A RSSettings + * @param tint New value + * @return Old value + */ +extern gfloat rs_settings_set_tint(RSSettings *settings, const gfloat tint); + +/** + * Set the sharpen value of a RSSettings + * @param settings A RSSettings + * @param sharpen New value + * @return Old value + */ +extern gfloat rs_settings_set_sharpen(RSSettings *settings, const gfloat sharpen); + +/** + * Set curve knots + * @param settings A RSSettings + * @param knots Knots for curve + * @param nknots Number of knots + */ +extern void rs_settings_set_curve_knots(RSSettings *settings, const gfloat *knots, const gint nknots); + +/** + * Set the warmth and tint values of a RSSettings + * @param settings A RSSettings + * @param exposure New value + */ +extern void rs_settings_set_wb(RSSettings *settings, const gfloat warmth, const gfloat tint); + +extern gfloat rs_settings_get_exposure(RSSettings *settings); +extern gfloat rs_settings_get_saturation(RSSettings *settings); +extern gfloat rs_settings_get_hue(RSSettings *settings); +extern gfloat rs_settings_get_contrast(RSSettings *settings); +extern gfloat rs_settings_get_warmth(RSSettings *settings); +extern gfloat rs_settings_get_tint(RSSettings *settings); +extern gfloat rs_settings_get_sharpen(RSSettings *settings); + +/** + * Get the knots from the curve + * @param settings A RSSettings + * @return All knots as a newly allocated array + */ +extern gfloat * +rs_settings_get_curve_knots(RSSettings *settings); + +/** + * Get number of knots in curve in a RSSettings + * @param settings A RSSettings + * @return Number of knots + */ +extern gint +rs_settings_get_curve_nknots(RSSettings *settings); + +/** + * Use like g_signal_connect(source, "settings-changed", G_CALLBACK(rs_settings_changed), target); + */ +extern void rs_settings_changed(RSSettings *source, const RSSettingsMask mask, RSSettings *target); + +/** + * Link two RSSettings together, if source gets updated, it will propagate to target + * @param source A RSSettings + * @param target A RSSettings + */ +extern void rs_settings_link(RSSettings *source, RSSettings *target); + +/** + * Unlink two RSSettings - this will be done automaticly if target from a previous rs_settings_link() is finalized + * @param source A RSSettings + * @param target A RSSettings - can be destroyed, doesn't matter, we just need the pointer + */ +extern void rs_settings_unlink(RSSettings *source, RSSettings *target); + +G_END_DECLS + +#endif /* RS_SETTINGS_H */ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-store.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-store.c --- rawstudio-1.1.1/src/rs-store.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-store.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -34,6 +34,9 @@ #include "eog-pixbuf-cell-renderer.h" #include "rs-preload.h" #include "rs-photo.h" +#include "rs-metadata.h" +#include "rs-filetypes.h" +#include "rs-utils.h" /* How many different icon views do we have (tabs) */ #define NUM_VIEWS 6 @@ -54,6 +57,7 @@ FULLNAME_COLUMN, /* Full path to image */ PRIORITY_COLUMN, EXPORTED_COLUMN, + METADATA_COLUMN, /* RSMetadata for image */ TYPE_COLUMN, GROUP_LIST_COLUMN, NUM_COLUMNS @@ -76,6 +80,9 @@ gulong counthandler; gchar *last_path; gboolean cancelled; + RS_STORE_SORT_METHOD sort_method; + GString *tooltip_text; + GtkTreePath *tooltip_last_path; }; /* Define the boiler plate stuff using the predefined macro */ @@ -89,6 +96,18 @@ static guint signals[LAST_SIGNAL] = { 0 }; +typedef struct _worker_job { + RSStore *store; + gchar *filename; + gint priority; + gboolean exported; + GtkTreeModel *model; + GtkTreePath *path; +} WORKER_JOB; + +static GAsyncQueue *loader_queue = NULL; +static gpointer worker_thread(gpointer data); + /* FIXME: Remember to remove stores from this too! */ static GList *all_stores = NULL; @@ -104,15 +123,18 @@ static void selection_changed(GtkIconView *iconview, gpointer data); static GtkWidget *make_iconview(GtkWidget *iconview, RSStore *store, gint prio); static gboolean model_filter_prio(GtkTreeModel *model, GtkTreeIter *iter, gpointer data); +static gint model_sort_name(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata); +static gint model_sort_timestamp(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata); +static gint model_sort_iso(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata); +static gint model_sort_aperture(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata); +static gint model_sort_focallength(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata); +static gint model_sort_shutterspeed(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata); static void count_priorities_del(GtkTreeModel *treemodel, GtkTreePath *path, gpointer data); static void count_priorities(GtkTreeModel *treemodel, GtkTreePath *do_not_use1, GtkTreeIter *do_not_use2, gpointer data); static void icon_get_selected_iters(GtkIconView *iconview, GtkTreePath *path, gpointer user_data); static void icon_get_selected_names(GtkIconView *iconview, GtkTreePath *path, gpointer user_data); static gboolean tree_foreach_names(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data); static gboolean tree_find_filename(GtkTreeModel *store, const gchar *filename, GtkTreeIter *iter, GtkTreePath **path); -static void cancel_clicked(GtkButton *button, gpointer user_data); -GList *find_loadable(const gchar *path, gboolean load_8bit, gboolean load_recursive); -void load_loadable(RSStore *store, GList *loadable, RS_PROGRESS *rsp); void cairo_draw_thumbnail(cairo_t *cr, GdkPixbuf *pixbuf, gint x, gint y, gint width, gint height, gdouble alphas); GdkPixbuf * store_group_update_pixbufs(GdkPixbuf *pixbuf, GdkPixbuf *pixbuf_clean); void store_group_select_n(GtkListStore *store, GtkTreeIter iter, guint n); @@ -168,6 +190,16 @@ icon_priority_D = gdk_pixbuf_new_from_file(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_deleted.png", NULL); icon_exported = gdk_pixbuf_new_from_file(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_exported.png", NULL); } + + if (!loader_queue) + { + gint i = (rs_get_number_of_processor_cores()*3)/2; + loader_queue = g_async_queue_new(); + while(i--) + { + g_thread_create(worker_thread, NULL, FALSE, NULL); + } + } } /** @@ -193,6 +225,7 @@ G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN, + G_TYPE_OBJECT, G_TYPE_INT, G_TYPE_POINTER); @@ -303,6 +336,11 @@ gtk_box_pack_start(GTK_BOX (hbox), GTK_WIDGET(store->notebook), TRUE, TRUE, 0); store->last_path = NULL; + gint sort_method = RS_STORE_SORT_BY_NAME; + rs_conf_get_integer(CONF_STORE_SORT_METHOD, &sort_method); + rs_store_set_sort_method(store, sort_method); + store->tooltip_text = g_string_new("..."); + store->tooltip_last_path = NULL; } static void @@ -432,6 +470,90 @@ predict_preload(data, FALSE); } +#if GTK_CHECK_VERSION(2,12,0) +static gboolean +query_tooltip(GtkWidget *widget, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer user_data) +{ + gboolean ret = FALSE; + RSStore *store = RS_STORE(user_data); + GtkIconView *iconview = GTK_ICON_VIEW(widget); + GtkTreeModel *model; + GtkTreePath *path; + GtkScrolledWindow *scrolled_window; + GtkAdjustment *adj; + GtkTreeIter iter; + + /* Remember the scrollbar - but we only need the horizontal (for now) */ + scrolled_window = GTK_SCROLLED_WINDOW(gtk_widget_get_parent(widget)); + adj = GTK_ADJUSTMENT(gtk_scrolled_window_get_hadjustment(scrolled_window)); + x += (gint) gtk_adjustment_get_value(adj); + + /* See if there's an icon at current position */ + path = gtk_icon_view_get_path_at_pos(GTK_ICON_VIEW(widget), x, y); + + if (path) + { + /* If we differ, render a new tooltip text */ + if (!store->tooltip_last_path || (gtk_tree_path_compare(path, store->tooltip_last_path)!=0)) + { + if (store->tooltip_last_path) + gtk_tree_path_free(store->tooltip_last_path); + store->tooltip_last_path = path; + model = gtk_icon_view_get_model (iconview); + if (path && gtk_tree_model_get_iter(model, &iter, path)) + { + RSMetadata *metadata; + gint type; + gchar *name; + + gtk_tree_model_get (model, &iter, + TYPE_COLUMN, &type, + TEXT_COLUMN, &name, + METADATA_COLUMN, &metadata, + -1); + + if (metadata) switch(type) + { + case RS_STORE_TYPE_GROUP: + g_string_printf(store->tooltip_text, "FIXME: group"); + break; + default: + g_string_printf(store->tooltip_text, _("%s\n\n"), name); + + if (metadata->focallength > 0) + g_string_append_printf(store->tooltip_text, _("Focal length: %dmm\n"), metadata->focallength); + + if (metadata->shutterspeed > 0.0 && metadata->shutterspeed < 4) + g_string_append_printf(store->tooltip_text, _("Shutter speed: %.1fs\n"), 1.0/metadata->shutterspeed); + else if (metadata->shutterspeed >= 4) + g_string_append_printf(store->tooltip_text, _("Shutter speed: 1/%.0fs\n"), metadata->shutterspeed); + + if (metadata->aperture > 0.0) + g_string_append_printf(store->tooltip_text, _("Aperture: F/%.01f\n"), metadata->aperture); + + if (metadata->iso != 0) + g_string_append_printf(store->tooltip_text, _("ISO: %u\n"), metadata->iso); + + if (metadata->time_ascii != NULL) + g_string_append_printf(store->tooltip_text, _("Time: %s"), metadata->time_ascii); + + g_object_unref(metadata); + g_free(name); + break; + } + } + } + + /* If we're hovering over an icon, we would like to show the tooltip */ + ret = TRUE; + } + + gtk_tooltip_set_markup(tooltip, store->tooltip_text->str); + + return ret; +} +#endif /* GTK_CHECK_VERSION(2,12,0) */ + static GtkWidget * make_iconview(GtkWidget *iconview, RSStore *store, gint prio) { @@ -442,7 +564,8 @@ #if GTK_CHECK_VERSION(2,12,0) /* Enable tooltips */ - gtk_icon_view_set_tooltip_column(GTK_ICON_VIEW (iconview), TEXT_COLUMN); + g_object_set (iconview, "has-tooltip", TRUE, NULL); + g_signal_connect(iconview, "query-tooltip", G_CALLBACK(query_tooltip), store); #endif /* pack them as close af possible */ @@ -519,6 +642,116 @@ return(ret); } +static gint +model_sort_timestamp(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata) +{ + gint ret; + RSMetadata *a, *b; + + gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1); + gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1); + + if ((a!=NULL) && (b!=NULL) && (a->timestamp != b->timestamp)) + ret = a->timestamp - b->timestamp; + else + ret = model_sort_name(model, tia, tib, userdata); + + if (a!=NULL) + g_object_unref(a); + if (b!=NULL) + g_object_unref(b); + + return(ret); +} + +static gint +model_sort_iso(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata) +{ + gint ret; + RSMetadata *a, *b; + + gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1); + gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1); + + if ((a!=NULL) && (b!=NULL) && (a->iso != b->iso)) + ret = a->iso - b->iso; + else + ret = model_sort_name(model, tia, tib, userdata); + + if (a!=NULL) + g_object_unref(a); + if (b!=NULL) + g_object_unref(b); + + return(ret); +} + +static gint +model_sort_aperture(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata) +{ + gint ret; + RSMetadata *a, *b; + + gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1); + gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1); + + if ((a!=NULL) && (b!=NULL) && (a->aperture != b->aperture)) + ret = a->aperture*10.0 - b->aperture*10.0; + else + ret = model_sort_name(model, tia, tib, userdata); + + if (a!=NULL) + g_object_unref(a); + if (b!=NULL) + g_object_unref(b); + + return(ret); +} + +static gint +model_sort_focallength(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata) +{ + gint ret; + RSMetadata *a, *b; + + gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1); + gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1); + + if ((a!=NULL) && (b!=NULL) && (a->focallength != b->focallength)) + ret = a->focallength*10.0 - b->focallength*10.0; + else + ret = model_sort_name(model, tia, tib, userdata); + + if (a!=NULL) + g_object_unref(a); + if (b!=NULL) + g_object_unref(b); + + return(ret); +} + +static gint +model_sort_shutterspeed(GtkTreeModel *model, GtkTreeIter *tia, GtkTreeIter *tib, gpointer userdata) +{ + gint ret; + RSMetadata *a, *b; + + gtk_tree_model_get(model, tia, METADATA_COLUMN, &a, -1); + gtk_tree_model_get(model, tib, METADATA_COLUMN, &b, -1); + + if ((a!=NULL) && (b!=NULL) && (a->shutterspeed != b->shutterspeed)) + ret = b->shutterspeed*10.0 - a->shutterspeed*10.0; + else + ret = model_sort_name(model, tia, tib, userdata); + + if (a!=NULL) + g_object_unref(a); + if (b!=NULL) + g_object_unref(b); + + return(ret); +} + static void count_priorities_del(GtkTreeModel *treemodel, GtkTreePath *path, gpointer data) { @@ -741,12 +974,77 @@ return ret; } - -static void -cancel_clicked(GtkButton *button, gpointer user_data) +static gint +load_directory(RSStore *store, const gchar *path, const gboolean load_8bit, const gboolean load_recursive) { - RSStore *store = RS_STORE(user_data); - store->cancelled = TRUE; + const gchar *name; + gchar *fullname; + GDir *dir; + GdkPixbuf *pixbuf; + gint count = 0; + GtkTreeIter iter; + gboolean exported; + gint priority; + + pixbuf = gdk_pixbuf_new_from_file(PACKAGE_DATA_DIR "/icons/" PACKAGE ".png", NULL); + + dir = g_dir_open(path, 0, NULL); /* FIXME: check errors */ + + while((dir != NULL) && (name = g_dir_read_name(dir))) + { + /* Ignore "hidden" files and directories */ + if (name[0] == '.') + continue; + + fullname = g_build_filename(path, name, NULL); + + if (rs_filetype_can_load(fullname)) + { + WORKER_JOB *job; + + /* Sane defaults */ + priority = PRIO_U; + exported = FALSE; + + /* Load flags from XML cache */ + rs_cache_load_quick(fullname, &priority, &exported); + + /* Add thumbnail to store */ + gtk_list_store_prepend (store->store, &iter); + gtk_list_store_set (store->store, &iter, + METADATA_COLUMN, NULL, + PIXBUF_COLUMN, pixbuf, + PIXBUF_CLEAN_COLUMN, pixbuf, + TEXT_COLUMN, name, + FULLNAME_COLUMN, fullname, + PRIORITY_COLUMN, priority, + EXPORTED_COLUMN, exported, + -1); + + /* Push an asynchronous job for loading the thumbnail */ + job = g_new(WORKER_JOB, 1); + job->store = g_object_ref(store); + job->filename = g_strdup(fullname); + job->priority = priority; + job->exported = exported; + job->model = g_object_ref(GTK_TREE_MODEL(store->store)); + job->path = gtk_tree_model_get_path(GTK_TREE_MODEL(store->store), &iter); + g_async_queue_push(loader_queue, job); + + count++; + } + else if (load_recursive && g_file_test(fullname, G_FILE_TEST_IS_DIR)) + count += load_directory(store, fullname, load_8bit, load_recursive); + + g_free(fullname); + } + + g_object_unref(pixbuf); + + if (dir) + g_dir_close(dir); + + return count; } /* Public functions */ @@ -772,6 +1070,11 @@ { GtkTreeIter i; + /* Empty the loader queue */ + g_async_queue_lock(loader_queue); + while(g_async_queue_try_pop_unlocked(loader_queue)); + g_async_queue_unlock(loader_queue); + /* If we got no store, iterate though all */ if (!store) { @@ -796,143 +1099,7 @@ /* If both are NULL, remove everything */ if ((filename == NULL) && (iter == NULL)) gtk_list_store_clear(store->store); -} - -/** - * Load thumbnails from a directory into the store - * @param path The path to load - * @param load_8bit Boolean - * @param load_recursive Boolean - * @return GList containing paths to loadable files - */ -GList * -find_loadable(const gchar *path, gboolean load_8bit, gboolean load_recursive) -{ - gchar *name; - RS_FILETYPE *filetype; - GString *fullname; - GList *loadable = NULL; - GDir *dir = g_dir_open(path, 0, NULL); - - if (dir == NULL) - return loadable; - - while ((name = (gchar *) g_dir_read_name(dir))) - { - fullname = g_string_new(path); - fullname = g_string_append(fullname, G_DIR_SEPARATOR_S); - fullname = g_string_append(fullname, name); - filetype = rs_filetype_get(name, TRUE); - if (filetype) - { - if (filetype->load && ((filetype->filetype==FILETYPE_RAW)||load_8bit)) - { - loadable = g_list_append(loadable, fullname->str); - } - } - if (load_recursive) - { - if (g_file_test(fullname->str, G_FILE_TEST_IS_DIR)) - { - /* We don't load hidden directories */ - if (name[0] != '.') - { - GList *temp_loadable; - temp_loadable = find_loadable(fullname->str, load_8bit, load_recursive); - loadable = g_list_concat(loadable, temp_loadable); - } - } - } - g_string_free(fullname, FALSE); - } - if (dir) - g_dir_close(dir); - - return loadable; -} - -/** - * Load thumbnails from a directory into the store - * @param store A RSStore - * @param loadable A GList containing paths to loadable files - * @param rsp A progress bar - */ -void -load_loadable(RSStore *store, GList *loadable, RS_PROGRESS *rsp) -{ - gchar *name; - RS_FILETYPE *filetype; - GdkPixbuf *pixbuf; - GdkPixbuf *pixbuf_clean; - GdkPixbuf *missing_thumb; - gint priority; - gboolean exported = FALSE; - GtkTreeIter iter; - gchar *fullname; - gint n; - - /* We will use this, if no thumbnail can be loaded */ - missing_thumb = gtk_widget_render_icon(GTK_WIDGET(store), - GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_DIALOG, NULL); - - for(n = 0; n < g_list_length(loadable); n++) - { - if (store->cancelled) - break; - fullname = g_list_nth_data(loadable, n); - name = g_path_get_basename(fullname); - - filetype = rs_filetype_get(name, TRUE); - if (filetype) - { - if (filetype->load) - { - pixbuf = rs_load_thumb(filetype, fullname); - if (pixbuf==NULL) - { - pixbuf = gdk_pixbuf_copy(missing_thumb); - g_object_ref (pixbuf); - } - - /* Save a clean copy of the thumbnail for later use */ - pixbuf_clean = gdk_pixbuf_copy(pixbuf); - - /* Sane defaults */ - priority = PRIO_U; - exported = FALSE; - - /* Load flags from XML cache */ - rs_cache_load_quick(fullname, &priority, &exported); - - /* Update thumbnail */ - thumbnail_update(pixbuf, pixbuf_clean, priority, exported); - - /* Add thumbnail to store */ - gtk_list_store_prepend (store->store, &iter); - gtk_list_store_set (store->store, &iter, - PIXBUF_COLUMN, pixbuf, - PIXBUF_CLEAN_COLUMN, pixbuf_clean, - TEXT_COLUMN, name, - FULLNAME_COLUMN, fullname, - PRIORITY_COLUMN, priority, - EXPORTED_COLUMN, exported, - -1); - - /* We can safely unref pixbuf by now, store holds a reference */ - g_object_unref (pixbuf); - g_object_unref (pixbuf_clean); - - /* Move our progress bar */ - gui_progress_advance_one(rsp); - } - } - g_free(name); - } - - g_object_unref(missing_thumb); - - return; } /** @@ -948,14 +1115,11 @@ GStaticMutex lock = G_STATIC_MUTEX_INIT; GtkTreeSortable *sortable; - RS_PROGRESS *rsp; - GtkWidget *cancel; gboolean load_8bit = FALSE; gboolean load_recursive = DEFAULT_CONF_LOAD_RECURSIVE; gint items=0, n; GtkTreePath *treepath; GtkTreeIter iter; - GList *loadable = NULL; g_return_val_if_fail(RS_IS_STORE(store), -1); if (!path) @@ -982,10 +1146,9 @@ rs_conf_get_boolean(CONF_LOAD_GDK, &load_8bit); rs_conf_get_boolean(CONF_LOAD_RECURSIVE, &load_recursive); - /* find loadable files */ - loadable = find_loadable(path, load_8bit, load_recursive); - loadable = g_list_first(loadable); - items = g_list_length(loadable); + /* Block the priority count */ + g_signal_handler_block(store->store, store->counthandler); + items = load_directory(store, path, load_8bit, load_recursive); /* unset model and make sure we have enough columns */ for (n=0;niconview[n]), items); } - /* Block the priority count */ - g_signal_handler_block(store->store, store->counthandler); - - /* Add a progress bar */ - store->cancelled = FALSE; - cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL); - g_signal_connect (G_OBJECT(cancel), "clicked", G_CALLBACK(cancel_clicked), store); - rsp = gui_progress_new_with_delay(_("Opening directory..."), items, 200); - gui_progress_add_widget(rsp, cancel); - - /* load all loadable items */ - load_loadable(store, loadable, rsp); - g_list_foreach (loadable, (GFunc)g_free, NULL); - g_list_free(loadable); - /* Sort the store */ sortable = GTK_TREE_SORTABLE(store->store); gtk_tree_sortable_set_sort_func(sortable, @@ -1043,9 +1191,6 @@ store_load_groups(store->store); #endif - /* Free the progress bar */ - gui_progress_free(rsp); - /* Start the preloader */ predict_preload(store, TRUE); @@ -1446,6 +1591,73 @@ return gtk_notebook_get_current_page(store->notebook); } +/** + * Sets the sorting method in a RSStore + * @param store A RSStore + * @param sort A sort method from the RS_STORE_SORT_BY-family of enums + */ +void +rs_store_set_sort_method(RSStore *store, RS_STORE_SORT_METHOD sort_method) +{ + GtkTreeSortable *sortable; + gint sort_column = TEXT_COLUMN; + GtkTreeIterCompareFunc sort_func = model_sort_name; + + g_assert(RS_IS_STORE(store)); + + store->sort_method = sort_method; + rs_conf_set_integer(CONF_STORE_SORT_METHOD, sort_method); + + switch (sort_method) + { + case RS_STORE_SORT_BY_NAME: + sort_column = TEXT_COLUMN; + sort_func = model_sort_name; + break; + case RS_STORE_SORT_BY_TIMESTAMP: + sort_column = METADATA_COLUMN; + sort_func = model_sort_timestamp; + break; + case RS_STORE_SORT_BY_ISO: + sort_column = METADATA_COLUMN; + sort_func = model_sort_iso; + break; + case RS_STORE_SORT_BY_APERTURE: + sort_column = METADATA_COLUMN; + sort_func = model_sort_aperture; + break; + case RS_STORE_SORT_BY_FOCALLENGTH: + sort_column = METADATA_COLUMN; + sort_func = model_sort_focallength; + break; + case RS_STORE_SORT_BY_SHUTTERSPEED: + sort_column = METADATA_COLUMN; + sort_func = model_sort_shutterspeed; + break; + } + + sortable = GTK_TREE_SORTABLE(store->store); + gtk_tree_sortable_set_sort_func(sortable, + sort_column, + sort_func, + store, + NULL); + gtk_tree_sortable_set_sort_column_id(sortable, sort_column, GTK_SORT_ASCENDING); +} + +/** + * Get the sorting method for a RSStore + * @param store A RSStore + * @return A sort method from the RS_STORE_SORT_BY-family of enums + */ +extern RS_STORE_SORT_METHOD +rs_store_get_sort_method(RSStore *store) +{ + g_assert(RS_IS_STORE(store)); + + return store->sort_method; +} + void cairo_draw_thumbnail(cairo_t *cr, GdkPixbuf *pixbuf, gint x, gint y, gint width, gint height, gdouble alpha) { @@ -1937,11 +2149,10 @@ void rs_store_auto_group(RSStore *store) { - RS_FILETYPE *filetype = NULL; gchar *filename = NULL; gint timestamp = 0, timestamp_old = 0; gint exposure; - RS_METADATA *meta; + RSMetadata *meta; GList *filenames = NULL; GtkTreeIter iter; @@ -1951,31 +2162,24 @@ do { store_get_fullname(GTK_LIST_STORE(store->store), &iter, &filename); - filetype = rs_filetype_get(filename, TRUE); - if (filetype) - { - if(filetype->load_meta) - { - meta = rs_metadata_new(); - filetype->load_meta(filename, meta); - - if (!meta->timestamp) - return; - - timestamp = meta->timestamp; - exposure = (1/meta->shutterspeed); + meta = rs_metadata_new_from_file(filename); - if (timestamp > timestamp_old + 1) - { - if (g_list_length(filenames) > 1) - store_group_photos_by_filenames(store->store, filenames); - g_list_free(filenames); - filenames = NULL; - } - timestamp_old = timestamp + exposure; - g_free(meta); - } + if (!meta->timestamp) + return; + + timestamp = meta->timestamp; + exposure = (1/meta->shutterspeed); + + if (timestamp > timestamp_old + 1) + { + if (g_list_length(filenames) > 1) + store_group_photos_by_filenames(store->store, filenames); + g_list_free(filenames); + filenames = NULL; } + timestamp_old = timestamp + exposure; + g_free(meta); + filenames = g_list_append(filenames, filename); } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(store->store), &iter)); @@ -2121,3 +2325,59 @@ GROUP_LIST_COLUMN, members, -1); } + +static gpointer +worker_thread(gpointer data) +{ + WORKER_JOB *job; + GdkPixbuf *pixbuf, *pixbuf_clean; + GtkTreeIter iter; + RSMetadata *metadata; + + while((job = g_async_queue_pop(loader_queue))) + { + metadata = rs_metadata_new_from_file(job->filename); + g_assert(RS_IS_METADATA(metadata)); + + pixbuf = rs_metadata_get_thumbnail(metadata); + + if (pixbuf==NULL) + /* We will use this, if no thumbnail can be loaded */ + pixbuf = gtk_widget_render_icon(GTK_WIDGET(job->store), + GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_DIALOG, NULL); + + pixbuf_clean = gdk_pixbuf_copy(pixbuf); + + /* Update thumbnail */ + thumbnail_update(pixbuf, pixbuf_clean, job->priority, job->exported); + + g_assert(pixbuf != NULL); + g_assert(pixbuf_clean != NULL); + + /* Add the new thumbnail to the store */ + gdk_threads_enter(); + if (tree_find_filename(job->model, job->filename, &iter, NULL)) + { + gtk_list_store_set(GTK_LIST_STORE(job->model), &iter, + METADATA_COLUMN, metadata, + PIXBUF_COLUMN, pixbuf, + PIXBUF_CLEAN_COLUMN, pixbuf_clean, + -1); + } + gdk_threads_leave(); + + /* The GtkListStore should have ref'ed these */ + g_object_unref(pixbuf); + g_object_unref(pixbuf_clean); + + /* Clean up the job */ + g_free(job->filename); + gtk_tree_path_free(job->path); + g_object_unref(job->store); + g_object_unref(job->model); + g_free(job); + } + + /* This is only to stop gcc from complaining, we will never return */ + return NULL; +} diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-store.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-store.h --- rawstudio-1.1.1/src/rs-store.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-store.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -29,6 +29,15 @@ GtkHBoxClass parent_class; }; +typedef enum { + RS_STORE_SORT_BY_NAME, + RS_STORE_SORT_BY_TIMESTAMP, + RS_STORE_SORT_BY_ISO, + RS_STORE_SORT_BY_APERTURE, + RS_STORE_SORT_BY_FOCALLENGTH, + RS_STORE_SORT_BY_SHUTTERSPEED, +} RS_STORE_SORT_METHOD; + GType rs_store_get_type (void); /** @@ -167,6 +176,22 @@ rs_store_get_current_page(RSStore *store); /** + * Set the sorting method for a RSStore + * @param store A RSStore + * @param sort_method A sort method from the RS_STORE_SORT_BY-family of enums + */ +extern void +rs_store_set_sort_method(RSStore *store, RS_STORE_SORT_METHOD sort_method); + +/** + * Get the sorting method for a RSStore + * @param store A RSStore + * @return A sort method from the RS_STORE_SORT_BY-family of enums + */ +extern RS_STORE_SORT_METHOD +rs_store_get_sort_method(RSStore *store); + +/** * Marks a selection of thumbnails as a group * @param store A RSStore */ diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-tiff.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-tiff.c --- rawstudio-1.1.1/src/rs-tiff.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-tiff.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-tiff.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-tiff.h --- rawstudio-1.1.1/src/rs-tiff.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-tiff.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-utils.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-utils.c --- rawstudio-1.1.1/src/rs-utils.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-utils.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -18,8 +18,14 @@ */ #define _XOPEN_SOURCE /* strptime() */ +#include #include +#include #include +#include "conf_interface.h" +#include "rs-utils.h" + +#define DOTDIR ".rawstudio" /** * A version of atof() that isn't locale specific @@ -163,3 +169,228 @@ return num; } + +/** + * Return a path to the current config directory for Rawstudio - this is the + * .rawstudio direcotry in home + * @return A path to an existing directory + */ +const gchar * +rs_confdir_get() +{ + static gchar *dir = NULL; + static GStaticMutex lock = G_STATIC_MUTEX_INIT; + + g_static_mutex_lock(&lock); + if (!dir) + { + const gchar *home = g_get_home_dir(); + dir = g_build_filename(home, ".rawstudio", NULL); + } + + g_mkdir_with_parents(dir, 00755); + g_static_mutex_unlock(&lock); + + return dir; +} + +/** + * Return a cache directory for filename + * @param filename A complete path to a photo + * @return A directory to hold the cache. This is guarenteed to exist + */ +gchar * +rs_dotdir_get(const gchar *filename) +{ + gchar *ret; + gchar *directory; + GString *dotdir; + gboolean dotdir_is_local = FALSE; + rs_conf_get_boolean(CONF_CACHEDIR_IS_LOCAL, &dotdir_is_local); + + directory = g_path_get_dirname(filename); + if (dotdir_is_local) + { + dotdir = g_string_new(g_get_home_dir()); + dotdir = g_string_append(dotdir, G_DIR_SEPARATOR_S); + dotdir = g_string_append(dotdir, DOTDIR); + dotdir = g_string_append(dotdir, G_DIR_SEPARATOR_S); + dotdir = g_string_append(dotdir, directory); + } + else + { + dotdir = g_string_new(directory); + dotdir = g_string_append(dotdir, G_DIR_SEPARATOR_S); + dotdir = g_string_append(dotdir, DOTDIR); + } + + if (!g_file_test(dotdir->str, (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) + { + if (g_mkdir_with_parents(dotdir->str, 0700) != 0) + ret = NULL; + else + ret = dotdir->str; + } + else + ret = dotdir->str; + g_free(directory); + g_string_free(dotdir, FALSE); + return (ret); +} + +/** + * Normalize a RS_RECT, ie makes sure that x1 < x2 and y1x2; + x2 = in->x1; + y1 = in->y1; + y2 = in->y2; + + if (x1>x2) + { + n = x1; + x1 = x2; + x2 = n; + } + if (y1>y2) + { + n = y1; + y1 = y2; + y2 = n; + } + + out->x1 = x1; + out->x2 = x2; + out->y1 = y1; + out->y2 = y2; +} + +/** + * Flip a RS_RECT + * @param in A RS_RECT to read values from + * @param out A RS_RECT to write the values to (can be the same as in) + * @param w The width of the data OUTSIDE the RS_RECT + * @param h The height of the data OUTSIDE the RS_RECT + */ +void +rs_rect_flip(RS_RECT *in, RS_RECT *out, gint w, gint h) +{ + gint x1,y1; + gint x2,y2; + + x1 = in->x1; + x2 = in->x2; + y1 = h - in->y2 - 1; + y2 = h - in->y1 - 1; + + out->x1 = x1; + out->x2 = x2; + out->y1 = y1; + out->y2 = y2; + rs_rect_normalize(out, out); +} + +/** + * Mirrors a RS_RECT + * @param in A RS_RECT to read values from + * @param out A RS_RECT to write the values to (can be the same as in) + * @param w The width of the data OUTSIDE the RS_RECT + * @param h The height of the data OUTSIDE the RS_RECT + */ +void +rs_rect_mirror(RS_RECT *in, RS_RECT *out, gint w, gint h) +{ + gint x1,y1; + gint x2,y2; + + x1 = w - in->x2 - 1; + x2 = w - in->x1 - 1; + y1 = in->y1; + y2 = in->y2; + + out->x1 = x1; + out->x2 = x2; + out->y1 = y1; + out->y2 = y2; + rs_rect_normalize(out, out); +} + +/** + * Rotate a RS_RECT in 90 degrees steps + * @param in A RS_RECT to read values from + * @param out A RS_RECT to write the values to (can be the same as in) + * @param w The width of the data OUTSIDE the RS_RECT + * @param h The height of the data OUTSIDE the RS_RECT + * @param quarterturns How many times to turn the rect clockwise + */ +void +rs_rect_rotate(RS_RECT *in, RS_RECT *out, gint w, gint h, gint quarterturns) +{ + gint x1,y1; + gint x2,y2; + + x1 = in->x2; + x2 = in->x1; + y1 = in->y1; + y2 = in->y2; + + switch(quarterturns) + { + case 1: + x1 = h - in->y1-1; + x2 = h - in->y2-1; + y1 = in->x1; + y2 = in->x2; + break; + case 2: + x1 = w - in->x1 - 1; + x2 = w - in->x2 - 1; + y1 = h - in->y1 - 1; + y2 = h - in->y2 - 1; + break; + case 3: + x1 = in->y1; + x2 = in->y2; + y1 = w - in->x1 - 1; + y2 = w - in->x2 - 1; + break; + } + + out->x1 = x1; + out->x2 = x2; + out->y1 = y1; + out->y2 = y2; + rs_rect_normalize(out, out); +} + +/** + * Check (and complain if needed) the Rawstudio install + */ +void +check_install() +{ +#define TEST_FILE_ACCESS(path) do { if (g_access(path, R_OK)!=0) g_debug("Cannot access %s\n", path);} while (0) + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/icons/" PACKAGE ".png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_priority1.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_priority2.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_priority3.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_deleted.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/overlay_exported.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_flip.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_mirror.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_90.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_180.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/pixmaps/" PACKAGE "/transform_270.png"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/" PACKAGE "/ui.xml"); + TEST_FILE_ACCESS(PACKAGE_DATA_DIR "/" PACKAGE "/rawstudio.gtkrc"); +#undef TEST_FILE_ACCESS +} diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/rs-utils.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/rs-utils.h --- rawstudio-1.1.1/src/rs-utils.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/rs-utils.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -22,6 +22,11 @@ #include +#define GETVAL(adjustment) \ + gtk_adjustment_get_value((GtkAdjustment *) adjustment) +#define SETVAL(adjustment, value) \ + gtk_adjustment_set_value((GtkAdjustment *) adjustment, value) + /** * A version of atof() that isn't locale specific * @note This doesn't do any error checking! @@ -66,4 +71,66 @@ extern gint rs_get_number_of_processor_cores(); +/** + * Return a path to the current config directory for Rawstudio - this is the + * .rawstudio direcotry in home + * @return A path to an existing directory + */ +extern const gchar * +rs_confdir_get(); + +/** + * Return a cache directory for filename + * @param filename A complete path to a photo + * @return A directory to hold the cache. This is guarenteed to exist + */ +extern gchar * +rs_dotdir_get(const gchar *filename); + +/** + * Normalize a RS_RECT, ie makes sure that x1 < x2 and y1 and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -26,13 +26,24 @@ #include "rs-image.h" #include "rs-color-transform.h" #include "rs-utils.h" -#include "rs-photo.h" +#include "rs-filetypes.h" +#include "rs-metadata.h" +#include /* sony_decrypt(): htonl() */ /* It is required having some arbitrary maximum exposure time to prevent borked * shutter speed values being interpreted from the tiff. * 8h seems to be reasonable, even for astronomists with extra battery packs */ #define EXPO_TIME_MAXVAL (8*60.0*60.0) +typedef struct { + RSMetadata meta; + gint sony_offset; + gint sony_length; + gint sony_key; + guint pad[128]; + guint p; +} SonyMeta; + struct IFD { gushort tag; gushort type; @@ -48,16 +59,19 @@ static gfloat get_rational(RAWFILE *rawfile, guint offset); inline static void read_ifd(RAWFILE *rawfile, guint offset, struct IFD *ifd); -static gboolean makernote_canon(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -static gboolean makernote_leica(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -static gboolean makernote_minolta(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -static gboolean makernote_nikon(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -static gboolean makernote_olympus(RAWFILE *rawfile, guint base, guint offset, RS_METADATA *meta); -static gboolean makernote_olympus_camerasettings(RAWFILE *rawfile, guint base, guint offset, RS_METADATA *meta); -static gboolean makernote_olympus_imageprocessing(RAWFILE *rawfile, guint base, guint offset, RS_METADATA *meta); -static gboolean makernote_panasonic(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -static gboolean makernote_pentax(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -static gboolean ifd_reader(RAWFILE *rawfile, guint offset, RS_METADATA *meta); +static gboolean makernote_canon(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static gboolean makernote_leica(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static gboolean makernote_minolta(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static gboolean makernote_nikon(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static gboolean makernote_olympus(RAWFILE *rawfile, guint base, guint offset, RSMetadata *meta); +static gboolean makernote_olympus_camerasettings(RAWFILE *rawfile, guint base, guint offset, RSMetadata *meta); +static gboolean makernote_olympus_imageprocessing(RAWFILE *rawfile, guint base, guint offset, RSMetadata *meta); +static gboolean makernote_panasonic(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static gboolean makernote_pentax(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static void sony_decrypt(SonyMeta *sony, guint *data, gint len); +static gboolean private_sony(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static gboolean ifd_reader(RAWFILE *rawfile, guint offset, RSMetadata *meta); +static gboolean thumbnail_reader(const gchar *service, RAWFILE *rawfile, guint offset, guint length, RSMetadata *meta); typedef enum tiff_field_type { @@ -178,7 +192,7 @@ #endif static gboolean -makernote_canon(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +makernote_canon(RAWFILE *rawfile, guint offset, RSMetadata *meta) { gushort number_of_entries = 0; gushort ushort_temp1; @@ -211,8 +225,12 @@ case 702: /* Canon EOS 1Ds Mk III */ case 796: /* Canon EOS 5D, Canon EOS 30D, Canon EOS 400D */ case 1227: /* Canon EOS 450D */ + case 1250: /* Canon EOS 5D Mk II */ ifd.value_offset += 126; break; + case 5120: /* Canon PowerShot G10 */ + ifd.value_offset += 142; + break; } /* RGGB-format! */ raw_get_ushort(rawfile, ifd.value_offset, &ushort_temp1); @@ -232,7 +250,7 @@ } static gboolean -makernote_leica(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +makernote_leica(RAWFILE *rawfile, guint offset, RSMetadata *meta) { gboolean ret = FALSE; gushort number_of_entries = 0; @@ -327,7 +345,7 @@ } static gboolean -makernote_minolta(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +makernote_minolta(RAWFILE *rawfile, guint offset, RSMetadata *meta) { gushort number_of_entries = 0; @@ -362,7 +380,7 @@ } static gboolean -makernote_nikon(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +makernote_nikon(RAWFILE *rawfile, guint offset, RSMetadata *meta) { static const guchar xlat[2][256] = { { 0xc1,0xbf,0x6d,0x0d,0x59,0xc5,0x13,0x9d,0x83,0x61,0x6b,0x4f,0xc7,0x7f,0x3d,0x3d, @@ -455,25 +473,35 @@ raw_get_ushort(rawfile, offset+2, &meta->iso); break; case 0x000c: /* D1 White Balance */ - raw_get_uint(rawfile, offset, &uint_temp1); + if (g_str_equal(meta->model_ascii, "NIKON D1X") || g_str_equal(meta->model_ascii, "NIKON D90")) + { + meta->cam_mul[0] = get_rational(rawfile, offset); + meta->cam_mul[2] = get_rational(rawfile, offset+8); + meta->cam_mul[1] = get_rational(rawfile, offset+16); + meta->cam_mul[3] = get_rational(rawfile, offset+24); + rs_metadata_normalize_wb(meta); + } + else + { + /* This is fucked, where did these two magic constants come from? */ + raw_get_float(rawfile, uint_temp1, &float_temp1); + raw_get_float(rawfile, uint_temp1+4, &float_temp2); + meta->cam_mul[0] = (gdouble) (float_temp1/float_temp2)/1.0;//2.218750; + + raw_get_float(rawfile, uint_temp1+8, &float_temp1); + raw_get_float(rawfile, uint_temp1+12, &float_temp2); + meta->cam_mul[2] = (gdouble) (float_temp1/float_temp2)/1.0;//1.148438; + + raw_get_float(rawfile, uint_temp1+16, &float_temp1); + raw_get_float(rawfile, uint_temp1+20, &float_temp2); + meta->cam_mul[1] = (gdouble) (float_temp1/float_temp2); + + raw_get_float(rawfile, uint_temp1+24, &float_temp1); + raw_get_float(rawfile, uint_temp1+28, &float_temp2); + meta->cam_mul[3] = (gdouble) (float_temp1/float_temp2); - /* This is fucked, where did these two magic constants come from? */ - raw_get_float(rawfile, uint_temp1, &float_temp1); - raw_get_float(rawfile, uint_temp1+4, &float_temp2); - meta->cam_mul[0] = (gdouble) (float_temp1/float_temp2)/2.218750; - - raw_get_float(rawfile, uint_temp1+8, &float_temp1); - raw_get_float(rawfile, uint_temp1+12, &float_temp2); - meta->cam_mul[2] = (gdouble) (float_temp1/float_temp2)/1.148438; - - raw_get_float(rawfile, uint_temp1+16, &float_temp1); - raw_get_float(rawfile, uint_temp1+20, &float_temp2); - meta->cam_mul[1] = (gdouble) (float_temp1/float_temp2); - - raw_get_float(rawfile, uint_temp1+24, &float_temp1); - raw_get_float(rawfile, uint_temp1+28, &float_temp2); - meta->cam_mul[3] = (gdouble) (float_temp1/float_temp2); - rs_metadata_normalize_wb(meta); + rs_metadata_normalize_wb(meta); + } break; case 0x0011: /* NikonPreview */ raw_get_uint(rawfile, offset, &uint_temp1); @@ -481,6 +509,9 @@ meta->thumbnail_start += base; break; case 0x0097: /* white balance */ + if (g_str_equal(meta->model_ascii, "NIKON D90")) + break; + for(i=0;i<4;i++) { raw_get_uchar(rawfile, offset+i, &char_tmp); @@ -592,7 +623,7 @@ } static gboolean -makernote_olympus_camerasettings(RAWFILE *rawfile, guint base, guint offset, RS_METADATA *meta) +makernote_olympus_camerasettings(RAWFILE *rawfile, guint base, guint offset, RSMetadata *meta) { /* NOTE! At least on E-410 the offsets in this section is relative to the base of the MakerNotes! */ @@ -642,7 +673,7 @@ } static gboolean -makernote_olympus_imageprocessing(RAWFILE *rawfile, guint base, guint offset, RS_METADATA *meta) +makernote_olympus_imageprocessing(RAWFILE *rawfile, guint base, guint offset, RSMetadata *meta) { gushort number_of_entries; struct IFD ifd; @@ -684,7 +715,7 @@ } static gboolean -makernote_olympus(RAWFILE *rawfile, guint base, guint offset, RS_METADATA *meta) +makernote_olympus(RAWFILE *rawfile, guint base, guint offset, RSMetadata *meta) { gushort number_of_entries; gushort fieldtag=0; @@ -719,6 +750,11 @@ raw_get_uint(rawfile, offset, &uint_temp1); switch(fieldtag) { + case 0x0100: /* Thumbnail */ + raw_get_ushort(rawfile, save-4, &ushort_temp1); + meta->thumbnail_start = ushort_temp1; + meta->thumbnail_length = valuecount; + break; case 0x1017: /* Red multiplier on many Olympus's (E-10, E-300, E-330, E-400, E-500) */ raw_get_ushort(rawfile, offset, &ushort_temp1); meta->cam_mul[0] = (gdouble) ushort_temp1 / 256.0; @@ -742,7 +778,7 @@ } static gboolean -makernote_panasonic(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +makernote_panasonic(RAWFILE *rawfile, guint offset, RSMetadata *meta) { gushort number_of_entries; struct IFD ifd; @@ -789,7 +825,7 @@ } static gboolean -makernote_pentax(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +makernote_pentax(RAWFILE *rawfile, guint offset, RSMetadata *meta) { gushort number_of_entries; gushort ushort_temp1=0; @@ -830,8 +866,106 @@ return TRUE; } +static void +sony_decrypt(SonyMeta *sony, guint *data, gint len) +{ + while (len--) + *data++ ^= sony->pad[sony->p++ & 127] = sony->pad[(sony->p+1) & 127] ^ sony->pad[(sony->p+65) & 127]; +} + +static gboolean +private_sony(RAWFILE *rawfile, guint offset, RSMetadata *meta) +{ + gushort number_of_entries; + struct IFD ifd; + gint i; + gint key; + SonyMeta *sony = (SonyMeta *) meta; + + if(!raw_get_ushort(rawfile, offset, &number_of_entries)) + return FALSE; + + if (number_of_entries>5000) + return FALSE; + + offset += 2; + + while(number_of_entries--) + { + read_ifd(rawfile, offset, &ifd); + offset += 12; + + switch(ifd.tag) + { + case 0x7200: /* SR2SubIFDOffset */ + sony->sony_offset = ifd.value_offset; + break; + case 0x7201: /* SR2SubIFDLength */ + sony->sony_length = ifd.value_offset; + break; + case 0x7221: /* SR2SubIFDKey */ + sony->sony_key = ifd.value_offset; + + /* Initialize decrypter */ + key = sony->sony_key; + for (sony->p=0; sony->p < 4; sony->p++) + sony->pad[sony->p] = key = key * 48828125 + 1; + sony->pad[3] = sony->pad[3] << 1 | (sony->pad[0]^sony->pad[2]) >> 31; + for (sony->p=4; sony->p < 127; sony->p++) + sony->pad[sony->p] = (sony->pad[sony->p-4]^sony->pad[sony->p-2]) << 1 | (sony->pad[sony->p-3]^sony->pad[sony->p-1]) >> 31; + for (sony->p=0; sony->p < 127; sony->p++) + sony->pad[sony->p] = htonl(sony->pad[sony->p]); + break; + } + } + + if ((sony->sony_offset > 0) && (sony->sony_length > 0) && (sony->sony_key != 0)) + { + gpointer buf = g_new0(guchar, sony->sony_length); + if (raw_strcpy(rawfile, sony->sony_offset, buf, sony->sony_length)) + { + sony_decrypt(sony, buf, sony->sony_length/4); + gushort *sbuf = (gushort *)(buf); + gushort tag_count = sbuf[0]; + struct IFD *private_ifd; + + for(i=0;itag) + { + case 0x7303: /* WB_GRBGLevels */ + sbuf = (gushort *)(buf + private_ifd->value_offset - sony->sony_offset); + meta->cam_mul[1] = (gdouble) sbuf[0]; + meta->cam_mul[0] = (gdouble) sbuf[1]; + meta->cam_mul[2] = (gdouble) sbuf[2]; + meta->cam_mul[3] = (gdouble) sbuf[3]; + + rs_metadata_normalize_wb(meta); + break; + case 0x7313: /* WB_RGGBLevels */ + sbuf = (gushort *)(buf + private_ifd->value_offset - sony->sony_offset); + meta->cam_mul[0] = (gdouble) sbuf[0]; + meta->cam_mul[1] = (gdouble) sbuf[1]; + meta->cam_mul[3] = (gdouble) sbuf[2]; + meta->cam_mul[2] = (gdouble) sbuf[3]; + + rs_metadata_normalize_wb(meta); + break; + } + } + } + } + + return TRUE; +} + gboolean -exif_reader(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +exif_reader(RAWFILE *rawfile, guint offset, RSMetadata *meta) { gushort number_of_entries = 0; @@ -912,7 +1046,7 @@ } static gboolean -ifd_reader(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +ifd_reader(RAWFILE *rawfile, guint offset, RSMetadata *meta) { gushort number_of_entries = 0; gboolean is_preview = FALSE; @@ -979,10 +1113,12 @@ meta->make = MAKE_PHASEONE; else if (raw_strcmp(rawfile, ifd.value_offset, "SAMSUNG", 7)) meta->make = MAKE_SAMSUNG; - else if (raw_strcmp(rawfile, ifd.value_offset, "SONY", 4)) - meta->make = MAKE_SONY; + /* Do not detect SONY, we don't want to call private_sony() unless + we're sure we have a hidden SonyMeta */ else if (raw_strcmp(rawfile, ifd.value_offset, "FUJIFILM", 4)) meta->make = MAKE_FUJIFILM; + else if (raw_strcmp(rawfile, ifd.value_offset, "SEIKO EPSON", 11)) + meta->make = MAKE_EPSON; } break; case 0x0110: /* Model */ @@ -1037,14 +1173,19 @@ /* The following tags are from the DNG spec, they should be safe */ case 0xc628: /* DNG: AsShotNeutral */ - if (ifd.type == TIFF_FIELD_TYPE_RATIONAL && ifd.count == 3) + if (((ifd.type == TIFF_FIELD_TYPE_RATIONAL)||(ifd.type == TIFF_FIELD_TYPE_SRATIONAL)) && ifd.count == 3) { meta->cam_mul[0] = 1.0/get_rational(rawfile, ifd.value_offset); meta->cam_mul[1] = 1.0/get_rational(rawfile, ifd.value_offset+8); meta->cam_mul[2] = 1.0/get_rational(rawfile, ifd.value_offset+16); meta->cam_mul[3] = meta->cam_mul[1]; + rs_metadata_normalize_wb(meta); } break; + case 0xc634: /* DNG: PrivateData */ + if (meta->make == MAKE_SONY) + private_sony(rawfile, ifd.value_offset, meta); + break; } } @@ -1052,7 +1193,7 @@ } void -rs_tiff_load_meta_from_rawfile(RAWFILE *rawfile, guint offset, RS_METADATA *meta) +rs_tiff_load_meta_from_rawfile(RAWFILE *rawfile, guint offset, RSMetadata *meta) { guint next = 0; gushort ifd_num = 0; @@ -1098,7 +1239,7 @@ } void -rs_tiff_load_meta(const gchar *filename, RS_METADATA *meta) +rs_tiff_load_meta(const gchar *filename, RSMetadata *meta) { RAWFILE *rawfile; @@ -1109,46 +1250,31 @@ rs_tiff_load_meta_from_rawfile(rawfile, 0, meta); + /* Phase One and Samsung doesn't set this */ + if ((meta->make == MAKE_PHASEONE) || (meta->make == MAKE_SAMSUNG)) + meta->preview_planar_config = 1; + + /* Load thumbnail - try thumbnail first - then preview image */ + if (!thumbnail_reader(filename, rawfile, meta->thumbnail_start, meta->thumbnail_length, meta)) + thumbnail_reader(filename, rawfile, meta->preview_start, meta->preview_length, meta); + raw_close_file(rawfile); } -GdkPixbuf * -rs_tiff_load_thumb(const gchar *src) +static gboolean +thumbnail_reader(const gchar *service, RAWFILE *rawfile, guint offset, guint length, RSMetadata *meta) { - RAWFILE *rawfile; + gboolean ret = FALSE; GdkPixbuf *pixbuf=NULL, *pixbuf2=NULL; - guint start=0, length=0; - RS_METADATA *meta = rs_metadata_new(); - - if (!(rawfile = raw_open_file(src))) - return(NULL); - - rs_tiff_load_meta_from_rawfile(rawfile, 0, meta); - - if ((meta->thumbnail_start>0) && (meta->thumbnail_length>0)) - { - start = meta->thumbnail_start; - length = meta->thumbnail_length; - } - - else if ((meta->preview_start>0) && (meta->preview_length>0)) - { - start = meta->preview_start; - length = meta->preview_length; - } - - /* Phase One and Samsung doesn't set this */ - if ((meta->make == MAKE_PHASEONE) || (meta->make == MAKE_SAMSUNG)) - meta->preview_planar_config = 1; - if ((start>0) && (length>0) && (length<5000000)) + if ((offset>0) && (length>0) && (length<5000000)) { if ((length==165888) && (meta->make == MAKE_CANON)) - pixbuf = gdk_pixbuf_new_from_data(raw_get_map(rawfile)+start, GDK_COLORSPACE_RGB, FALSE, 8, 288, 192, 288*3, NULL, NULL); + pixbuf = gdk_pixbuf_new_from_data(raw_get_map(rawfile)+offset, GDK_COLORSPACE_RGB, FALSE, 8, 288, 192, 288*3, NULL, NULL); else if (length==57600) /* Multiple Nikon, Pentax and Samsung cameras */ - pixbuf = gdk_pixbuf_new_from_data(raw_get_map(rawfile)+start, GDK_COLORSPACE_RGB, FALSE, 8, 160, 120, 160*3, NULL, NULL); + pixbuf = gdk_pixbuf_new_from_data(raw_get_map(rawfile)+offset, GDK_COLORSPACE_RGB, FALSE, 8, 160, 120, 160*3, NULL, NULL); else if (length==48672) - pixbuf = gdk_pixbuf_new_from_data(raw_get_map(rawfile)+start, GDK_COLORSPACE_RGB, FALSE, 8, 156, 104, 156*3, NULL, NULL); + pixbuf = gdk_pixbuf_new_from_data(raw_get_map(rawfile)+offset, GDK_COLORSPACE_RGB, FALSE, 8, 156, 104, 156*3, NULL, NULL); else /* Many RAW files are based on TIFF and include the preview image * as the "main" image in the TIFF so that "normal" image viewing @@ -1157,7 +1283,7 @@ * possible format (e.g. uncompressed R8G8B8) and use it * if it is present. */ - if (start == meta->preview_start && /* if we're using the preview image */ + if (offset == meta->preview_start && /* if we're using the preview image */ meta->preview_planar_config == 1 && /* uncompressed */ meta->preview_bits [0] == 8 && meta->preview_bits [1] == 8 && @@ -1168,26 +1294,26 @@ meta->preview_height > 16 && meta->preview_height < 1024) /* Some arbitrary sane limit */ pixbuf = gdk_pixbuf_new_from_data( - raw_get_map(rawfile)+start, GDK_COLORSPACE_RGB, FALSE, 8, + raw_get_map(rawfile)+offset, GDK_COLORSPACE_RGB, FALSE, 8, meta->preview_width, meta->preview_height, meta->preview_width * 3, NULL, NULL); else /* Try to guess file format based on contents (JPEG previews) */ - pixbuf = raw_get_pixbuf(rawfile, start, length); + pixbuf = raw_get_pixbuf(rawfile, offset, length); } /* Special case for Panasonic - most have no embedded thumbnail */ else if (meta->make == MAKE_PANASONIC) { - RS_PHOTO *photo; - if ((photo = rs_photo_load_from_file(src, TRUE))) + RS_IMAGE16 *input; + if ((input = rs_filetype_load(service, TRUE))) { gint c; gfloat pre_mul[4]; RS_IMAGE16 *image; RSColorTransform *rct = rs_color_transform_new(); - image = rs_image16_transform(photo->input, NULL, - NULL, NULL, photo->crop, 128, 128, TRUE, -1.0, - photo->angle, photo->orientation, NULL); + image = rs_image16_transform(input, NULL, + NULL, NULL, NULL, 128, 128, TRUE, -1.0, + 0.0, 0, NULL); pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, FALSE, 8, image->w, image->h); for(c=0;c<4;c++) @@ -1198,7 +1324,7 @@ image->rowstride, gdk_pixbuf_get_pixels(pixbuf), gdk_pixbuf_get_rowstride(pixbuf)); - g_object_unref(photo); + g_object_unref(input); g_object_unref(image); g_object_unref(rct); } @@ -1241,10 +1367,23 @@ pixbuf = pixbuf2; break; } + meta->thumbnail = pixbuf; + ret = TRUE; } - rs_metadata_free(meta); - raw_close_file(rawfile); + return ret; +} - return(pixbuf); +void +rs_sony_load_meta(const gchar *filename, RSMetadata *meta) +{ + SonyMeta sony; + sony.sony_offset = 0; + sony.sony_length = 0; + sony.sony_key = 0; + meta->make = MAKE_SONY; + + memcpy(&sony, meta, sizeof(RSMetadata)); + rs_tiff_load_meta(filename, RS_METADATA(&sony)); + memcpy(meta, &sony, sizeof(RSMetadata)); } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/tiff-meta.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/tiff-meta.h --- rawstudio-1.1.1/src/tiff-meta.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/tiff-meta.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -19,7 +19,7 @@ #include "rawstudio.h" -extern gboolean exif_reader(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -extern void rs_tiff_load_meta_from_rawfile(RAWFILE *rawfile, guint offset, RS_METADATA *meta); -extern void rs_tiff_load_meta(const gchar *filename, RS_METADATA *meta); -extern GdkPixbuf *rs_tiff_load_thumb(const gchar *src); +extern gboolean exif_reader(RAWFILE *rawfile, guint offset, RSMetadata *meta); +extern void rs_tiff_load_meta_from_rawfile(RAWFILE *rawfile, guint offset, RSMetadata *meta); +extern void rs_tiff_load_meta(const gchar *filename, RSMetadata *meta); +extern void rs_sony_load_meta(const gchar *filename, RSMetadata *meta); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/toolbox.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/toolbox.c --- rawstudio-1.1.1/src/toolbox.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/toolbox.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -32,11 +32,15 @@ #include "rs-preview-widget.h" #include "rs-histogram.h" #include "rs-photo.h" +#include "rs-utils.h" -/* used for gui_adj_reset_callback() */ +/* used for gui_adj_reset_callback() and others */ struct cb_carrier { - RS_BLOB *rs; - gint mask; + RSSettings *settings; + RSSettingsMask mask; + gulong settings_signal_id; + GObject *obj; + gulong obj_signal_id; /* For signals FROM adj */ }; GtkLabel *infolabel; @@ -49,10 +53,10 @@ static void gui_transform_mirror_clicked(GtkWidget *w, RS_BLOB *rs); static void gui_transform_flip_clicked(GtkWidget *w, RS_BLOB *rs); static GtkWidget *gui_transform(RS_BLOB *rs, gboolean show); -static GtkWidget *gui_tool_warmth(RS_BLOB *rs, gint n, gboolean show); static gboolean gui_adj_reset_callback(GtkWidget *widget, GdkEventButton *event, struct cb_carrier *rc); -static void gui_adj_value_callback(GtkRange *range, gpointer user_data); -static GtkWidget *gui_make_scale_from_adj(RS_BLOB *rs, GCallback cb, GtkObject *adj, gint mask); +static void gui_adj_value_callback(GtkAdjustment *adj, gpointer user_data); +static void curve_changed(GtkWidget *widget, gpointer user_data); +static GtkWidget *gui_make_scale_from_adj(RSSettings *settings, gulong settings_signal_id, GCallback cb, GtkAdjustment *adj, RSSettingsMask mask); static void curve_context_callback_save(GtkMenuItem *menuitem, gpointer user_data); static void curve_context_callback_open(GtkMenuItem *menuitem, gpointer user_data); static void curve_context_callback_reset(GtkMenuItem *menuitem, gpointer user_data); @@ -158,52 +162,63 @@ return(gui_box(_("Transforms"), hbox, show)); } -static GtkWidget * -gui_tool_warmth(RS_BLOB *rs, gint n, gboolean show) -{ - GtkWidget *box; - GtkWidget *wscale; - GtkWidget *tscale; - - wscale = gui_make_scale_from_adj(rs, G_CALLBACK(gui_adj_value_callback), rs->settings[n]->warmth, MASK_WARMTH); - tscale = gui_make_scale_from_adj(rs, G_CALLBACK(gui_adj_value_callback), rs->settings[n]->tint, MASK_TINT); - - box = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (box), wscale, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (box), tscale, FALSE, FALSE, 0); - return(gui_box(_("Warmth/tint"), box, show)); -} - static gboolean gui_adj_reset_callback(GtkWidget *widget, GdkEventButton *event, struct cb_carrier *rc) { - rs_settings_reset(rc->rs->settings[rc->rs->current_setting], rc->mask); + rs_settings_reset(rc->settings, rc->mask); return(TRUE); } static void -gui_adj_value_callback(GtkRange *range, gpointer user_data) +gui_adj_value_callback(GtkAdjustment *adj, gpointer user_data) { struct cb_carrier *rc = (struct cb_carrier *) user_data; - if (!rc->rs->mute_signals_to_photo) - rs_photo_apply_settings(rc->rs->photo, - rc->rs->current_setting, - rc->rs->settings[rc->rs->current_setting], rc->mask); + g_signal_handler_block(rc->settings, rc->settings_signal_id); +#define APPLY(lower, upper) \ +do { \ + if (rc->mask & MASK_##upper) \ + rs_settings_set_##lower(rc->settings, gtk_adjustment_get_value(adj)); \ +} while(0) + APPLY(exposure, EXPOSURE); + APPLY(saturation, SATURATION); + APPLY(hue, HUE); + APPLY(contrast, CONTRAST); + APPLY(warmth, WARMTH); + APPLY(tint, TINT); + APPLY(sharpen, SHARPEN); +#undef APPLY + g_signal_handler_unblock(rc->settings, rc->settings_signal_id); +} + +static void +curve_changed(GtkWidget *widget, gpointer user_data) +{ + gfloat *knots; + guint nknots; + RSSettings *settings = RS_SETTINGS(user_data); + + rs_curve_widget_get_knots(RS_CURVE_WIDGET(widget), &knots, &nknots); + + rs_settings_set_curve_knots(settings, knots, nknots); + + g_free(knots); } static GtkWidget * -gui_make_scale_from_adj(RS_BLOB *rs, GCallback cb, GtkObject *adj, gint mask) +gui_make_scale_from_adj(RSSettings *settings, gulong settings_signal_id, GCallback cb, GtkAdjustment *adj, RSSettingsMask mask) { GtkWidget *hscale, *box, *rimage, *revent; struct cb_carrier *rc = g_malloc(sizeof(struct cb_carrier)); - rc->rs = rs; + rc->obj = G_OBJECT(adj); rc->mask = mask; + rc->settings = settings; + rc->settings_signal_id = settings_signal_id; box = gtk_hbox_new(FALSE, 0); hscale = gtk_hscale_new((GtkAdjustment *) adj); - g_signal_connect(adj, "value_changed", cb, rc); + rc->obj_signal_id = g_signal_connect(adj, "value_changed", cb, rc); gtk_scale_set_value_pos( GTK_SCALE(hscale), GTK_POS_LEFT); gtk_scale_set_digits(GTK_SCALE(hscale), 2); @@ -228,7 +243,7 @@ { RSCurveWidget *curve = RS_CURVE_WIDGET(user_data); GtkWidget *fc; - GString *dir; + gchar *dir; fc = gtk_file_chooser_dialog_new (_("Export File"), NULL, GTK_FILE_CHOOSER_ACTION_SAVE, @@ -240,14 +255,10 @@ #endif /* Set default directory */ - dir = g_string_new(g_get_home_dir()); - g_string_append(dir, G_DIR_SEPARATOR_S); - g_string_append(dir, DOTDIR); - g_string_append(dir, G_DIR_SEPARATOR_S); - g_string_append(dir, "curves"); - g_mkdir_with_parents(dir->str, 00755); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (fc), dir->str); - g_string_free(dir, TRUE); + dir = g_build_filename(rs_confdir_get(), "curves", NULL); + g_mkdir_with_parents(dir, 00755); + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (fc), dir); + g_free(dir); if (gtk_dialog_run (GTK_DIALOG (fc)) == GTK_RESPONSE_ACCEPT) { @@ -276,7 +287,7 @@ { RSCurveWidget *curve = RS_CURVE_WIDGET(user_data); GtkWidget *fc; - GString *dir; + gchar *dir; fc = gtk_file_chooser_dialog_new (_("Open curve ..."), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, @@ -285,14 +296,10 @@ gtk_dialog_set_default_response(GTK_DIALOG(fc), GTK_RESPONSE_ACCEPT); /* Set default directory */ - dir = g_string_new(g_get_home_dir()); - g_string_append(dir, G_DIR_SEPARATOR_S); - g_string_append(dir, DOTDIR); - g_string_append(dir, G_DIR_SEPARATOR_S); - g_string_append(dir, "curves"); - g_mkdir_with_parents(dir->str, 00755); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (fc), dir->str); - g_string_free(dir, TRUE); + dir = g_build_filename(rs_confdir_get(), "curves", NULL); + g_mkdir_with_parents(dir, 00755); + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (fc), dir); + g_free(dir); if (gtk_dialog_run (GTK_DIALOG (fc)) == GTK_RESPONSE_ACCEPT) { @@ -312,7 +319,7 @@ { RSCurveWidget *curve = RS_CURVE_WIDGET(user_data); - gulong handler = g_signal_handler_find(curve, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, update_preview_callback, NULL); + gulong handler = g_signal_handler_find(curve, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, curve_changed, NULL); g_signal_handler_block(curve, handler); rs_curve_widget_reset(curve); @@ -399,6 +406,54 @@ rs_conf_set_boolean(name, expanded); } +typedef struct { + GtkAdjustment *exposure; + GtkAdjustment *saturation; + GtkAdjustment *hue; + GtkAdjustment *contrast; + GtkAdjustment *warmth; + GtkAdjustment *tint; + GtkAdjustment *sharpen; + RSCurveWidget *curve; +} ToolboxAdjusters; + +static void +toolbox_settings_changed_cb(RSSettings *settings, RSSettingsMask mask, gpointer user_data) +{ + ToolboxAdjusters *adjusters = (ToolboxAdjusters *) user_data; + +/* Programmers are lazy */ +#define APPLY(lower, upper) do { \ + if (mask & MASK_##upper) \ + {\ + g_signal_handlers_block_matched(adjusters->lower, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, gui_adj_value_callback, NULL); \ + gtk_adjustment_set_value(adjusters->lower, rs_settings_get_##lower(settings)); \ + g_signal_handlers_unblock_matched(adjusters->lower, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, gui_adj_value_callback, NULL); \ + } \ +} while(0) + APPLY(exposure, EXPOSURE); + APPLY(saturation, SATURATION); + APPLY(hue, HUE); + APPLY(contrast, CONTRAST); + APPLY(warmth, WARMTH); + APPLY(tint, TINT); + APPLY(sharpen, SHARPEN); +#undef APPLY + + if (mask & MASK_CURVE) + { + gfloat *knots = rs_settings_get_curve_knots(settings); + const gint nknots = rs_settings_get_curve_nknots(settings); + + /* Block handlers during update */ + g_signal_handlers_block_matched(adjusters->curve, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, curve_changed, NULL); \ + rs_curve_widget_set_knots(adjusters->curve, knots, nknots); + g_signal_handlers_unblock_matched(adjusters->curve, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, curve_changed, NULL); \ + + g_free(knots); + } +} + GtkWidget * make_toolbox(RS_BLOB *rs) { @@ -426,59 +481,74 @@ notebook = gtk_notebook_new(); for(n = 0; n < 3; n++) { + GtkWidget *embed; + gulong settings_signal_id; tbox[n] = gtk_vbox_new (FALSE, 0); gtk_widget_show (tbox[n]); - rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_EXPOSURE, &show, DEFAULT_CONF_SHOW_TOOLBOX_EXPOSURE); - toolbox_exposure[n] = gui_box(_("Exposure"), gui_make_scale_from_adj(rs, - G_CALLBACK(gui_adj_value_callback), rs->settings[n]->exposure, MASK_EXPOSURE), show); - gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_exposure[n], FALSE, FALSE, 0); - g_signal_connect_after(toolbox_exposure[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_exposure); - g_signal_connect_after(toolbox_exposure[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_EXPOSURE); - - rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_SATURATION, &show, DEFAULT_CONF_SHOW_TOOLBOX_SATURATION); - toolbox_saturation[n] = gui_box(_("Saturation"), gui_make_scale_from_adj(rs, - G_CALLBACK(gui_adj_value_callback), rs->settings[n]->saturation, MASK_SATURATION), show); - gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_saturation[n], FALSE, FALSE, 0); - g_signal_connect_after(toolbox_saturation[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_saturation); - g_signal_connect_after(toolbox_saturation[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_SATURATION); - - rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_HUE, &show, DEFAULT_CONF_SHOW_TOOLBOX_HUE); - toolbox_hue[n] = gui_box(_("Hue"), gui_make_scale_from_adj(rs, - G_CALLBACK(gui_adj_value_callback), rs->settings[n]->hue, MASK_HUE), show); - gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_hue[n], FALSE, FALSE, 0); - g_signal_connect_after(toolbox_hue[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_hue); - g_signal_connect_after(toolbox_hue[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_HUE); - - rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_CONTRAST, &show, DEFAULT_CONF_SHOW_TOOLBOX_CONTRAST); - toolbox_contrast[n] = gui_box(_("Contrast"), gui_make_scale_from_adj(rs, - G_CALLBACK(gui_adj_value_callback), rs->settings[n]->contrast, MASK_CONTRAST), show); - gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_contrast[n], FALSE, FALSE, 0); - g_signal_connect_after(toolbox_contrast[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_contrast); - g_signal_connect_after(toolbox_contrast[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_CONTRAST); + ToolboxAdjusters *adjusters = g_new0(ToolboxAdjusters, 1); + + settings_signal_id = g_signal_connect(rs->settings[n], "settings-changed", G_CALLBACK(toolbox_settings_changed_cb), adjusters); +#define SLIDER(lower, upper, label, floor, ceiling, step, page) \ + adjusters->lower = GTK_ADJUSTMENT(gtk_adjustment_new(rs_settings_get_##lower(rs->settings[n]), floor, ceiling, step, page, 0.0)); \ + rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_##upper, &show, DEFAULT_CONF_SHOW_TOOLBOX_##upper); \ + embed = gui_make_scale_from_adj(rs->settings[n], settings_signal_id, G_CALLBACK(gui_adj_value_callback), adjusters->lower, MASK_##upper); \ + toolbox_##lower[n] = gui_box(label, embed, show); \ + gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_##lower[n], FALSE, FALSE, 0); \ + g_signal_connect_after(toolbox_##lower[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_##lower); \ + g_signal_connect_after(toolbox_##lower[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_##upper) \ + + SLIDER(exposure, EXPOSURE, _("Exposure"), -3.0, 3.0, 0.1, 0.5); + SLIDER(saturation, SATURATION, _("Saturation"), 0.0, 3.0, 0.1, 0.5); + SLIDER(hue, HUE, _("Hue"), -180.0, 180.0, 0.1, 30.0); + SLIDER(contrast, CONTRAST, _("Contrast"), 0.0, 3.0, 0.1, 0.5); + + /* White balance */ + GtkWidget *box = gtk_vbox_new (FALSE, 0); rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_WARMTH, &show, DEFAULT_CONF_SHOW_TOOLBOX_WARMTH); - toolbox_warmth[n] = gui_tool_warmth(rs, n, show); - gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_warmth[n], FALSE, FALSE, 0); + + /* Warmth slider */ + adjusters->warmth = GTK_ADJUSTMENT(gtk_adjustment_new(rs_settings_get_warmth(rs->settings[n]), -2.0, 2.0, 0.1, 0.5, 0.0)); + embed = gui_make_scale_from_adj(rs->settings[n], settings_signal_id, G_CALLBACK(gui_adj_value_callback), adjusters->warmth, MASK_WARMTH); \ + gtk_box_pack_start (GTK_BOX (box), embed, FALSE, FALSE, 0); + + /* Tint slider */ + adjusters->tint = GTK_ADJUSTMENT(gtk_adjustment_new(rs_settings_get_tint(rs->settings[n]), -2.0, 2.0, 0.1, 0.5, 0.0)); + embed = gui_make_scale_from_adj(rs->settings[n], settings_signal_id, G_CALLBACK(gui_adj_value_callback), adjusters->tint, MASK_TINT); + gtk_box_pack_start (GTK_BOX (box), embed, FALSE, FALSE, 0); + + /* Box it! */ + toolbox_warmth[n] = gui_box(_("Warmth/tint"), box, show); + + gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_warmth[n], FALSE, FALSE, 0); \ g_signal_connect_after(toolbox_warmth[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_warmth); g_signal_connect_after(toolbox_warmth[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_WARMTH); - rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_SHARPEN, &show, DEFAULT_CONF_SHOW_TOOLBOX_SHARPEN); - toolbox_sharpen[n] = gui_box(_("Sharpen"), gui_make_scale_from_adj(rs, - G_CALLBACK(gui_adj_value_callback), rs->settings[n]->sharpen, MASK_SHARPEN), show); - gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_sharpen[n], FALSE, FALSE, 0); - g_signal_connect_after(toolbox_sharpen[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_sharpen); - g_signal_connect_after(toolbox_sharpen[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_SHARPEN); + SLIDER(sharpen, SHARPEN, _("Sharpen"), 0.0, 10.0, 0.1, 0.5); + + /* Curve */ + gfloat *knots; + gint nknots; + rs->curve[n] = rs_curve_widget_new(); + adjusters->curve = RS_CURVE_WIDGET(rs->curve[n]); + + /* Initialize curve with knots from RSSettings */ + nknots = rs_settings_get_curve_nknots(rs->settings[n]); + knots = rs_settings_get_curve_knots(rs->settings[n]); + rs_curve_widget_set_knots(RS_CURVE_WIDGET(rs->curve[n]), knots, nknots); + g_free(knots); rs_conf_get_boolean_with_default(CONF_SHOW_TOOLBOX_CURVE, &show, DEFAULT_CONF_SHOW_TOOLBOX_CURVE); - gtk_widget_set_size_request(rs->settings[n]->curve, 64, 64); - g_signal_connect(rs->settings[n]->curve, "changed", G_CALLBACK(update_preview_callback), rs); - g_signal_connect(rs->settings[n]->curve, "right-click", G_CALLBACK(curve_context_callback), rs); - toolbox_curve[n] = gui_box(_("Curve"), rs->settings[n]->curve, show); + gtk_widget_set_size_request(rs->curve[n], 64, 64); + g_signal_connect(rs->curve[n], "changed", G_CALLBACK(curve_changed), rs->settings[n]); + g_signal_connect(rs->curve[n], "right-click", G_CALLBACK(curve_context_callback), rs); + toolbox_curve[n] = gui_box(_("Curve"), rs->curve[n], show); gtk_box_pack_start (GTK_BOX (tbox[n]), toolbox_curve[n], TRUE, FALSE, 0); g_signal_connect_after(toolbox_curve[n], "activate", G_CALLBACK(gui_expander_toggle_callback), toolbox_curve); g_signal_connect_after(toolbox_curve[n], "activate", G_CALLBACK(gui_expander_save_status_callback), CONF_SHOW_TOOLBOX_CURVE); + /* Append tab */ gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tbox[n], toolbox_label[n]); } g_signal_connect(notebook, "switch-page", G_CALLBACK(gui_notebook_callback), rs); diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/toolbox.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/toolbox.h --- rawstudio-1.1.1/src/toolbox.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/toolbox.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/ui.xml /tmp/lCx6zc4s8u/rawstudio-1.2/src/ui.xml --- rawstudio-1.1.1/src/ui.xml 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/ui.xml 2009-04-09 22:21:45.000000000 +0100 @@ -40,6 +40,14 @@

+ + + + + + + + diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/x3f-meta.c /tmp/lCx6zc4s8u/rawstudio-1.2/src/x3f-meta.c --- rawstudio-1.1.1/src/x3f-meta.c 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/x3f-meta.c 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -22,6 +22,7 @@ #include "rawfile.h" #include "x3f-meta.h" #include "rs-utils.h" +#include "rs-metadata.h" /* http://www.x3f.info/technotes/FileDocs/X3F_Format.pdf */ @@ -90,6 +91,7 @@ guint columns; guint rows; guint rowstride; /* row size in bytes, a value of zero means variable */ + void *image_data; /* Followed by image-data */ } __attribute__ ((packed)) X3F_IMAGE_DATA; @@ -110,7 +112,7 @@ } __attribute__ ((packed)) X3F_PROPERTY_ENTRY; void -rs_x3f_load_meta(const gchar *filename, RS_METADATA *meta) +rs_x3f_load_meta(const gchar *filename, RSMetadata *meta) { gint i; RAWFILE *rawfile; @@ -118,6 +120,9 @@ X3F_DIRECTORY_SECTION directory; X3F_DIRECTORY_ENTRY directory_entry; X3F_IMAGE_DATA image_data; + guint start=0, width=0, height=0, rowstride=0; + GdkPixbuf *pixbuf = NULL, *pixbuf2 = NULL; + gdouble ratio=1.0; rawfile = raw_open_file(filename); @@ -136,6 +141,8 @@ raw_get_uint(rawfile, G_STRUCT_OFFSET(X3F_FILE, rotation), &file.rotation); raw_get_uint(rawfile, raw_get_filesize(rawfile)-4, &file.directory_start); + meta->orientation=file.rotation; + if ((file.version_major == 2) && (file.version_minor == 2)) { /* Copy all data types in one go */ @@ -184,14 +191,16 @@ raw_get_uint(rawfile, offset+G_STRUCT_OFFSET(X3F_DIRECTORY_ENTRY, offset), &directory_entry.offset); raw_get_uint(rawfile, offset+G_STRUCT_OFFSET(X3F_DIRECTORY_ENTRY, length), &directory_entry.length); - if (raw_strcmp(rawfile, offset+G_STRUCT_OFFSET(X3F_DIRECTORY_ENTRY, type), "IMAG", 4)) + if (raw_strcmp(rawfile, offset+G_STRUCT_OFFSET(X3F_DIRECTORY_ENTRY, type), "IMA", 3)) { /* Image Data */ - raw_get_uint(rawfile, directory_entry.offset+G_STRUCT_OFFSET(X3F_IMAGE_DATA, type_of_image_data), &image_data.type_of_image_data); - - if (image_data.type_of_image_data == X3F_DATA_FORMAT_UNCOMPRESSED) + raw_get_uint(rawfile, directory_entry.offset+G_STRUCT_OFFSET(X3F_IMAGE_DATA, data_format), &image_data.data_format); + if (image_data.data_format == X3F_DATA_FORMAT_UNCOMPRESSED) { - /* FIXME: thumbnail */ + start = directory_entry.offset+G_STRUCT_OFFSET(X3F_IMAGE_DATA, image_data); + raw_get_uint(rawfile, directory_entry.offset+G_STRUCT_OFFSET(X3F_IMAGE_DATA, columns), &width); + raw_get_uint(rawfile, directory_entry.offset+G_STRUCT_OFFSET(X3F_IMAGE_DATA, rows), &height); + raw_get_uint(rawfile, directory_entry.offset+G_STRUCT_OFFSET(X3F_IMAGE_DATA, rowstride), &rowstride); } } else if (raw_strcmp(rawfile, offset+G_STRUCT_OFFSET(X3F_DIRECTORY_ENTRY, type), "PROP", 4)) @@ -265,50 +274,6 @@ } } } -} - -GdkPixbuf * -rs_x3f_load_thumb(const gchar *src) -{ - GdkPixbuf *pixbuf = NULL, *pixbuf2 = NULL; - gdouble ratio=1.0; - guint directory=0, directory_entries=0, n=0; - guint data_offset=0, data_length=0, data_format=0; - guint start=0, width=0, height=0, rowstride=0; - RAWFILE *rawfile; - - raw_init(); - - rawfile = raw_open_file(src); - if (!rawfile) return(NULL); - if (!raw_strcmp(rawfile, 0, "FOVb", 4)) - { - raw_close_file(rawfile); - return(NULL); - } - - raw_set_byteorder(rawfile, 0x4949); /* x3f is always little endian */ - raw_get_uint(rawfile, raw_get_filesize(rawfile)-4, &directory); - raw_get_uint(rawfile, directory+8, &directory_entries); - for(n=0;n<(directory_entries*12);n+=12) - { - raw_get_uint(rawfile, directory+12+n, &data_offset); - raw_get_uint(rawfile, directory+12+n+4, &data_length); - if (raw_strcmp(rawfile, directory+12+n+8, "IMA", 3)) /* Catch both IMAG and IMA2 */ - { - if (raw_strcmp(rawfile, data_offset, "SECi", 4)) - { - raw_get_uint(rawfile, data_offset+12, &data_format); - if (data_format == 3) - { - raw_get_uint(rawfile, data_offset+16, &width); - raw_get_uint(rawfile, data_offset+20, &height); - raw_get_uint(rawfile, data_offset+24, &rowstride); - start = data_offset+28; - } - } - } - } if (width > 0) pixbuf = gdk_pixbuf_new_from_data(raw_get_map(rawfile)+start, GDK_COLORSPACE_RGB, FALSE, 8, @@ -316,15 +281,21 @@ if (pixbuf) { + if (file.rotation > 0) + { + pixbuf2 = gdk_pixbuf_rotate_simple(pixbuf,360-file.rotation); + g_object_unref(pixbuf); + pixbuf = pixbuf2; + } ratio = ((gdouble) gdk_pixbuf_get_width(pixbuf))/((gdouble) gdk_pixbuf_get_height(pixbuf)); if (ratio>1.0) pixbuf2 = gdk_pixbuf_scale_simple(pixbuf, 128, (gint) (128.0/ratio), GDK_INTERP_BILINEAR); else pixbuf2 = gdk_pixbuf_scale_simple(pixbuf, (gint) (128.0*ratio), 128, GDK_INTERP_BILINEAR); g_object_unref(pixbuf); - pixbuf = pixbuf2; + meta->thumbnail = pixbuf2; } raw_close_file(rawfile); - return(pixbuf); + return; } diff -Nru /tmp/F93zkhbnpI/rawstudio-1.1.1/src/x3f-meta.h /tmp/lCx6zc4s8u/rawstudio-1.2/src/x3f-meta.h --- rawstudio-1.1.1/src/x3f-meta.h 2008-10-12 21:22:07.000000000 +0100 +++ rawstudio-1.2/src/x3f-meta.h 2009-04-09 22:21:45.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2008 Anders Brander and + * Copyright (C) 2006-2009 Anders Brander and * Anders Kvist * * This program is free software; you can redistribute it and/or @@ -17,5 +17,4 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -extern void rs_x3f_load_meta(const gchar *filename, RS_METADATA *meta); -GdkPixbuf *rs_x3f_load_thumb(const gchar *src); +extern void rs_x3f_load_meta(const gchar *filename, RSMetadata *meta);