]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiView.cpp
new logo graphics
[lyx.git] / src / frontends / qt4 / GuiView.cpp
index c1e05864bcb0a6a330e74cbf63f785e0d73fc9b1..2a0bac0df389428f115de3ceee5ace60c5c63713 100644 (file)
 #include "BufferView.h"
 #include "Converter.h"
 #include "Cursor.h"
+#include "Encoding.h"
 #include "ErrorList.h"
 #include "Format.h"
 #include "FuncStatus.h"
 #include "FuncRequest.h"
-#include "support/gettext.h"
 #include "Intl.h"
 #include "Layout.h"
 #include "Lexer.h"
@@ -57,6 +57,7 @@
 #include "support/FileFilterList.h"
 #include "support/FileName.h"
 #include "support/filetools.h"
+#include "support/gettext.h"
 #include "support/ForkedCalls.h"
 #include "support/lstrings.h"
 #include "support/os.h"
@@ -112,18 +113,18 @@ public:
        {
                LYXERR(Debug::GUI, "show banner: " << lyxrc.show_banner);
                /// The text to be written on top of the pixmap
-               QString const text = lyx_version ? lyx_version : qt_("unknown version");
+               QString const text = "version " + (lyx_version ? lyx_version : qt_("unknown version"));
                splash_ = QPixmap(":/images/banner.png");
 
                QPainter pain(&splash_);
-               pain.setPen(QColor(255, 255, 0));
+               pain.setPen(QColor(0, 0, 0));
                QFont font;
                // The font used to display the version info
                font.setStyleHint(QFont::SansSerif);
                font.setWeight(QFont::Bold);
                font.setPointSize(int(toqstr(lyxrc.font_sizes[FONT_SIZE_LARGE]).toDouble()));
                pain.setFont(font);
-               pain.drawText(260, 270, text);
+               pain.drawText(190, 225, text);
        }
 
        void paintEvent(QPaintEvent *)
@@ -277,8 +278,13 @@ GuiView::GuiView(int id)
        // GuiToolbars *must* be initialised before the menu bar.
        d.toolbars_ = new GuiToolbars(*this);
 
+       // set ourself as the current view. This is needed for the menu bar
+       // filling, at least for the static special menu item on Mac. Otherwise
+       // they are greyed out.
+       theLyXFunc().setLyXView(this);
+       
        // Fill up the menu bar.
-       guiApp->menus().fillMenuBar(menuBar(), this);
+       guiApp->menus().fillMenuBar(menuBar(), this, true);
 
        setCentralWidget(d.stack_widget_);
 
@@ -294,8 +300,8 @@ GuiView::GuiView(int id)
        // We don't want to keep the window in memory if it is closed.
        setAttribute(Qt::WA_DeleteOnClose, true);
 
-#ifndef Q_WS_MACX
-       // assign an icon to main form. We do not do it under Qt/Mac,
+#ifndef Q_WS_WIN | Q_WS_MACX
+       // assign an icon to main form. We do not do it under Qt/Win or Qt/Mac,
        // since the icon is provided in the application bundle.
        setWindowIcon(QPixmap(":/images/lyx.png"));
 #endif
@@ -331,6 +337,10 @@ GuiView::GuiView(int id)
 
 GuiView::~GuiView()
 {
+       if (guiApp->currentView() == this)
+               guiApp->setCurrentView(0);
+       theLyXFunc().setLyXView(0);
+       
        delete &d;
 }
 
@@ -540,10 +550,10 @@ void GuiView::on_currentWorkAreaChanged(GuiWorkArea * wa)
 
 void GuiView::on_lastWorkAreaRemoved()
 {
-#ifdef Q_WS_MAC
+#ifdef Q_WS_MACX
        // On Mac close the view if there is no Tab open anymore,
        // but only if no splitter is visible
-       if (d.splitter_->count() == 1) {
+       if (!lyxrc.open_buffers_in_tabs && d.splitter_->count() == 1) {
                TabWorkArea * twa = qobject_cast<TabWorkArea *>(d.splitter_->widget(0));
                if (twa && twa->count() == 0) {
                        // close the view, as no tab is open anymore
@@ -595,7 +605,7 @@ bool GuiView::event(QEvent * e)
                        setFocus();
                        return QMainWindow::event(e);
                }
-               guiApp->setCurrentView(*this);
+               guiApp->setCurrentView(this);
                if (d.current_work_area_) {
                        BufferView & bv = d.current_work_area_->bufferView();
                        connectBufferView(bv);
@@ -998,6 +1008,10 @@ FuncStatus GuiView::getStatus(FuncRequest const & cmd)
                flag.setOnOff(d.toolbars_->visible(cmd.getArg(0)));
                break;
 
+       case LFUN_UI_TOGGLE:
+               flag.setOnOff(isFullScreen());
+               break;
+
        case LFUN_DIALOG_TOGGLE:
                flag.setOnOff(isDialogVisible(cmd.getArg(0)));
                // fall through to set "enable"
@@ -1722,10 +1736,10 @@ bool GuiView::dispatch(FuncRequest const & cmd)
                        // We cannot use a for loop as the buffer list cycles.
                        Buffer * b = first;
                        do {
-                               if (b->isClean())
-                                       continue;
-                               saveBuffer(*b);
-                               LYXERR(Debug::ACTION, "Saved " << b->absFileName());
+                               if (!b->isClean()) {
+                                       saveBuffer(*b);
+                                       LYXERR(Debug::ACTION, "Saved " << b->absFileName());
+                               }
                                b = theBufferList().next(b);
                        } while (b != first); 
                        message(_("All documents saved."));
@@ -1933,7 +1947,7 @@ void GuiView::lfunUiToggle(FuncRequest const & cmd)
        }
 #endif
        if (arg != "fullscreen") {
-               message(bformat(_("LFUN_UI_TOGGLE %1$s unknown command!"), from_utf8(arg)));
+               message(bformat("LFUN_UI_TOGGLE " + _("%1$s unknown command!"), from_utf8(arg)));
                return;
        }
 
@@ -1946,7 +1960,7 @@ void GuiView::lfunUiToggle(FuncRequest const & cmd)
 #if QT_VERSION >= 0x040300
                setContentsMargins(0, 0, 0, 0);
 #endif
-               showNormal();
+               setWindowState(windowState() ^ Qt::WindowFullScreen);
                menuBar()->show();
                statusBar()->show();
        } else {
@@ -1955,7 +1969,7 @@ void GuiView::lfunUiToggle(FuncRequest const & cmd)
 #if QT_VERSION >= 0x040300
                setContentsMargins(-2, -2, -2, -2);
 #endif
-               showFullScreen();
+               setWindowState(windowState() ^ Qt::WindowFullScreen);
                statusBar()->hide();
                menuBar()->hide();
        }
@@ -2006,7 +2020,7 @@ char const * const dialognames[] = {
 "citation", "document", "embedding", "errorlist", "ert", "external", "file",
 "findreplace", "float", "graphics", "include", "index", "nomenclature", "label", "log",
 "mathdelimiter", "mathmatrix", "note", "paragraph", "prefs", "print", 
-"ref", "sendto", "spellchecker", "symbols", "tabular", "tabularcreate",
+"ref", "sendto", "space", "spellchecker", "symbols", "tabular", "tabularcreate",
 
 #ifdef HAVE_LIBAIKSAURUS
 "thesaurus",
@@ -2210,6 +2224,7 @@ Dialog * createGuiERT(GuiView & lv);
 Dialog * createGuiExternal(GuiView & lv);
 Dialog * createGuiFloat(GuiView & lv);
 Dialog * createGuiGraphics(GuiView & lv);
+Dialog * createGuiHSpace(GuiView & lv);
 Dialog * createGuiInclude(GuiView & lv);
 Dialog * createGuiLabel(GuiView & lv);
 Dialog * createGuiListings(GuiView & lv);
@@ -2299,6 +2314,8 @@ Dialog * GuiView::build(string const & name)
                return createGuiRef(*this);
        if (name == "sendto")
                return createGuiSendTo(*this);
+       if (name == "space")
+               return createGuiHSpace(*this);
        if (name == "spellchecker")
                return createGuiSpellchecker(*this);
        if (name == "symbols")