X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FSession.h;h=65bf19de1342be91495ff0c51c33813d25a191a8;hb=38c2cde0d8695ac5287bae218c4a33a2acf18ef8;hp=8756c00430e500656b15fe4511f95f7a3f21e1e2;hpb=c51ae2651cc46d0133960b649092a1ea4ecbf72c;p=lyx.git diff --git a/src/Session.h b/src/Session.h index 8756c00430..65bf19de13 100644 --- a/src/Session.h +++ b/src/Session.h @@ -16,10 +16,9 @@ #include "support/FileName.h" #include "support/types.h" +#include #include -#include #include -#include /** This session file maintains 1. the latest documents loaded (lastfiles) @@ -27,6 +26,7 @@ 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 { @@ -57,7 +57,7 @@ class LastFilesSection : SessionSection { public: /// - typedef std::deque LastFiles; + typedef std::vector LastFiles; public: /// @@ -69,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 @@ -105,7 +105,17 @@ class LastOpenedSection : SessionSection { public: /// - typedef std::vector 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 LastOpened; public: /// @@ -120,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 */ @@ -138,12 +148,13 @@ public: /// struct FilePos { FilePos() : pit(0), pos(0) {} + support::FileName file; pit_type pit; pos_type pos; }; /// - typedef std::map FilePosMap; + typedef std::list FilePosList; public: /// @@ -155,13 +166,12 @@ public: /// void write(std::ostream & os) const; - /** 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. + /** 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; @@ -171,8 +181,8 @@ private: unsigned int const num_lastfilepos; - /// a map of file positions - FilePosMap lastfilepos; + /// a list of file positions + FilePosList lastfilepos; }; @@ -263,11 +273,113 @@ private: }; +class LastCommandsSection : SessionSection +{ +public: + /// + typedef std::vector LastCommands; + +public: + /// + LastCommandsSection(unsigned int num); + /// + void read(std::istream & is); + + /// + void write(std::ostream & os) const; + + /// Return lastcommands container (vector) + LastCommands const getcommands() const { return lastcommands; } + + /** add command to lastcommands list + @param command command to add + */ + void add(std::string const & command); + + /** clear lastcommands list + */ + void clear(); + +private: + /// number of commands in the lastcommands list. + unsigned int num_lastcommands; + + /** 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; + + /// 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: + /// + explicit AuthFilesSection(); + + /// + void read(std::istream & is); + + /// + void write(std::ostream & os) const; + + /// + bool find(std::string const & name) const; + + /// + void insert(std::string const & name); + +private: + /// set of document files authorized for external conversion + std::set auth_files_; +}; + + +class ShellEscapeSection : SessionSection +{ +public: + /// + explicit ShellEscapeSection() {}; + + /// + void read(std::istream & is); + + /// + void write(std::ostream & os) const; + + /// + 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 shellescape_files_; +}; + + 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; /// @@ -286,6 +398,18 @@ public: BookmarksSection & bookmarks() { return bookmarks_; } /// BookmarksSection const & bookmarks() const { return bookmarks_; } + /// + 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; @@ -311,12 +435,18 @@ private: LastFilePosSection last_file_pos; /// 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