示例#1
0
bool GridModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
	if( role == Qt::EditRole )
	{
		Cell* subject = _grid.cellAt(index.row(), index.column());
		char val = Cell::UNKNOWN;
		if( !value.toString().trimmed().isEmpty() ){
			val = _grid.alphabet().indexOf( value.toString() );
		}

		if( val != Cell::UNKNOWN && _grid.setCellAndUpdate(subject, val) )
		{
			Logger::log(QString("Setting value of (%1,%2) to %3").arg(
				QString::number(subject->rowIndex()), QString::number(subject->columnIndex()),
				_grid.alphabet().at(subject->value())
			));

			// calculate change in table space
			cellsChanged(_grid.unwindHistorySince().toList());
			return true;
		}
		else return false;
	}
	else return false;
}
示例#2
0
void GameOfLife::run()
{

  int **fp, **fr;
  while ( true )
    {
      QThread::msleep ( m_delay );

      if ( !paused )
        {

          ++m_time;

          qDebug() << "<<<" << m_time << "<<<";

          development();

          if ( samuBrain )
            {
              samuBrain->learning ( lattices[latticeIndex], center_of_tape, 10, predictions, &fp, &fr );
              qDebug() << m_time
                       << "   #MPUs:" << samuBrain->nofMPUs()
                       << "Observation (MPU):" << samuBrain->get_foobar().c_str();
            }
            
          //latticeIndex = ( latticeIndex+1 ) %2;
          emit cellsChanged ( lattices[latticeIndex], predictions, fp, fr );

          qDebug() << ">>>" << m_time << ">>>";

        }
    }

}
示例#3
0
void GridModel::undo(){
	HistoryFrame* frame = _grid.undo();
	if( frame == nullptr ) return;

	QList<Cell*> diff;
	for( auto i=frame->domainChanges.begin(); i!=frame->domainChanges.end(); ++i ){
		diff << i.key();
	}
	cellsChanged(diff);
	Logger::log("Reverting last change");
}
示例#4
0
void GameOfLife::run()
{
  while ( true )
    {
      QThread::msleep ( m_delay );

      if ( !paused )
        {
          ++m_time;
          development();
          learning();
          latticeIndex = ( latticeIndex+1 ) %2;
          emit cellsChanged ( lattices[latticeIndex], predictions );
        }
    }

}
示例#5
0
int QtTableModelInterface::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QObject::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: cellsChanged((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3])),(*reinterpret_cast< int(*)>(_a[4])),(*reinterpret_cast< const QList<QByteArray>(*)>(_a[5]))); break;
        case 1: rowsInserted((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
        case 2: rowsRemoved((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
        case 3: rowsMoved((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3]))); break;
        case 4: columnsInserted((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
        case 5: columnsRemoved((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
        case 6: columnsMoved((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3]))); break;
        default: ;
        }
        _id -= 7;
    }
    return _id;
}
void RKVariable::setNumeric (int from_row, int to_row, double *data) {
	RK_TRACE (OBJECTS);
	RK_ASSERT (to_row < getLength ());

	if (getDataType () == DataCharacter) {
		RK_ASSERT (false);		// asserting false to catch cases of this use for now. it's not really a problem, though
		int i = 0;
		for (int row=from_row; row <= to_row; ++row) {
			setText (row, QString::number (data[i++], 'g', MAX_PRECISION));
		}
	} else if (getDataType () == DataFactor) {
		int i = 0;
		for (int row=from_row; row <= to_row; ++row) {
			if (myData ()->cell_states[row] & RKVarEditData::Invalid) myData ()->cell_states[row] = RKVarEditData::UnsyncedInvalidState;
			else myData ()->cell_states[row] = 0;

			if (isnan (data[i]) || (!myData ()->value_labels) || (!myData ()->value_labels->contains (QString::number (data[i])))) {
				myData ()->cell_states[row] |= RKVarEditData::NA;
			} else {
				myData ()->cell_states[row] |= RKVarEditData::Valid;
				myData ()->cell_doubles[row] = data[i];
			}
			++i;
		}
	} else {
		int i = 0;
		for (int row=from_row; row <= to_row; ++row) {
			if (myData ()->cell_states[row] & RKVarEditData::Invalid) myData ()->cell_states[row] = RKVarEditData::UnsyncedInvalidState;
			else myData ()->cell_states[row] = 0;

			if (isnan (data[i])) {
				myData ()->cell_states[row] |= RKVarEditData::NA;
			} else {
				myData ()->cell_states[row] |= RKVarEditData::Valid;
				myData ()->cell_doubles[row] = data[i];
			}
			++i;
		}
	}
	cellsChanged (from_row, to_row);
}
示例#7
0
void GameOfLife::run()
{
  while ( true )
    {
      QThread::msleep ( m_delay );

      if ( !paused )
        {
          ++m_time;
          development();
          learning();
          latticeIndex = ( latticeIndex+1 ) %2;
          emit cellsChanged ( lattices[latticeIndex], predictions );
          ++m_frame_num;
          {
            QMutexLocker lck(m_mutex);
            if(m_stopped)
              break;
          }
        }
    }
}
void RKVariable::setCharacter (int from_row, int to_row, QString *data) {
	RK_TRACE (OBJECTS);
	RK_ASSERT (to_row < getLength ());
	
	if (getDataType () == DataCharacter) {
		int i=0;
		for (int row=from_row; row <= to_row; ++row) {
			if (myData ()->cell_states[row] & RKVarEditData::Invalid) myData ()->cell_states[row] = RKVarEditData::UnsyncedInvalidState;
			else myData ()->cell_states[row] = 0;

			if (data[i].isNull ()) myData ()->cell_states[row] |= RKVarEditData::NA;
			else myData ()->cell_states[row] |= RKVarEditData::Valid;

			myData ()->cell_strings[row] = data[i++];
		}
	} else {
		int i=0;
		for (int row=from_row; row <= to_row; ++row) {
			setText (row, data[i++]);
		}
		return;
	}
	cellsChanged (from_row, to_row);
}
示例#9
0
void GridModel::solve(){
	cellsChanged(_grid.solve(true));
}
示例#10
0
void GridModel::fillSingleDomains()
{
	cellsChanged(_grid.solve(false));
}