]> git.lyx.org Git - lyx.git/blobdiff - src/session.h
add GuiView parent to QToc for proper memory management.
[lyx.git] / src / session.h
index 83e7f26b948f51e9b27abf7d0aa83eac533ff71b..3efc9dbdd3548f1678de1e9d50136d777fe19c38 100644 (file)
@@ -179,40 +179,47 @@ public:
        public:
                /// Filename
                support::FileName filename;
-               /// Cursor paragraph Id
+               /// 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
+               /// Cursor position within a paragraph
                pos_type par_pos;
                ///
                Bookmark() : par_id(0), par_pos(0) {}
                ///
-               Bookmark(support::FileName const & f, int id, pos_type pos)
-                       : filename(f), par_id(id), par_pos(pos) {}
+               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<Bookmark> BookmarkList;
+       typedef std::vector<Bookmark> BookmarkList;
 
 public:
        /// constructor, set max_bookmarks
-       /// allow 20 regular bookmarks
-       BookmarksSection() : bookmarks(0), max_bookmarks(20) {}
+       /// allow 9 regular bookmarks, bookmark 0 is temporary
+       BookmarksSection() : bookmarks(10), max_bookmarks(9) {}
 
        /// Save the current position as bookmark
-       /// if save==false, save to temp_bookmark
-       void save(support::FileName const & fname, int par_id, pos_type par_pos, bool persistent);
+       void save(support::FileName const & fname, pit_type pit, int par_id, pos_type par_pos, unsigned int idx);
 
-       /// return bookmark, return temp_bookmark if i==0
+       /// return bookmark 0-9, bookmark 0 is the temporary bookmark
        Bookmark const & bookmark(unsigned int i) const;
 
        /// does the given bookmark have a saved position ?
        bool isValid(unsigned int i) const;
 
        ///
-       unsigned int size() const { return bookmarks.size(); }
+       unsigned int size() const { return max_bookmarks; }
 
        /// clear all bookmarks
-       void clear() { bookmarks.clear(); }
+       void clear();
 
        ///
        void read(std::istream & is);
@@ -226,10 +233,6 @@ public:
        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;
@@ -250,10 +253,14 @@ public:
        public:
                ///
                ToolbarInfo() :
-                       state(ON), location(NOTSET) { }
+                       state(ON), location(NOTSET), posx(0), posy(0) { }
                ///
-               ToolbarInfo(int s, int loc) :
-                       state(static_cast<State>(s)), location(static_cast<Location>(loc)) { }
+               ToolbarInfo(int s, int loc, int x=0, int y=0) :
+                       state(static_cast<State>(s)), 
+                       location(static_cast<Location>(loc)),
+                       posx(x),
+                       posy(y)
+                       { }
 
        public:
                enum State {
@@ -276,11 +283,20 @@ public:
 
                Location location;
 
+               /// x-position of the toolbar
+               int posx;
+
+               /// y-position of the toolbar
+               int posy;
+               
                /// potentially, icons
        };
 
+       typedef boost::tuple<std::string, ToolbarInfo> ToolbarItem;
+
        /// info for each toolbar
-       typedef std::map<std::string, ToolbarInfo> ToolbarMap;
+       typedef std::vector<ToolbarItem> ToolbarList;
+
 
 public:
        ///
@@ -292,11 +308,24 @@ public:
        /// 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
-       ToolbarMap toolbars;
+       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
 {