Path: blob/devel/ElmerGUI/Application/twod/curveeditor.cpp
3203 views
/*****************************************************************************1* *2* Elmer, A Finite Element Software for Multiphysical Problems *3* *4* Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland *5* *6* This program is free software; you can redistribute it and/or *7* modify it under the terms of the GNU General Public License *8* as published by the Free Software Foundation; either version 2 *9* of the License, or (at your option) any later version. *10* *11* This program is distributed in the hope that it will be useful, *12* but WITHOUT ANY WARRANTY; without even the implied warranty of *13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *14* GNU General Public License for more details. *15* *16* You should have received a copy of the GNU General Public License *17* along with this program (in file fem/GPL-2); if not, write to the *18* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *19* Boston, MA 02110-1301, USA. *20* *21*****************************************************************************/2223/*****************************************************************************24* *25* ElmerGUI CurveEditor *26* *27*****************************************************************************28* *29* Authors: Mikko Lyly, Juha Ruokolainen and Peter RÃ¥back *30* Email: [email protected] *31* Web: http://www.csc.fi/elmer *32* Address: CSC - IT Center for Science Ltd. *33* Keilaranta 14 *34* 02101 Espoo, Finland *35* *36* Original Date: 15 Mar 2008 *37* *38*****************************************************************************/39#include <QTableWidget>40#include <QModelIndex>41#include <iostream>42#include "curveeditor.h"43#include "renderarea.h"4445using namespace std;4647CurveEditor::CurveEditor(QWidget *parent)48: QTabWidget(parent)49{50pTable = new QTableWidget(0, 3, this);51cTable = new QTableWidget(0, 6, this);5253addTab(pTable, tr("Points"));54addTab(cTable, tr("Curves"));5556connect(cTable, SIGNAL(cellChanged(int, int)), this, SLOT(cCellChanged(int, int)));57connect(pTable, SIGNAL(cellChanged(int, int)), this, SLOT(pCellChanged(int, int)));5859clearAll();60}6162CurveEditor::~CurveEditor()63{64}6566void CurveEditor::addPoint(int idx, double x, double y)67{68int i = pTable->rowCount();6970pTable->insertRow(i);71pTable->setRowHeight(i, 20);72QTableWidgetItem *item;7374item = new QTableWidgetItem;75item->setText(QString::number(idx));76pTable->setItem(i, 0, item);7778item = new QTableWidgetItem;79item->setText(QString::number(x));80pTable->setItem(i, 1, item);8182item = new QTableWidgetItem;83item->setText(QString::number(y));84pTable->setItem(i, 2, item);85}8687void CurveEditor::addCurve(int in, int out, int pts, int *p)88{89int i = cTable->rowCount();9091cTable->insertRow(i);92cTable->setRowHeight(i, 20);93QTableWidgetItem *item;9495item = new QTableWidgetItem;96item->setText(QString::number(in));97cTable->setItem(i, 0, item);9899item = new QTableWidgetItem;100item->setText(QString::number(out));101cTable->setItem(i, 1, item);102103item = new QTableWidgetItem;104item->setText(QString::number(pts));105cTable->setItem(i, 2, item);106107item = new QTableWidgetItem;108item->setText(QString::number(p[0]));109cTable->setItem(i, 3, item);110111item = new QTableWidgetItem;112item->setText(QString::number(p[1]));113cTable->setItem(i, 4, item);114115item = new QTableWidgetItem;116if(pts == 3) {117item->setText(QString::number(p[2]));118} else {119item->setText("-");120}121cTable->setItem(i, 5, item);122}123124void CurveEditor::clearAll()125{126pTable->clear();127pTable->setRowCount(0);128129cTable->clear();130cTable->setRowCount(0);131132QStringList pHeaders;133pHeaders << "idx" << "x" << "y";134pTable->setHorizontalHeaderLabels(pHeaders);135136pTable->setColumnWidth(0, 40);137pTable->setColumnWidth(1, 80);138pTable->setColumnWidth(2, 80);139140QStringList cHeaders;141cHeaders << "out" << "in" << "pts" << "p1" << "p2" << "p3";142cTable->setHorizontalHeaderLabels(cHeaders);143cTable->setColumnWidth(0, 40);144cTable->setColumnWidth(1, 40);145cTable->setColumnWidth(2, 40);146cTable->setColumnWidth(3, 40);147cTable->setColumnWidth(4, 40);148cTable->setColumnWidth(5, 40);149}150151void CurveEditor::modifyPoint(int idx, double x, double y)152{153for(int i = 0; i < pTable->rowCount(); i++) {154QTableWidgetItem *item = pTable->item(i, 0);155156if(item) {157if(item->text().toInt() == idx) {158QTableWidgetItem *itemX = pTable->item(i, 1);159if(itemX)160itemX->setText(QString::number(x));161162QTableWidgetItem *itemY = pTable->item(i, 2);163if(itemY)164itemY->setText(QString::number(y));165}166}167}168}169170void CurveEditor::setRenderArea(RenderArea *renderArea)171{172this->renderArea = renderArea;173}174175void CurveEditor::pCellChanged(int row, int col)176{177QTableWidgetItem *item0 = pTable->item(row, 0);178QTableWidgetItem *item1 = pTable->item(row, 1);179QTableWidgetItem *item2 = pTable->item(row, 2);180181int idx;182double x, y;183184if(item0)185idx = item0->text().toInt();186else187return;188189if(item1)190x = item1->text().toDouble();191else192return;193194if(item2)195y = item2->text().toDouble();196else197return;198199renderArea->modifyPoint(idx, x, y);200}201202void CurveEditor::cCellChanged(int row, int col)203{204QTableWidgetItem *item0 = cTable->item(row, 0);205QTableWidgetItem *item1 = cTable->item(row, 1);206QTableWidgetItem *item2 = cTable->item(row, 2);207QTableWidgetItem *item3 = cTable->item(row, 3);208QTableWidgetItem *item4 = cTable->item(row, 4);209QTableWidgetItem *item5 = cTable->item(row, 5);210211int in, out, np, p0, p1, p2;212213if(item0)214in = item0->text().toInt();215else216return;217218if(item1)219out = item1->text().toInt();220else221return;222223if(item2)224np = item2->text().toInt();225else226return;227228if(item3)229p0 = item3->text().toInt();230else231return;232233if(item4)234p1 = item4->text().toInt();235else236return;237238p2 = 0;239if(item5)240p2 = item5->text().toInt();241242renderArea->modifyCurve(row, in, out, np, p0, p1, p2);243}244245void CurveEditor::addPoint()246{247int i = pTable->rowCount();248249pTable->insertRow(i);250pTable->setRowHeight(i, 20);251QTableWidgetItem *item;252253for(int j = 0; j < 3; j++) {254item = new QTableWidgetItem;255item->setText("-");256pTable->setItem(i, j, item);257}258}259260void CurveEditor::addCurve()261{262int i = cTable->rowCount();263264cTable->insertRow(i);265cTable->setRowHeight(i, 20);266QTableWidgetItem *item;267268for(int j = 0; j < 6; j++) {269item = new QTableWidgetItem;270item->setText("-");271cTable->setItem(i, j, item);272}273}274275void CurveEditor::deletePoint()276{277QModelIndex index = pTable->currentIndex();278int row = index.row();279280// Check if the point is attached to a curve:281//--------------------------------------------282bool attached = false;283int curve = -1;284int idx = pTable->item(row, 0)->text().toInt();285for(int i = 0; i < cTable->rowCount(); i++) {286int p0 = cTable->item(i, 3)->text().toInt();287int p1 = cTable->item(i, 4)->text().toInt();288int p2 = cTable->item(i, 5)->text().toInt();289if((p0 == idx) || (p1 == idx) || (p2 == idx)) {290curve = i + 1;291attached = true;292break;293}294}295296// Do not delete if attached:297//---------------------------298if(attached) {299QString message = "Point is attached to curve " + QString::number(curve);300#if WITH_QT5 || WITH_QT6301cout << message.toLatin1().data() << endl;302#else303cout << message.toAscii().data() << endl;304#endif305emit(statusMessage(message));306return;307}308309pTable->removeRow(row);310renderArea->updatePoints(pTable);311}312313void CurveEditor::deleteCurve()314{315QModelIndex index = cTable->currentIndex();316int row = index.row();317cTable->removeRow(row);318renderArea->updateCurves(cTable);319}320321322