]> git.lyx.org Git - features.git/blobdiff - src/frontends/qt4/GuiView.cpp
* InsetTabular cleanup:
[features.git] / src / frontends / qt4 / GuiView.cpp
index 76abfc49ed84e4349e9606923e4e547cbf0b1005..d440b6c114d52b88cb8669ba888c6e5209edddd5 100644 (file)
@@ -51,7 +51,6 @@
 #include "Layout.h"
 #include "Lexer.h"
 #include "LyXAction.h"
-#include "LyXFunc.h"
 #include "LyX.h"
 #include "LyXRC.h"
 #include "LyXVC.h"
@@ -507,7 +506,6 @@ GuiToolbar * GuiView::toolbar(string const & name)
                return it->second;
 
        LYXERR(Debug::GUI, "Toolbar::display: no toolbar named " << name);
-       message(bformat(_("Unknown toolbar \"%1$s\""), from_utf8(name)));
        return 0;
 }
 
@@ -603,7 +601,7 @@ void GuiView::focusInEvent(QFocusEvent * e)
 {
        LYXERR(Debug::DEBUG, "GuiView::focusInEvent()" << this);
        QMainWindow::focusInEvent(e);
-       // Make sure LyXFunc points to the correct view.
+       // Make sure guiApp points to the correct view.
        guiApp->setCurrentView(this);
        if (currentMainWorkArea())
                currentMainWorkArea()->setFocus();
@@ -1441,10 +1439,18 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                enable = d.currentTabWorkArea();
                break;
 
-       case LFUN_TOOLBAR_TOGGLE:
-               if (GuiToolbar * t = toolbar(cmd.getArg(0)))
+       case LFUN_TOOLBAR_TOGGLE: {
+               string const name = cmd.getArg(0);
+               if (GuiToolbar * t = toolbar(name))
                        flag.setOnOff(t->isVisible());
+               else {
+                       enable = false;
+                       docstring const msg = 
+                               bformat(_("Unknown toolbar \"%1$s\""), from_utf8(name));
+                       flag.message(msg);
+               }
                break;
+       }
 
        case LFUN_DROP_LAYOUTS_CHOICE:
                enable = buf; 
@@ -1577,7 +1583,7 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
        case LFUN_VC_LOCKING_TOGGLE:
                enable = doc_buffer && !doc_buffer->isReadonly()
                        && doc_buffer->lyxvc().lockingToggleEnabled();
-               flag.setOnOff(enable && !doc_buffer->lyxvc().locker().empty());
+               flag.setOnOff(enable && doc_buffer->lyxvc().locking());
                break;
        case LFUN_VC_REVERT:
                enable = doc_buffer && doc_buffer->lyxvc().inUse();
@@ -1595,6 +1601,10 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                        enable = false;
                break;
        }
+       case LFUN_VC_COMPARE:
+               enable = doc_buffer && !cmd.argument().empty()
+                        && doc_buffer->lyxvc().prepareFileRevisionEnabled();
+               break;
 
        case LFUN_SERVER_GOTO_FILE_ROW:
                break;
@@ -2255,7 +2265,7 @@ bool GuiView::closeBuffer(Buffer & buf)
        //FIXME: we should update only the bookmarks related to this buffer!
        LYXERR(Debug::DEBUG, "GuiView::closeBuffer()");
        for (size_t i = 0; i < theSession().bookmarks().size(); ++i)
-               theLyXFunc().gotoBookmark(i+1, false, false);
+               guiApp->gotoBookmark(i+1, false, false);
 
        if (saveBufferIfNeeded(buf, false)) {
                theBufferList().release(&buf);
@@ -2567,6 +2577,32 @@ void GuiView::dispatchVC(FuncRequest const & cmd)
 
                break;
                }
+
+       case LFUN_VC_COMPARE: {
+
+               string rev1 = cmd.getArg(0);
+               string f1, f2;
+
+               // f1
+               if (!buffer->lyxvc().prepareFileRevision(rev1, f1))
+                       break;
+
+               if (isStrInt(rev1) && convert<int>(rev1) <= 0) {
+                       f2 = buffer->absFileName();
+               } else {
+                       string rev2 = cmd.getArg(1);
+                       if (rev2.empty())
+                               break;
+                       // f2
+                       if (!buffer->lyxvc().prepareFileRevision(rev2, f2))
+                               break;
+               }
+               // FIXME We need to call comparison feature here
+               // I'm not sure whether with or without dialog.
+               // (Gui)Compare::compare(f1, f2);
+               break;
+       }
+
        default:
                break;
        }
@@ -2987,8 +3023,7 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                                        showDialog("symbols", data);
                        // bug 5274
                        } else if (name == "prefs" && isFullScreen()) {
-                               FuncRequest fr(LFUN_INSET_INSERT, "fullscreen");
-                               lfunUiToggle(fr);
+                               lfunUiToggle("fullscreen");
                                showDialog("prefs", data);
                        } else
                                showDialog(name, data);
@@ -2999,11 +3034,16 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        dr.setMessage(cmd.argument());
                        break;
 
-               case LFUN_UI_TOGGLE:
-                       lfunUiToggle(cmd);
+               case LFUN_UI_TOGGLE: {
+                       string arg = cmd.getArg(0);
+                       if (!lfunUiToggle(arg)) {
+                               docstring const msg = "ui-toggle " + _("%1$s unknown command!");
+                               dr.setMessage(bformat(msg, from_utf8(arg)));
+                       }
                        // Make sure the keyboard focus stays in the work area.
                        setFocus();
                        break;
+               }
 
                case LFUN_SPLIT_VIEW: {
                        LASSERT(doc_buffer, break);
@@ -3088,6 +3128,7 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                case LFUN_VC_REVERT:
                case LFUN_VC_UNDO_LAST:
                case LFUN_VC_COMMAND:
+               case LFUN_VC_COMPARE:
                        dispatchVC(cmd);
                        break;
 
@@ -3112,10 +3153,9 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 }
 
 
-void GuiView::lfunUiToggle(FuncRequest const & cmd)
+bool GuiView::lfunUiToggle(string const & ui_component)
 {
-       string const arg = cmd.getArg(0);
-       if (arg == "scrollbar") {
+       if (ui_component == "scrollbar") {
                // hide() is of no help
                if (d.current_work_area_->verticalScrollBarPolicy() ==
                        Qt::ScrollBarAlwaysOff)
@@ -3125,18 +3165,13 @@ void GuiView::lfunUiToggle(FuncRequest const & cmd)
                else
                        d.current_work_area_->setVerticalScrollBarPolicy(
                                Qt::ScrollBarAlwaysOff);
-               return;
-       }
-       if (arg == "statusbar") {
+       } else if (ui_component == "statusbar") {
                statusBar()->setVisible(!statusBar()->isVisible());
-               return;
-       }
-       if (arg == "menubar") {
+       } else if (ui_component == "menubar") {
                menuBar()->setVisible(!menuBar()->isVisible());
-               return;
-       }
+       } else
 #if QT_VERSION >= 0x040300
-       if (arg == "frame") {
+       if (ui_component == "frame") {
                int l, t, r, b;
                getContentsMargins(&l, &t, &r, &b);
                //are the frames in default state?
@@ -3146,15 +3181,13 @@ void GuiView::lfunUiToggle(FuncRequest const & cmd)
                } else {
                        setContentsMargins(0, 0, 0, 0);
                }
-               return;
-       }
+       } else
 #endif
-       if (arg == "fullscreen") {
+       if (ui_component == "fullscreen") {
                toggleFullScreen();
-               return;
-       }
-
-       message(bformat("LFUN_UI_TOGGLE " + _("%1$s unknown command!"), from_utf8(arg)));
+       } else
+               return false;
+       return true;
 }
 
 
@@ -3270,7 +3303,7 @@ bool isValidName(string const & name)
 
 void GuiView::resetDialogs()
 {
-       // Make sure that no LFUN uses any LyXView.
+       // Make sure that no LFUN uses any GuiView.
        guiApp->setCurrentView(0);
        saveLayout();
        menuBar()->clear();
@@ -3404,12 +3437,12 @@ void GuiView::updateDialogs()
        updateLayoutList();
 }
 
+Dialog * createDialog(GuiView & lv, string const & name);
 
 // will be replaced by a proper factory...
 Dialog * createGuiAbout(GuiView & lv);
 Dialog * createGuiBibitem(GuiView & lv);
 Dialog * createGuiBibtex(GuiView & lv);
-Dialog * createGuiBox(GuiView & lv);
 Dialog * createGuiBranch(GuiView & lv);
 Dialog * createGuiChanges(GuiView & lv);
 Dialog * createGuiCharacter(GuiView & lv);
@@ -3418,13 +3451,10 @@ Dialog * createGuiCompare(GuiView & lv);
 Dialog * createGuiDelimiter(GuiView & lv);
 Dialog * createGuiDocument(GuiView & lv);
 Dialog * createGuiErrorList(GuiView & lv);
-Dialog * createGuiERT(GuiView & lv);
 Dialog * createGuiExternal(GuiView & lv);
-Dialog * createGuiFloat(GuiView & lv);
 Dialog * createGuiGraphics(GuiView & lv);
 Dialog * createGuiInclude(GuiView & lv);
 Dialog * createGuiIndex(GuiView & lv);
-Dialog * createGuiInfo(GuiView & lv);
 Dialog * createGuiLabel(GuiView & lv);
 Dialog * createGuiListings(GuiView & lv);
 Dialog * createGuiLog(GuiView & lv);
@@ -3446,13 +3476,11 @@ Dialog * createGuiShowFile(GuiView & lv);
 Dialog * createGuiSpellchecker(GuiView & lv);
 Dialog * createGuiSymbols(GuiView & lv);
 Dialog * createGuiTabularCreate(GuiView & lv);
-Dialog * createGuiTabular(GuiView & lv);
 Dialog * createGuiTexInfo(GuiView & lv);
 Dialog * createGuiTextHSpace(GuiView & lv);
 Dialog * createGuiToc(GuiView & lv);
 Dialog * createGuiThesaurus(GuiView & lv);
 Dialog * createGuiHyperlink(GuiView & lv);
-Dialog * createGuiVSpace(GuiView & lv);
 Dialog * createGuiViewSource(GuiView & lv);
 Dialog * createGuiWrap(GuiView & lv);
 Dialog * createGuiProgressView(GuiView & lv);
@@ -3463,14 +3491,16 @@ Dialog * GuiView::build(string const & name)
 {
        LASSERT(isValidName(name), return 0);
 
+       Dialog * dialog = createDialog(*this, name);
+       if (dialog)
+               return dialog;
+
        if (name == "aboutlyx")
                return createGuiAbout(*this);
        if (name == "bibitem")
                return createGuiBibitem(*this);
        if (name == "bibtex")
                return createGuiBibtex(*this);
-       if (name == "box")
-               return createGuiBox(*this);
        if (name == "branch")
                return createGuiBranch(*this);
        if (name == "changes")
@@ -3485,8 +3515,6 @@ Dialog * GuiView::build(string const & name)
                return createGuiDocument(*this);
        if (name == "errorlist")
                return createGuiErrorList(*this);
-       if (name == "ert")
-               return createGuiERT(*this);
        if (name == "external")
                return createGuiExternal(*this);
        if (name == "file")
@@ -3495,8 +3523,6 @@ Dialog * GuiView::build(string const & name)
                return createGuiSearch(*this);
        if (name == "findreplaceadv")
                return createGuiSearchAdv(*this);
-       if (name == "float")
-               return createGuiFloat(*this);
        if (name == "graphics")
                return createGuiGraphics(*this);
        if (name == "href")
@@ -3507,8 +3533,6 @@ Dialog * GuiView::build(string const & name)
                return createGuiIndex(*this);
        if (name == "index_print")
                return createGuiPrintindex(*this);
-       if (name == "info")
-               return createGuiInfo(*this);
        if (name == "label")
                return createGuiLabel(*this);
        if (name == "listings")
@@ -3545,8 +3569,6 @@ Dialog * GuiView::build(string const & name)
                return createGuiSpellchecker(*this);
        if (name == "symbols")
                return createGuiSymbols(*this);
-       if (name == "tabular")
-               return createGuiTabular(*this);
        if (name == "tabularcreate")
                return createGuiTabularCreate(*this);
        if (name == "texinfo")
@@ -3557,8 +3579,6 @@ Dialog * GuiView::build(string const & name)
                return createGuiToc(*this);
        if (name == "view-source")
                return createGuiViewSource(*this);
-       if (name == "vspace")
-               return createGuiVSpace(*this);
        if (name == "wrap")
                return createGuiWrap(*this);
        if (name == "progress")