#ifndef SESSION_H
#define SESSION_H
-#include <support/types.h>
+#include "support/filename.h"
+#include "support/types.h"
#include <boost/utility.hpp>
#include <boost/tuple/tuple.hpp>
{
public:
///
- typedef std::deque<std::string> LastFiles;
+ typedef std::deque<support::FileName> LastFiles;
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.
{
public:
///
- typedef std::vector<std::string> LastOpened;
+ typedef std::vector<support::FileName> LastOpened;
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
*/
typedef boost::tuple<pit_type, pos_type> FilePos;
///
- typedef std::map<std::string, FilePos> FilePosMap;
+ typedef std::map<support::FileName, FilePos> FilePosMap;
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 */
class Bookmark {
public:
/// Filename
- std::string filename;
- /// Cursor paragraph Id
+ 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
+ /// Cursor position within a paragraph
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) {}
+ 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(std::string 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);
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;
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 {
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:
///
/// 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
{
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.