]> git.lyx.org Git - features.git/commitdiff
TOC context menu (part 2)
authorVincent van Ravesteijn <vfr@lyx.org>
Wed, 8 Apr 2009 21:06:58 +0000 (21:06 +0000)
committerVincent van Ravesteijn <vfr@lyx.org>
Wed, 8 Apr 2009 21:06:58 +0000 (21:06 +0000)
* TocWidget: add context menu to toc.

* Menus: specify origin of cmd.

* GuiView: if cmd coming from toc, dispatch to GuiToc.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29155 a592a061-630c-0410-9148-cb99ea01b6c8

src/FuncRequest.h
src/frontends/qt4/GuiToc.cpp
src/frontends/qt4/GuiToc.h
src/frontends/qt4/GuiView.cpp
src/frontends/qt4/Menus.cpp
src/frontends/qt4/TocWidget.cpp
src/frontends/qt4/TocWidget.h

index 6aaad7bb8e10b16aed32218a1b5a55f1e0f004ef..799fdd6a82b2941ac137b91303ce3caa5ca054bc 100644 (file)
@@ -34,7 +34,8 @@ public:
                MENU, // A menu entry
                TOOLBAR, // A toolbar icon
                KEYBOARD, // a keyboard binding
-               COMMANDBUFFER
+               COMMANDBUFFER, 
+               TOC
        };
 
        /// just for putting these things in std::container
index f01d9945dc9ba66a89f1957af7a1eb74a2b2bb4d..3ba5df32c80ef33f48a3734552d22ead0f526252 100644 (file)
@@ -91,6 +91,11 @@ void GuiToc::enableView(bool enable)
                widget_->updateView();
 }
 
+void GuiToc::doDispatch(Cursor & cur, FuncRequest const & cmd)
+{
+       widget_->doDispatch(cur, cmd);
+}
+
 
 Dialog * createGuiToc(GuiView & lv)
 {
index 5007fe5636fecb7984afb868e309970b11af669f..efbb818f750bd07cc0e22488387d57c0e3de6a0d 100644 (file)
@@ -57,6 +57,8 @@ public:
        void dispatchParams();
        ///
        bool isBufferDependent() const { return true; }
+       ///
+       void doDispatch(Cursor & cur, FuncRequest const & fr);
 
 private:
        ///
index 070add1ba70995bce8b9055e1c964ecb146f23e3..3f0bb7be531e30d52280232bd76bce1ac87118ef 100644 (file)
@@ -23,6 +23,7 @@
 #include "GuiCompleter.h"
 #include "GuiWorkArea.h"
 #include "GuiKeySymbol.h"
+#include "GuiToc.h"
 #include "GuiToolbar.h"
 #include "Menus.h"
 #include "TocModel.h"
@@ -1204,6 +1205,11 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
        if (cmd.origin == FuncRequest::MENU && !hasFocus())
                buf = 0;
 
+       if (cmd.origin == FuncRequest::TOC) {
+               //FIXME: dispatch this to the toc
+               return true;
+       }
+
        switch(cmd.action) {
        case LFUN_BUFFER_WRITE:
                enable = buf && (buf->isUnnamed() || !buf->isClean());
@@ -1969,6 +1975,12 @@ bool GuiView::dispatch(FuncRequest const & cmd)
                bv->cursor().updateFlags(Update::None);
        bool dispatched = true;
 
+       if (cmd.origin == FuncRequest::TOC) {
+               GuiToc * toc = static_cast<GuiToc*>(findOrBuild("toc", false));
+               toc->doDispatch(bv->cursor(), cmd);
+               return true;
+       }
+
        switch(cmd.action) {
                case LFUN_BUFFER_IMPORT:
                        importDocument(to_utf8(cmd.argument()));
index 5c02c392d5e6eb1fc498fbac4c3b08de58462bdd..3aae083995a4c41a11f5bed5db0b0d75cd8c614b 100644 (file)
@@ -168,10 +168,11 @@ public:
        MenuItem(Kind kind,
                 QString const & label,
                 FuncRequest const & func,
-                bool optional = false)
+                bool optional = false,
+                FuncRequest::Origin origin = FuncRequest::MENU)
                : kind_(kind), label_(label), func_(func), optional_(optional)
        {
-               func_.origin = FuncRequest::MENU;
+               func_.origin = origin;
        }
 
        // boost::shared_ptr<MenuDefinition> needs this apprently...
@@ -453,7 +454,10 @@ void MenuDefinition::read(Lexer & lex)
                        lex.next(true);
                        string const command = lex.getString();
                        FuncRequest func = lyxaction.lookupFunc(command);
-                       add(MenuItem(MenuItem::Command, toqstr(name), func, optional));
+                       FuncRequest::Origin origin = FuncRequest::MENU;
+                       if (name_.startsWith("context-toc-"))
+                               origin = FuncRequest::TOC;
+                       add(MenuItem(MenuItem::Command, toqstr(name), func, optional, origin));
                        optional = false;
                        break;
                }
index a47d5daa2e37d104bc3d0aa6ac7b55b013bd75a1..59bd1df43676f0870b1925a10f8f6e0b9b6d8c05 100644 (file)
 #include "Buffer.h"
 #include "FuncRequest.h"
 #include "LyXFunc.h"
+#include "Menus.h"
 
 #include "support/debug.h"
 #include "support/lassert.h"
 
 #include <QHeaderView>
+#include <QMenu>
 #include <QTimer>
 
 #include <vector>
@@ -67,10 +69,36 @@ TocWidget::TocWidget(GuiView & gui_view, QWidget * parent)
        // Buffer.
        enableControls(false);
 
+       // make us responsible for the context menu of the tabbar
+       setContextMenuPolicy(Qt::CustomContextMenu);
+       connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
+               this, SLOT(showContextMenu(const QPoint &)));
+       connect(tocTV, SIGNAL(customContextMenuRequested(const QPoint &)),
+               this, SLOT(showContextMenu(const QPoint &)));
+
        init(QString());
 }
 
 
+void TocWidget::showContextMenu(const QPoint & pos)
+{
+       std::string name = "context-toc-" + fromqstr(current_type_);
+       QMenu * menu = guiApp->menus().menu(toqstr(name), gui_view_);
+       if (!menu)
+               return; 
+       menu->exec(mapToGlobal(pos));
+}
+
+
+void TocWidget::doDispatch(Cursor const & cur, FuncRequest const & cmd)
+{
+       switch(cmd.action) {
+       default:
+               break;
+       }
+}
+
+
 void TocWidget::on_tocTV_activated(QModelIndex const & index)
 {
        goTo(index);
index a291ef5bc74dd19833011e3f171c632877604ae5..c7bb80dca9ba0d56054dbf534ea5c289fada03be 100644 (file)
@@ -15,6 +15,8 @@
 
 #include "ui_TocUi.h"
 
+#include "Cursor.h"
+
 #include <QWidget>
 
 class QModelIndex;
@@ -35,6 +37,8 @@ public:
        /// Initialise GUI.
        void init(QString const & str);
 
+       void doDispatch(Cursor const & cur, FuncRequest const & fr);
+
 public Q_SLOTS:
        /// Update the display of the dialog whilst it is still visible.
        void updateView();
@@ -57,6 +61,8 @@ protected Q_SLOTS:
        void on_moveInTB_clicked();
        void on_moveOutTB_clicked();
 
+       void showContextMenu(const QPoint & pos);
+
 private:
        ///
        void enableControls(bool enable = true);