]> git.lyx.org Git - lyx.git/blobdiff - src/session.h
hopefully fix tex2lyx linking.
[lyx.git] / src / session.h
index e3cfed8285235cd3ab4f1c3934f1c271d450dcad..aa8d63a7951f2f4ab3d8b830e34c2266a000d26e 100644 (file)
@@ -173,32 +173,127 @@ private:
 class BookmarksSection : SessionSection
 {
 public:
-       ///
-       typedef boost::tuple<unsigned int, std::string, unsigned int, pos_type> Bookmark;
+       /// bookmarks
+       class Bookmark {
+       public:
+               /// Filename
+               std::string filename;
+               /// Cursor paragraph Id
+               int par_id;
+               /// Cursor position
+               pos_type par_pos;
+               ///
+               Bookmark() : par_id(0), par_pos(0) {}
+               ///
+               Bookmark(std::string const & f, int id, pos_type pos)
+                       : filename(f), par_id(id), par_pos(pos) {}
+       };
+
+       ///
+       typedef std::deque<Bookmark> 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(std::string const & fname, 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<Bookmark> 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) { }
+               ///
+               ToolbarInfo(int s, int loc) :
+                       state(static_cast<State>(s)), location(static_cast<Location>(loc)) { }
+
+       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;
+
+               /// potentially, icons
+       };
+
+       /// info for each toolbar
+       typedef std::map<std::string, ToolbarInfo> ToolbarMap;
+
+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);
+
+private:
+       /// toolbar information
+       ToolbarMap toolbars;
 };
 
 
@@ -247,34 +342,40 @@ public:
        void writeFile() const;
 
        ///
-       LastFilesSection & LastFiles() { return last_files; }
+       LastFilesSection & lastFiles() { return last_files; }
        
        ///
-       LastFilesSection const & LastFiles() const { return last_files; }
+       LastFilesSection const & lastFiles() const { return last_files; }
 
        ///
-       LastOpenedSection & LastOpened() { return last_opened; }
+       LastOpenedSection & lastOpened() { return last_opened; }
 
        ///
-       LastOpenedSection const & LastOpened() const { return last_opened; }
+       LastOpenedSection const & lastOpened() const { return last_opened; }
        
        ///
-       LastFilePosSection & LastFilePos() { return last_file_pos; }
+       LastFilePosSection & lastFilePos() { return last_file_pos; }
        
        ///
-       LastFilePosSection const & LastFilePos() const { return last_file_pos; }
+       LastFilePosSection const & lastFilePos() const { return last_file_pos; }
+
+       ///
+       BookmarksSection & bookmarks() { return bookmarks_; }
 
        ///
-       BookmarksSection & Bookmarks() { return bookmarks; }
+       BookmarksSection const & bookmarks() const { return bookmarks_; }
 
        ///
-       BookmarksSection const & Bookmarks() const { return bookmarks; }
+       ToolbarSection & toolbars() { return toolbars_; }
 
        ///
-       SessionInfoSection & SessionInfo() { return session_info; }
+       ToolbarSection const & toolbars() const { return toolbars_; }
 
        ///
-       SessionInfoSection const & SessionInfo() const { return session_info; }
+       SessionInfoSection & sessionInfo() { return session_info; }
+
+       ///
+       SessionInfoSection const & sessionInfo() const { return session_info; }
 
 private:
        /// file to save session, determined in the constructor.
@@ -297,7 +398,10 @@ private:
        LastFilePosSection last_file_pos;
 
        ///
-       BookmarksSection bookmarks;
+       BookmarksSection bookmarks_;
+
+       ///
+       ToolbarSection toolbars_;
 
        ///
        SessionInfoSection session_info;