]> git.lyx.org Git - lyx.git/blobdiff - src/Session.h
Hack to display section symbol
[lyx.git] / src / Session.h
index f0a54b07bb676ff1e7cd5978842db73b6dbd81e9..a433cbaf59abdf5f5b3b938949754d5972b8e156 100644 (file)
@@ -16,8 +16,7 @@
 #include "support/FileName.h"
 #include "support/types.h"
 
-#include <deque>
-#include <map>
+#include <list>
 #include <string>
 #include <vector>
 
@@ -58,22 +57,22 @@ class LastFilesSection : SessionSection
 {
 public:
        ///
-       typedef std::deque<support::FileName> LastFiles;
+       typedef std::vector<support::FileName> LastFiles;
 
 public:
        ///
        explicit LastFilesSection(unsigned int num = 4);
 
        ///
-       void read(std::istream & is);
+       void read(std::istream & is) override;
 
        ///
-       void write(std::ostream & os) const;
+       void write(std::ostream & os) const override;
 
-       /// 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
@@ -120,10 +119,10 @@ public:
 
 public:
        ///
-       void read(std::istream & is);
+       void read(std::istream & is) override;
 
        ///
-       void write(std::ostream & os) const;
+       void write(std::ostream & os) const override;
 
        /// Return lastopened container (vector)
        LastOpened const getfiles() const { return lastopened; }
@@ -149,30 +148,30 @@ public:
        ///
        struct FilePos {
                FilePos() : pit(0), pos(0) {}
+               support::FileName file;
                pit_type pit;
                pos_type pos;
        };
 
        ///
-       typedef std::map<support::FileName, FilePos> FilePosMap;
+       typedef std::list<FilePos> FilePosList;
 
 public:
        ///
        LastFilePosSection() : num_lastfilepos(100) {}
 
        ///
-       void read(std::istream & is);
+       void read(std::istream & is) override;
 
        ///
-       void write(std::ostream & os) const;
+       void write(std::ostream & os) const override;
 
-       /** 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 BufferView is closed.
+       /** add cursor position to the fname entry in the filepos list
+           @param pos file name and position of the cursor when the BufferView is closed.
        */
-       void save(support::FileName const & fname, FilePos const & pos);
+       void save(FilePos const & pos);
 
-       /** load saved cursor position from the fname entry in the filepos map
+       /** load saved cursor position from the fname entry in the filepos list
            @param fname file entry for which to load position information
        */
        FilePos load(support::FileName const & fname) const;
@@ -182,8 +181,8 @@ private:
        unsigned int const num_lastfilepos;
 
 
-       /// a map of file positions
-       FilePosMap lastfilepos;
+       /// a list of file positions
+       FilePosList lastfilepos;
 };
 
 
@@ -197,7 +196,7 @@ public:
        /// top and bottom level information sometimes needs to be sync'ed. In particular,
        /// 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! :-)
+       /// is saved to session. (What a mess! :-)
        ///
        /// TODO: bottom level pit and pos will be replaced by StableDocIterator
        class Bookmark {
@@ -230,9 +229,8 @@ public:
        typedef std::vector<Bookmark> BookmarkList;
 
 public:
-       /// constructor, set max_bookmarks
-       /// allow 9 regular bookmarks, bookmark 0 is temporary
-       BookmarksSection() : bookmarks(10), max_bookmarks(9) {}
+       ///
+       BookmarksSection() : bookmarks(max_bookmarks + 1) {}
 
        /// Save the current position as bookmark
        void save(support::FileName const & fname, pit_type bottom_pit, pos_type bottom_pos,
@@ -248,29 +246,43 @@ public:
        bool hasValid() const;
 
        ///
-       unsigned int size() const { return max_bookmarks; }
+       unsigned int size() const { return bookmarks.size(); }
 
        /// clear all bookmarks
        void clear();
 
        ///
-       void read(std::istream & is);
+       void read(std::istream & is) override;
 
        ///
-       void write(std::ostream & os) const;
+       void write(std::ostream & os) const override;
 
        /** return bookmark list. Non-const container is used since
                bookmarks will be cleaned after use.
        */
        BookmarkList & load() { return bookmarks; }
 
+       ///
+       typedef std::vector<std::pair<unsigned int, pos_type>> BookmarkPosList;
+
+       /// return a list of bookmarks and position for this paragraph
+       BookmarkPosList bookmarksInPar(support::FileName const & fn, int par_id) const;
+
+       /* An insertion/deletion in paragraph \c par_id of buffer \c fn
+        * lead to an offset \c offset after position \c pos. Update
+        * bookmarks accordingly.
+        */
+       void adjustPosAfterPos(support::FileName const & fn,
+                              int const par_id, pos_type pos, int offset);
+
 private:
 
+       /// allow 9 regular bookmarks, bookmark 0 is temporary
+       unsigned int const max_bookmarks = 9;
+
        /// a list of bookmarks
        BookmarkList bookmarks;
 
-       ///
-       unsigned int const max_bookmarks;
 };
 
 
@@ -284,13 +296,13 @@ public:
        ///
        LastCommandsSection(unsigned int num);
        ///
-       void read(std::istream & is);
+       void read(std::istream & is) override;
 
        ///
-       void write(std::ostream & os) const;
+       void write(std::ostream & os) const override;
 
        /// Return lastcommands container (vector)
-       LastCommands const getcommands() const { return lastcommands; }
+       LastCommands const getcommands() const { return lastcommands; }
 
        /** add command to lastcommands list
            @param command command to add
@@ -321,6 +333,60 @@ private:
 };
 
 
+class AuthFilesSection : SessionSection
+{
+public:
+       ///
+       explicit AuthFilesSection();
+
+       ///
+       void read(std::istream & is) override;
+
+       ///
+       void write(std::ostream & os) const override;
+
+       ///
+       bool find(std::string const & name) const;
+
+       ///
+       void insert(std::string const & name);
+
+private:
+       /// set of document files authorized for external conversion
+       std::set<std::string> auth_files_;
+};
+
+
+class ShellEscapeSection : SessionSection
+{
+public:
+       ///
+       explicit ShellEscapeSection() {}
+
+       ///
+       void read(std::istream & is) override;
+
+       ///
+       void write(std::ostream & os) const override;
+
+       ///
+       bool find(std::string const & name) const;
+
+       ///
+       bool findAuth(std::string const & name) const;
+
+       ///
+       void insert(std::string const & name, bool auth = false);
+
+       ///
+       void remove(std::string const & name);
+
+private:
+       /// set of document files authorized for external conversion
+       std::set<std::string> shellescape_files_;
+};
+
+
 class Session
 {
 public:
@@ -349,6 +415,14 @@ public:
        LastCommandsSection & lastCommands() { return last_commands; }
        ///
        LastCommandsSection const & lastCommands() const { return last_commands; }
+       ///
+       AuthFilesSection & authFiles() { return auth_files; }
+       ///
+       AuthFilesSection const & authFiles() const { return auth_files; }
+       ///
+       ShellEscapeSection & shellescapeFiles() { return shellescape_files; }
+       ///
+       ShellEscapeSection const & shellescapeFiles() const { return shellescape_files; }
 
 private:
        friend class LyX;
@@ -376,12 +450,16 @@ private:
        BookmarksSection bookmarks_;
        ///
        LastCommandsSection last_commands;
+       ///
+       AuthFilesSection auth_files;
+       ///
+       ShellEscapeSection shellescape_files;
 };
 
 /// This is a singleton class. Get the instance.
 /// Implemented in LyX.cpp.
 Session & theSession();
 
-} // lyx
+} // namespace lyx
 
 #endif