X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsession.h;h=4cf5dcb0808bd0c10c32f43d4bcd0f3f5c347941;hb=cd4033aef3a3f1efdb5a676b8bab3d367f53a830;hp=f9016dc40afdcf6ff1432d84558239ea76b29c22;hpb=b9c604e968bffcd4aacceee87989782f28492f2f;p=lyx.git diff --git a/src/session.h b/src/session.h index f9016dc40a..4cf5dcb080 100644 --- a/src/session.h +++ b/src/session.h @@ -13,7 +13,8 @@ #ifndef SESSION_H #define SESSION_H -#include +#include "support/filename.h" +#include "support/types.h" #include #include @@ -55,7 +56,7 @@ class LastFilesSection : SessionSection { public: /// - typedef std::deque LastFiles; + typedef std::deque LastFiles; public: /// @@ -77,7 +78,7 @@ public: file in the list is popped from the end. @param file the file to insert in the lastfile list. */ - void add(std::string const & file); + void add(support::FileName const & file); private: /// Default number of lastfiles. @@ -103,7 +104,7 @@ class LastOpenedSection : SessionSection { public: /// - typedef std::vector LastOpened; + typedef std::vector LastOpened; public: /// @@ -118,7 +119,7 @@ public: /** add file to lastopened file list @param file filename to add */ - void add(std::string const & file); + void add(support::FileName const & file); /** clear lastopened file list */ @@ -137,7 +138,7 @@ public: typedef boost::tuple FilePos; /// - typedef std::map FilePosMap; + typedef std::map FilePosMap; public: /// @@ -153,12 +154,12 @@ public: @param fname file entry for which to save position information @param pos position of the cursor when the file is closed. */ - void save(std::string const & fname, FilePos pos); + void save(support::FileName const & fname, FilePos pos); /** load saved cursor position from the fname entry in the filepos map @param fname file entry for which to load position information */ - FilePos load(std::string const & fname) const; + FilePos load(support::FileName const & fname) const; private: /// default number of lastfilepos to save */ @@ -173,34 +174,163 @@ private: class BookmarksSection : SessionSection { public: - /// - typedef boost::tuple Bookmark; + /// bookmarks + class Bookmark { + public: + /// Filename + support::FileName filename; + /// Cursor pit, will be saved/restored by .lyx/session + pit_type par_pit; + /// Cursor paragraph Id, used to lcoate bookmarks for opened files + int par_id; + /// Cursor position within a paragraph + pos_type par_pos; + /// + Bookmark() : par_id(0), par_pos(0) {} + /// + Bookmark(support::FileName const & f, pit_type pit, int id, pos_type pos) + : filename(f), par_pit(pit), par_id(id), par_pos(pos) {} + /// set bookmark par_id, this is because newly loaded bookmark + /// may have zero par_id and par_pit can change during editing, see bug 3092 + void setPos(pit_type pit, int id) { + par_pit = pit; + par_id = id; + } + }; + + /// + typedef std::deque BookmarkList; + +public: + /// constructor, set max_bookmarks + /// allow 20 regular bookmarks + BookmarksSection() : bookmarks(0), max_bookmarks(20) {} + + /// Save the current position as bookmark + /// if save==false, save to temp_bookmark + void save(support::FileName const & fname, pit_type pit, int par_id, pos_type par_pos, bool persistent); + + /// return bookmark, return temp_bookmark if i==0 + Bookmark const & bookmark(unsigned int i) const; + + /// does the given bookmark have a saved position ? + bool isValid(unsigned int i) const; /// - typedef std::vector BookmarkList; + unsigned int size() const { return bookmarks.size(); } + + /// clear all bookmarks + void clear() { bookmarks.clear(); } -public: /// void read(std::istream & is); /// void write(std::ostream & os) const; - /** save a bookmark - @bookmark bookmark to be saved - */ - void save(Bookmark const & bookmark); - /** return bookmark list. Non-const container is used since bookmarks will be cleaned after use. */ BookmarkList & load() { return bookmarks; } private: + /// temp bookmark (previously saved_positions[0]), this is really ugly + /// c.f. ./frontends/controllers/ControlRef.C + /// FIXME: a separate LFUN may be a better solution + Bookmark temp_bookmark; + /// a list of bookmarks BookmarkList bookmarks; + + /// + unsigned int const max_bookmarks; +}; + + +class ToolbarSection : 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; + + +public: + /// + 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); + + /// toolbar begin + ToolbarList::const_iterator begin() { return toolbars.begin(); } + + /// toolbar end + ToolbarList::const_iterator end() { return toolbars.end(); } + +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 { @@ -270,6 +400,12 @@ public: /// BookmarksSection const & bookmarks() const { return bookmarks_; } + /// + ToolbarSection & toolbars() { return toolbars_; } + + /// + ToolbarSection const & toolbars() const { return toolbars_; } + /// SessionInfoSection & sessionInfo() { return session_info; } @@ -278,7 +414,7 @@ public: private: /// file to save session, determined in the constructor. - std::string session_file; + support::FileName session_file; /** Read the session file. Reads the #.lyx/session# at the beginning of the LyX session. @@ -299,6 +435,9 @@ private: /// BookmarksSection bookmarks_; + /// + ToolbarSection toolbars_; + /// SessionInfoSection session_info; };