#include "FileDialog.h"
#include "FontLoader.h"
#include "GuiApplication.h"
+#include "GuiClickableLabel.h"
#include "GuiCommandBuffer.h"
#include "GuiCompleter.h"
#include "GuiKeySymbol.h"
#include "FuncStatus.h"
#include "FuncRequest.h"
#include "Intl.h"
+#include "Language.h"
#include "Layout.h"
+#include "LayoutFile.h"
#include "Lexer.h"
#include "LyXAction.h"
#include "LyX.h"
}
qreal fontSize() const {
- return toqstr(lyxrc.font_sizes[FONT_SIZE_NORMAL]).toDouble();
+ return toqstr(lyxrc.font_sizes[NORMAL_SIZE]).toDouble();
}
QPointF textPosition(bool const heading) const {
setAcceptDrops(true);
// add busy indicator to statusbar
- QLabel * busylabel = new QLabel(statusBar());
+ GuiClickableLabel * busylabel = new GuiClickableLabel(statusBar());
statusBar()->addPermanentWidget(busylabel);
search_mode mode = theGuiApp()->imageSearchMode();
QString fn = toqstr(lyx::libFileSearch("images", "busy", "gif", mode).absFileName());
busylabel, SLOT(show()));
connect(&d.processing_thread_watcher_, SIGNAL(finished()),
busylabel, SLOT(hide()));
+ connect(busylabel, SIGNAL(clicked()), this, SLOT(checkCancelBackground()));
QFontMetrics const fm(statusBar()->fontMetrics());
int const iconheight = max(int(d.normalIconSize), fm.height());
}
+void GuiView::checkCancelBackground()
+{
+ docstring const ttl = _("Cancel Export?");
+ docstring const msg = _("Do you want to cancel the background export process?");
+ int const ret =
+ Alert::prompt(ttl, msg, 1, 1,
+ _("&Cancel export"), _("Co&ntinue"));
+ if (ret == 0)
+ Systemcall::killscript();
+}
+
+
QVector<GuiWorkArea*> GuiView::GuiViewPrivate::guiWorkAreas()
{
QVector<GuiWorkArea*> areas;
}
// fall through
case LFUN_BUFFER_WRITE_AS:
+ case LFUN_BUFFER_WRITE_AS_TEMPLATE:
enable = doc_buffer != 0;
break;
}
-void GuiView::insertLyXFile(docstring const & fname)
+void GuiView::insertLyXFile(docstring const & fname, bool ignorelang)
{
BufferView * bv = documentBufferView();
if (!bv)
}
}
- bv->insertLyXFile(filename);
+ bv->insertLyXFile(filename, ignorelang);
bv->buffer().errors("Parse");
}
+string const GuiView::getTemplatesPath(Buffer & b)
+{
+ // We start off with the user's templates path
+ string result = addPath(package().user_support().absFileName(), "templates");
+ // Check for the document language
+ string const langcode = b.params().language->code();
+ string const shortcode = langcode.substr(0, 2);
+ if (!langcode.empty() && shortcode != "en") {
+ string subpath = addPath(result, shortcode);
+ string subpath_long = addPath(result, langcode);
+ // If we have a subdirectory for the language already,
+ // navigate there
+ FileName sp = FileName(subpath);
+ if (sp.isDirectory())
+ result = subpath;
+ else if (FileName(subpath_long).isDirectory())
+ result = subpath_long;
+ else {
+ // Ask whether we should create such a subdirectory
+ docstring const text =
+ bformat(_("It is suggested to save the template in a subdirectory\n"
+ "appropriate to the document language (%1$s).\n"
+ "This subdirectory does not exists yet.\n"
+ "Do you want to create it?"),
+ _(b.params().language->display()));
+ if (Alert::prompt(_("Create Language Directory?"),
+ text, 0, 1, _("&Yes, Create"), _("&No, Save Template in Parent Directory")) == 0) {
+ // If the user agreed, we try to create it and report if this failed.
+ if (!sp.createDirectory(0777))
+ Alert::error(_("Subdirectory creation failed!"),
+ _("Could not create subdirectory.\n"
+ "The template will be saved in the parent directory."));
+ else
+ result = subpath;
+ }
+ }
+ }
+ // Do we have a layout category?
+ string const cat = b.params().baseClass() ?
+ b.params().baseClass()->category()
+ : string();
+ if (!cat.empty()) {
+ string subpath = addPath(result, cat);
+ // If we have a subdirectory for the category already,
+ // navigate there
+ FileName sp = FileName(subpath);
+ if (sp.isDirectory())
+ result = subpath;
+ else {
+ // Ask whether we should create such a subdirectory
+ docstring const text =
+ bformat(_("It is suggested to save the template in a subdirectory\n"
+ "appropriate to the layout category (%1$s).\n"
+ "This subdirectory does not exists yet.\n"
+ "Do you want to create it?"),
+ _(cat));
+ if (Alert::prompt(_("Create Category Directory?"),
+ text, 0, 1, _("&Yes, Create"), _("&No, Save Template in Parent Directory")) == 0) {
+ // If the user agreed, we try to create it and report if this failed.
+ if (!sp.createDirectory(0777))
+ Alert::error(_("Subdirectory creation failed!"),
+ _("Could not create subdirectory.\n"
+ "The template will be saved in the parent directory."));
+ else
+ result = subpath;
+ }
+ }
+ }
+ return result;
+}
+
+
bool GuiView::renameBuffer(Buffer & b, docstring const & newname, RenameKind kind)
{
FileName fname = b.fileName();
FileName const oldname = fname;
+ bool const as_template = (kind == LV_WRITE_AS_TEMPLATE);
if (!newname.empty()) {
// FIXME UNICODE
- fname = support::makeAbsPath(to_utf8(newname), oldname.onlyPath().absFileName());
+ if (as_template)
+ fname = support::makeAbsPath(to_utf8(newname), getTemplatesPath(b));
+ else
+ fname = support::makeAbsPath(to_utf8(newname),
+ oldname.onlyPath().absFileName());
} else {
// Switch to this Buffer.
setBuffer(&b);
// No argument? Ask user through dialog.
// FIXME UNICODE
- FileDialog dlg(qt_("Choose a filename to save document as"));
+ QString const title = as_template ? qt_("Choose a filename to save template as")
+ : qt_("Choose a filename to save document as");
+ FileDialog dlg(title);
dlg.setButton1(qt_("D&ocuments"), toqstr(lyxrc.document_path));
dlg.setButton2(qt_("&Templates"), toqstr(lyxrc.template_path));
if (!isLyXFileName(fname.absFileName()))
fname.changeExtension(".lyx");
+ string const path = as_template ?
+ getTemplatesPath(b)
+ : fname.onlyPath().absFileName();
FileDialog::Result result =
- dlg.save(toqstr(fname.onlyPath().absFileName()),
+ dlg.save(toqstr(path),
QStringList(qt_("LyX Documents (*.lyx)")),
toqstr(fname.onlyFileName()));
break;
}
case LV_WRITE_AS:
+ case LV_WRITE_AS_TEMPLATE:
break;
}
// LyXVC created the file already in case of LV_VC_RENAME or
menu->exec(QCursor::pos());
break;
- case LFUN_FILE_INSERT:
- insertLyXFile(cmd.argument());
+ case LFUN_FILE_INSERT: {
+ if (cmd.getArg(1) == "ignorelang")
+ insertLyXFile(from_utf8(cmd.getArg(0)), true);
+ else
+ insertLyXFile(cmd.argument());
break;
+ }
case LFUN_FILE_INSERT_PLAINTEXT:
case LFUN_FILE_INSERT_PLAINTEXT_PARA: {
renameBuffer(*doc_buffer, cmd.argument());
break;
+ case LFUN_BUFFER_WRITE_AS_TEMPLATE:
+ LASSERT(doc_buffer, break);
+ renameBuffer(*doc_buffer, cmd.argument(),
+ LV_WRITE_AS_TEMPLATE);
+ break;
+
case LFUN_BUFFER_WRITE_ALL: {
Buffer * first = theBufferList().first();
if (!first)