diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 349251d45..939e6b112 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -868,8 +868,9 @@ NAVIGATOR_S;S: NAVIGATOR_V;V: NAVIGATOR_XY_FULL;Largeur = %1, Hauteur = %2 NAVIGATOR_XY_NA;x = n/d, y = n/d -OPTIONS_DEFIMG_MISSING;Le profil par défaut pour les images standards n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez également le dossier de vos profils, il peut être manquant ou endommagé\n\n"%1" sera utilisé à la place. -OPTIONS_DEFRAW_MISSING;Le profil par défaut pour les images Raw n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez également le dossier de vos profils, il peut être manquant ou endommagé\n\n"%1" sera utilisé à la place. +OPTIONS_BUNDLED_MISSING;Le profile fourni "%1" n'a pas été trouvé!\n\nVotre installation peut être endomagé.\n\nLes valeurs internes par défaut seront utilisées à la place. +OPTIONS_DEFIMG_MISSING;Le profil par défaut pour les images standards n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez le dossier de vos profils, il peut être manquant ou endommagé\n\n"%1" sera utilisé à la place. +OPTIONS_DEFRAW_MISSING;Le profil par défaut pour les images Raw n'a pas été trouvé ou n'a pas été réglé.\n\nVérifiez le dossier de vos profils, il peut être manquant ou endommagé\n\n"%1" sera utilisé à la place. PARTIALPASTE_ADVANCEDGROUP;Réglages Avancés PARTIALPASTE_BASICGROUP;Réglages de base PARTIALPASTE_CACORRECTION;Aberration chromatique diff --git a/rtdata/languages/default b/rtdata/languages/default index dc8b5fbbe..c6c7d08ba 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -869,6 +869,7 @@ NAVIGATOR_S;S: NAVIGATOR_V;V: NAVIGATOR_XY_FULL;Width: %1, Height: %2 NAVIGATOR_XY_NA;x: --, y: -- +OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. PARTIALPASTE_ADVANCEDGROUP;Advanced Settings diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index fdfee64ab..2365123e1 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -163,6 +163,36 @@ int main (int argc, char **argv) return -2; } + if (options.is_defProfRawMissing()) { + options.defProfRaw = DEFPROFILE_RAW; + std::cerr << std::endl + << "The default profile for raw photos could not be found or is not set." << std::endl + << "Please check your profiles' directory, it may be missing or damaged." << std::endl + << "\"" << DEFPROFILE_RAW << "\" will be used instead." << std::endl << std::endl; + } + if (options.is_bundledDefProfRawMissing()) { + std::cerr << std::endl + << "The bundled profile \"" << options.defProfRaw << "\" could not be found!" << std::endl + << "Your installation could be damaged." << std::endl + << "Default internal values will be used instead." << std::endl << std::endl; + options.defProfRaw = DEFPROFILE_INTERNAL; + } + + if (options.is_defProfImgMissing()) { + options.defProfImg = DEFPROFILE_IMG; + std::cerr << std::endl + << "The default profile for non-raw photos could not be found or is not set." << std::endl + << "Please check your profiles' directory, it may be missing or damaged." << std::endl + << "\"" << DEFPROFILE_IMG << "\" will be used instead." << std::endl << std::endl; + } + if (options.is_bundledDefProfImgMissing()) { + std::cerr << std::endl + << "The bundled profile " << options.defProfImg << " could not be found!" << std::endl + << "Your installation could be damaged." << std::endl + << "Default internal values will be used instead." << std::endl << std::endl; + options.defProfImg = DEFPROFILE_INTERNAL; + } + rtengine::setPaths(); TIFFSetWarningHandler (nullptr); // avoid annoying message boxes diff --git a/rtgui/options.cc b/rtgui/options.cc index 55e99ce2d..68cd39e6d 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -52,8 +52,7 @@ Glib::ustring paramFileExtension = ".pp3"; Options::Options () { - defProfRawMissing = false; - defProfImgMissing = false; + defProfError = 0; setDefaults (); } @@ -2194,58 +2193,50 @@ void Options::load (bool lightweight) if (options.defProfRaw.empty()) { options.defProfRaw = DEFPROFILE_RAW; } else { - Glib::ustring tmpFName = options.findProfilePath (options.defProfRaw); - - if (!tmpFName.empty()) { + if (!options.findProfilePath (options.defProfRaw).empty()) { if (options.rtSettings.verbose) { - printf ("Default profile for raw images \"%s\" found\n", options.defProfRaw.c_str()); + std::cout << "Default profile for raw images \"" << options.defProfRaw << "\" found" << std::endl; } } else { if (options.defProfRaw != DEFPROFILE_RAW) { - if (options.rtSettings.verbose) { - printf ("Default profile for raw images \"%s\" not found or not set -> using RawTherapee's default raw profile\n", options.defProfRaw.c_str()); + options.setDefProfRawMissing(true); + + Glib::ustring dpr(DEFPROFILE_RAW); + if (options.findProfilePath (dpr).empty()) { + options.setBundledDefProfRawMissing(true); } - options.defProfRaw = DEFPROFILE_RAW; } else { - if (options.rtSettings.verbose) { - printf ("Default profile for raw images \"%s\" not found or not set -> using Internal values\n", options.defProfRaw.c_str()); - } - options.defProfRaw = DEFPROFILE_INTERNAL; + options.setBundledDefProfRawMissing(true); } - options.defProfRawMissing = true; } } if (options.defProfImg.empty()) { options.defProfImg = DEFPROFILE_IMG; } else { - Glib::ustring tmpFName = options.findProfilePath (options.defProfImg); - - if (!tmpFName.empty()) { + if (!options.findProfilePath (options.defProfImg).empty()) { if (options.rtSettings.verbose) { - printf ("Default profile for non-raw images \"%s\" found\n", options.defProfImg.c_str()); + std::cout << "Default profile for non-raw images \"" << options.defProfImg << "\" found" << std::endl; } } else { if (options.defProfImg != DEFPROFILE_IMG) { - if (options.rtSettings.verbose) { - printf ("Default profile for non-raw images \"%s\" not found or not set -> using RawTherapee's default non-raw profile\n", options.defProfImg.c_str()); + options.setDefProfImgMissing(true); + + Glib::ustring dpi(DEFPROFILE_IMG); + if (options.findProfilePath (dpi).empty()) { + options.setBundledDefProfImgMissing(true); } - options.defProfImg = DEFPROFILE_IMG; } else { - if (options.rtSettings.verbose) { - printf ("Default profile for non-raw images \"%s\" not found or not set -> using Internal values\n", options.defProfImg.c_str()); - } - options.defProfImg = DEFPROFILE_INTERNAL; + options.setBundledDefProfImgMissing(true); } - options.defProfImgMissing = true; } } - //We handle languages using a hierarchy of translations. The top of the hierarchy is default. This includes a default translation for all items + // We handle languages using a hierarchy of translations. The top of the hierarchy is default. This includes a default translation for all items // (most likely using simple English). The next level is the language: for instance, English, French, Chinese, etc. This file should contain a // generic translation for all items which differ from default. Finally there is the locale. This is region-specific items which differ from the // language file. These files must be name in the format (), where Language is the name of the language which it inherits from, - // and LC is the local code. Some examples of this would be English (US) (American English), French (FR) (Franch French), French (CA) (Canadian + // and LC is the local code. Some examples of this would be English (US) (American English), French (FR) (France French), French (CA) (Canadian // French), etc. // // Each level will only contain the differences between itself and its parent translation. For instance, English (UK) or English (CA) may @@ -2346,3 +2337,63 @@ bool Options::is_extention_enabled (Glib::ustring ext) return false; } + +Glib::ustring Options::getUserProfilePath() +{ + return userProfilePath; +} + +Glib::ustring Options::getGlobalProfilePath() +{ + return globalProfilePath; +} + +bool Options::is_defProfRawMissing() +{ + return defProfError & rtengine::toUnderlying(DefProfError::defProfRawMissing); +} +bool Options::is_defProfImgMissing() +{ + return defProfError & rtengine::toUnderlying(DefProfError::defProfImgMissing); +} +void Options::setDefProfRawMissing (bool value) +{ + if (value) { + defProfError |= rtengine::toUnderlying(DefProfError::defProfRawMissing); + } else { + defProfError &= ~rtengine::toUnderlying(DefProfError::defProfRawMissing); + } +} +void Options::setDefProfImgMissing (bool value) +{ + if (value) { + defProfError |= rtengine::toUnderlying(DefProfError::defProfImgMissing); + } else { + defProfError &= ~rtengine::toUnderlying(DefProfError::defProfImgMissing); + } +} +bool Options::is_bundledDefProfRawMissing() +{ + return defProfError & rtengine::toUnderlying(DefProfError::bundledDefProfRawMissing); +} +bool Options::is_bundledDefProfImgMissing() +{ + return defProfError & rtengine::toUnderlying(DefProfError::bundledDefProfImgMissing); +} +void Options::setBundledDefProfRawMissing (bool value) +{ + if (value) { + defProfError |= rtengine::toUnderlying(DefProfError::bundledDefProfRawMissing); + } else { + defProfError &= ~rtengine::toUnderlying(DefProfError::bundledDefProfRawMissing); + } +} +void Options::setBundledDefProfImgMissing (bool value) +{ + if (value) { + defProfError |= rtengine::toUnderlying(DefProfError::bundledDefProfImgMissing); + } else { + defProfError &= ~rtengine::toUnderlying(DefProfError::bundledDefProfImgMissing); + } +} + diff --git a/rtgui/options.h b/rtgui/options.h index 7a4a23b4d..a5eef1543 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -90,8 +90,13 @@ public: }; private: - bool defProfRawMissing; - bool defProfImgMissing; + enum class DefProfError : short { + defProfRawMissing = 1 << 0, + bundledDefProfRawMissing = 1 << 1, + defProfImgMissing = 1 << 2, + bundledDefProfImgMissing = 1 << 3 + }; + short defProfError; Glib::ustring userProfilePath; Glib::ustring globalProfilePath; bool checkProfilePath (Glib::ustring &path); @@ -344,9 +349,9 @@ public: Options (); - Options* copyFrom (Options* other); - void filterOutParsedExtensions (); - void setDefaults (); + Options* copyFrom (Options* other); + void filterOutParsedExtensions (); + void setDefaults (); void readFromFile (Glib::ustring fname); void saveToFile (Glib::ustring fname); static void load (bool lightweight = false); @@ -354,34 +359,20 @@ public: // if multiUser=false, send back the global profile path Glib::ustring getPreferredProfilePath(); - Glib::ustring getUserProfilePath() - { - return userProfilePath; - } - Glib::ustring getGlobalProfilePath() - { - return globalProfilePath; - } + Glib::ustring getUserProfilePath(); + Glib::ustring getGlobalProfilePath(); Glib::ustring findProfilePath (Glib::ustring &profName); - bool is_parse_extention (Glib::ustring fname); - bool has_retained_extention (Glib::ustring fname); - bool is_extention_enabled (Glib::ustring ext); - bool is_defProfRawMissing() - { - return defProfRawMissing; - } - bool is_defProfImgMissing() - { - return defProfImgMissing; - } - void setDefProfRawMissing (bool value) - { - defProfRawMissing = value; - } - void setDefProfImgMissing (bool value) - { - defProfImgMissing = value; - } + bool is_parse_extention (Glib::ustring fname); + bool has_retained_extention (Glib::ustring fname); + bool is_extention_enabled (Glib::ustring ext); + bool is_defProfRawMissing(); + bool is_bundledDefProfRawMissing(); + bool is_defProfImgMissing(); + bool is_bundledDefProfImgMissing(); + void setDefProfRawMissing (bool value); + void setBundledDefProfRawMissing (bool value); + void setDefProfImgMissing (bool value); + void setBundledDefProfImgMissing (bool value); }; extern Options options; diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index afc95efd0..860221e02 100644 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -349,15 +349,28 @@ void RTWindow::showErrors() { // alerting users if the default raw and image profiles are missing if (options.is_defProfRawMissing()) { + options.defProfRaw = DEFPROFILE_RAW; Gtk::MessageDialog msgd (*this, Glib::ustring::compose (M ("OPTIONS_DEFRAW_MISSING"), options.defProfRaw), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); msgd.run (); } + if (options.is_bundledDefProfRawMissing()) { + Gtk::MessageDialog msgd (*this, Glib::ustring::compose (M ("OPTIONS_BUNDLED_MISSING"), options.defProfRaw), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + msgd.run (); + options.defProfRaw = DEFPROFILE_INTERNAL; + } if (options.is_defProfImgMissing()) { + options.defProfImg = DEFPROFILE_IMG; Gtk::MessageDialog msgd (*this, Glib::ustring::compose (M ("OPTIONS_DEFIMG_MISSING"), options.defProfImg), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); msgd.run (); } + if (options.is_bundledDefProfImgMissing()) { + Gtk::MessageDialog msgd (*this, Glib::ustring::compose (M ("OPTIONS_BUNDLED_MISSING"), options.defProfImg), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); + msgd.run (); + options.defProfImg = DEFPROFILE_INTERNAL; + } } + bool RTWindow::on_configure_event (GdkEventConfigure* event) { if (!is_maximized() && is_visible()) {