void Save_grid_dialog::gridChanged(const QString & s)
{
	SmartPtr<Named_interface> grid_ni =
    Root::instance()->interface( gridModels_manager + "/" + s.toStdString() );
	Geostat_grid* grid = dynamic_cast<Geostat_grid*>( grid_ni.raw_ptr() );
	appli_assert( grid );

  std::list<std::string> pn = grid->property_list();
	propList_->clear();
	for (std::list<std::string>::iterator it = pn.begin(); it != pn.end(); ++it){
	        QListWidgetItem * nitem = new QListWidgetItem(it->c_str(), propList_);
		propList_->addItem(nitem);
		nitem->setSelected(true);
	}

	if (dynamic_cast<Reduced_grid*>(grid)) {
		masked_as_regular_frame_->setVisible(true);
  }
	else{
		masked_as_regular_frame_->setVisible(false);
  }
}
void Project_ItemModel::begin_add_item(std::string type_hierarchy,std::string type_name){
	QStringList types = QString(type_hierarchy.c_str()).split("/");
	QStringList names = QString(type_name.c_str()).split("/");
	if(types.isEmpty() || names.isEmpty() || types.size() != names.size()) return;

	QModelIndex insert_parent_index;
	int position;

	// can either add a grid, a group, a property (in the all_group and/or in a specific group) or a region
	QModelIndex root_index = this->root_index();
	if(types.size() == 1) { // Adding a grid, always at the end
		insert_parent_index = root_index;
		position = rootItem_->childCount();
	}
	else {
		QString grid_name = names.at(0);
	    Geostat_grid* grid = dynamic_cast<Geostat_grid*>(
	                  Root::instance()->interface(
	                                              gridModels_manager + "/" + grid_name.toStdString()
	                                              ).raw_ptr()
	                  );
	    if(grid == 0) return;

	    GsTL_root_item *root_item = dynamic_cast<GsTL_root_item*>(rootItem_);
	    GsTL_grid_item * grid_item = new GsTL_grid_item(root_item->project(),  grid, grid_name, rootItem_ );

	    QModelIndex grid_index = root_index.child(grid_item->row(),0);

		if(types.size() == 2) {  // adding a group or a property

			if(types.at(1) == "group") {
				insert_parent_index = grid_index;
				std::string new_group_name = names.at(1).toStdString();
				std::list<std::string>  group_names = grid->get_group_names();
				std::list<std::string>::iterator it = group_names.begin();
				for(int i=0 ; it != group_names.end() ; ++it) {
					if( *it > new_group_name ) {
						position = i;
						break;
					}
				}
			}
			else if(types.at(1) == "property") {
				insert_parent_index = grid_index.child(0,0);
				//Need to add it to the all property group and the specific group
				std::string new_prop_name = names.at(1).toStdString();
				std::list<std::string> props = grid->property_list();
				std::list<std::string>::const_iterator it_prop = props.begin();
				for(int i=0;it_prop != props.end(); ++it_prop, ++i) {
					if(*it_prop > new_prop_name) {
						position = i;
						break;
					}
				}
			}

		}
	}

	this->beginInsertRows(insert_parent_index,position, position);
}