mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Split LyXFunc::menuNew() into LyXView::newDocument() and buffer_funcs::newUnnamedFile().
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22002 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
863aebb177
commit
acbb1c9b8c
@ -901,12 +901,12 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
|||||||
|
|
||||||
// --- Menus -----------------------------------------------
|
// --- Menus -----------------------------------------------
|
||||||
case LFUN_BUFFER_NEW:
|
case LFUN_BUFFER_NEW:
|
||||||
menuNew(argument, false);
|
lyx_view_->newDocument(argument, false);
|
||||||
updateFlags = Update::None;
|
updateFlags = Update::None;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LFUN_BUFFER_NEW_TEMPLATE:
|
case LFUN_BUFFER_NEW_TEMPLATE:
|
||||||
menuNew(argument, true);
|
lyx_view_->newDocument(argument, true);
|
||||||
updateFlags = Update::None;
|
updateFlags = Update::None;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1868,58 +1868,6 @@ void LyXFunc::sendDispatchMessage(docstring const & msg, FuncRequest const & cmd
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LyXFunc::menuNew(string const & name, bool fromTemplate)
|
|
||||||
{
|
|
||||||
// FIXME: initpath is not used. What to do?
|
|
||||||
string initpath = lyxrc.document_path;
|
|
||||||
string filename(name);
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int newfile_number;
|
|
||||||
|
|
||||||
if (filename.empty()) {
|
|
||||||
filename = addName(lyxrc.document_path,
|
|
||||||
"newfile" + convert<string>(++newfile_number) + ".lyx");
|
|
||||||
while (theBufferList().exists(filename) ||
|
|
||||||
FileName(filename).isReadableFile()) {
|
|
||||||
++newfile_number;
|
|
||||||
filename = addName(lyxrc.document_path,
|
|
||||||
"newfile" + convert<string>(newfile_number) +
|
|
||||||
".lyx");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The template stuff
|
|
||||||
string templname;
|
|
||||||
if (fromTemplate) {
|
|
||||||
FileDialog dlg(_("Select template file"));
|
|
||||||
dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
|
|
||||||
dlg.setButton1(_("Templates|#T#t"), from_utf8(lyxrc.template_path));
|
|
||||||
|
|
||||||
FileDialog::Result result =
|
|
||||||
dlg.open(from_utf8(lyxrc.template_path),
|
|
||||||
FileFilterList(_("LyX Documents (*.lyx)")),
|
|
||||||
docstring());
|
|
||||||
|
|
||||||
if (result.first == FileDialog::Later)
|
|
||||||
return;
|
|
||||||
if (result.second.empty())
|
|
||||||
return;
|
|
||||||
templname = to_utf8(result.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
Buffer * const b = newFile(filename, templname, !name.empty());
|
|
||||||
if (b)
|
|
||||||
lyx_view_->setBuffer(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Buffer * LyXFunc::loadAndViewFile(FileName const & filename, bool tolastfiles)
|
Buffer * LyXFunc::loadAndViewFile(FileName const & filename, bool tolastfiles)
|
||||||
{
|
{
|
||||||
lyx_view_->setBusy(true);
|
lyx_view_->setBusy(true);
|
||||||
|
@ -120,9 +120,6 @@ private:
|
|||||||
void sendDispatchMessage(docstring const & msg,
|
void sendDispatchMessage(docstring const & msg,
|
||||||
FuncRequest const & ev);
|
FuncRequest const & ev);
|
||||||
|
|
||||||
// I think the following should be moved to BufferView. (Asger)
|
|
||||||
///
|
|
||||||
void menuNew(std::string const & argument, bool fromTemplate);
|
|
||||||
///
|
///
|
||||||
void open(std::string const &);
|
void open(std::string const &);
|
||||||
///
|
///
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "insets/InsetBibitem.h"
|
#include "insets/InsetBibitem.h"
|
||||||
#include "insets/InsetInclude.h"
|
#include "insets/InsetInclude.h"
|
||||||
|
|
||||||
|
#include "support/convert.h"
|
||||||
#include "support/debug.h"
|
#include "support/debug.h"
|
||||||
#include "support/filetools.h"
|
#include "support/filetools.h"
|
||||||
#include "support/gettext.h"
|
#include "support/gettext.h"
|
||||||
@ -55,6 +56,7 @@ namespace lyx {
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
using support::addName;
|
||||||
using support::bformat;
|
using support::bformat;
|
||||||
using support::FileName;
|
using support::FileName;
|
||||||
using support::libFileSearch;
|
using support::libFileSearch;
|
||||||
@ -146,6 +148,23 @@ Buffer * newFile(string const & filename, string const & templatename,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Buffer * newUnnamedFile(string const & templatename, FileName const & path)
|
||||||
|
{
|
||||||
|
static int newfile_number;
|
||||||
|
|
||||||
|
string document_path = path.absFilename();
|
||||||
|
string filename = addName(document_path,
|
||||||
|
"newfile" + convert<string>(++newfile_number) + ".lyx");
|
||||||
|
while (theBufferList().exists(filename)
|
||||||
|
|| FileName(filename).isReadableFile()) {
|
||||||
|
++newfile_number;
|
||||||
|
filename = addName(document_path,
|
||||||
|
"newfile" + convert<string>(newfile_number) + ".lyx");
|
||||||
|
}
|
||||||
|
return newFile(filename, templatename, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int countWords(DocIterator const & from, DocIterator const & to)
|
int countWords(DocIterator const & from, DocIterator const & to)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
@ -35,6 +35,12 @@ Buffer * checkAndLoadLyXFile(support::FileName const & filename);
|
|||||||
Buffer * newFile(std::string const & filename, std::string const & templatename,
|
Buffer * newFile(std::string const & filename, std::string const & templatename,
|
||||||
bool isNamed = false);
|
bool isNamed = false);
|
||||||
|
|
||||||
|
/** Make a new unnamed file (buffer) based on a template
|
||||||
|
* named \c templatename
|
||||||
|
*/
|
||||||
|
Buffer * newUnnamedFile(std::string const & templatename,
|
||||||
|
support::FileName const & path);
|
||||||
|
|
||||||
/// Count the number of words in the text between these two iterators
|
/// Count the number of words in the text between these two iterators
|
||||||
int countWords(DocIterator const & from, DocIterator const & to);
|
int countWords(DocIterator const & from, DocIterator const & to);
|
||||||
|
|
||||||
|
@ -67,6 +67,9 @@ public:
|
|||||||
virtual void setBuffer(Buffer * b) = 0; ///< \c Buffer to set.
|
virtual void setBuffer(Buffer * b) = 0; ///< \c Buffer to set.
|
||||||
///
|
///
|
||||||
virtual bool closeBuffer() = 0;
|
virtual bool closeBuffer() = 0;
|
||||||
|
///
|
||||||
|
virtual void newDocument(std::string const & filename,
|
||||||
|
bool fromTemplate) = 0;
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
@ -1032,6 +1032,54 @@ FuncStatus GuiView::getStatus(FuncRequest const & cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static FileName selectTemplateFile()
|
||||||
|
{
|
||||||
|
FileDialog dlg(_("Select template file"));
|
||||||
|
dlg.setButton1(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
|
||||||
|
dlg.setButton1(_("Templates|#T#t"), from_utf8(lyxrc.template_path));
|
||||||
|
|
||||||
|
FileDialog::Result result =
|
||||||
|
dlg.open(from_utf8(lyxrc.template_path),
|
||||||
|
FileFilterList(_("LyX Documents (*.lyx)")),
|
||||||
|
docstring());
|
||||||
|
|
||||||
|
if (result.first == FileDialog::Later)
|
||||||
|
return FileName();
|
||||||
|
if (result.second.empty())
|
||||||
|
return FileName();
|
||||||
|
return FileName(to_utf8(result.second));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GuiView::newDocument(string const & filename, bool from_template)
|
||||||
|
{
|
||||||
|
FileName initpath;
|
||||||
|
Buffer * buf = buffer();
|
||||||
|
if (buf) {
|
||||||
|
FileName const trypath(buf->filePath());
|
||||||
|
// If directory is writeable, use this as default.
|
||||||
|
if (trypath.isDirWritable())
|
||||||
|
initpath = trypath;
|
||||||
|
} else
|
||||||
|
initpath.set(lyxrc.document_path);
|
||||||
|
|
||||||
|
// FIXME: Up to now initpath was unconditionally set to the user document
|
||||||
|
// path. Is it what we want? If yes, erase the code above.
|
||||||
|
initpath.set(lyxrc.document_path);
|
||||||
|
|
||||||
|
string templatefile = from_template ?
|
||||||
|
selectTemplateFile().absFilename() : string();
|
||||||
|
Buffer * b;
|
||||||
|
if (filename.empty())
|
||||||
|
b = newUnnamedFile(templatefile, initpath);
|
||||||
|
else
|
||||||
|
b = newFile(filename, templatefile, true);
|
||||||
|
|
||||||
|
if (b)
|
||||||
|
setBuffer(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void GuiView::insertLyXFile(docstring const & fname)
|
void GuiView::insertLyXFile(docstring const & fname)
|
||||||
{
|
{
|
||||||
BufferView * bv = view();
|
BufferView * bv = view();
|
||||||
|
@ -89,6 +89,8 @@ public:
|
|||||||
void setBuffer(Buffer * b); ///< \c Buffer to set.
|
void setBuffer(Buffer * b); ///< \c Buffer to set.
|
||||||
///
|
///
|
||||||
bool closeBuffer();
|
bool closeBuffer();
|
||||||
|
///
|
||||||
|
void newDocument(std::string const & filename, bool fromTemplate);
|
||||||
/// write all buffers, asking the user, returns false if cancelled
|
/// write all buffers, asking the user, returns false if cancelled
|
||||||
bool quitWriteAll();
|
bool quitWriteAll();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user