X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayoutModuleList.h;h=f5741dede1657d6c3d016d01dd3f2222c28d1d47;hb=6642152e6610f1e885babfaeb3c99bd0004916fc;hp=9229f80f6b7fd6d049a9725ad029587c39a3280b;hpb=08d7f7885a007a03bf958d2ba2b402a1a53c5bf2;p=lyx.git diff --git a/src/LayoutModuleList.h b/src/LayoutModuleList.h index 9229f80f6b..f5741dede1 100644 --- a/src/LayoutModuleList.h +++ b/src/LayoutModuleList.h @@ -17,6 +17,14 @@ namespace lyx { +class LayoutFile; + +/** + Represents a list of modules, such as might be associated with + a particular document. Provides methods for adding modules, checking + if a module can be added, and, importantly, adapting the list to a + new DocumentClass. +*/ class LayoutModuleList { public: /// @@ -47,7 +55,45 @@ public: /// This is needed in GuiDocument. It seems better than an /// implicit conversion. std::list const & list() const { return lml_; } + /// Checks to make sure module's requriements are satisfied, that it does + /// not conflict with already-present modules, isn't already loaded, etc. + bool moduleCanBeAdded(std::string const & modName, + LayoutFile const * const lay) const; + /// Like !moduleCanBeAdded(), but does not check requirements + bool moduleConflicts(std::string const & modName, + LayoutFile const * const lay) const; + /// If the user changes the base class for a given document, then the + /// associated module list has to be updated. This just calls + /// (i) removeBadModules() + /// (ii) addDefaultModules() + /// (iii) checkModuleConsistency() + /// in that order, for which see below. + /// \param lay The new base class. + /// \param removedModules Modules the user explicitly removed and so + /// which should not be included. + /// \return true if no changes had to be made, false if some did have + /// to be made. + bool adaptToBaseClass(LayoutFile const * const lay, + std::list const & removedModules); private: + /// Removes modules excluded by, provided by, etc, the base class. + /// \param lay The document class against which to check. + /// \return true, if modules were consistent, false if changes had + /// to be made. + bool removeBadModules(LayoutFile const * const lay); + /// Adds default modules, if they're addable. + /// \param lay The base class from which to get default modules. + /// \param removedModules Modules the user has explicitly removed. + void addDefaultModules(LayoutFile const * const lay, + std::list removedModules); + /// Checks for consistency among modules: makes sure requirements + /// are met, no modules exclude one another, etc, and resolves any + /// such conflicts, leaving us with a consistent collection. + /// \param lay The base class against which to check. + /// \return true if modules were consistent, false if changes had + /// to be made. + bool checkModuleConsistency(LayoutFile const * const lay); + /// std::list lml_; }; }