]> git.lyx.org Git - lyx.git/blobdiff - src/Session.h
How about if we write a script to do some of this and stop doing it
[lyx.git] / src / Session.h
index 8e18885259b785970f3a98418459045a1382d6aa..25172b3094f582e4e120f60d4f7dc1124042e3e5 100644 (file)
 #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)
   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 {
 
@@ -108,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:
        ///
@@ -123,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
         */
@@ -236,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; }
 
@@ -263,122 +274,50 @@ 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;
-};
-
-/// 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;
+       /// number of commands in the lastcommands list.
+       unsigned int num_lastcommands;
 
-       /** 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;
 };
 
 
@@ -386,7 +325,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 +346,12 @@ public:
        ///
        BookmarksSection const & bookmarks() const { return bookmarks_; }
        ///
-       ToolbarSection & toolbars() { return toolbars_; }
-       ///
-       ToolbarSection const & toolbars() const { return toolbars_; }
+       LastCommandsSection & lastCommands() { return last_commands; }
        ///
-       SessionInfoSection & sessionInfo() { return session_info; }
-       ///
-       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 &);
@@ -438,11 +375,13 @@ private:
        ///
        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