]> git.lyx.org Git - lyx.git/blobdiff - src/Session.h
Account for old versions of Pygments
[lyx.git] / src / Session.h
index 8e18885259b785970f3a98418459045a1382d6aa..f471f4d28e06e70c9bc083b26dcf6a40de650012 100644 (file)
 #include "support/FileName.h"
 #include "support/types.h"
 
+#include <map>
 #include <string>
-#include <deque>
 #include <vector>
-#include <map>
-
-// used by at least frontends/qt4/GuiPref.cpp
-const long maxlastfiles = 20;
 
 /** This session file maintains
   1. the latest documents loaded (lastfiles)
@@ -30,6 +26,7 @@ const long maxlastfiles = 20;
   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 {
 
@@ -60,7 +57,7 @@ class LastFilesSection : SessionSection
 {
 public:
        ///
-       typedef std::deque<support::FileName> LastFiles;
+       typedef std::vector<support::FileName> LastFiles;
 
 public:
        ///
@@ -72,10 +69,10 @@ public:
        ///
        void write(std::ostream & os) const;
 
-       /// Return lastfiles container (deque)
+       /// Return lastfiles container (vector)
        LastFiles const lastFiles() const { return lastfiles; }
 
-       /** Insert #file# into the lastfile dequeue.
+       /** Insert #file# into the lastfile vector.
            This funtion inserts #file# into the last files list. If the file
            already exists it is moved to the top of the list, else exist it
            is placed on the top of the list. If the list is full the last
@@ -108,7 +105,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:
        ///
@@ -123,7 +130,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
         */
@@ -160,7 +167,7 @@ public:
 
        /** add cursor position to the fname entry in the filepos map
            @param fname file entry for which to save position information
-           @param pos position of the cursor when the file is closed.
+           @param pos position of the cursor when the BufferView is closed.
        */
        void save(support::FileName const & fname, FilePos const & pos);
 
@@ -236,6 +243,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; }
 
@@ -263,122 +273,71 @@ 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(State(s)), location(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
-       };
-
-       struct ToolbarItem {
-               std::string key;
-               ToolbarInfo info;
-       };
-
-       /// 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;
-};
+       /// number of commands in the lastcommands list.
+       unsigned int num_lastcommands;
 
-/// 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);
+       /** Used by the constructor to set the number of stored last commands.
+           @param num the number of lastcommands to set.
+       */
+       void setNumberOfLastCommands(unsigned int num);
 
+       /// a list of lastopened commands
+       LastCommands lastcommands;
 
-class SessionInfoSection : SessionSection
+       /// Default number of lastcommands.
+       unsigned int const default_num_last_commands;
+
+       /// Max number of lastcommands.
+       unsigned int const absolute_max_last_commands;
+};
+
+
+class AuthFilesSection : SessionSection
 {
 public:
        ///
-       typedef std::map<std::string, std::string> MiscInfo;
+       explicit AuthFilesSection();
 
-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);
+       ///
+       std::set<std::string> & authFiles() { return auth_files_; }
 
 private:
-       /// a map to save session info
-       MiscInfo sessioninfo;
+       /// set of document files authorized for external conversion
+       std::set<std::string> auth_files_;
 };
 
 
@@ -386,7 +345,8 @@ class Session
 {
 public:
        /// Read the session file.  @param num length of lastfiles
-       explicit Session(unsigned int num = 4);
+       explicit Session(unsigned int num_last_files = 4,
+               unsigned int num_last_commands = 30);
        /// Write the session file.
        void writeFile() const;
        ///
@@ -406,15 +366,16 @@ public:
        ///
        BookmarksSection const & bookmarks() const { return bookmarks_; }
        ///
-       ToolbarSection & toolbars() { return toolbars_; }
+       LastCommandsSection & lastCommands() { return last_commands; }
        ///
-       ToolbarSection const & toolbars() const { return toolbars_; }
+       LastCommandsSection const & lastCommands() const { return last_commands; }
        ///
-       SessionInfoSection & sessionInfo() { return session_info; }
+       AuthFilesSection & authFiles() { return auth_files; }
        ///
-       SessionInfoSection const & sessionInfo() const { return session_info; }
+       AuthFilesSection const & authFiles() const { return auth_files; }
 
 private:
+       friend class LyX;
        /// uncopiable
        Session(Session const &);
        void operator=(Session const &);
@@ -438,11 +399,15 @@ private:
        ///
        BookmarksSection bookmarks_;
        ///
-       ToolbarSection toolbars_;
+       LastCommandsSection last_commands;
        ///
-       SessionInfoSection session_info;
+       AuthFilesSection auth_files;
 };
 
-}
+/// This is a singleton class. Get the instance.
+/// Implemented in LyX.cpp.
+Session & theSession();
+
+} // lyx
 
 #endif