X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FSession.h;h=25172b3094f582e4e120f60d4f7dc1124042e3e5;hb=0d75c1117f278efc59c2e5a108f60efa9e017bc4;hp=119b2a47af4095c2626ce9e365f1ca009e810545;hpb=fad47c0fe0a45da4ac4a395817a0ad73425ef275;p=lyx.git diff --git a/src/Session.h b/src/Session.h index 119b2a47af..25172b3094 100644 --- a/src/Session.h +++ b/src/Session.h @@ -16,31 +16,28 @@ #include "support/FileName.h" #include "support/types.h" -#include -#include - #include #include #include #include -// 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 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: /// @@ -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 FilePos; + struct FilePos { + FilePos() : pit(0), pos(0) {} + pit_type pit; + pos_type pos; + }; /// typedef std::map 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 @@ -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(s)), - location(static_cast(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 ToolbarItem; - - /// info for each toolbar - typedef std::vector ToolbarList; - + /// + typedef std::vector 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); - - -class SessionInfoSection : SessionSection -{ -public: - /// - typedef std::map MiscInfo; - -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_; } - + LastCommandsSection & lastCommands() { return last_commands; } /// - ToolbarSection const & toolbars() const { return toolbars_; } - - /// - 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 &); + /// 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