]> git.lyx.org Git - lyx.git/blobdiff - src/Session.h
revert erroneous previous commit.
[lyx.git] / src / Session.h
index 213d56ff7e1b615dda6bc4fba55d8bde3e1f5a14..d673da22e950121849a8be5707c14b6f83fde558 100644 (file)
 #include "support/FileName.h"
 #include "support/types.h"
 
-#include <boost/utility.hpp>
-#include <boost/tuple/tuple.hpp>
-
 #include <string>
 #include <deque>
 #include <vector>
 #include <map>
 
-// used by at least frontends/qt2/QPref.C
-const long maxlastfiles = 20;
-
 /** This session file maintains
   1. the latest documents loaded (lastfiles)
   2. cursor positions of files closed (lastfilepos)
@@ -36,11 +30,13 @@ const long maxlastfiles = 20;
  */
 namespace lyx {
 
-/** base class for all sections in the session file
+/* base class for all sections in the session file
 */
-class SessionSection : boost::noncopyable {
-
+class SessionSection
+{
 public:
+       ///
+       SessionSection() {}
        ///
        virtual ~SessionSection() {}
 
@@ -49,6 +45,11 @@ public:
 
        /// write to std::ostream
        virtual void write(std::ostream & os) const = 0;
+
+private:
+       /// uncopiable
+       SessionSection(SessionSection const &);
+       void operator=(SessionSection const &);
 };
 
 
@@ -135,7 +136,11 @@ class LastFilePosSection : SessionSection
 {
 public:
        ///
-       typedef boost::tuple<pit_type, pos_type> FilePos;
+       struct FilePos {
+               FilePos() : pit(0), pos(0) {}
+               pit_type pit;
+               pos_type pos;
+       };
 
        ///
        typedef std::map<support::FileName, FilePos> FilePosMap;
@@ -154,7 +159,7 @@ public:
            @param fname file entry for which to save position information
            @param pos position of the cursor when the file is closed.
        */
-       void save(support::FileName const & fname, FilePos pos);
+       void save(support::FileName const & fname, FilePos const & pos);
 
        /** load saved cursor position from the fname entry in the filepos map
            @param fname file entry for which to load position information
@@ -182,7 +187,7 @@ public:
        /// top_id is determined when a bookmark is restored from session; and
        /// bottom_pit and bottom_pos are determined from top_id when a bookmark
        /// is save to session. (What a mess! :-)
-       /// 
+       ///
        /// TODO: bottom level pit and pos will be replaced by StableDocIterator
        class Bookmark {
        public:
@@ -203,7 +208,7 @@ public:
                        : filename(f), bottom_pit(pit), bottom_pos(pos), top_id(id), top_pos(tpos) {}
                /// set bookmark top_id, this is because newly loaded bookmark
                /// may have zero par_id and par_pit can change during editing, see bug 3092
-               void updatePos(pit_type pit, pos_type pos, int id) { 
+               void updatePos(pit_type pit, pos_type pos, int id) {
                        bottom_pit = pit;
                        bottom_pos = pos;
                        top_id = id;
@@ -255,172 +260,36 @@ private:
 };
 
 
-class ToolbarSection : SessionSection
+class Session
 {
 public:
-       /// information about a toolbar, not all information can be
-       /// saved/restored by all frontends, but this class provides
-       /// a superset of things that can be managed by session.
-       class ToolbarInfo
-       {
-       public:
-               ///
-               ToolbarInfo() :
-                       state(ON), location(NOTSET), posx(0), posy(0) { }
-               ///
-               ToolbarInfo(int s, int loc, int x=0, int y=0) :
-                       state(static_cast<State>(s)), 
-                       location(static_cast<Location>(loc)),
-                       posx(x),
-                       posy(y)
-                       { }
-
-       public:
-               enum State {
-                       ON,
-                       OFF,
-                       AUTO
-               };
-
-               /// on/off/auto
-               State state;
-
-               /// location: this can be intepreted differently.
-               enum Location {
-                       TOP,
-                       BOTTOM,
-                       LEFT,
-                       RIGHT,
-                       NOTSET
-               };
-
-               Location location;
-
-               /// x-position of the toolbar
-               int posx;
-
-               /// y-position of the toolbar
-               int posy;
-               
-               /// potentially, icons
-       };
-
-       typedef boost::tuple<std::string, ToolbarInfo> ToolbarItem;
-
-       /// info for each toolbar
-       typedef std::vector<ToolbarItem> ToolbarList;
-
-
-public:
-       ///
-       void read(std::istream & is);
-
-       ///
-       void write(std::ostream & os) const;
-
-       /// return reference to toolbar info, create a new one if needed
-       ToolbarInfo & load(std::string const & name);
-
-       /// toolbar begin
-       ToolbarList::const_iterator begin() { return toolbars.begin(); }
-
-       /// toolbar end
-       ToolbarList::const_iterator end() { return toolbars.end(); }
-
-private:
-       /// toolbar information
-       ToolbarList toolbars;
-};
-
-/// comparison operator to sort toolbars, the rules are:
-///        ON before OFF
-///     TOP < BOTTOM < LEFT < RIGHT
-///     Line at each side
-///     order in each line
-bool operator< (ToolbarSection::ToolbarItem const & a, ToolbarSection::ToolbarItem const & b);
-
-
-class SessionInfoSection : SessionSection
-{
-public:
-       ///
-       typedef std::map<std::string, std::string> MiscInfo;
-
-public:
-       ///
-       void read(std::istream & is);
-
-       ///
-       void write(std::ostream & os) const;
-
-       /** set session info
-               @param key key of the value to store
-               @param value value, a string without newline ('\n')
-       */
-       void save(std::string const & key, std::string const & value);
-
-       /** load session info
-               @param key a key to extract value from the session file
-               @param release whether or not clear the value. Default to true
-                       since most of such values are supposed to be used only once.
-       */
-       std::string const load(std::string const & key, bool release = true);
-
-private:
-       /// a map to save session info
-       MiscInfo sessioninfo;
-};
-
-
-class Session : boost::noncopyable {
-
-public:
-       /** Read the session file.
-           @param num length of lastfiles
-       */
+       /// Read the session file.  @param num length of lastfiles
        explicit Session(unsigned int num = 4);
-
-       /** Write the session file.
-       */
+       /// Write the session file.
        void writeFile() const;
-
        ///
        LastFilesSection & lastFiles() { return last_files; }
-       
        ///
        LastFilesSection const & lastFiles() const { return last_files; }
-
        ///
        LastOpenedSection & lastOpened() { return last_opened; }
-
        ///
        LastOpenedSection const & lastOpened() const { return last_opened; }
-       
        ///
        LastFilePosSection & lastFilePos() { return last_file_pos; }
-       
        ///
        LastFilePosSection const & lastFilePos() const { return last_file_pos; }
-
        ///
        BookmarksSection & bookmarks() { return bookmarks_; }
-
        ///
        BookmarksSection const & bookmarks() const { return bookmarks_; }
 
-       ///
-       ToolbarSection & toolbars() { return toolbars_; }
-
-       ///
-       ToolbarSection const & toolbars() const { return toolbars_; }
-
-       ///
-       SessionInfoSection & sessionInfo() { return session_info; }
-
-       ///
-       SessionInfoSection const & sessionInfo() const { return session_info; }
-
 private:
+       friend class LyX;
+       /// uncopiable
+       Session(Session const &);
+       void operator=(Session const &);
+
        /// file to save session, determined in the constructor.
        support::FileName session_file;
 
@@ -433,23 +302,18 @@ private:
 
        ///
        LastFilesSection last_files;
-
        ///
        LastOpenedSection last_opened;
-
        ///
        LastFilePosSection last_file_pos;
-
        ///
        BookmarksSection bookmarks_;
-
-       ///
-       ToolbarSection toolbars_;
-
-       ///
-       SessionInfoSection session_info;
 };
 
-}
+/// This is a singleton class. Get the instance.
+/// Implemented in LyX.cpp.
+Session & theSession();
+
+} // lyx
 
 #endif