// -*- C++ -*-
-/* This file is part of
-* ======================================================
-*
-* LyX, The Document Processor
-*
-* Copyright (C) 1995 1996 Matthias Ettrich
-* and the LyX Team.
-*
-*======================================================*/
+/**
+ * \file lastfiles.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Lars Gullik Bjønnes
+ *
+ * Full author contact details are available in file CREDITS.
+ */
-#ifndef _LASTFILES_H
-#define _LASTFILES_H
+#ifndef LASTFILES_H
+#define LASTFILES_H
-#ifdef __GNUG__
-#pragma interface
-#endif
+#include <boost/utility.hpp>
-#include "LString.h"
+#include <deque>
+#include <string>
+const long maxlastfiles = 20;
-/** The latest documents loaded
- This class takes care of the last .lyx files used by the LyX user. It
- both reads and writes this information to a file. The number of files
- kept are user defined, but defaults to four.
-*/
-class LastFiles
-{
+/** The latest documents loaded.
+ * This class takes care of the last .lyx files used by the LyX user. It
+ * both reads and writes this information to a file. The number of files
+ * kept are user defined, but defaults to four.
+ */
+class LastFiles : boost::noncopyable {
public:
- /**@name Constructors and Deconstructors */
- //@{
- /**
- Parameters are: name of file to read. Whether you want LastFiles
- to check for file existance, and the number of files to remember.
- */
- LastFiles(string const &, bool dostat = true, char num = 4);
///
- ~LastFiles();
- //@}
+ typedef std::deque<std::string> Files;
+
+ ///
+ typedef Files::const_iterator const_iterator;
- /**@name Methods */
- //@{
- /**
- This funtion inserts #file# into the last files list. If the file
- already exist it is moved to the top of the list. If it don't
- exist it is placed on the top of the list. If the list already is
- full the last visited file in the list is puched out and deleted.
- */
- void newFile(string const &);
- /** Writes the lastfiles table to disk. A " is placed around the
- filenames to preserve special chars. (not all are preserved
- anyway, but at least space is.)
- */
- void writeFile(string const &) const;
- //@}
+ /** Read the lastfiles file.
+ @param file The file to read the lastfiles form.
+ @param dostat Whether to check for file existance.
+ @param num number of files to remember.
+ */
+ explicit
+ LastFiles(std::string const & file,
+ bool dostat = true, unsigned int num = 4);
+
+ /** Insert #file# into the list.
+ This funtion inserts #file# into the last files list. If the file
+ already exist it is moved to the top of the list, else exist it
+ is placed on the top of the list. If the list is full the last
+ file in the list is popped from the end.
+ @param file the file to insert in the list.
+ */
+ void newFile(std::string const & file);
+ /** Writes the lastfiles table to disk.
+ Writes one file on each line, this way we can at least have
+ some special chars (e.g. space), but newline in filenames
+ are thus not allowed.
+ @param file the file we write the lastfiles list to.
+ */
+ void writeFile(std::string const & file) const;
+ /** Return file #n# in the lastfiles list.
+ @param n number in the list to get
+ */
+ std::string const operator[](unsigned int n) const;
+ /// Iterator to the beginning of the list.
+ Files::const_iterator begin() const { return files.begin(); }
+ /// Iterator to the end of the list.
+ Files::const_iterator end() const { return files.end(); }
private:
- /**@name const variables */
- //@{
- ///
- enum {
- ///
- DEFAULTFILES = 4
- };
- /** There is no point in keeping more than this number of files
- at the same time. However perhaps someday someone finds use for
- more files and wants to change it. Please do. But don't show
- the files in a menu...
- */
- enum {
- ///
+ /** Local constants.
+ It is more portable among different C++ compilers to use
+ an enum instead of #int const XXX#
+ */
+ enum local_constants {
+ /// Default number of lastfiles.
+ DEFAULTFILES = 4,
+ /** Max number of lastfiles.
+ There is no point in keeping more than this number
+ of files at the same time. However perhaps someday
+ someone finds use for more files and wants to
+ change it. Please do. But don't show the files in
+ a menu...
+ */
ABSOLUTEMAXLASTFILES = 20
};
- //@}
- /**@name Variables */
- //@{
- /// an array of lastfiles
- string *files;
+ /// a list of lastfiles
+ Files files;
/// number of files in the lastfiles list.
- char num_files;
+ unsigned int num_files;
/// check for file existance or not.
bool dostat;
- //@}
-
- /**@name Methods */
- //@{
- /** reads the .lyx_lastfiles at the beginning of the LyX session.
- This will read the lastfiles file (usually .lyx_lastfiles). It
- will normally discard files that don't exist anymore, unless
- LastFiles has been initialized with dostat = false.
- */
- void readFile(string const &);
- /// used by the constructor to set the number of stored last files.
- void setNumberOfFiles(char num);
- //@}
- /**@name Friends */
- //@{
- ///
- friend class LastFiles_Iter;
- //@}
+ /** Read the lastfiles file.
+ Reads the #.lyx_lastfiles# at the beginning of the LyX session.
+ This will read the lastfiles file (usually #.lyx_lastfiles#). It
+ will normally discard files that don't exist anymore, unless
+ LastFiles has been initialized with #dostat = false#.
+ @param file the file containing the lastfiles.
+ */
+ void readFile(std::string const & file);
+ /** Used by the constructor to set the number of stored last files.
+ @param num the number of lastfiles to set.
+ */
+ void setNumberOfFiles(unsigned int num);
};
-
-
-/// An Iterator class for LastFiles
-class LastFiles_Iter {
-public:
- ///
- LastFiles_Iter(const LastFiles& la)
- {cs = &la; index = 0;}
- ///
- string operator() ()
- {
- return (index < cs->num_files)? cs->files[index++]
- : string();
- }
- ///
- string operator[] (int a)
- { return cs->files[a];}
-private:
- ///
- const LastFiles *cs;
- ///
- char index;
-};
-
#endif