mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Transfer some GUI oriented code from core to frontend.
* Application/GuiApplication: - restoreGuiSession(): new method for session restoration. * LyXView/GuiView - loadDocument(): new pure virtual interface * lyxFunc: - loadAndViewFile(): transfered to GuiView::loadDocument() - openDocument(): transfered to GuiView. * LyX.h - Impl::files_to_load_ : now a simple vector<string>. - restoreGuiSession(): removed. - execBatchCommands(): simplified and make use of Application::restoreGuiSession(). git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22816 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
5627a35790
commit
8d99df0c93
109
src/LyX.cpp
109
src/LyX.cpp
@ -147,7 +147,7 @@ struct LyX::Impl
|
||||
boost::scoped_ptr<Session> session_;
|
||||
|
||||
/// Files to load at start.
|
||||
vector<FileName> files_to_load_;
|
||||
vector<string> files_to_load_;
|
||||
|
||||
/// The messages translators.
|
||||
map<string, Messages> messages_;
|
||||
@ -525,24 +525,22 @@ int LyX::init(int & argc, char * argv[])
|
||||
if (!success)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
for (int argi = argc - 1; argi >= 1; --argi) {
|
||||
// get absolute path of file and add ".lyx" to
|
||||
// the filename if necessary
|
||||
pimpl_->files_to_load_.push_back(fileSearch(string(),
|
||||
os::internal_path(to_utf8(from_local8bit(argv[argi]))),
|
||||
"lyx", may_not_exist));
|
||||
}
|
||||
// Remaining arguments are assumed to be files to load.
|
||||
for (int argi = argc - 1; argi >= 1; --argi)
|
||||
pimpl_->files_to_load_.push_back(to_utf8(from_local8bit(argv[argi])));
|
||||
|
||||
if (first_start)
|
||||
pimpl_->files_to_load_.push_back(i18nLibFileSearch("examples", "splash.lyx"));
|
||||
if (first_start) {
|
||||
pimpl_->files_to_load_.push_back(
|
||||
i18nLibFileSearch("examples", "splash.lyx").absFilename());
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void LyX::addFileToLoad(FileName const & fname)
|
||||
void LyX::addFileToLoad(string const & fname)
|
||||
{
|
||||
vector<FileName>::const_iterator cit = find(
|
||||
vector<string>::const_iterator cit = find(
|
||||
pimpl_->files_to_load_.begin(), pimpl_->files_to_load_.end(),
|
||||
fname);
|
||||
|
||||
@ -553,15 +551,20 @@ void LyX::addFileToLoad(FileName const & fname)
|
||||
|
||||
void LyX::loadFiles()
|
||||
{
|
||||
vector<FileName>::const_iterator it = pimpl_->files_to_load_.begin();
|
||||
vector<FileName>::const_iterator end = pimpl_->files_to_load_.end();
|
||||
vector<string>::const_iterator it = pimpl_->files_to_load_.begin();
|
||||
vector<string>::const_iterator end = pimpl_->files_to_load_.end();
|
||||
|
||||
for (; it != end; ++it) {
|
||||
if (it->empty())
|
||||
// get absolute path of file and add ".lyx" to
|
||||
// the filename if necessary
|
||||
FileName fname = fileSearch(string(), os::internal_path(*it), "lyx",
|
||||
may_not_exist);
|
||||
|
||||
if (fname.empty())
|
||||
continue;
|
||||
|
||||
Buffer * buf = pimpl_->buffer_list_.newBuffer(it->absFilename(), false);
|
||||
if (buf->loadLyXFile(*it)) {
|
||||
Buffer * buf = pimpl_->buffer_list_.newBuffer(fname.absFilename(), false);
|
||||
if (buf->loadLyXFile(fname)) {
|
||||
ErrorList const & el = buf->errorList("Parse");
|
||||
if (!el.empty())
|
||||
for_each(el.begin(), el.end(),
|
||||
@ -578,10 +581,9 @@ void LyX::execBatchCommands()
|
||||
// The advantage of doing this here is that the event loop
|
||||
// is already started. So any need for interaction will be
|
||||
// aknowledged.
|
||||
restoreGuiSession();
|
||||
|
||||
// if reconfiguration is needed.
|
||||
if (textclasslist.empty()) {
|
||||
while (textclasslist.empty()) {
|
||||
switch (Alert::prompt(
|
||||
_("No textclass is found"),
|
||||
_("LyX cannot continue because no textclass is found. "
|
||||
@ -601,10 +603,36 @@ void LyX::execBatchCommands()
|
||||
pimpl_->lyxfunc_.dispatch(FuncRequest(LFUN_RECONFIGURE,
|
||||
" --without-latex-config"));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
pimpl_->lyxfunc_.dispatch(FuncRequest(LFUN_LYX_QUIT));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// create the first main window
|
||||
pimpl_->lyxfunc_.dispatch(FuncRequest(LFUN_WINDOW_NEW, geometryArg));
|
||||
|
||||
if (!pimpl_->files_to_load_.empty()) {
|
||||
// if some files were specified at command-line we assume that the
|
||||
// user wants to edit *these* files and not to restore the session.
|
||||
for (size_t i = 0; i != pimpl_->files_to_load_.size(); ++i) {
|
||||
pimpl_->lyxfunc_.dispatch(
|
||||
FuncRequest(LFUN_FILE_OPEN, pimpl_->files_to_load_[i]));
|
||||
}
|
||||
// clear this list to save a few bytes of RAM
|
||||
pimpl_->files_to_load_.clear();
|
||||
}
|
||||
else
|
||||
pimpl_->application_->restoreGuiSession();
|
||||
|
||||
BufferList::iterator I = theBufferList().begin();
|
||||
BufferList::iterator end = theBufferList().end();
|
||||
for (; I != end; ++I) {
|
||||
Buffer * buf = *I;
|
||||
if (buf != buf->masterBuffer())
|
||||
continue;
|
||||
updateLabels(*buf);
|
||||
}
|
||||
|
||||
// Execute batch commands if available
|
||||
if (pimpl_->batch_command.empty())
|
||||
@ -616,47 +644,6 @@ void LyX::execBatchCommands()
|
||||
}
|
||||
|
||||
|
||||
void LyX::restoreGuiSession()
|
||||
{
|
||||
// create the main window
|
||||
pimpl_->lyxfunc_.dispatch(FuncRequest(LFUN_WINDOW_NEW, geometryArg));
|
||||
|
||||
// if there is no valid class list, do not load any file.
|
||||
if (textclasslist.empty())
|
||||
return;
|
||||
|
||||
// if some files were specified at command-line we assume that the
|
||||
// user wants to edit *these* files and not to restore the session.
|
||||
if (!pimpl_->files_to_load_.empty()) {
|
||||
for_each(pimpl_->files_to_load_.begin(),
|
||||
pimpl_->files_to_load_.end(),
|
||||
bind(&LyXFunc::loadAndViewFile, pimpl_->lyxfunc_, _1, true));
|
||||
// clear this list to save a few bytes of RAM
|
||||
pimpl_->files_to_load_.clear();
|
||||
pimpl_->session_->lastOpened().clear();
|
||||
|
||||
} else if (lyxrc.load_session) {
|
||||
vector<FileName> const & lastopened = pimpl_->session_->lastOpened().getfiles();
|
||||
// do not add to the lastfile list since these files are restored from
|
||||
// last session, and should be already there (regular files), or should
|
||||
// not be added at all (help files).
|
||||
for_each(lastopened.begin(), lastopened.end(),
|
||||
bind(&LyXFunc::loadAndViewFile, pimpl_->lyxfunc_, _1, false));
|
||||
|
||||
// clear this list to save a few bytes of RAM
|
||||
pimpl_->session_->lastOpened().clear();
|
||||
}
|
||||
|
||||
BufferList::iterator I = pimpl_->buffer_list_.begin();
|
||||
BufferList::iterator end = pimpl_->buffer_list_.end();
|
||||
for (; I != end; ++I) {
|
||||
Buffer * buf = *I;
|
||||
if (buf != buf->masterBuffer())
|
||||
continue;
|
||||
updateLabels(*buf);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Signals and Windows
|
||||
===================
|
||||
|
@ -110,7 +110,7 @@ public:
|
||||
void execBatchCommands();
|
||||
|
||||
///
|
||||
void addFileToLoad(support::FileName const &);
|
||||
void addFileToLoad(std::string const &);
|
||||
|
||||
private:
|
||||
/// noncopyable
|
||||
@ -135,9 +135,6 @@ private:
|
||||
*/
|
||||
void loadFiles();
|
||||
|
||||
/// Create a View, load files and restore GUI Session.
|
||||
void restoreGuiSession();
|
||||
|
||||
/// initial LyX set up
|
||||
bool init();
|
||||
/// set up the default dead key bindings if requested
|
||||
|
115
src/LyXFunc.cpp
115
src/LyXFunc.cpp
@ -145,7 +145,7 @@ bool import(LyXView * lv, FileName const & filename,
|
||||
|
||||
|
||||
if (loader_format == "lyx") {
|
||||
Buffer * buf = theLyXFunc().loadAndViewFile(lyxfile);
|
||||
Buffer * buf = lv->loadDocument(lyxfile);
|
||||
if (!buf) {
|
||||
// we are done
|
||||
lv->message(_("file not imported!"));
|
||||
@ -1125,7 +1125,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
}
|
||||
lyx_view_->message(bformat(_("Opening help file %1$s..."),
|
||||
makeDisplayPath(fname.absFilename())));
|
||||
Buffer * buf = loadAndViewFile(fname, false);
|
||||
Buffer * buf = lyx_view_->loadDocument(fname, false);
|
||||
if (buf) {
|
||||
updateLabels(*buf);
|
||||
lyx_view_->setBuffer(buf);
|
||||
@ -1194,12 +1194,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
break;
|
||||
}
|
||||
|
||||
case LFUN_FILE_OPEN:
|
||||
BOOST_ASSERT(lyx_view_);
|
||||
open(argument);
|
||||
updateFlags = Update::None;
|
||||
break;
|
||||
|
||||
// --- lyxserver commands ----------------------------
|
||||
case LFUN_SERVER_GET_NAME:
|
||||
BOOST_ASSERT(lyx_view_ && lyx_view_->buffer());
|
||||
@ -1233,7 +1227,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
if (theBufferList().exists(s.absFilename()))
|
||||
buf = theBufferList().getBuffer(s.absFilename());
|
||||
else {
|
||||
buf = loadAndViewFile(s);
|
||||
buf = lyx_view_->loadDocument(s);
|
||||
loaded = true;
|
||||
}
|
||||
}
|
||||
@ -1387,7 +1381,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
} else {
|
||||
setMessage(bformat(_("Opening child document %1$s..."),
|
||||
makeDisplayPath(filename.absFilename())));
|
||||
child = loadAndViewFile(filename, true);
|
||||
child = lyx_view_->loadDocument(filename, false);
|
||||
parsed = true;
|
||||
}
|
||||
if (child) {
|
||||
@ -1864,105 +1858,6 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd
|
||||
}
|
||||
|
||||
|
||||
Buffer * LyXFunc::loadAndViewFile(FileName const & filename, bool tolastfiles)
|
||||
{
|
||||
lyx_view_->setBusy(true);
|
||||
|
||||
Buffer * newBuffer = checkAndLoadLyXFile(filename);
|
||||
|
||||
if (!newBuffer) {
|
||||
lyx_view_->message(_("Document not loaded."));
|
||||
lyx_view_->setBusy(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
lyx_view_->setBuffer(newBuffer);
|
||||
|
||||
// scroll to the position when the file was last closed
|
||||
if (lyxrc.use_lastfilepos) {
|
||||
LastFilePosSection::FilePos filepos =
|
||||
LyX::ref().session().lastFilePos().load(filename);
|
||||
lyx_view_->view()->moveToPosition(filepos.pit, filepos.pos, 0, 0);
|
||||
}
|
||||
|
||||
if (tolastfiles)
|
||||
LyX::ref().session().lastFiles().add(filename);
|
||||
|
||||
lyx_view_->setBusy(false);
|
||||
return newBuffer;
|
||||
}
|
||||
|
||||
|
||||
void LyXFunc::open(string const & fname)
|
||||
{
|
||||
string initpath = lyxrc.document_path;
|
||||
|
||||
if (lyx_view_->buffer()) {
|
||||
string const trypath = lyx_view_->buffer()->filePath();
|
||||
// If directory is writeable, use this as default.
|
||||
if (FileName(trypath).isDirWritable())
|
||||
initpath = trypath;
|
||||
}
|
||||
|
||||
string filename;
|
||||
|
||||
if (fname.empty()) {
|
||||
FileDialog dlg(_("Select document to open"), LFUN_FILE_OPEN);
|
||||
dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
|
||||
dlg.setButton2(_("Examples|#E#e"),
|
||||
from_utf8(addPath(package().system_support().absFilename(), "examples")));
|
||||
|
||||
FileDialog::Result result =
|
||||
dlg.open(from_utf8(initpath),
|
||||
FileFilterList(_("LyX Documents (*.lyx)")),
|
||||
docstring());
|
||||
|
||||
if (result.first == FileDialog::Later)
|
||||
return;
|
||||
|
||||
filename = to_utf8(result.second);
|
||||
|
||||
// check selected filename
|
||||
if (filename.empty()) {
|
||||
lyx_view_->message(_("Canceled."));
|
||||
return;
|
||||
}
|
||||
} else
|
||||
filename = fname;
|
||||
|
||||
// get absolute path of file and add ".lyx" to the filename if
|
||||
// necessary.
|
||||
FileName const fullname =
|
||||
fileSearch(string(), filename, "lyx", support::may_not_exist);
|
||||
if (!fullname.empty())
|
||||
filename = fullname.absFilename();
|
||||
|
||||
// if the file doesn't exist, let the user create one
|
||||
if (!fullname.exists()) {
|
||||
// the user specifically chose this name. Believe him.
|
||||
Buffer * const b = newFile(filename, string(), true);
|
||||
if (b)
|
||||
lyx_view_->setBuffer(b);
|
||||
return;
|
||||
}
|
||||
|
||||
docstring const disp_fn = makeDisplayPath(filename);
|
||||
lyx_view_->message(bformat(_("Opening document %1$s..."), disp_fn));
|
||||
|
||||
docstring str2;
|
||||
Buffer * buf = loadAndViewFile(fullname);
|
||||
if (buf) {
|
||||
updateLabels(*buf);
|
||||
lyx_view_->setBuffer(buf);
|
||||
buf->errors("Parse");
|
||||
str2 = bformat(_("Document %1$s opened."), disp_fn);
|
||||
} else {
|
||||
str2 = bformat(_("Could not open document %1$s"), disp_fn);
|
||||
}
|
||||
lyx_view_->message(str2);
|
||||
}
|
||||
|
||||
|
||||
void LyXFunc::doImport(string const & argument)
|
||||
{
|
||||
string format;
|
||||
@ -2067,7 +1962,7 @@ void LyXFunc::reloadBuffer()
|
||||
// The user has already confirmed that the changes, if any, should
|
||||
// be discarded. So we just release the Buffer and don't call closeBuffer();
|
||||
theBufferList().release(lyx_view_->buffer());
|
||||
Buffer * buf = loadAndViewFile(filename);
|
||||
Buffer * buf = lyx_view_->loadDocument(filename);
|
||||
docstring const disp_fn = makeDisplayPath(filename.absFilename());
|
||||
docstring str;
|
||||
if (buf) {
|
||||
|
@ -87,10 +87,6 @@ public:
|
||||
/// not the current buffer
|
||||
void gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer);
|
||||
|
||||
/// load a buffer into the current workarea.
|
||||
Buffer * loadAndViewFile(support::FileName const & name, ///< File to load.
|
||||
bool tolastfiles = true); ///< append to the "Open recent" menu?
|
||||
|
||||
/// cursor x position before dispatch started
|
||||
int cursorBeforeDispatchX() const {
|
||||
return cursorPosBeforeDispatchX_;
|
||||
@ -133,8 +129,6 @@ private:
|
||||
void sendDispatchMessage(docstring const & msg,
|
||||
FuncRequest const & ev);
|
||||
|
||||
///
|
||||
void open(std::string const &);
|
||||
///
|
||||
void doImport(std::string const &);
|
||||
///
|
||||
|
@ -163,6 +163,9 @@ public:
|
||||
///
|
||||
virtual void resetGui() = 0;
|
||||
|
||||
/// Load files and restore GUI Session.
|
||||
virtual void restoreGuiSession() = 0;
|
||||
|
||||
///
|
||||
virtual void hideDialogs(std::string const & name, Inset * inset) const = 0;
|
||||
///
|
||||
|
@ -67,6 +67,12 @@ public:
|
||||
virtual void setBuffer(Buffer * b) = 0; ///< \c Buffer to set.
|
||||
///
|
||||
virtual bool closeBuffer() = 0;
|
||||
|
||||
/// load a document into the current workarea.
|
||||
virtual Buffer * loadDocument(
|
||||
support::FileName const & name, ///< File to load.
|
||||
bool tolastfiles = true ///< append to the "Open recent" menu?
|
||||
) = 0;
|
||||
///
|
||||
virtual void newDocument(std::string const & filename,
|
||||
bool fromTemplate) = 0;
|
||||
|
@ -378,6 +378,24 @@ void GuiApplication::execBatchCommands()
|
||||
}
|
||||
|
||||
|
||||
void GuiApplication::restoreGuiSession()
|
||||
{
|
||||
if (!lyxrc.load_session)
|
||||
return;
|
||||
|
||||
Session & session = LyX::ref().session();
|
||||
vector<FileName> const & lastopened = session.lastOpened().getfiles();
|
||||
// do not add to the lastfile list since these files are restored from
|
||||
// last session, and should be already there (regular files), or should
|
||||
// not be added at all (help files).
|
||||
for_each(lastopened.begin(), lastopened.end(),
|
||||
bind(&GuiView::loadDocument, current_view_, _1, false));
|
||||
|
||||
// clear this list to save a few bytes of RAM
|
||||
session.lastOpened().clear();
|
||||
}
|
||||
|
||||
|
||||
QString const GuiApplication::romanFontName()
|
||||
{
|
||||
QFont font;
|
||||
@ -429,7 +447,7 @@ bool GuiApplication::event(QEvent * e)
|
||||
// So we acknowledge the event and delay the file opening
|
||||
// until LyX is ready.
|
||||
// FIXME UNICODE: FileName accept an utf8 encoded string.
|
||||
LyX::ref().addFileToLoad(FileName(fromqstr(foe->file())));
|
||||
LyX::ref().addFileToLoad(fromqstr(foe->file()));
|
||||
else
|
||||
lyx::dispatch(FuncRequest(LFUN_FILE_OPEN,
|
||||
qstring_to_ucs4(foe->file())));
|
||||
|
@ -61,6 +61,7 @@ public:
|
||||
virtual FuncStatus getStatus(FuncRequest const &);
|
||||
virtual bool dispatch(FuncRequest const &);
|
||||
virtual void resetGui();
|
||||
void restoreGuiSession();
|
||||
virtual Clipboard & clipboard();
|
||||
virtual Selection & selection();
|
||||
virtual FontLoader & fontLoader() { return font_loader_; }
|
||||
|
@ -1055,6 +1055,105 @@ static FileName selectTemplateFile()
|
||||
}
|
||||
|
||||
|
||||
Buffer * GuiView::loadDocument(FileName const & filename, bool tolastfiles)
|
||||
{
|
||||
setBusy(true);
|
||||
|
||||
Buffer * newBuffer = checkAndLoadLyXFile(filename);
|
||||
|
||||
if (!newBuffer) {
|
||||
message(_("Document not loaded."));
|
||||
setBusy(false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
setBuffer(newBuffer);
|
||||
|
||||
// scroll to the position when the file was last closed
|
||||
if (lyxrc.use_lastfilepos) {
|
||||
LastFilePosSection::FilePos filepos =
|
||||
LyX::ref().session().lastFilePos().load(filename);
|
||||
view()->moveToPosition(filepos.pit, filepos.pos, 0, 0);
|
||||
}
|
||||
|
||||
if (tolastfiles)
|
||||
LyX::ref().session().lastFiles().add(filename);
|
||||
|
||||
setBusy(false);
|
||||
return newBuffer;
|
||||
}
|
||||
|
||||
|
||||
void GuiView::openDocument(string const & fname)
|
||||
{
|
||||
string initpath = lyxrc.document_path;
|
||||
|
||||
if (buffer()) {
|
||||
string const trypath = buffer()->filePath();
|
||||
// If directory is writeable, use this as default.
|
||||
if (FileName(trypath).isDirWritable())
|
||||
initpath = trypath;
|
||||
}
|
||||
|
||||
string filename;
|
||||
|
||||
if (fname.empty()) {
|
||||
FileDialog dlg(_("Select document to open"), LFUN_FILE_OPEN);
|
||||
dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
|
||||
dlg.setButton2(_("Examples|#E#e"),
|
||||
from_utf8(addPath(package().system_support().absFilename(), "examples")));
|
||||
|
||||
FileDialog::Result result =
|
||||
dlg.open(from_utf8(initpath),
|
||||
FileFilterList(_("LyX Documents (*.lyx)")),
|
||||
docstring());
|
||||
|
||||
if (result.first == FileDialog::Later)
|
||||
return;
|
||||
|
||||
filename = to_utf8(result.second);
|
||||
|
||||
// check selected filename
|
||||
if (filename.empty()) {
|
||||
message(_("Canceled."));
|
||||
return;
|
||||
}
|
||||
} else
|
||||
filename = fname;
|
||||
|
||||
// get absolute path of file and add ".lyx" to the filename if
|
||||
// necessary.
|
||||
FileName const fullname =
|
||||
fileSearch(string(), filename, "lyx", support::may_not_exist);
|
||||
if (!fullname.empty())
|
||||
filename = fullname.absFilename();
|
||||
|
||||
// if the file doesn't exist, let the user create one
|
||||
if (!fullname.exists()) {
|
||||
// the user specifically chose this name. Believe him.
|
||||
Buffer * const b = newFile(filename, string(), true);
|
||||
if (b)
|
||||
setBuffer(b);
|
||||
return;
|
||||
}
|
||||
|
||||
docstring const disp_fn = makeDisplayPath(filename);
|
||||
message(bformat(_("Opening document %1$s..."), disp_fn));
|
||||
|
||||
docstring str2;
|
||||
Buffer * buf = loadDocument(fullname);
|
||||
if (buf) {
|
||||
updateLabels(*buf);
|
||||
setBuffer(buf);
|
||||
buf->errors("Parse");
|
||||
str2 = bformat(_("Document %1$s opened."), disp_fn);
|
||||
} else {
|
||||
str2 = bformat(_("Could not open document %1$s"), disp_fn);
|
||||
}
|
||||
message(str2);
|
||||
}
|
||||
|
||||
|
||||
void GuiView::newDocument(string const & filename, bool from_template)
|
||||
{
|
||||
FileName initpath(lyxrc.document_path);
|
||||
@ -1352,6 +1451,10 @@ bool GuiView::dispatch(FuncRequest const & cmd)
|
||||
bv->cursor().updateFlags(Update::None);
|
||||
|
||||
switch(cmd.action) {
|
||||
case LFUN_FILE_OPEN:
|
||||
openDocument(to_utf8(cmd.argument()));
|
||||
break;
|
||||
|
||||
case LFUN_BUFFER_SWITCH:
|
||||
setBuffer(theBufferList().getBuffer(to_utf8(cmd.argument())));
|
||||
break;
|
||||
|
@ -89,6 +89,11 @@ public:
|
||||
void setBuffer(Buffer * b); ///< \c Buffer to set.
|
||||
///
|
||||
bool closeBuffer();
|
||||
/// load a document into the current workarea.
|
||||
Buffer * loadDocument(support::FileName const & name, ///< File to load.
|
||||
bool tolastfiles = true); ///< append to the "Open recent" menu?
|
||||
///
|
||||
void openDocument(std::string const & filename);
|
||||
///
|
||||
void newDocument(std::string const & filename, bool fromTemplate);
|
||||
/// write all buffers, asking the user, returns false if cancelled
|
||||
|
Loading…
Reference in New Issue
Block a user