diff options
Diffstat (limited to 'demos/spreadsheet/spreadsheetitem.cpp')
-rw-r--r-- | demos/spreadsheet/spreadsheetitem.cpp | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/demos/spreadsheet/spreadsheetitem.cpp b/demos/spreadsheet/spreadsheetitem.cpp deleted file mode 100644 index 74a1967a8a..0000000000 --- a/demos/spreadsheet/spreadsheetitem.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the demonstration applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "spreadsheetitem.h" - -SpreadSheetItem::SpreadSheetItem() - : QTableWidgetItem(), isResolving(false) -{ -} - -SpreadSheetItem::SpreadSheetItem(const QString &text) - : QTableWidgetItem(text), isResolving(false) -{ -} - -QTableWidgetItem *SpreadSheetItem::clone() const -{ - SpreadSheetItem *item = new SpreadSheetItem(); - *item = *this; - return item; -} - -QVariant SpreadSheetItem::data(int role) const -{ - if (role == Qt::EditRole || role == Qt::StatusTipRole) - return formula(); - - if (role == Qt::DisplayRole) - return display(); - - QString t = display().toString(); - bool isNumber = false; - int number = t.toInt(&isNumber); - - if (role == Qt::TextColorRole) { - if (!isNumber) - return QVariant::fromValue(QColor(Qt::black)); - else if (number < 0) - return QVariant::fromValue(QColor(Qt::red)); - return QVariant::fromValue(QColor(Qt::blue)); - } - - if (role == Qt::TextAlignmentRole) - if (!t.isEmpty() && (t.at(0).isNumber() || t.at(0) == '-')) - return (int)(Qt::AlignRight | Qt::AlignVCenter); - - return QTableWidgetItem::data(role); - } - -void SpreadSheetItem::setData(int role, const QVariant &value) -{ - QTableWidgetItem::setData(role, value); - if (tableWidget()) - tableWidget()->viewport()->update(); -} - -QVariant SpreadSheetItem::display() const -{ - // avoid circular dependencies - if (isResolving) - return QVariant(); - - isResolving = true; - QVariant result = computeFormula(formula(), tableWidget(), this); - isResolving = false; - return result; -} - -QVariant SpreadSheetItem::computeFormula(const QString &formula, - const QTableWidget *widget, - const QTableWidgetItem *self) -{ - // check if the s tring is actually a formula or not - QStringList list = formula.split(' '); - if (list.isEmpty() || !widget) - return formula; // it is a normal string - - QString op = list.value(0).toLower(); - - int firstRow = -1; - int firstCol = -1; - int secondRow = -1; - int secondCol = -1; - - if (list.count() > 1) - decode_pos(list.value(1), &firstRow, &firstCol); - - if (list.count() > 2) - decode_pos(list.value(2), &secondRow, &secondCol); - - const QTableWidgetItem *start = widget->item(firstRow, firstCol); - const QTableWidgetItem *end = widget->item(secondRow, secondCol); - - int firstVal = start ? start->text().toInt() : 0; - int secondVal = end ? end->text().toInt() : 0; - - QVariant result; - if (op == "sum") { - int sum = 0; - for (int r = firstRow; r <= secondRow; ++r) { - for (int c = firstCol; c <= secondCol; ++c) { - const QTableWidgetItem *tableItem = widget->item(r, c); - if (tableItem && tableItem != self) - sum += tableItem->text().toInt(); - } - } - - result = sum; - } else if (op == "+") { - result = (firstVal + secondVal); - } else if (op == "-") { - result = (firstVal - secondVal); - } else if (op == "*") { - result = (firstVal * secondVal); - } else if (op == "/") { - if (secondVal == 0) - result = QString("nan"); - else - result = (firstVal / secondVal); - } else if (op == "=") { - if (start) - result = start->text(); - } else { - result = formula; - } - - return result; -} - |