From: Vincent van Ravesteijn Date: Wed, 8 Apr 2009 21:06:58 +0000 (+0000) Subject: TOC context menu (part 2) X-Git-Tag: 2.0.0~6900 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=a465fcb55e268417dfce3d8ef2a4755724087c4f;p=features.git TOC context menu (part 2) * 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 --- diff --git a/src/FuncRequest.h b/src/FuncRequest.h index 6aaad7bb8e..799fdd6a82 100644 --- a/src/FuncRequest.h +++ b/src/FuncRequest.h @@ -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 diff --git a/src/frontends/qt4/GuiToc.cpp b/src/frontends/qt4/GuiToc.cpp index f01d9945dc..3ba5df32c8 100644 --- a/src/frontends/qt4/GuiToc.cpp +++ b/src/frontends/qt4/GuiToc.cpp @@ -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) { diff --git a/src/frontends/qt4/GuiToc.h b/src/frontends/qt4/GuiToc.h index 5007fe5636..efbb818f75 100644 --- a/src/frontends/qt4/GuiToc.h +++ b/src/frontends/qt4/GuiToc.h @@ -57,6 +57,8 @@ public: void dispatchParams(); /// bool isBufferDependent() const { return true; } + /// + void doDispatch(Cursor & cur, FuncRequest const & fr); private: /// diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 070add1ba7..3f0bb7be53 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -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(findOrBuild("toc", false)); + toc->doDispatch(bv->cursor(), cmd); + return true; + } + switch(cmd.action) { case LFUN_BUFFER_IMPORT: importDocument(to_utf8(cmd.argument())); diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index 5c02c392d5..3aae083995 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -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 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; } diff --git a/src/frontends/qt4/TocWidget.cpp b/src/frontends/qt4/TocWidget.cpp index a47d5daa2e..59bd1df436 100644 --- a/src/frontends/qt4/TocWidget.cpp +++ b/src/frontends/qt4/TocWidget.cpp @@ -21,11 +21,13 @@ #include "Buffer.h" #include "FuncRequest.h" #include "LyXFunc.h" +#include "Menus.h" #include "support/debug.h" #include "support/lassert.h" #include +#include #include #include @@ -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); diff --git a/src/frontends/qt4/TocWidget.h b/src/frontends/qt4/TocWidget.h index a291ef5bc7..c7bb80dca9 100644 --- a/src/frontends/qt4/TocWidget.h +++ b/src/frontends/qt4/TocWidget.h @@ -15,6 +15,8 @@ #include "ui_TocUi.h" +#include "Cursor.h" + #include 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);