diff --git a/src/Mod/Spreadsheet/Gui/Sheet.ui b/src/Mod/Spreadsheet/Gui/Sheet.ui index ccd47aab4..06f9e0437 100644 --- a/src/Mod/Spreadsheet/Gui/Sheet.ui +++ b/src/Mod/Spreadsheet/Gui/Sheet.ui @@ -27,7 +27,7 @@ - + false @@ -46,6 +46,11 @@ QTableView
SheetTableView.h
+ + Gui::ExpressionLineEdit + QLineEdit +
Gui/ExpressionCompleter.h
+
cells diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.cpp b/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.cpp index f301fba47..d43a89df2 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.cpp +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.cpp @@ -22,14 +22,22 @@ * * ***************************************************************************/ -#include "SpreadsheetDelegate.h" +#include "PreCompiled.h" +#ifndef _PreComp_ #include #include +#endif + +#include "SpreadsheetDelegate.h" +#include +#include +#include using namespace SpreadsheetGui; -SpreadsheetDelegate::SpreadsheetDelegate(QWidget *parent) : - QItemDelegate(parent) +SpreadsheetDelegate::SpreadsheetDelegate(Spreadsheet::Sheet * _sheet, QWidget *parent) + : QItemDelegate(parent) + , sheet(_sheet) { } @@ -37,17 +45,23 @@ QWidget *SpreadsheetDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const { - QLineEdit *editor = new QLineEdit(parent); + Gui::ExpressionLineEdit *editor = new Gui::ExpressionLineEdit(parent); + editor->setDocumentObject(sheet); connect(editor, SIGNAL(returnPressed()), this, SLOT(commitAndCloseEditor())); return editor; } void SpreadsheetDelegate::commitAndCloseEditor() { - QLineEdit *editor = qobject_cast(sender()); - emit commitData(editor); - emit closeEditor(editor); + Gui::ExpressionLineEdit *editor = qobject_cast(sender()); + if (editor->completerActive()) { + editor->hideCompleter(); + return; + } + + Q_EMIT commitData(editor); + Q_EMIT closeEditor(editor); } void SpreadsheetDelegate::setEditorData(QWidget *editor, diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.h b/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.h index 575cd5874..03080af51 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.h +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetDelegate.h @@ -27,13 +27,17 @@ #include +namespace Spreadsheet { +class Sheet; +} + namespace SpreadsheetGui { class SpreadsheetDelegate : public QItemDelegate { Q_OBJECT public: - explicit SpreadsheetDelegate(QWidget *parent = 0); + explicit SpreadsheetDelegate(Spreadsheet::Sheet * sheet, QWidget *parent = 0); QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; @@ -43,7 +47,8 @@ public: QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; private Q_SLOTS: void commitAndCloseEditor(); - +private: + Spreadsheet::Sheet * sheet; }; } diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp index 6ae10c451..17f8072d9 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -73,7 +74,7 @@ SheetView::SheetView(Gui::Document *pcDocument, App::DocumentObject *docObj, QWi ui->setupUi(w); setCentralWidget(w); - delegate = new SpreadsheetDelegate(); + delegate = new SpreadsheetDelegate(sheet); ui->cells->setModel(model); ui->cells->setItemDelegate(delegate); ui->cells->setSheet(sheet); @@ -110,6 +111,9 @@ SheetView::SheetView(Gui::Document *pcDocument, App::DocumentObject *docObj, QWi QList fgList = Gui::getMainWindow()->findChildren(QString::fromAscii("Spreadsheet_ForegroundColor")); if (fgList.size() > 0) fgList[0]->setCurrentColor(palette.color(QPalette::Text)); + + // Set document object to create auto completer + ui->cellContent->setDocumentObject(sheet); } SheetView::~SheetView() @@ -195,6 +199,9 @@ void SheetView::updateContentLine() cell->getStringContent(str); ui->cellContent->setText(QString::fromUtf8(str.c_str())); ui->cellContent->setEnabled(true); + + // Update completer model; for the time being, we do this by setting the document object of the input line. + ui->cellContent->setDocumentObject(sheet); } } @@ -273,6 +280,11 @@ void SheetView::resizeRow(int col, int newSize) void SheetView::editingFinished() { + if (ui->cellContent->completerActive()) { + ui->cellContent->hideCompleter(); + return; + } + QModelIndex i = ui->cells->currentIndex(); // Update data in cell