void RgLineVectorLayerSettingsWidget::on_mcbLayers_selectItem()
{
  mcbDirection->clear();
  mcbSpeed->clear();

  mcbDirection->insertItem( 0, tr( "Always use default" ) );
  mcbSpeed->insertItem( 0, tr( "Always use default" ) );

  QgsVectorLayer* vl = selectedLayer();
  if ( !vl )
    return;

  QgsVectorDataProvider* provider = vl->dataProvider();
  if ( !provider )
    return;

  const QgsFields& fields = provider->fields();
  for ( int idx = 0; idx < fields.count(); ++idx )
  {
    const QgsField& currentField = fields[idx];
    QVariant currentType = currentField.type();
    if ( currentType == QVariant::Int || currentType == QVariant::String )
    {
      mcbDirection->insertItem( 1, currentField.name() );
    }
    if ( currentType == QVariant::Int || currentType == QVariant::Double )
    {
      mcbSpeed->insertItem( 1, currentField.name() );
    }
  }

} // RgDSettingsDlg::on_mcbLayers_selectItem()
void RgLineVectorLayerSettingsWidget::on_mcbLayers_selectItem()
{
  mcbDirection->clear();
  mcbSpeed->clear();

  mcbDirection->insertItem( 0, tr( "Always use default" ) );
  mcbSpeed->insertItem( 0, tr( "Always use default" ) );

  QgsVectorLayer* vl = selectedLayer();
  if ( !vl )
    return;

  Q_FOREACH ( const QgsField& currentField, vl->fields() )
  {
    QVariant currentType = currentField.type();
    if ( currentType == QVariant::Int || currentType == QVariant::LongLong ||
         currentType == QVariant::String )
    {
      mcbDirection->insertItem( 1, currentField.name() );
    }
    if ( currentType == QVariant::Int || currentType == QVariant::LongLong ||
         currentType == QVariant::Double )
    {
      mcbSpeed->insertItem( 1, currentField.name() );
    }
  }
}
void RgLineVectorLayerSettingsWidget::on_mcbLayers_selectItem()
{
  mcbDirection->clear();
  mcbSpeed->clear();

  mcbDirection->insertItem( 0, tr( "Always use default" ) );
  mcbSpeed->insertItem( 0, tr( "Always use default" ) );

  QgsVectorLayer* vl = selectedLayer();
  if ( !vl )
    return;

  QgsVectorDataProvider* provider = vl->dataProvider();
  if ( !provider )
    return;

  const QgsFieldMap& fields = provider->fields();
  QgsFieldMap::const_iterator it;
  for ( it = fields.constBegin(); it != fields.constEnd(); ++it )
  {
    QgsField currentField = it.value();
    QVariant currentType = currentField.type();
    if ( currentType == QVariant::Int || currentType == QVariant::String )
    {
      mcbDirection->insertItem( 1, currentField.name() );
    }
    if ( currentType == QVariant::Int || currentType == QVariant::Double )
    {
      mcbSpeed->insertItem( 1, currentField.name() );
    }
  }

} // RgDSettingsDlg::on_mcbLayers_selectItem()
/**
 * Removes selected layer, redraws view and emmits modelChanged signal.
 */
void TopologyWidget::removeSelected(){
	int layer = selectedLayer();
	if(layer == -2) return;
	model->removeLayer(layer);
	clearView();
	makeView();
	model->modelChanged(TopologyChange);
}
/**
 * Fills weight table with weights biases and slopes of neurons in selected layer.
 */
void TopologyWidget::fillWeightTable(){
	//index of selected layer
	int layer = selectedLayer();
	if(layer == -2) return;

	//clears weight table
	ui->weightTable->clear();

	//input layer selected
	if(layer == -1){
        ui->layerLabel->setText(tr("[0] input layer:"));
		ui->weightTable->setRowCount(model->inputCount());
        ui->weightTable->setColumnCount(3);

		QStringList hList;
        hList.append(tr("Slope"));
        hList.append(tr("Bias"));
        hList.append(tr("Weight 1"));
		ui->weightTable->setHorizontalHeaderLabels(hList);

		QStringList vList;
		for(int i = 0; i < model->inputCount(); i++)
            vList.append(tr("Neuron ") + QString::number(i+1));
		ui->weightTable->setVerticalHeaderLabels(vList);

		for(int i = 0; i < model->inputCount(); i++){
            //slope
            QTableWidgetItem* item = new QTableWidgetItem();
            item->setText("-");
            ui->weightTable->setItem(i, 0, item);
			//bias
            item = new QTableWidgetItem();
            item->setText("0");
            ui->weightTable->setItem(i, 1, item);
			//weight
			item = new QTableWidgetItem();
			item->setText("1");
            ui->weightTable->setItem(i, 2, item);
		}

		return;
	};

	//generats weight table header
	if(layer < model->layerCount()-1)
        ui->layerLabel->setText("[" + QString::number(layer+1) + "]" + tr(" inner layer:"));
	else
        ui->layerLabel->setText("[" + QString::number(layer+1) + "]" + tr(" output layer:"));

    //sets table sizelogou
	ui->weightTable->setRowCount(model->neuronCount(layer));
    ui->weightTable->setColumnCount(model->weightCount(layer)+2);

	//column headers
	QStringList hList;
    hList.append(tr("Slope"));
    hList.append(tr("Bias"));
	for(int i = 0; i < model->weightCount(layer); i++)
        hList.append(tr("Weight ") + QString::number(i+1));
	ui->weightTable->setHorizontalHeaderLabels(hList);

	//row headers
	QStringList vList;
	for(int i = 0; i < model->neuronCount(layer); i++)
        vList.append(tr("Neuron ") + QString::number(i+1));
	ui->weightTable->setVerticalHeaderLabels(vList);

	//fills table with content
	for(int i = 0; i < model->neuronCount(layer); i++){
		QList<double> weight = (*model)[layer][i].weights();

        //slope
        QTableWidgetItem* item = new QTableWidgetItem();
        item->setText(QString::number((*model)[layer][i].slope()));
        ui->weightTable->setItem(i, 0, item);

		//bias
        item = new QTableWidgetItem();
		item->setText(QString::number((*model)[layer][i].bias()));
        ui->weightTable->setItem(i, 1, item);

		//weights
		for(int j = 0; j < weight.length(); j++){
			QTableWidgetItem* item = new QTableWidgetItem();
			item->setText(QString::number(weight[j]));
            ui->weightTable->setItem(i, j+2, item);
		}
	}
}