]> git.lyx.org Git - lyx.git/blobdiff - src/LayoutModuleList.cpp
Check path of Qt tools if qtchooser is detected
[lyx.git] / src / LayoutModuleList.cpp
index 929dfcb549a29815defbd9f225e9124e399062a1..d532b2d142cd22c30dfa17fc9bb5a6b311d74350 100644 (file)
@@ -17,8 +17,8 @@
 #include "ModuleList.h"
 
 #include "support/debug.h"
-#include "support/lyxalgo.h"
 
+#include <algorithm>
 #include <string>
 #include <vector>
 
@@ -35,7 +35,7 @@ namespace lyx {
 // moment. (Thanks to Philippe Charpentier for helping work out all 
 // the bugs---rgh.)
 bool LayoutModuleList::adaptToBaseClass(LayoutFile const * const lay,
-               std::list<string> removedModules)
+               std::list<string> const & removedModules)
 {
        // first, we remove any modules the new document class itself provides,
        // those it excludes, and those that conflict with ones it excludes.
@@ -48,7 +48,7 @@ bool LayoutModuleList::adaptToBaseClass(LayoutFile const * const lay,
        // loaded modules. it's a hassle that we have to do this now, since
        // we just went through them a bit ago, but things might have changed
        // with the loading of the default modules.
-       retval |= checkModuleConsistency(lay);
+       retval = (checkModuleConsistency(lay) || retval);
        return retval;
 }
 
@@ -59,18 +59,16 @@ bool LayoutModuleList::moduleCanBeAdded(string const & modName,
        // Is the module already present?
        const_iterator it = begin();
        const_iterator const en = end();
-       for (; it != en; it++)
+       for (; it != en; ++it)
                if (*it == modName) 
                        return false;
 
-       LyXModule const * const lm = moduleList[modName];
+       LyXModule const * const lm = theModuleList[modName];
        if (!lm)
                return true;
 
-       // Is this module explicitly excluded by the document class?
-       const_iterator const exclmodstart = lay->excludedModules().begin();
-       const_iterator const exclmodend = lay->excludedModules().end();
-       if (find(exclmodstart, exclmodend, modName) != exclmodend)
+       // Does this module conflict with the document class or any loaded modules?
+       if (moduleConflicts(modName, lay))
                return false;
 
        // Is this module already provided by the document class?
@@ -79,26 +77,13 @@ bool LayoutModuleList::moduleCanBeAdded(string const & modName,
        if (find(provmodstart, provmodend, modName) != provmodend)
                return false;
 
-       // Check for conflicts with used modules
-       // first the provided modules...
-       const_iterator provmodit = provmodstart;
-       for (; provmodit != provmodend; ++provmodit) {
-               if (!LyXModule::areCompatible(modName, *provmodit))
-                       return false;
-       }
-       // and then the selected modules
-       const_iterator mit = begin();
-       const_iterator const men = end();
-       for (; mit != men; ++mit)
-               if (!LyXModule::areCompatible(modName, *mit))
-                       return false;
-
        // Check whether some required module is available
        vector<string> const reqs = lm->getRequiredModules();
        if (reqs.empty())
                return true;
 
-       mit = begin(); // reset
+       const_iterator mit = begin();
+       const_iterator const men = end();
        vector<string>::const_iterator rit = reqs.begin();
        vector<string>::const_iterator ren = reqs.end();
        bool foundone = false;
@@ -114,6 +99,32 @@ bool LayoutModuleList::moduleCanBeAdded(string const & modName,
 }
 
 
+bool LayoutModuleList::moduleConflicts(string const & modName,
+                                       LayoutFile const * const lay) const
+{
+       // Is this module explicitly excluded by the document class?
+       const_iterator const exclmodstart = lay->excludedModules().begin();
+       const_iterator const exclmodend = lay->excludedModules().end();
+       if (find(exclmodstart, exclmodend, modName) != exclmodend)
+               return true;
+       // Check for conflicts with used modules
+       // first the provided modules...
+       const_iterator provmodit = lay->providedModules().begin();
+       const_iterator const provmodend = lay->providedModules().end();
+       for (; provmodit != provmodend; ++provmodit) {
+               if (!LyXModule::areCompatible(modName, *provmodit))
+                       return true;
+       }
+       // and then the selected modules
+       const_iterator mit = begin();
+       const_iterator const men = end();
+       for (; mit != men; ++mit)
+               if (!LyXModule::areCompatible(modName, *mit))
+                       return true;
+       return false;
+}
+
+
 void LayoutModuleList::addDefaultModules(LayoutFile const * const lay,
                std::list<string> removedModules)
 {
@@ -131,7 +142,7 @@ void LayoutModuleList::addDefaultModules(LayoutFile const * const lay,
        iterator insertpos = begin();
        int numinserts = 0;
 
-       for (; mit != men; mit++) {
+       for (; mit != men; ++mit) {
                string const & modName = *mit;
                // make sure the user hasn't removed it
                if (find(removedModules.begin(), removedModules.end(), modName) !=
@@ -192,7 +203,7 @@ bool LayoutModuleList::removeBadModules(LayoutFile const * const lay)
                for (; !excluded && pit != pen; ++pit) {
                        if (!LyXModule::areCompatible(modname, *pit)) {
                                LYXERR0("Module " << modname << 
-                                               " dropped becuase it conflicts with provided module `" << *pit << "'.");
+                                               " dropped because it conflicts with provided module `" << *pit << "'.");
                                consistent = false;
                                excluded = true;
                        }
@@ -208,7 +219,8 @@ bool LayoutModuleList::removeBadModules(LayoutFile const * const lay)
 // Perform a consistency check on the set of modules. We need to make
 // sure that none of the modules exclude each other and that requires
 // are satisfied.
-bool LayoutModuleList::checkModuleConsistency(LayoutFile const * const lay) {
+bool LayoutModuleList::checkModuleConsistency(LayoutFile const * const lay) 
+{
        bool consistent = true;
        LayoutModuleList oldModules = *this;
        clear();
@@ -235,7 +247,7 @@ bool LayoutModuleList::checkModuleConsistency(LayoutFile const * const lay) {
 
                // determine whether some provided module or some prior module
                // satisfies our requirements
-               LyXModule const * const oldmod = moduleList[modname];
+               LyXModule const * const oldmod = theModuleList[modname];
                if (!oldmod) {
                        LYXERR0("Default module " << modname << 
                                        " added although it is unavailable and can't check requirements.");