#include "support/FileName.h"
#include "support/types.h"
-#include <boost/utility.hpp>
-#include <boost/tuple/tuple.hpp>
-
#include <string>
#include <deque>
#include <vector>
#include <map>
-// 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() {}
/// write to std::ostream
virtual void write(std::ostream & os) const = 0;
+
+private:
+ /// uncopiable
+ SessionSection(SessionSection const &);
+ void operator=(SessionSection const &);
};
{
public:
///
- typedef boost::tuple<pit_type, pos_type> FilePos;
+ struct FilePos {
+ FilePos() : pit(0), pos(0) {}
+ pit_type pit;
+ pos_type pos;
+ };
///
typedef std::map<support::FileName, FilePos> FilePosMap;
@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
/// 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; }
};
-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<State>(s)),
- location(static_cast<Location>(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<std::string, ToolbarInfo> ToolbarItem;
-
- /// info for each toolbar
- typedef std::vector<ToolbarItem> ToolbarList;
-
+ ///
+ typedef std::vector<std::string> 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;
-};
-
-/// 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<std::string, std::string> MiscInfo;
-
-public:
- ///
- void read(std::istream & is);
-
- ///
- void write(std::ostream & os) const;
+ /// number of commands in the lastcommands list.
+ unsigned int num_lastcommands;
- /** 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_; }
-
- ///
- ToolbarSection const & toolbars() const { return toolbars_; }
-
///
- SessionInfoSection & sessionInfo() { return session_info; }
-
+ LastCommandsSection & lastCommands() { return last_commands; }
///
- 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;
///
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