#include <RingEditor.h>
Public Slots | |
void | addBut_clicked () |
void | load (QString fileName) |
void | loadBut_clicked () |
void | on_rings_itemChanged (QTableWidgetItem *item) |
void | on_rings_itemClicked (QTableWidgetItem *item) |
void | optimizeBut_clicked () |
void | removeBut_clicked () |
void | saveBut_clicked () |
void | setCoArrayGraph (ArrayMap *w) |
void | updateCounts () |
void | updateGraph () |
Public Member Functions | |
int | countPairs (int ringIndex) |
int | ringCount () |
RingEditor (QWidget *parent=0, Qt::WFlags fl=0) | |
~RingEditor () |
GeopsyGui::RingEditor::RingEditor | ( | QWidget * | parent = 0 , |
Qt::WFlags | fl = 0 |
||
) |
References addBut_clicked(), loadBut_clicked(), optimizeBut_clicked(), removeBut_clicked(), RingEditor_ColorCol, RingEditor_MaxCol, RingEditor_MinCol, RingEditor_PairsNumCol, saveBut_clicked(), QGpCoreTools::tr(), and TRACE.
: QWidget(parent, fl) { TRACE; setupUi(this); QStringList hLabels; hLabels << tr( "Min" ) << tr( "Max" ) << tr( "Pairs" ) << tr( "Color" ); rings->setHorizontalHeaderLabels (hLabels); rings->setSelectionBehavior(QAbstractItemView::SelectItems); rings->setSelectionMode(QAbstractItemView::SingleSelection); rings->setEditTriggers(QAbstractItemView::AllEditTriggers); rings->setItemDelegate (new RingEditorDelegate(this) ); // signals and slots connections connect(addBut, SIGNAL(clicked()), this, SLOT(addBut_clicked()) ); connect(removeBut, SIGNAL(clicked()), this, SLOT(removeBut_clicked()) ); connect(loadBut, SIGNAL(clicked()), this, SLOT(loadBut_clicked()) ); connect(saveBut, SIGNAL(clicked()), this, SLOT(saveBut_clicked()) ); connect(optimizeBut, SIGNAL(clicked()), this, SLOT(optimizeBut_clicked()) ); rings->resizeColumnToContents(RingEditor_MinCol); rings->resizeColumnToContents(RingEditor_MaxCol); rings->resizeColumnToContents(RingEditor_PairsNumCol); rings->horizontalHeader() ->setResizeMode(RingEditor_ColorCol, QHeaderView::Stretch); //rings->setColumnReadOnly(2,TRUE); _circleLayer=0; }
void GeopsyGui::RingEditor::addBut_clicked | ( | ) | [slot] |
References RingEditor_ColorCol, RingEditor_MaxCol, RingEditor_MinCol, TRACE, and updateGraph().
Referenced by RingEditor().
{ TRACE; int n=rings->rowCount(); rings->setRowCount(n + 1); initRow(n); if(n>0) { // Copy info from last ring QString maxR=rings->item(n-1, RingEditor_MaxCol)->text(); rings->item(n, RingEditor_MinCol)->setText(maxR); rings->item(n, RingEditor_MaxCol)->setText(maxR); } rings->item(n, RingEditor_ColorCol) ->setBackgroundColor(Qt::red); updateGraph(); }
int GeopsyGui::RingEditor::countPairs | ( | int | ringIndex | ) |
References SciFigs::GraphContentLayer::graph(), RingEditor_MaxCol, RingEditor_MinCol, and TRACE.
Referenced by updateCounts().
{ TRACE; double minR=rings->item(ringIndex, RingEditor_MinCol) ->text().toDouble(); double maxR=rings->item(ringIndex, RingEditor_MaxCol) ->text().toDouble(); return static_cast<ArrayMap *>(_circleLayer->graph())->countPoints(minR, maxR); }
void GeopsyGui::RingEditor::load | ( | QString | fileName | ) | [slot] |
References RingEditor_ColorCol, RingEditor_MaxCol, RingEditor_MinCol, RingEditor_PairsNumCol, TRACE, updateCounts(), and updateGraph().
Referenced by loadBut_clicked().
{ TRACE; QFile f(str); f.open(QIODevice::ReadOnly); QTextStream s(&f); QString line; while( !s.atEnd()) { line=s.readLine().simplified(); if(line.left(1)!="#" ) { int row=rings->rowCount(); rings->setRowCount(row + 1); initRow(row); rings->item(row, RingEditor_MinCol) ->setText(line.section(QRegExp( "[ \t]" ), 0, 0) ); rings->item(row, RingEditor_MaxCol) ->setText(line.section(QRegExp( "[ \t]" ), 1, 1) ); int r=line.section(QRegExp( "[ \t]" ), 2, 2).toInt(); int g=line.section(QRegExp( "[ \t]" ), 3, 3).toInt(); int b=line.section(QRegExp( "[ \t]" ), 4, 4).toInt(); rings->item(row, RingEditor_ColorCol) ->setBackgroundColor(QColor( r, g, b) ); } } rings->resizeColumnToContents(RingEditor_MinCol); rings->resizeColumnToContents(RingEditor_MaxCol); rings->resizeColumnToContents(RingEditor_PairsNumCol); updateGraph(); updateCounts(); }
void GeopsyGui::RingEditor::loadBut_clicked | ( | ) | [slot] |
References load(), str, QGpCoreTools::tr(), and TRACE.
Referenced by RingEditor().
void GeopsyGui::RingEditor::on_rings_itemChanged | ( | QTableWidgetItem * | item | ) | [slot] |
References RingEditor_MaxCol, RingEditor_MinCol, TRACE, updateCounts(), and updateGraph().
Referenced by optimizeBut_clicked().
{ TRACE; if( !item) return ; int col=rings->column(item); if(col==RingEditor_MinCol || col==RingEditor_MaxCol) { updateGraph(); updateCounts(); } }
void GeopsyGui::RingEditor::on_rings_itemClicked | ( | QTableWidgetItem * | item | ) | [slot] |
References RingEditor_ColorCol, TRACE, and updateGraph().
{ TRACE; if( !item) return ; int col=rings->column(item); if(col==RingEditor_ColorCol) { QColor c=item->backgroundColor(); c=QColorDialog::getColor(c, this); if(c.isValid()) { item->setBackgroundColor(c); updateGraph(); } } }
void GeopsyGui::RingEditor::optimizeBut_clicked | ( | ) | [slot] |
References SciFigs::GraphContentLayer::graph(), on_rings_itemChanged(), RingEditor_MaxCol, RingEditor_MinCol, and TRACE.
Referenced by RingEditor().
{ TRACE; int n=rings->rowCount(); int i; for(i=0; i < n;i++ ) { double minR=rings->item(i, RingEditor_MinCol) ->text().toDouble(); double maxR=rings->item(i, RingEditor_MaxCol) ->text().toDouble(); static_cast<ArrayMap *>(_circleLayer->graph())->optimizeRing(minR, maxR); minR=floor(minR * 100.0)/100.0; maxR=ceil(maxR * 100.0)/100.0; rings->item(i, RingEditor_MinCol) ->setText(QString::number(minR) ); rings->item(i, RingEditor_MaxCol) ->setText(QString::number(maxR) ); } on_rings_itemChanged(rings->item(0, RingEditor_MinCol) ); }
void GeopsyGui::RingEditor::removeBut_clicked | ( | ) | [slot] |
References TRACE, updateCounts(), and updateGraph().
Referenced by RingEditor().
{ TRACE; int index=rings->currentRow(); if(index >= 0) { rings->removeRow(index); rings->setCurrentItem(rings->item(index, 0) ); updateGraph(); updateCounts(); } }
int GeopsyGui::RingEditor::ringCount | ( | ) |
void GeopsyGui::RingEditor::saveBut_clicked | ( | ) | [slot] |
References QGpCoreTools::endl(), RingEditor_ColorCol, RingEditor_MaxCol, RingEditor_MinCol, RingEditor_PairsNumCol, str, and TRACE.
Referenced by RingEditor().
{ TRACE; QString str=Message::getSaveFileName( "Save rings file", "Rings file (*.rings)" ); if(str.length() > 0) { QFile f(str); f.open(QIODevice::WriteOnly); QTextStream s(&f); int nRows=rings->rowCount(); QString line; s << "# MinRadius\tMaxRadius\tRed\tGreen\tBlue" << endl; for(int row=0;row < nRows;row++ ) { line="%1\t%2\t%3\t%4\t%5\t%6"; QColor c=rings->item(row, RingEditor_ColorCol) ->backgroundColor(); s << line.arg(rings->item(row, RingEditor_MinCol) ->text()). arg(rings->item(row, RingEditor_MaxCol) ->text()). arg(c.red()).arg(c.green()).arg(c.blue()). arg(rings->item(row, RingEditor_PairsNumCol) ->text()) << endl; } } }
void GeopsyGui::RingEditor::setCoArrayGraph | ( | ArrayMap * | w | ) | [slot] |
References TRACE.
{ TRACE; _circleLayer=new CircleViewer(w); _circleLayer->setObjectName( "rings" ); }
void GeopsyGui::RingEditor::updateCounts | ( | ) | [slot] |
References countPairs(), RingEditor_PairsNumCol, and TRACE.
Referenced by load(), on_rings_itemChanged(), and removeBut_clicked().
{ TRACE; uint sum=0; int n=rings->rowCount(); for(int i=0; i < n;i++ ) { uint count=countPairs(i); sum += count; rings->item(i, RingEditor_PairsNumCol) ->setText(QString::number(count) ); } coupleTotal->display(( int) sum); }
void GeopsyGui::RingEditor::updateGraph | ( | ) | [slot] |
References SciFigs::GraphContentLayer::deepUpdate(), SciFigs::CircleViewer::resize(), RingEditor_ColorCol, RingEditor_MaxCol, RingEditor_MinCol, SciFigs::CircleViewer::set(), and TRACE.
Referenced by addBut_clicked(), load(), on_rings_itemChanged(), on_rings_itemClicked(), and removeBut_clicked().
{ TRACE; if( !_circleLayer) return ; int n=rings->rowCount(); _circleLayer->resize(2 * n); int i; double r; for(i=0; i < n;i++ ) { QColor c=rings->item(i, RingEditor_ColorCol) ->backgroundColor(); r=rings->item(i, RingEditor_MinCol) ->text().toDouble(); _circleLayer->set(2 * i, 0, 0, r, r, 0.0, c); r=rings->item(i, RingEditor_MaxCol) ->text().toDouble(); _circleLayer->set(2 * i + 1, 0, 0, r, r, 0.0, c); } _circleLayer->deepUpdate(); }