diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index b45b41e02..16e774aa7 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -68,6 +68,7 @@ EXIFPANEL_RESET;Réinitialiser EXIFPANEL_RESETALL;Réinitialiser tout EXIFPANEL_RESETALLHINT;Réinitialise tous les tags à leur valeur initiale EXIFPANEL_RESETHINT;Réinitialise les données sélectionnées à la valeur initiale +EXIFPANEL_SHOWALL;Voir tout EXIFPANEL_SUBDIRECTORY;Sous-répertoire EXPORT_BYPASS;Étapes de traitement à ignorer EXPORT_BYPASS_ALL;Sélectionner / Désélectionner tout diff --git a/rtexif/stdattribs.cc b/rtexif/stdattribs.cc index bacd6ffef..a7e3fe00f 100644 --- a/rtexif/stdattribs.cc +++ b/rtexif/stdattribs.cc @@ -826,7 +826,7 @@ const TagAttrib ifdAttribs[] = { {0, AC_WRITE, 0, nullptr, 0xc62f, AUTO, "CameraSerialNumber", &stdInterpreter}, {0, AC_SYSTEM, 0, nullptr, 0xc630, AUTO, "DNGLensInfo", &stdInterpreter}, {0, AC_DONTWRITE, 0, nullptr, 0xC634, AUTO, "MakerNote", &stdInterpreter}, //DNGPrivateData - {0, AC_DONTWRITE, 0, nullptr, 0xC640, AUTO, "RawImageSegmentation", &rawImageSegmentationInterpreter}, + {0, AC_SYSTEM, 0, nullptr, 0xC640, AUTO, "RawImageSegmentation", &rawImageSegmentationInterpreter}, {0, AC_WRITE, 0, nullptr, 0xc65d, AUTO, "RawDataUniqueID", &stdInterpreter}, {0, AC_DONTWRITE, 0, nullptr, 0xc761, AUTO, "NoiseProfile", &stdInterpreter}, { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} diff --git a/rtgui/exifpanel.cc b/rtgui/exifpanel.cc index 9e10b75fa..874c6b6e2 100644 --- a/rtgui/exifpanel.cc +++ b/rtgui/exifpanel.cc @@ -25,49 +25,50 @@ using namespace rtengine; using namespace rtengine::procparams; using namespace rtexif; -ExifPanel::ExifPanel () : idata(nullptr) +ExifPanel::ExifPanel () : idata (nullptr) { recursiveOp = true; - exifTree = Gtk::manage(new Gtk::TreeView()); - scrolledWindow = Gtk::manage(new Gtk::ScrolledWindow()); + exifTree = Gtk::manage (new Gtk::TreeView()); + scrolledWindow = Gtk::manage (new Gtk::ScrolledWindow()); - exifTree->set_headers_visible(false); - exifTree->set_rules_hint(false); - exifTree->set_reorderable(false); - exifTree->set_enable_search(true); + exifTree->set_headers_visible (false); + exifTree->set_rules_hint (false); + exifTree->set_reorderable (false); + exifTree->set_enable_search (true); exifTree->get_selection()->set_mode (Gtk::SELECTION_MULTIPLE); - scrolledWindow->set_shadow_type(Gtk::SHADOW_NONE); - scrolledWindow->set_policy(Gtk::POLICY_ALWAYS, Gtk::POLICY_ALWAYS); - scrolledWindow->property_window_placement().set_value(Gtk::CORNER_TOP_LEFT); - scrolledWindow->add(*exifTree); + scrolledWindow->set_shadow_type (Gtk::SHADOW_NONE); + scrolledWindow->set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_ALWAYS); + scrolledWindow->property_window_placement().set_value (Gtk::CORNER_TOP_LEFT); + scrolledWindow->add (*exifTree); - exifTreeModel = Gtk::TreeStore::create(exifColumns); + exifTreeModel = Gtk::TreeStore::create (exifColumns); exifTree->set_model (exifTreeModel); - exifTree->set_grid_lines(Gtk::TREE_VIEW_GRID_LINES_NONE); - exifTree->set_row_separator_func( - [&](const Glib::RefPtr& model, const Gtk::TreeModel::iterator& row) - { return row->get_value (exifColumns.isSeparator); } + exifTree->set_grid_lines (Gtk::TREE_VIEW_GRID_LINES_NONE); + exifTree->set_row_separator_func ( + [&] (const Glib::RefPtr& model, const Gtk::TreeModel::iterator & row) { + return row->get_value (exifColumns.isSeparator); + } ); delicon = RTImage::createFromFile ("gtk-close.png"); keepicon = RTImage::createFromFile ("gtk-apply.png"); editicon = RTImage::createFromFile ("gtk-add.png"); - Gtk::TreeView::Column *viewcol = Gtk::manage(new Gtk::TreeView::Column ("Field Name")); - Gtk::CellRendererPixbuf* render_pb = Gtk::manage(new Gtk::CellRendererPixbuf ()); - Gtk::CellRendererText *render_txt = Gtk::manage(new Gtk::CellRendererText()); + Gtk::TreeView::Column *viewcol = Gtk::manage (new Gtk::TreeView::Column ("Field Name")); + Gtk::CellRendererPixbuf* render_pb = Gtk::manage (new Gtk::CellRendererPixbuf ()); + Gtk::CellRendererText *render_txt = Gtk::manage (new Gtk::CellRendererText()); render_txt->property_ellipsize() = Pango::ELLIPSIZE_END; viewcol->pack_start (*render_pb, false); viewcol->pack_start (*render_txt, true); viewcol->add_attribute (*render_pb, "pixbuf", exifColumns.icon); viewcol->add_attribute (*render_txt, "markup", exifColumns.field); - viewcol->set_expand(true); + viewcol->set_expand (true); viewcol->set_resizable (true); - viewcol->set_fixed_width(35); - viewcol->set_min_width(35); - viewcol->set_sizing(Gtk::TREE_VIEW_COLUMN_AUTOSIZE); + viewcol->set_fixed_width (35); + viewcol->set_min_width (35); + viewcol->set_sizing (Gtk::TREE_VIEW_COLUMN_AUTOSIZE); render_pb->property_ypad() = 0; render_txt->property_ypad() = 0; @@ -76,16 +77,16 @@ ExifPanel::ExifPanel () : idata(nullptr) exifTree->append_column (*viewcol); - Gtk::TreeView::Column *viewcolv = Gtk::manage(new Gtk::TreeView::Column ("Value")); - Gtk::CellRendererText *render_txtv = Gtk::manage(new Gtk::CellRendererText()); + Gtk::TreeView::Column *viewcolv = Gtk::manage (new Gtk::TreeView::Column ("Value")); + Gtk::CellRendererText *render_txtv = Gtk::manage (new Gtk::CellRendererText()); render_txtv->property_ellipsize() = Pango::ELLIPSIZE_END; viewcolv->pack_start (*render_txtv, true); viewcolv->add_attribute (*render_txtv, "markup", exifColumns.value); - viewcolv->set_expand(true); + viewcolv->set_expand (true); viewcolv->set_resizable (true); - viewcol->set_fixed_width(35); - viewcolv->set_min_width(35); - viewcolv->set_sizing(Gtk::TREE_VIEW_COLUMN_AUTOSIZE); + viewcol->set_fixed_width (35); + viewcolv->set_min_width (35); + viewcolv->set_sizing (Gtk::TREE_VIEW_COLUMN_AUTOSIZE); render_txtv->property_ypad() = 0; @@ -93,61 +94,68 @@ ExifPanel::ExifPanel () : idata(nullptr) pack_start (*scrolledWindow); - Gtk::Grid* buttons1 = Gtk::manage(new Gtk::Grid()); - buttons1->set_row_homogeneous(true); - buttons1->set_column_homogeneous(true); - setExpandAlignProperties(buttons1, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - Gtk::Grid* buttons2 = Gtk::manage(new Gtk::Grid()); - buttons2->set_row_homogeneous(true); - buttons2->set_column_homogeneous(true); - setExpandAlignProperties(buttons2, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + Gtk::Grid* buttons1 = Gtk::manage (new Gtk::Grid()); + buttons1->set_row_homogeneous (true); + buttons1->set_column_homogeneous (true); + setExpandAlignProperties (buttons1, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + Gtk::Grid* buttons2 = Gtk::manage (new Gtk::Grid()); + buttons2->set_row_homogeneous (true); + buttons2->set_column_homogeneous (true); + setExpandAlignProperties (buttons2, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - remove = Gtk::manage(new Gtk::Button ()); // M("EXIFPANEL_REMOVE") - remove->set_image (*Gtk::manage(new Gtk::Image (delicon))); - remove->set_tooltip_text (M("EXIFPANEL_REMOVEHINT")); - remove->get_style_context()->add_class("Left"); - setExpandAlignProperties(remove, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons1->attach_next_to(*remove, Gtk::POS_LEFT, 1, 1); + remove = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_REMOVE") + remove->set_image (*Gtk::manage (new Gtk::Image (delicon))); + remove->set_tooltip_text (M ("EXIFPANEL_REMOVEHINT")); + remove->get_style_context()->add_class ("Left"); + setExpandAlignProperties (remove, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); + buttons1->attach_next_to (*remove, Gtk::POS_LEFT, 1, 1); - keep = Gtk::manage(new Gtk::Button ()); // M("EXIFPANEL_KEEP") - keep->set_image (*Gtk::manage(new Gtk::Image (keepicon))); - keep->set_tooltip_text (M("EXIFPANEL_KEEPHINT")); - keep->get_style_context()->add_class("MiddleH"); - setExpandAlignProperties(keep, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons1->attach_next_to(*keep, Gtk::POS_RIGHT, 1, 1); + keep = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_KEEP") + keep->set_image (*Gtk::manage (new Gtk::Image (keepicon))); + keep->set_tooltip_text (M ("EXIFPANEL_KEEPHINT")); + keep->get_style_context()->add_class ("MiddleH"); + setExpandAlignProperties (keep, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); + buttons1->attach_next_to (*keep, Gtk::POS_RIGHT, 1, 1); - add = Gtk::manage(new Gtk::Button ()); // M("EXIFPANEL_ADDEDIT") - add->set_image (*Gtk::manage(new Gtk::Image (editicon))); - add->set_tooltip_text (M("EXIFPANEL_ADDEDITHINT")); - add->get_style_context()->add_class("Right"); - setExpandAlignProperties(add, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons1->attach_next_to(*add, Gtk::POS_RIGHT, 1, 1); + add = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_ADDEDIT") + add->set_image (*Gtk::manage (new Gtk::Image (editicon))); + add->set_tooltip_text (M ("EXIFPANEL_ADDEDITHINT")); + add->get_style_context()->add_class ("Right"); + setExpandAlignProperties (add, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); + buttons1->attach_next_to (*add, Gtk::POS_RIGHT, 1, 1); - reset = Gtk::manage(new Gtk::Button ()); // M("EXIFPANEL_RESET") - reset->set_image (*Gtk::manage(new RTImage ("gtk-undo-ltr.png", "gtk-undo-rtl.png"))); - reset->set_tooltip_text (M("EXIFPANEL_RESETHINT")); - reset->get_style_context()->add_class("Left"); - setExpandAlignProperties(reset, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons2->attach_next_to(*reset, Gtk::POS_LEFT, 1, 1); + showAll = Gtk::manage (new Gtk::ToggleButton (M ("EXIFPANEL_SHOWALL"))); + //add->set_tooltip_text (M("EXIFPANEL_SHOWALL")); + setExpandAlignProperties (showAll, false, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); + showAll->set_active (options.lastShowAllExif); + buttons2->attach_next_to (*showAll, Gtk::POS_LEFT, 1, 1); - resetAll = Gtk::manage(new Gtk::Button ()); // M("EXIFPANEL_RESETALL") - resetAll->set_image (*Gtk::manage(new RTImage ("gtk-undoall-ltr.png", "gtk-undoall-rtl.png"))); - resetAll->set_tooltip_text (M("EXIFPANEL_RESETALLHINT")); - resetAll->get_style_context()->add_class("Right"); - setExpandAlignProperties(resetAll, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons2->attach_next_to(*resetAll, Gtk::POS_RIGHT, 1, 1); + reset = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_RESET") + reset->set_image (*Gtk::manage (new RTImage ("gtk-undo-ltr.png", "gtk-undo-rtl.png"))); + reset->set_tooltip_text (M ("EXIFPANEL_RESETHINT")); + reset->get_style_context()->add_class ("Left"); + setExpandAlignProperties (reset, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); + buttons2->attach_next_to (*reset, Gtk::POS_RIGHT, 1, 1); + + resetAll = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_RESETALL") + resetAll->set_image (*Gtk::manage (new RTImage ("gtk-undoall-ltr.png", "gtk-undoall-rtl.png"))); + resetAll->set_tooltip_text (M ("EXIFPANEL_RESETALLHINT")); + resetAll->get_style_context()->add_class ("Right"); + setExpandAlignProperties (resetAll, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); + buttons2->attach_next_to (*resetAll, Gtk::POS_RIGHT, 1, 1); pack_end (*buttons2, Gtk::PACK_SHRINK); pack_end (*buttons1, Gtk::PACK_SHRINK); - exifTree->get_selection()->signal_changed().connect(sigc::mem_fun(*this, &ExifPanel::exifSelectionChanged)); - exifTree->signal_row_activated().connect(sigc::mem_fun(*this, &ExifPanel::row_activated)); + exifTree->get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ExifPanel::exifSelectionChanged)); + exifTree->signal_row_activated().connect (sigc::mem_fun (*this, &ExifPanel::row_activated)); - remove->signal_clicked().connect( sigc::mem_fun(*this, &ExifPanel::removePressed) ); - keep->signal_clicked().connect( sigc::mem_fun(*this, &ExifPanel::keepPressed) ); - reset->signal_clicked().connect( sigc::mem_fun(*this, &ExifPanel::resetPressed) ); - resetAll->signal_clicked().connect( sigc::mem_fun(*this, &ExifPanel::resetAllPressed) ); - add->signal_clicked().connect( sigc::mem_fun(*this, &ExifPanel::addPressed) ); + remove->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::removePressed) ); + keep->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::keepPressed) ); + reset->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::resetPressed) ); + resetAll->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::resetAllPressed) ); + add->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::addPressed) ); + showAll->signal_toggled().connect ( sigc::mem_fun (*this, &ExifPanel::showAlltoggled) ); show_all (); } @@ -188,14 +196,10 @@ void ExifPanel::setImageData (const FramesMetaData* id) idata = id; exifTreeModel->clear (); - if (id) { + if (idata) { for (unsigned int rootNum = 0; rootNum < id->getRootCount (); ++rootNum) { if ( id->getRootExifData (rootNum)) { - //id->getRootExifData ()->printAll (); - if (rootNum > 0) { - addSeparator(); - } - addDirectory (id->getRootExifData (rootNum), exifTreeModel->children()); + addDirectory (id->getRootExifData (rootNum), exifTreeModel->children(), rootNum > 0); } } } @@ -204,7 +208,7 @@ void ExifPanel::setImageData (const FramesMetaData* id) Gtk::TreeModel::Children ExifPanel::addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, rtexif::ActionCode action, bool editable) { - Gtk::TreeModel::Row row = *(exifTreeModel->append(root)); + Gtk::TreeModel::Row row = * (exifTreeModel->append (root)); row[exifColumns.action] = action; row[exifColumns.editable] = editable; row[exifColumns.edited] = false; @@ -219,14 +223,14 @@ Gtk::TreeModel::Children ExifPanel::addTag (const Gtk::TreeModel::Children& root } if (editable) { - row[exifColumns.field] = Glib::ustring("") + escapeHtmlChars(field) + ""; - row[exifColumns.value] = Glib::ustring("") + escapeHtmlChars(value) + ""; + row[exifColumns.field] = Glib::ustring ("") + escapeHtmlChars (field) + ""; + row[exifColumns.value] = Glib::ustring ("") + escapeHtmlChars (value) + ""; } else if (action == AC_SYSTEM) { - row[exifColumns.field] = Glib::ustring("") + escapeHtmlChars(field) + ""; - row[exifColumns.value] = Glib::ustring("") + escapeHtmlChars(value) + ""; + row[exifColumns.field] = Glib::ustring ("") + escapeHtmlChars (field) + ""; + row[exifColumns.value] = Glib::ustring ("") + escapeHtmlChars (value) + ""; } else { - row[exifColumns.field] = escapeHtmlChars(field); - row[exifColumns.value] = escapeHtmlChars(value); + row[exifColumns.field] = escapeHtmlChars (field); + row[exifColumns.value] = escapeHtmlChars (value); } return row.children(); @@ -235,7 +239,7 @@ Gtk::TreeModel::Children ExifPanel::addTag (const Gtk::TreeModel::Children& root Gtk::TreeModel::Children ExifPanel::addSeparator () { - Gtk::TreeModel::Row row = *(exifTreeModel->append(exifTreeModel->children())); + Gtk::TreeModel::Row row = * (exifTreeModel->append (exifTreeModel->children())); row[exifColumns.action] = rtexif::ActionCode::AC_INVALID; row[exifColumns.editable] = false; row[exifColumns.edited] = false; @@ -247,23 +251,45 @@ Gtk::TreeModel::Children ExifPanel::addSeparator () return row.children(); } -void ExifPanel::addDirectory (const TagDirectory* dir, Gtk::TreeModel::Children root) +void ExifPanel::addDirectory (const TagDirectory* dir, Gtk::TreeModel::Children root, bool checkForSeparator) { - for (int i = 0; i < dir->getCount(); i++) { - Tag* t = (const_cast(dir))->getTagByIndex (i); + for (int i = 0; i < dir->getCount(); ++i) { + Tag* t = (const_cast (dir))->getTagByIndex (i); - if (t->getAttrib() && t->getAttrib()->action == AC_SYSTEM) { + bool hasContent = false; + + if (checkForSeparator && i == 0) { + for (int j = 0; j < dir->getCount(); ++j) { + Tag* t2 = (const_cast (dir))->getTagByIndex (j); + const TagAttrib* currAttrib = t->getAttrib(); + + if (currAttrib && ((options.lastShowAllExif) || (!options.lastShowAllExif && currAttrib->action != AC_SYSTEM))) { + addSeparator(); + hasContent = true; + break; + } + } + } else { + hasContent = true; + } + + if (!hasContent) { + return; + } + + const TagAttrib* currAttrib = t->getAttrib(); + + if (!options.lastShowAllExif && currAttrib && currAttrib->action == AC_SYSTEM) { continue; } if (t->isDirectory()) - for (int j = 0; t->getDirectory(j); j++) { - Gtk::TreeModel::Children ch = addTag (root, t->nameToString (j), M("EXIFPANEL_SUBDIRECTORY"), t->getAttrib() ? t->getAttrib()->action : AC_DONTWRITE, t->getAttrib() && t->getAttrib()->editable); - addDirectory (t->getDirectory(j), ch); - } - else { - addTag (root, t->nameToString (), t->valueToString (), t->getAttrib() ? (t->getOwnMemory() ? t->getAttrib()->action : AC_SYSTEM) : AC_DONTWRITE, t->getAttrib() && t->getAttrib()->editable); + for (int j = 0; t->getDirectory (j); j++) { + Gtk::TreeModel::Children ch = addTag (root, t->nameToString (j), M ("EXIFPANEL_SUBDIRECTORY"), currAttrib ? currAttrib->action : AC_DONTWRITE, currAttrib && currAttrib->editable); + addDirectory (t->getDirectory (j), ch); + } else { + addTag (root, t->nameToString (), t->valueToString (), currAttrib ? (t->getOwnMemory() ? currAttrib->action : AC_SYSTEM) : AC_DONTWRITE, currAttrib && currAttrib->editable); } } } @@ -289,11 +315,11 @@ void ExifPanel::exifSelectionChanged () remove->set_sensitive (1); keep->set_sensitive (1); reset->set_sensitive (1); - } else if (iter->get_value(exifColumns.icon) == delicon) { + } else if (iter->get_value (exifColumns.icon) == delicon) { remove->set_sensitive (0); keep->set_sensitive (1); reset->set_sensitive (1); - } else if (iter->get_value(exifColumns.icon) == keepicon || iter->get_value(exifColumns.icon) == editicon) { + } else if (iter->get_value (exifColumns.icon) == keepicon || iter->get_value (exifColumns.icon) == editicon) { keep->set_sensitive (0); remove->set_sensitive (1); reset->set_sensitive (1); @@ -398,8 +424,8 @@ Gtk::TreeModel::iterator ExifPanel::resetIt (Gtk::TreeModel::iterator iter) } if (iter->get_value (exifColumns.edited)) { - iter->set_value (exifColumns.value, Glib::ustring("") + iter->get_value(exifColumns.orig_value) + ""); - iter->set_value (exifColumns.value_nopango, iter->get_value(exifColumns.orig_value)); + iter->set_value (exifColumns.value, Glib::ustring ("") + iter->get_value (exifColumns.orig_value) + ""); + iter->set_value (exifColumns.value_nopango, iter->get_value (exifColumns.orig_value)); iter->set_value (exifColumns.edited, false); } @@ -442,14 +468,14 @@ void ExifPanel::resetAllPressed () void ExifPanel::addPressed () { - Gtk::Dialog* dialog = new Gtk::Dialog (M("EXIFPANEL_ADDTAGDLG_TITLE"), *((Gtk::Window*)get_toplevel()), true); + Gtk::Dialog* dialog = new Gtk::Dialog (M ("EXIFPANEL_ADDTAGDLG_TITLE"), * ((Gtk::Window*)get_toplevel()), true); dialog->add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK); dialog->add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); Gtk::HBox* hb1 = new Gtk::HBox (); Gtk::HBox* hb2 = new Gtk::HBox (); - Gtk::Label* tlabel = new Gtk::Label (M("EXIFPANEL_ADDTAGDLG_SELECTTAG") + ":"); + Gtk::Label* tlabel = new Gtk::Label (M ("EXIFPANEL_ADDTAGDLG_SELECTTAG") + ":"); MyComboBoxText* tcombo = new MyComboBoxText (); tcombo->append ("Artist"); @@ -460,7 +486,7 @@ void ExifPanel::addPressed () hb1->pack_start (*tlabel, Gtk::PACK_SHRINK, 4); hb1->pack_start (*tcombo); - Gtk::Label* vlabel = new Gtk::Label (M("EXIFPANEL_ADDTAGDLG_ENTERVALUE") + ":"); + Gtk::Label* vlabel = new Gtk::Label (M ("EXIFPANEL_ADDTAGDLG_ENTERVALUE") + ":"); Gtk::Entry* ventry = new Gtk::Entry (); hb2->pack_start (*vlabel, Gtk::PACK_SHRINK, 4); hb2->pack_start (*ventry); @@ -506,6 +532,12 @@ void ExifPanel::addPressed () delete hb2; } +void ExifPanel::showAlltoggled () +{ + options.lastShowAllExif = showAll->get_active(); + setImageData (idata); +} + void ExifPanel::editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib::ustring value) { @@ -520,29 +552,30 @@ void ExifPanel::editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib } if (iter == root.end() && value != "#keep" && value != "#delete") { - iter = exifTreeModel->append(root); + iter = exifTreeModel->append (root); iter->set_value (exifColumns.field_nopango, fseg); iter->set_value (exifColumns.action, AC_INVALID); if (dp == Glib::ustring::npos) { - iter->set_value (exifColumns.value, Glib::ustring("") + value + ""); + iter->set_value (exifColumns.value, Glib::ustring ("") + value + ""); iter->set_value (exifColumns.value_nopango, value); iter->set_value (exifColumns.orig_value, value); - iter->set_value (exifColumns.field, Glib::ustring("") + fseg + ""); + iter->set_value (exifColumns.field, Glib::ustring ("") + fseg + ""); iter->set_value (exifColumns.edited, true); iter->set_value (exifColumns.editable, true); iter->set_value (exifColumns.icon, editicon); } else { - iter->set_value (exifColumns.value, Glib::ustring(M("EXIFPANEL_SUBDIRECTORY"))); - iter->set_value (exifColumns.value_nopango, Glib::ustring(M("EXIFPANEL_SUBDIRECTORY"))); + iter->set_value (exifColumns.value, Glib::ustring (M ("EXIFPANEL_SUBDIRECTORY"))); + iter->set_value (exifColumns.value_nopango, Glib::ustring (M ("EXIFPANEL_SUBDIRECTORY"))); iter->set_value (exifColumns.field, fseg); iter->set_value (exifColumns.icon, keepicon); - iter->set_value (exifColumns.orig_value, Glib::ustring(M("EXIFPANEL_SUBDIRECTORY"))); + iter->set_value (exifColumns.orig_value, Glib::ustring (M ("EXIFPANEL_SUBDIRECTORY"))); } } - if (iter == root.end()) + if (iter == root.end()) { return; + } if (dp == Glib::ustring::npos) { if (value == "#keep" && iter->get_value (exifColumns.action) != AC_SYSTEM) { @@ -550,7 +583,7 @@ void ExifPanel::editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib } else if (value == "#delete" && iter->get_value (exifColumns.action) != AC_SYSTEM) { iter->set_value (exifColumns.icon, delicon); } else { - iter->set_value (exifColumns.value, Glib::ustring("") + value + ""); + iter->set_value (exifColumns.value, Glib::ustring ("") + value + ""); iter->set_value (exifColumns.value_nopango, value); iter->set_value (exifColumns.edited, true); iter->set_value (exifColumns.icon, editicon); @@ -664,8 +697,7 @@ void ExifPanel::row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewCo exifTree->collapse_row (path); } else { exifTree->expand_row (path, false); - } - else if (iter->get_value (exifColumns.editable)) { + } else if (iter->get_value (exifColumns.editable)) { addPressed (); } } @@ -676,6 +708,6 @@ void ExifPanel::notifyListener () { if (listener) { - listener->panelChanged (EvExif, M("HISTORY_CHANGED")); + listener->panelChanged (EvExif, M ("HISTORY_CHANGED")); } } diff --git a/rtgui/exifpanel.h b/rtgui/exifpanel.h index d86e82af8..b9d76f25d 100644 --- a/rtgui/exifpanel.h +++ b/rtgui/exifpanel.h @@ -47,16 +47,16 @@ private: ExifColumns() { - add(field); - add(value); - add(icon); - add(action); - add(edited); - add(field_nopango); - add(value_nopango); - add(editable); - add(orig_value); - add(isSeparator); + add (field); + add (value); + add (icon); + add (action); + add (edited); + add (field_nopango); + add (value_nopango); + add (editable); + add (orig_value); + add (isSeparator); } }; Glib::RefPtr delicon; @@ -73,38 +73,41 @@ private: Gtk::Button* add; Gtk::Button* reset; Gtk::Button* resetAll; + Gtk::ToggleButton* showAll; - Gtk::TreeModel::Children addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, rtexif::ActionCode action, bool editable); + Gtk::TreeModel::Children addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, rtexif::ActionCode action, bool editable); void editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib::ustring value); void updateChangeList (Gtk::TreeModel::Children root, std::string prefix); - void addDirectory (const rtexif::TagDirectory* dir, Gtk::TreeModel::Children root); - Gtk::TreeModel::Children addSeparator (); + void addDirectory (const rtexif::TagDirectory* dir, Gtk::TreeModel::Children root, bool checkForSeparator = false); + Gtk::TreeModel::Children addSeparator(); Glib::ustring getSelection (bool onlyifeditable = false); - Glib::ustring getSelectedValue (); - void updateChangeList (); - void applyChangeList (); - void keepIt (Gtk::TreeModel::iterator iter); - void delIt (Gtk::TreeModel::iterator iter); + Glib::ustring getSelectedValue(); + void updateChangeList(); + void applyChangeList(); + void keepIt (Gtk::TreeModel::iterator iter); + void delIt (Gtk::TreeModel::iterator iter); Gtk::TreeModel::iterator resetIt (Gtk::TreeModel::iterator iter); + void removePressed(); + void keepPressed(); + void resetPressed(); + void resetAllPressed(); + void addPressed(); + void showAlltoggled(); + public: ExifPanel (); - virtual ~ExifPanel (); + virtual ~ExifPanel(); - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); + void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited = nullptr); + void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited = nullptr); + void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited = nullptr); void setImageData (const rtengine::FramesMetaData* id); - void exifSelectionChanged (); - void removePressed (); - void keepPressed (); - void resetPressed (); - void resetAllPressed (); - void addPressed (); + void exifSelectionChanged(); void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); - void notifyListener (); + void notifyListener(); }; diff --git a/rtgui/options.cc b/rtgui/options.cc index 38be51931..53c4ffb4a 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -354,6 +354,7 @@ void Options::setDefaults () CPFontFamily = "default"; CPFontSize = 8; lastScale = 5; + lastShowAllExif = false; panAccelFactor = 5; rememberZoomAndPan = true; lastCropSize = 1; @@ -1390,6 +1391,10 @@ void Options::readFromFile (Glib::ustring fname) lastScale = keyFile.get_integer ("GUI", "LastPreviewScale"); } + if (keyFile.has_key ("GUI", "LastShowAllExif")) { + lastShowAllExif = keyFile.get_boolean ("GUI", "LastShowAllExif"); + } + if (keyFile.has_key ("GUI", "PanAccelFactor")) { panAccelFactor = keyFile.get_integer ("GUI", "PanAccelFactor"); } @@ -2105,6 +2110,7 @@ void Options::saveToFile (Glib::ustring fname) keyFile.set_string ("GUI", "CPFontFamily", CPFontFamily); keyFile.set_integer ("GUI", "CPFontSize", CPFontSize); keyFile.set_integer ("GUI", "LastPreviewScale", lastScale); + keyFile.set_boolean ("GUI", "LastShowAllExif", lastShowAllExif); keyFile.set_integer ("GUI", "PanAccelFactor", panAccelFactor); keyFile.set_boolean ("GUI", "RememberZoomAndPan", rememberZoomAndPan); keyFile.set_integer ("GUI", "LastCropSize", lastCropSize); diff --git a/rtgui/options.h b/rtgui/options.h index 291a45d47..5bf77fa65 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -168,6 +168,7 @@ public: int dirBrowserHeight; int preferencesWidth; int preferencesHeight; + bool lastShowAllExif; int lastScale; int panAccelFactor; int lastCropSize;