]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/TocWidget.cpp
TOC context menu (part 4)
[lyx.git] / src / frontends / qt4 / TocWidget.cpp
index d3c12936d8607eeedd16a24b52a2a6fc7e593c18..57b0282d1342052e6b7a0682c121f08309af50bd 100644 (file)
 
 #include "TocWidget.h"
 
+#include "GuiApplication.h"
 #include "GuiView.h"
 #include "qt_helpers.h"
 #include "TocModel.h"
 
 #include "Buffer.h"
+#include "CutAndPaste.h"
 #include "FuncRequest.h"
 #include "LyXFunc.h"
+#include "Menus.h"
+#include "TocBackend.h"
+
+#include "insets/InsetCommand.h"
+#include "insets/InsetRef.h"
 
 #include "support/debug.h"
 #include "support/lassert.h"
 
 #include <QHeaderView>
+#include <QMenu>
 #include <QTimer>
 
 #include <vector>
@@ -39,11 +47,11 @@ TocWidget::TocWidget(GuiView & gui_view, QWidget * parent)
 {
        setupUi(this);
 
-       moveOutTB->setIcon(QIcon(":/images/promote.png"));
-       moveInTB->setIcon(QIcon(":/images/demote.png"));
-       moveUpTB->setIcon(QIcon(":/images/up.png"));
-       moveDownTB->setIcon(QIcon(":/images/down.png"));
-       updateTB->setIcon(QIcon(":/images/reload.png"));
+       moveOutTB->setIcon(QIcon(getPixmap("images/", "promote", "png")));
+       moveInTB->setIcon(QIcon(getPixmap("images/", "demote", "png")));
+       moveUpTB->setIcon(QIcon(getPixmap("images/", "up", "png")));
+       moveDownTB->setIcon(QIcon(getPixmap("images/", "down", "png")));
+       updateTB->setIcon(QIcon(getPixmap("images/", "reload", "png")));
 
        // avoid flickering
        tocTV->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
@@ -66,20 +74,56 @@ 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 & cur, FuncRequest const & cmd)
+{
+       QModelIndex const & index = tocTV->currentIndex();
+       TocItem const & item =
+               gui_view_.tocModels().currentItem(current_type_, index);
+       DocIterator const & dit = item.dit();
+       
+       Inset * inset = 0;
+       if (current_type_ == "label")
+               inset = dit.nextInset();
+
+       if (inset)
+               inset->dispatch(cur, FuncRequest(cmd));
+}
+
+
 void TocWidget::on_tocTV_activated(QModelIndex const & index)
 {
        goTo(index);
 }
 
 
-void TocWidget::on_tocTV_clicked(QModelIndex const & index)
+void TocWidget::on_tocTV_pressed(QModelIndex const & index)
 {
-       goTo(index);
-       gui_view_.setFocus();
+       Qt::MouseButtons const button = QApplication::mouseButtons();
+       if (button & Qt::LeftButton) {
+               goTo(index);
+               gui_view_.setFocus();
+       }
 }