]> git.lyx.org Git - lyx.git/blobdiff - src/Session.h
Kill LFUN_PARAGRAPH_SPACING in favour of LFUN_PARAGRAPH_PARAMS.
[lyx.git] / src / Session.h
index e395434d523c648ffcd4d6c888e3cb21b3904dff..25172b3094f582e4e120f60d4f7dc1124042e3e5 100644 (file)
 #ifndef SESSION_H
 #define SESSION_H
 
-#include "support/filename.h"
+#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)
   3. opened files when a lyx session is closed (lastopened)
   4. bookmarks
   5. general purpose session info in the form of key/value pairs
+  6. the latest commands entered in the command buffer (lastcommands)
  */
 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 +46,11 @@ public:
 
        /// write to std::ostream
        virtual void write(std::ostream & os) const = 0;
+
+private:
+       /// uncopiable
+       SessionSection(SessionSection const &);
+       void operator=(SessionSection const &);
 };
 
 
@@ -104,7 +106,17 @@ class LastOpenedSection : SessionSection
 {
 public:
        ///
-       typedef std::vector<support::FileName> LastOpened;
+       struct LastOpenedFile {
+               LastOpenedFile() : file_name(), active(false) {}
+
+               LastOpenedFile(support::FileName file_name_, bool active_)
+                       : file_name(file_name_), active(active_) {}
+
+               support::FileName file_name;
+               bool active;
+       };
+       ///
+       typedef std::vector<LastOpenedFile> LastOpened;
 
 public:
        ///
@@ -119,7 +131,7 @@ public:
        /** add file to lastopened file list
            @param file filename to add
        */
-       void add(support::FileName const & file);
+       void add(support::FileName const & file, bool active = false);
 
        /** clear lastopened file list
         */
@@ -135,7 +147,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 +170,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 +198,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 +219,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;
@@ -228,6 +244,9 @@ public:
        /// does the given bookmark have a saved position ?
        bool isValid(unsigned int i) const;
 
+       /// is there at least one bookmark that has a saved position ?
+       bool hasValid() const;
+
        ///
        unsigned int size() const { return max_bookmarks; }
 
@@ -255,172 +274,88 @@ private:
 };
 
 
-class ToolbarSection : SessionSection
+class LastCommandsSection : SessionSection
 {
 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;
-
+       ///
+       typedef std::vector<std::string> LastCommands;
 
 public:
+       ///
+       LastCommandsSection(unsigned int num);
        ///
        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);
+       /// Return lastcommands container (vector)
+       LastCommands const getcommands() const { return lastcommands; }
 
-       /// toolbar begin
-       ToolbarList::const_iterator begin() { return toolbars.begin(); }
+       /** add command to lastcommands list
+           @param command command to add
+       */
+       void add(std::string const & command);
 
-       /// toolbar end
-       ToolbarList::const_iterator end() { return toolbars.end(); }
+       /** clear lastcommands list
+        */
+       void clear();
 
 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;
+       /// number of commands in the lastcommands list.
+       unsigned int num_lastcommands;
 
-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')
+       /** Used by the constructor to set the number of stored last commands.
+           @param num the number of lastcommands to set.
        */
-       void save(std::string const & key, std::string const & value);
+       void setNumberOfLastCommands(unsigned int num);
 
-       /** 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);
+       /// a list of lastopened commands
+       LastCommands lastcommands;
 
-private:
-       /// a map to save session info
-       MiscInfo sessioninfo;
-};
+       /// Default number of lastcommands.
+       unsigned int const default_num_last_commands;
 
+       /// Max number of lastcommands.
+       unsigned int const absolute_max_last_commands;
+};
 
-class Session : boost::noncopyable {
 
+class Session
+{
 public:
-       /** Read the session file.
-           @param num length of lastfiles
-       */
-       explicit Session(unsigned int num = 4);
-
-       /** Write the session file.
-       */
+       /// Read the session file.  @param num length of lastfiles
+       explicit Session(unsigned int num_last_files = 4,
+               unsigned int num_last_commands = 30);
+       /// 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; }
-
+       LastCommandsSection & lastCommands() { return last_commands; }
        ///
-       SessionInfoSection const & sessionInfo() const { return session_info; }
+       LastCommandsSection const & lastCommands() const { return last_commands; }
 
 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 +368,20 @@ private:
 
        ///
        LastFilesSection last_files;
-
        ///
        LastOpenedSection last_opened;
-
        ///
        LastFilePosSection last_file_pos;
-
        ///
        BookmarksSection bookmarks_;
-
-       ///
-       ToolbarSection toolbars_;
-
        ///
-       SessionInfoSection session_info;
+       LastCommandsSection last_commands;
 };
 
-}
+/// This is a singleton class. Get the instance.
+/// Implemented in LyX.cpp.
+Session & theSession();
+
+} // lyx
 
 #endif