#include "GuiApplication.h"
#include "GuiCommandBuffer.h"
#include "GuiCompleter.h"
-#include "GuiWorkArea.h"
#include "GuiKeySymbol.h"
#include "GuiToc.h"
#include "GuiToolbar.h"
+#include "GuiWorkArea.h"
#include "LayoutBox.h"
#include "Menus.h"
#include "TocModel.h"
font.setPointSize(int(toqstr(lyxrc.font_sizes[FONT_SIZE_LARGE]).toDouble()));
pain.setFont(font);
pain.drawText(260, 15, text);
+ setFocusPolicy(Qt::StrongFocus);
}
void paintEvent(QPaintEvent *)
pain.drawPixmap(x, y, splash_);
}
+ void keyPressEvent(QKeyEvent * ev)
+ {
+ KeySymbol sym;
+ setKeySymbol(&sym, ev);
+ if (sym.isOK()) {
+ guiApp->processKeySym(sym, q_key_state(ev->modifiers()));
+ ev->accept();
+ } else {
+ ev->ignore();
+ }
+ }
+
private:
QPixmap splash_;
};
{
stack_widget_->setCurrentWidget(bg_widget_);
bg_widget_->setUpdatesEnabled(true);
+ bg_widget_->setFocus();
}
TabWorkArea * tabWorkArea(int i)
#if (QT_VERSION >= 0x040400)
void setPreviewFuture(QFuture<docstring> const & f)
{
- if (preview_watcher_.isRunning())
- preview_watcher_.waitForFinished();
+ if (preview_watcher_.isRunning()) {
+ // we prefer to cancel this preview in order to keep a snappy
+ // interface.
+ return;
+ }
preview_watcher_.setFuture(f);
}
#endif
dialog->prepareView();
if ((dialog = findOrBuild("view-source", true)))
dialog->prepareView();
+ if ((dialog = findOrBuild("progress", true)))
+ dialog->prepareView();
if (!restoreState(settings.value("layout").toByteArray(), 0))
initToolbars();
if (!tb)
continue;
int const visibility = guiApp->toolbars().defaultVisibility(cit->name);
- bool newline = true;
+ bool newline = !(visibility & Toolbars::SAMEROW);
tb->setVisible(false);
tb->setVisibility(visibility);
if (visibility & Toolbars::BOTTOM) {
// Qt < 4.2.2 cannot handle ToolBarBreak on non-TOP dock.
#if (QT_VERSION >= 0x040202)
- addToolBarBreak(Qt::BottomToolBarArea);
+ if (newline)
+ addToolBarBreak(Qt::BottomToolBarArea);
#endif
addToolBar(Qt::BottomToolBarArea, tb);
}
if (visibility & Toolbars::LEFT) {
// Qt < 4.2.2 cannot handle ToolBarBreak on non-TOP dock.
#if (QT_VERSION >= 0x040202)
- addToolBarBreak(Qt::LeftToolBarArea);
+ if (newline)
+ addToolBarBreak(Qt::LeftToolBarArea);
#endif
addToolBar(Qt::LeftToolBarArea, tb);
}
if (visibility & Toolbars::RIGHT) {
// Qt < 4.2.2 cannot handle ToolBarBreak on non-TOP dock.
#if (QT_VERSION >= 0x040202)
- addToolBarBreak(Qt::RightToolBarArea);
+ if (newline)
+ addToolBarBreak(Qt::RightToolBarArea);
#endif
addToolBar(Qt::RightToolBarArea, tb);
}
void GuiView::setFocus()
{
LYXERR(Debug::DEBUG, "GuiView::setFocus()" << this);
+ QMainWindow::setFocus();
+}
+
+
+void GuiView::focusInEvent(QFocusEvent * e)
+{
+ LYXERR(Debug::DEBUG, "GuiView::focusInEvent()" << this);
+ QMainWindow::focusInEvent(e);
// Make sure LyXFunc points to the correct view.
guiApp->setCurrentView(this);
- QMainWindow::setFocus();
- if (d.current_work_area_)
- d.current_work_area_->setFocus();
+ if (currentMainWorkArea())
+ currentMainWorkArea()->setFocus();
+ else if (currentWorkArea())
+ currentWorkArea()->setFocus();
+ else
+ d.bg_widget_->setFocus();
}
cmd = FuncRequest(LFUN_FILE_OPEN, file);
}
- // Asynchronously post the event. DropEvent usually come
+ // Asynchronously post the event. DropEvent usually comes
// from the BufferView. But reloading a file might close
// the BufferView from within its own event handler.
guiApp->dispatchDelayed(cmd);
void GuiView::updateWindowTitle(GuiWorkArea * wa)
{
- if (wa != d.current_work_area_)
+ if (wa != d.current_work_area_
+ || wa->bufferView().buffer().isInternal())
return;
setWindowTitle(qt_("LyX: ") + wa->windowTitle());
setWindowIconText(wa->windowIconText());
}
}
#endif
-
- if (d.current_work_area_)
- // Nothing special to do.
- return QMainWindow::event(e);
-
- QKeyEvent * ke = static_cast<QKeyEvent*>(e);
- // Let Qt handle menu access and the Tab keys to navigate keys to navigate
- // between controls.
- if (ke->modifiers() & Qt::AltModifier || ke->key() == Qt::Key_Tab
- || ke->key() == Qt::Key_Backtab)
- return QMainWindow::event(e);
-
- // Allow processing of shortcuts that are allowed even when no Buffer
- // is viewed.
- KeySymbol sym;
- setKeySymbol(&sym, ke);
- guiApp->processKeySym(sym, q_key_state(ke->modifiers()));
- e->accept();
- return true;
+ return QMainWindow::event(e);
}
default:
}
+#if (QT_VERSION >= 0x040400)
static docstring saveAndDestroyBuffer(Buffer * buffer, FileName const & fname)
{
bool failed = true;
? _("Automatic save failed!")
: _("Automatic save done.");
}
+#endif
void GuiView::autoSave()
bool GuiView::closeBuffer()
{
GuiWorkArea * wa = currentMainWorkArea();
+ setCurrentWorkArea(wa);
Buffer & buf = wa->bufferView().buffer();
return wa && closeWorkArea(wa, !buf.parent());
}
buf.removeAutosaveFile();
if (hiding)
// revert all changes
- buf.loadLyXFile(buf.fileName());
+ buf.reload();
buf.markClean();
break;
case 2:
void GuiView::reloadBuffer()
{
Buffer * buf = &documentBufferView()->buffer();
- reloadBuffer(buf);
-}
-
-
-void GuiView::reloadBuffer(Buffer * buf)
-{
- FileName filename = buf->fileName();
- Buffer const * master = buf->masterBuffer();
- bool const is_child = master != buf;
- // 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(buf);
- buf = loadDocument(filename);
- docstring const disp_fn = makeDisplayPath(filename.absFilename());
- docstring str;
- if (buf) {
- // re-allocate master if necessary
- if (is_child && theBufferList().isLoaded(master)
- && buf->masterBuffer() != master)
- buf->setParent(master);
- buf->updateLabels();
- setBuffer(buf);
- buf->errors("Parse");
- str = bformat(_("Document %1$s reloaded."), disp_fn);
- } else {
- str = bformat(_("Could not reload document %1$s"), disp_fn);
- }
- message(str);
+ buf->reload();
}
int const ret = Alert::prompt(_("Reload externally changed document?"),
text, 0, 1, _("&Reload"), _("&Cancel"));
if (!ret)
- reloadBuffer(*bit);
+ (*bit)->reload();
}
}
}
break;
if (buffer->lyxvc().inUse() && !buffer->isReadonly()) {
msg = buffer->lyxvc().checkIn();
- reloadBuffer();
+ if (!msg.empty())
+ reloadBuffer();
}
break;
}
+#if (QT_VERSION >= 0x040400)
static docstring exportAndDestroy(Buffer * buffer, string const & format)
{
- bool const success = buffer->doExport(format, true);
+ bool const update_unincluded =
+ buffer->params().maintain_unincluded_children
+ && !buffer->params().getIncludedChildren().empty();
+ bool const success = buffer->doExport(format, true, update_unincluded);
delete buffer;
return success
? bformat(_("Successful export to format: %1$s"), from_utf8(format))
static docstring previewAndDestroy(Buffer * buffer, string const & format)
{
- bool const success = buffer->preview(format);
+ bool const update_unincluded =
+ buffer->params().maintain_unincluded_children
+ && !buffer->params().getIncludedChildren().empty();
+ bool const success = buffer->preview(format, update_unincluded);
delete buffer;
return success
? bformat(_("Successful preview of format: %1$s"), from_utf8(format))
: bformat(_("Error previewing format: %1$s"), from_utf8(format));
}
+#endif
bool GuiView::dispatch(FuncRequest const & cmd)
if (argument.empty())
format = doc_buffer->getDefaultOutputFormat();
#if EXPORT_in_THREAD && (QT_VERSION >= 0x040400)
- ProgressInterface::instance()->clearMessages();
- ProgressInterface::instance()->appendMessage("Exporting ...");
+ d.progress_->clearMessages();
+ message(_("Exporting ..."));
QFuture<docstring> f = QtConcurrent::run(exportAndDestroy,
doc_buffer->clone(), format);
d.setPreviewFuture(f);
#else
- doc_buffer->doExport(format, true);
+ bool const update_unincluded =
+ doc_buffer->params().maintain_unincluded_children
+ && !doc_buffer->params().getIncludedChildren().empty();
+ doc_buffer->doExport(format, true, update_unincluded);
#endif
break;
}
if (argument.empty())
format = doc_buffer->getDefaultOutputFormat();
#if EXPORT_in_THREAD && (QT_VERSION >= 0x040400)
- ProgressInterface::instance()->clearMessages();
- ProgressInterface::instance()->appendMessage("Previewing ...");
+ d.progress_->clearMessages();
+ message(_("Previewing ..."));
QFuture<docstring> f = QtConcurrent::run(previewAndDestroy,
doc_buffer->clone(), format);
d.setPreviewFuture(f);
#else
- doc_buffer->preview(format);
+ bool const update_unincluded =
+ doc_buffer->params().maintain_unincluded_children
+ && !doc_buffer->params().getIncludedChildren().empty();
+ doc_buffer->preview(format, update_unincluded);
#endif
break;
}
master->clone(), format);
d.setPreviewFuture(f);
#else
+ bool const update_unincluded =
+ master->params().maintain_unincluded_children
+ && !master->params().getIncludedChildren().empty();
master->doExport(format, true);
#endif
break;
for(; it != end; ++it) {
Dialog * dialog = it->second.get();
- if (dialog && dialog->isVisibleView())
- dialog->checkStatus();
+ if (dialog) {
+ if (dialog->isBufferDependent() && !documentBufferView())
+ hideDialog(fromqstr(dialog->name()), 0);
+ else if (dialog->isVisibleView())
+ dialog->checkStatus();
+ }
}
updateToolbars();
updateLayoutList();