#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();
}