#include "GuiView.h"
#include "Dialog.h"
-#include "frontends/FileDialog.h"
+#include "FileDialog.h"
#include "GuiApplication.h"
#include "GuiWorkArea.h"
#include "GuiKeySymbol.h"
#include <QDropEvent>
#include <QList>
#include <QMenu>
+#include <QMenuBar>
#include <QPainter>
#include <QPixmap>
#include <QPoint>
#include <QTimer>
#include <QToolBar>
#include <QUrl>
+#include <QScrollBar>
#include <boost/assert.hpp>
#include <boost/bind.hpp>
using namespace lyx::support;
namespace lyx {
-
-extern bool quitting;
-
namespace frontend {
namespace {
// The first TabWorkArea is always the first one, if any.
return tabWorkArea(0);
- TabWorkArea * tab_widget = 0;
for (int i = 0; i != splitter_->count(); ++i) {
- QWidget * w = splitter_->widget(i);
- if (!w->hasFocus())
- continue;
- tab_widget = dynamic_cast<TabWorkArea *>(w);
- if (tab_widget)
- break;
+ TabWorkArea * twa = tabWorkArea(i);
+ if (current_work_area_ == twa->currentWorkArea())
+ return twa;
}
- return tab_widget;
+ // None has the focus so we just take the first one.
+ return tabWorkArea(0);
}
public:
// Make sure that no LFUN use this close to be closed View.
theLyXFunc().setLyXView(0);
+
+ // Save toolbars configuration
+ if (isFullScreen()) {
+ d.toolbars_->toggleFullScreen(!isFullScreen());
+ updateToolbars();
+ }
+
// Make sure the timer time out will not trigger a statusbar update.
d.statusbar_timer_.stop();
- if (lyxrc.allow_geometry_session) {
+ // Saving fullscreen requires additional tweaks in the toolbar code.
+ // It wouldn't also work under linux natively.
+ if (lyxrc.allow_geometry_session && !isFullScreen()) {
QSettings settings;
QString const key = "view-" + QString::number(id_);
#ifdef Q_WS_X11
if (d.statusbar_timer_.isActive())
return;
+ theLyXFunc().setLyXView(this);
statusBar()->showMessage(toqstr(theLyXFunc().viewStatusMessage()));
}
// The document structure, name and dialogs might have
// changed in another view.
updateBufferDependent(true);
+ updateToolbars();
+ updateLayoutList();
+ updateStatusBar();
} else {
setWindowTitle(qt_("LyX"));
setWindowIconText(qt_("LyX"));
}
+ setFocus();
return QMainWindow::event(e);
}
GuiWorkArea * GuiView::workArea(Buffer & buffer)
{
- for (int i = 0; i != d.splitter_->count(); ++i) {
- GuiWorkArea * wa = d.tabWorkArea(i)->workArea(buffer);
- if (wa)
- return wa;
- }
+ if (TabWorkArea * twa = d.currentTabWorkArea())
+ return twa->workArea(buffer);
return 0;
}
GuiWorkArea * GuiView::addWorkArea(Buffer & buffer)
{
-
// Automatically create a TabWorkArea if there are none yet.
- if (!d.splitter_->count())
- addTabWorkArea();
-
- TabWorkArea * tab_widget = d.currentTabWorkArea();
+ TabWorkArea * tab_widget = d.splitter_->count()
+ ? d.currentTabWorkArea() : addTabWorkArea();
return tab_widget->addWorkArea(buffer, *this);
}
-void GuiView::addTabWorkArea()
+TabWorkArea * GuiView::addTabWorkArea()
{
TabWorkArea * twa = new TabWorkArea;
QObject::connect(twa, SIGNAL(currentWorkAreaChanged(GuiWorkArea *)),
this, SLOT(on_currentWorkAreaChanged(GuiWorkArea *)));
d.splitter_->addWidget(twa);
d.stack_widget_->setCurrentWidget(d.splitter_);
+ return twa;
}
enable = buf;
break;
+ case LFUN_SPLIT_VIEW:
+ enable = buf;
+ break;
+
+ case LFUN_CLOSE_TAB_GROUP:
+ enable = d.currentTabWorkArea();
+ break;
+
case LFUN_TOOLBAR_TOGGLE:
flag.setOnOff(d.toolbars_->visible(cmd.getArg(0)));
break;
enable = ic != ERT_CODE && ic != LISTINGS_CODE;
}
}
+ else if (name == "symbols") {
+ if (!view() || view()->cursor().inMathed())
+ enable = false;
+ else {
+ InsetCode ic = view()->cursor().inset().lyxCode();
+ enable = ic != ERT_CODE && ic != LISTINGS_CODE;
+ }
+ }
else if (name == "latexlog")
enable = FileName(buf->logName()).isReadableFile();
else if (name == "spellchecker")
}
// FIXME: clean that
-static bool import(LyXView * lv, FileName const & filename,
- string const & format, ErrorList & errorList)
+static bool import(GuiView * lv, FileName const & filename,
+ string const & format, ErrorList & errorList)
{
- docstring const displaypath = makeDisplayPath(filename.absFilename());
- lv->message(bformat(_("Importing %1$s..."), displaypath));
-
FileName const lyxfile(changeExtension(filename.absFilename(), ".lyx"));
string loader_format;
if (find(loaders.begin(), loaders.end(), format) == loaders.end()) {
for (vector<string>::const_iterator it = loaders.begin();
it != loaders.end(); ++it) {
- if (theConverters().isReachable(format, *it)) {
- string const tofile =
- changeExtension(filename.absFilename(),
- formats.extension(*it));
- if (!theConverters().convert(0, filename, FileName(tofile),
- filename, format, *it, errorList))
- return false;
- loader_format = *it;
- break;
- }
+ if (!theConverters().isReachable(format, *it))
+ continue;
+
+ string const tofile =
+ changeExtension(filename.absFilename(),
+ formats.extension(*it));
+ if (!theConverters().convert(0, filename, FileName(tofile),
+ filename, format, *it, errorList))
+ return false;
+ loader_format = *it;
+ break;
}
if (loader_format.empty()) {
frontend::Alert::error(_("Couldn't import file"),
formats.prettyName(format)));
return false;
}
- } else {
+ } else
loader_format = format;
- }
if (loader_format == "lyx") {
Buffer * buf = lv->loadDocument(lyxfile);
- if (!buf) {
- // we are done
- lv->message(_("file not imported!"));
+ if (!buf)
return false;
- }
updateLabels(*buf);
lv->setBuffer(buf);
buf->errors("Parse");
} else {
Buffer * const b = newFile(lyxfile.absFilename(), string(), true);
- if (b)
- lv->setBuffer(b);
- else
+ if (!b)
return false;
+ lv->setBuffer(b);
bool as_paragraphs = loader_format == "textparagraph";
string filename2 = (loader_format == format) ? filename.absFilename()
: changeExtension(filename.absFilename(),
lyx::dispatch(FuncRequest(LFUN_MARK_OFF));
}
- // we are done
- lv->message(_("imported."));
return true;
}
}
}
+ docstring const displaypath = makeDisplayPath(lyxfile.absFilename(), 30);
+
// if the file exists already, and we didn't do
// -i lyx thefile.lyx, warn
if (lyxfile.exists() && fullname != lyxfile) {
- docstring const file = makeDisplayPath(lyxfile.absFilename(), 30);
docstring text = bformat(_("The document %1$s already exists.\n\n"
- "Do you want to overwrite that document?"), file);
+ "Do you want to overwrite that document?"), displaypath);
int const ret = Alert::prompt(_("Overwrite document?"),
text, 0, 1, _("&Overwrite"), _("&Cancel"));
}
}
+ message(bformat(_("Importing %1$s..."), displaypath));
ErrorList errorList;
- import(this, fullname, format, errorList);
+ if (import(this, fullname, format, errorList))
+ message(_("imported."));
+ else
+ message(_("file not imported!"));
+
// FIXME (Abdel 12/08/06): Is there a need to display the error list here?
}
string const data = "vc " +
Lexer::quoteString(buffer()->lyxvc().getLogFile());
showDialog("log", data);
+ } else if (name == "symbols") {
+ data = bv->cursor().getEncoding()->name();
+ if (!data.empty())
+ showDialog("symbols", data);
} else
showDialog(name, data);
break;
break;
}
+ case LFUN_UI_TOGGLE:
+ lfunUiToggle(cmd);
+ // Make sure the keyboard focus stays in the work area.
+ setFocus();
+ break;
+
+ case LFUN_SPLIT_VIEW:
+ if (Buffer * buf = buffer()) {
+ string const orientation = cmd.getArg(0);
+ d.splitter_->setOrientation(orientation == "vertical"
+ ? Qt::Vertical : Qt::Horizontal);
+ TabWorkArea * twa = addTabWorkArea();
+ GuiWorkArea * wa = twa->addWorkArea(*buf, *this);
+ setCurrentWorkArea(wa);
+ }
+ break;
+
+ case LFUN_CLOSE_TAB_GROUP:
+ if (TabWorkArea * twa = d.currentTabWorkArea()) {
+ delete twa;
+ twa = d.currentTabWorkArea();
+ // Switch to the next GuiWorkArea in the found TabWorkArea.
+ d.current_work_area_ = twa? twa->currentWorkArea() : 0;
+ if (d.splitter_->count() == 0)
+ // No more work area, switch to the background widget.
+ d.setBackground();
+ }
+ break;
+
default:
return false;
}
}
+void GuiView::lfunUiToggle(FuncRequest const & cmd)
+{
+ string const arg = cmd.getArg(0);
+ if (arg == "scrollbar") {
+ // hide() is of no help
+ if (d.current_work_area_->verticalScrollBarPolicy() ==
+ Qt::ScrollBarAlwaysOff)
+
+ d.current_work_area_->setVerticalScrollBarPolicy(
+ Qt::ScrollBarAsNeeded);
+ else
+ d.current_work_area_->setVerticalScrollBarPolicy(
+ Qt::ScrollBarAlwaysOff);
+ return;
+ }
+ if (arg == "statusbar") {
+ statusBar()->setVisible(!statusBar()->isVisible());
+ return;
+ }
+ if (arg == "menubar") {
+ menuBar()->setVisible(!menuBar()->isVisible());
+ return;
+ }
+#if QT_VERSION >= 0x040300
+ if (arg == "frame") {
+ int l, t, r, b;
+ getContentsMargins(&l, &t, &r, &b);
+ //are the frames in default state?
+ if (l == 0) {
+ d.current_work_area_->setFrameStyle(QFrame::NoFrame);
+ setContentsMargins(-2, -2, -2, -2);
+ } else {
+ d.current_work_area_->setFrameStyle(QFrame::NoFrame);
+ setContentsMargins(0, 0, 0, 0);
+ }
+ return;
+ }
+#endif
+ if (arg != "fullscreen") {
+ message(bformat(_("LFUN_UI_TOGGLE %1$s unknown command!"), from_utf8(arg)));
+ return;
+ }
+
+ if (lyxrc.full_screen_toolbars)
+ d.toolbars_->toggleFullScreen(!isFullScreen());
+
+ if (isFullScreen()) {
+ for (int i = 0; i != d.splitter_->count(); ++i)
+ d.tabWorkArea(i)->setFullScreen(false);
+#if QT_VERSION >= 0x040300
+ setContentsMargins(0, 0, 0, 0);
+#endif
+ showNormal();
+ menuBar()->show();
+ statusBar()->show();
+ } else {
+ for (int i = 0; i != d.splitter_->count(); ++i)
+ d.tabWorkArea(i)->setFullScreen(true);
+#if QT_VERSION >= 0x040300
+ setContentsMargins(-2, -2, -2, -2);
+#endif
+ showFullScreen();
+ statusBar()->hide();
+ menuBar()->hide();
+ }
+}
+
+
Buffer const * GuiView::updateInset(Inset const * inset)
{
if (!d.current_work_area_)
"aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character",
"citation", "document", "embedding", "errorlist", "ert", "external", "file",
"findreplace", "float", "graphics", "include", "index", "nomenclature", "label", "log",
-"mathdelimiter", "mathmatrix", "note", "paragraph",
-"prefs", "print", "ref", "sendto", "spellchecker","tabular", "tabularcreate",
+"mathdelimiter", "mathmatrix", "note", "paragraph", "prefs", "print",
+"ref", "sendto", "spellchecker", "symbols", "tabular", "tabularcreate",
#ifdef HAVE_LIBAIKSAURUS
"thesaurus",
Dialog * createGuiFloat(GuiView & lv);
Dialog * createGuiGraphics(GuiView & lv);
Dialog * createGuiInclude(GuiView & lv);
-Dialog * createGuiIndex(GuiView & lv);
Dialog * createGuiLabel(GuiView & lv);
Dialog * createGuiListings(GuiView & lv);
Dialog * createGuiLog(GuiView & lv);
Dialog * createGuiSendTo(GuiView & lv);
Dialog * createGuiShowFile(GuiView & lv);
Dialog * createGuiSpellchecker(GuiView & lv);
+Dialog * createGuiSymbols(GuiView & lv);
Dialog * createGuiTabularCreate(GuiView & lv);
Dialog * createGuiTabular(GuiView & lv);
Dialog * createGuiTexInfo(GuiView & lv);
return createGuiGraphics(*this);
if (name == "include")
return createGuiInclude(*this);
- if (name == "index")
- return createGuiIndex(*this);
if (name == "nomenclature")
return createGuiNomenclature(*this);
if (name == "label")
return createGuiSendTo(*this);
if (name == "spellchecker")
return createGuiSpellchecker(*this);
+ if (name == "symbols")
+ return createGuiSymbols(*this);
if (name == "tabular")
return createGuiTabular(*this);
if (name == "tabularcreate")