]> git.lyx.org Git - lyx.git/blobdiff - src/BaseClassList.h
do what the FIXME suggested
[lyx.git] / src / BaseClassList.h
index cd873ccbe668e13e3a57210bd9d2bd5858094759..73ea0d950ae9d25217b2b54b32d91d81e6430058 100644 (file)
@@ -26,13 +26,14 @@ class Layout;
 /// Reads the style files
 extern bool LyXSetStyle();
 
+
 /// Index into BaseClassList. Basically a 'strong typedef'.
-class BaseClassIndex {
+class LayoutFileIndex {
 public:
        ///
-       typedef size_t   base_type;
+       typedef std::string base_type;
        ///
-       BaseClassIndex(base_type t) { data_ = t; }
+       LayoutFileIndex(base_type t) { data_ = t; }
        ///
        operator base_type() const { return data_; }
        ///
@@ -40,6 +41,30 @@ private:
        base_type data_;
 };
 
+/// This class amounts to little more than a `strong typedef'.
+/// A LayoutFile represents the layout information that is 
+/// contained in a *.layout file.
+class LayoutFile : public TextClass {
+public:
+       /// This should never be used, but it has to be provided for
+       /// std::map operator[] to work. Something like:
+       ///   mapthingy[stuff] = otherthing
+       /// creates an empty object before doing the assignment.
+       LayoutFile() {}
+       /// check whether the TeX class is available
+       bool isTeXClassAvailable() const { return texClassAvail_; }
+private:
+       /// Construct a layout with default values. Actual values loaded later.
+       explicit LayoutFile(std::string const &,
+                                std::string const & = std::string(),
+                                std::string const & = std::string(),
+                                bool texClassAvail = false);
+       /// The only class that should create a LayoutFile is
+       /// BaseClassList, which calls the private constructor.
+       friend class BaseClassList;
+};
+
+
 /// A list of base document classes (*.layout files).
 /// This is a singleton class. The sole instance is accessed
 /// via BaseClassList::get()
@@ -50,46 +75,39 @@ public:
        /// \return The sole instance of this class.
        static BaseClassList & get();
        ///
-       typedef std::vector<TextClass> ClassList;
+       bool empty() const { return classmap_.empty(); }
        ///
-       typedef ClassList::const_iterator const_iterator;
+       bool haveClass(std::string const & classname) const;
        ///
-       const_iterator begin() const { return classlist_.begin(); }
+       LayoutFile const & operator[](std::string const & classname) const;
        ///
-       const_iterator end() const { return classlist_.end(); }
-       ///
-       bool empty() const { return classlist_.empty(); }
-
-       /// Gets textclass number from name, -1 if textclass name does not exist
-       std::pair<bool, BaseClassIndex> const
-               numberOfClass(std::string const & textclass) const;
-
-       ///
-       TextClass const & operator[](BaseClassIndex textclass) const;
-
-       /// Read textclass list.  Returns false if this fails.
+       LayoutFile & operator[](std::string const & classname);
+       /// Read textclass list. Returns false if this fails.
        bool read();
-       
        /// Clears the textclass so as to force it to be reloaded
-       void reset(BaseClassIndex const textclass);
-
+       void reset(LayoutFileIndex const & tc);
        /// add a textclass from user local directory.
-       /// Return ture/false, and textclass number
-       std::pair<bool, BaseClassIndex> const
-               addTextClass(std::string const & textclass, std::string const & path);
-
+       /// \return the identifier for the loaded file, or else an
+       /// empty string if no file was loaded.
+       LayoutFileIndex
+               addLayoutFile(std::string const & textclass, std::string const & path);
+       /// a list of the available classes
+       std::vector<LayoutFileIndex> classList() const;
+       /// 
+       static std::string const localPrefix;
 private:
+       ///
+       typedef std::map<std::string, LayoutFile> ClassMap;
        /// noncopyable
        BaseClassList(BaseClassList const &);
        /// nonassignable
        void operator=(BaseClassList const &);
-
        ///
-       mutable ClassList classlist_;
+       mutable ClassMap classmap_; //FIXME
 };
 
 ///
-BaseClassIndex defaultBaseclass();
+LayoutFileIndex defaultBaseclass();
 
 
 } // namespace lyx