All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Slots | Public Member Functions
GeopsyGui::RingEditor Class Reference

#include <RingEditor.h>

List of all members.

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 ()

Constructor & Destructor Documentation

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;
}

References TRACE.

{
  TRACE;
  // no need to delete child widgets, Qt does it all for us
}

Member Function Documentation

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

References load(), str, QGpCoreTools::tr(), and TRACE.

Referenced by RingEditor().

{
  TRACE;
  QString str=Message::getOpenFileName(tr( "Open rings file" ), tr( "Rings file (*.rings)" ));
  if(str.length() > 0) load(str);
}
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();
    }
  }
}

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

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

References TRACE.

{
  TRACE;
  return rings->rowCount();
}

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;
    }
  }
}

References TRACE.

{
  TRACE;
  _circleLayer=new CircleViewer(w);
  _circleLayer->setObjectName( "rings" );
}

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

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

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines