void LocationListModel::setPattern(const QString& pattern)
{
  beginResetModel();

  for (QList<Location*>::iterator location=locations.begin();
       location!=locations.end();
       ++location) {
      delete *location;
  }

  locations.clear();

  osmscout::LocationSearchResult searchResult;

  std::string osmPattern=pattern.toUtf8().constData();

  osmscout::GeoCoord coord;

  if (osmscout::GeoCoord::Parse(osmPattern,
                                coord)) {
      QString name=QString::fromLocal8Bit(coord.GetDisplayText().c_str());
      QString label=name;

      Location *location=new Location(name,
                                      label,
                                      coord);
      locations.append(location);
  }

  std::cout << "Searching for '" << osmPattern << "'" << std::endl;

  DBThread::GetInstance()->SearchForLocations(osmPattern,
                                              50,
                                              searchResult);

  std::map<osmscout::FileOffset,osmscout::AdminRegionRef> adminRegionMap;

  for (std::list<osmscout::LocationSearchResult::Entry>::const_iterator entry=searchResult.results.begin();
      entry!=searchResult.results.end();
      ++entry) {
      Location *location=NULL;

    if (entry->adminRegion &&
        entry->location &&
        entry->address) {
      QString adminRegion=GetAdminRegionLabel(adminRegionMap,
                                              entry->adminRegion);
      QString loc=QString::fromUtf8(entry->location->name.c_str());
      QString address=QString::fromUtf8(entry->address->name.c_str());
      QString name;
      QString label;

      name+=loc;
      name+=" ";
      name+=address;
      name+=" ";
      name+=adminRegion;

      label+="<b>";
      label+=loc;
      label+=" ";
      label+=address;
      label+="</b>";
      label+=" ";
      label+=adminRegion;
      label+="<br/>";
      label+="<i>";
      label+=GetObjectTypLabel(entry->address->object);
      label+="</i>";

      std::cout << "- " << name.toLocal8Bit().data() << std::endl;

      location=new Location(Location::typeObject,
                            name,
                            label);
      location->addReference(entry->address->object);
    }
    else if (entry->adminRegion &&
             entry->location) {
      QString adminRegion=GetAdminRegionLabel(adminRegionMap,
                                              entry->adminRegion);
      QString loc=QString::fromUtf8(entry->location->name.c_str());
      QString name;
      QString label;

      name+=loc;
      name+=" ";
      name+=adminRegion;

      label+="<b>";
      label+=loc;
      label+="</b>";
      label+=" ";
      label+=adminRegion;

      label+="<br/>";
      label+="<i>";
      label+=GetObjectTypLabel(entry->location->objects.front());
      label+="</i>";

      std::cout << "- " << name.toLocal8Bit().data() << std::endl;

      location=new Location(Location::typeObject,
                            name,
                            label);

      for (std::vector<osmscout::ObjectFileRef>::const_iterator object=entry->location->objects.begin();
          object!=entry->location->objects.end();
          ++object) {
          location->addReference(*object);
      }
    }
    else if (entry->adminRegion &&
             entry->poi) {
      QString adminRegion=GetAdminRegionLabel(adminRegionMap,
                                              entry->adminRegion);
      QString poi=QString::fromUtf8(entry->poi->name.c_str());
      QString name;
      QString label;

      name+=poi;

      name+=" ";
      name+=adminRegion;

      label+="<b>";
      label+=poi;
      label+="</b>";

      label+=" ";
      label+=adminRegion;

      label+="<br/>";
      label+="<i>";
      label+=GetObjectTypLabel(entry->poi->object);
      label+="</i>";

      std::cout << "- " << name.toLocal8Bit().data() << std::endl;

      location=new Location(Location::typeObject,
                            name,
                            label);
      location->addReference(entry->poi->object);
    }
    else if (entry->adminRegion) {
        QString adminRegion=GetAdminRegionLabel(adminRegionMap,
                                                entry->adminRegion);
        QString name;
        QString label;

        name+=adminRegion;

        label+="<b>";
        label+=adminRegion;
        label+="</b>";
        label+="<br/>";
        label+="<i>";
        if (entry->adminRegion->aliasObject.Valid()) {
            label+=GetObjectTypLabel(entry->adminRegion->aliasObject);
        }
        else {
            label+=GetObjectTypLabel(entry->adminRegion->object);
        }
        label+="</i>";

        location=new Location(Location::typeObject,
                              name,
                              label);

        std::cout << "- " << name.toLocal8Bit().data() << std::endl;

        if (entry->adminRegion->aliasObject.Valid()) {
            location->addReference(entry->adminRegion->aliasObject);
        }
        else {
            location->addReference(entry->adminRegion->object);
        }
    }

    if (location!=NULL) {
        locations.append(location);
    }
  }

  endResetModel();
}
void LocationListModel::setPattern(const QString& pattern)
{
  beginResetModel();

  for (QList<Location*>::iterator location=locations.begin();
       location!=locations.end();
       ++location) {
      delete *location;
  }

  locations.clear();

  osmscout::LocationSearchResult searchResult;

  std::string osmPattern=pattern.toUtf8().constData();

  std::cout << "Searching for '" << osmPattern << "'" << std::endl;

  DBThread::GetInstance()->SearchForLocations(osmPattern,
                                              50,
                                              searchResult);

  std::map<osmscout::FileOffset,osmscout::AdminRegionRef> adminRegionMap;

  for (std::list<osmscout::LocationSearchResult::Entry>::const_iterator entry=searchResult.results.begin();
      entry!=searchResult.results.end();
      ++entry) {
      Location *location=NULL;

    if (entry->adminRegion &&
        entry->location &&
        entry->address) {
      QString label=QString::fromUtf8(entry->location->name.c_str());

      label+=" ";
      label+=QString::fromUtf8(entry->address->name.c_str());

      label+=" ";
      label+=GetAdminRegionLabel(adminRegionMap,
                                 entry->adminRegion);

      std::cout << "- " << label.toLocal8Bit().data() << std::endl;

      location=new Location(label);
      location->addReference(entry->address->object);
    }
    else if (entry->adminRegion &&
             entry->location) {
      QString label=QString::fromUtf8(entry->location->name.c_str());

      label+=" ";
      label+=GetAdminRegionLabel(adminRegionMap,
                                 entry->adminRegion);

      std::cout << "- " << label.toLocal8Bit().data() << std::endl;

      location=new Location(label);

      for (std::vector<osmscout::ObjectFileRef>::const_iterator object=entry->location->objects.begin();
          object!=entry->location->objects.end();
          ++object) {
          location->addReference(*object);
      }
    }
    else if (entry->adminRegion &&
             entry->poi) {
      QString label=QString::fromUtf8(entry->poi->name.c_str());

      label+=" ";
      label+=GetAdminRegionLabel(adminRegionMap,
                                 entry->adminRegion);

      std::cout << "- " << label.toLocal8Bit().data() << std::endl;

      location=new Location(label);
      location->addReference(entry->poi->object);
    }
    else if (entry->adminRegion) {
        QString label=GetAdminRegionLabel(adminRegionMap,
                                          entry->adminRegion);

        location=new Location(label);

        std::cout << "- " << label.toLocal8Bit().data() << std::endl;

        if (entry->adminRegion->aliasObject.Valid()) {
            location->addReference(entry->adminRegion->aliasObject);
        }
        else {
            location->addReference(entry->adminRegion->object);
        }
    }

    if (location!=NULL) {
        locations.append(location);
    }
  }

  endResetModel();
}