Spreadsheet: add a few context menu options
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#ifndef _PreComp_
|
||||
# include <QKeyEvent>
|
||||
# include <QAction>
|
||||
# include <QMenu>
|
||||
# include <QApplication>
|
||||
# include <QClipboard>
|
||||
# include <QMenu>
|
||||
@@ -35,6 +36,7 @@
|
||||
#include <App/AutoTransaction.h>
|
||||
#include <App/Document.h>
|
||||
#include <Gui/CommandT.h>
|
||||
#include <Gui/Application.h>
|
||||
#include <Gui/MainWindow.h>
|
||||
#include <boost_bind_bind.hpp>
|
||||
#include "../App/Utils.h"
|
||||
@@ -108,9 +110,6 @@ SheetTableView::SheetTableView(QWidget *parent)
|
||||
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
|
||||
horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
verticalHeader()->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
|
||||
connect(verticalHeader(), &QWidget::customContextMenuRequested,
|
||||
[this](const QPoint &point){
|
||||
QMenu menu(this);
|
||||
@@ -163,11 +162,46 @@ SheetTableView::SheetTableView(QWidget *parent)
|
||||
|
||||
auto cellProperties = new QAction(tr("Properties..."), this);
|
||||
addAction(cellProperties);
|
||||
|
||||
horizontalHeader()->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||
verticalHeader()->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||
|
||||
setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||
setTabKeyNavigation(false);
|
||||
contextMenu = new QMenu(this);
|
||||
|
||||
contextMenu->addAction(cellProperties);
|
||||
connect(cellProperties, SIGNAL(triggered()), this, SLOT(cellProperties()));
|
||||
|
||||
contextMenu->addSeparator();
|
||||
QAction *recompute = new QAction(tr("Recompute"),this);
|
||||
connect(recompute, SIGNAL(triggered()), this, SLOT(onRecompute()));
|
||||
contextMenu->addAction(recompute);
|
||||
|
||||
contextMenu->addSeparator();
|
||||
actionMerge = contextMenu->addAction(tr("Merge cells"));
|
||||
connect(actionMerge,SIGNAL(triggered()), this, SLOT(mergeCells()));
|
||||
actionSplit = contextMenu->addAction(tr("Split cells"));
|
||||
connect(actionSplit,SIGNAL(triggered()), this, SLOT(splitCell()));
|
||||
|
||||
contextMenu->addSeparator();
|
||||
actionCut = contextMenu->addAction(tr("Cut"));
|
||||
connect(actionCut,SIGNAL(triggered()), this, SLOT(cutSelection()));
|
||||
actionCopy = contextMenu->addAction(tr("Copy"));
|
||||
connect(actionCopy,SIGNAL(triggered()), this, SLOT(copySelection()));
|
||||
actionPaste = contextMenu->addAction(tr("Paste"));
|
||||
connect(actionPaste,SIGNAL(triggered()), this, SLOT(pasteClipboard()));
|
||||
actionDel = contextMenu->addAction(tr("Delete"));
|
||||
connect(actionDel,SIGNAL(triggered()), this, SLOT(deleteSelection()));
|
||||
|
||||
setTabKeyNavigation(false);
|
||||
}
|
||||
|
||||
void SheetTableView::onRecompute() {
|
||||
Gui::Command::openCommand("Recompute cells");
|
||||
for(auto &range : selectedRanges()) {
|
||||
Gui::cmdAppObjectArgs(sheet, "recomputeCells('%s', '%s')",
|
||||
range.fromCellString(), range.toCellString());
|
||||
}
|
||||
Gui::Command::commitCommand();
|
||||
}
|
||||
|
||||
void SheetTableView::cellProperties()
|
||||
@@ -828,6 +862,14 @@ void SheetTableView::ModifyBlockSelection(int targetRow, int targetCol)
|
||||
this->selectionModel()->setCurrentIndex(model()->index(targetRow, targetCol), QItemSelectionModel::Current);
|
||||
}
|
||||
|
||||
void SheetTableView::mergeCells() {
|
||||
Gui::Application::Instance->commandManager().runCommandByName("Spreadsheet_MergeCells");
|
||||
}
|
||||
|
||||
void SheetTableView::splitCell() {
|
||||
Gui::Application::Instance->commandManager().runCommandByName("Spreadsheet_SplitCell");
|
||||
}
|
||||
|
||||
void SheetTableView::closeEditor(QWidget * editor, QAbstractItemDelegate::EndEditHint hint)
|
||||
{
|
||||
QTableView::closeEditor(editor, hint);
|
||||
@@ -845,4 +887,25 @@ void SheetTableView::edit ( const QModelIndex & index )
|
||||
QTableView::edit(index);
|
||||
}
|
||||
|
||||
void SheetTableView::contextMenuEvent(QContextMenuEvent *) {
|
||||
const QMimeData* mimeData = QApplication::clipboard()->mimeData();
|
||||
if(!selectionModel()->hasSelection()) {
|
||||
actionCut->setEnabled(false);
|
||||
actionCopy->setEnabled(false);
|
||||
actionDel->setEnabled(false);
|
||||
actionPaste->setEnabled(false);
|
||||
actionSplit->setEnabled(false);
|
||||
actionMerge->setEnabled(false);
|
||||
}else{
|
||||
actionPaste->setEnabled(mimeData && (mimeData->hasText() || mimeData->hasText()));
|
||||
actionCut->setEnabled(true);
|
||||
actionCopy->setEnabled(true);
|
||||
actionDel->setEnabled(true);
|
||||
actionSplit->setEnabled(true);
|
||||
actionMerge->setEnabled(true);
|
||||
}
|
||||
|
||||
contextMenu->exec(QCursor::pos());
|
||||
}
|
||||
|
||||
#include "moc_SheetTableView.cpp"
|
||||
|
||||
Reference in New Issue
Block a user