Ejemplo n.º 1
0
void style_change(appdata_t *appdata, const char *name) {
  char *new_style = NULL, *fname = NULL;

  file_chain_t *chain = file_scan(".style");

  while(chain) {
    file_chain_t *next = chain->next;
    style_t *style = style_parse(appdata, chain->name, NULL, TRUE);

    if(new_style == NULL && strcmp(style->name, name) == 0) {
      new_style = style_basename(chain->name);
      fname = chain->name;
      chain->name = NULL;
    }

    style_free(style);

    g_free(chain->name);
    g_free(chain);
    chain = next;
  }

  /* check if style has really been changed */
  if(appdata->settings->style &&
     !strcmp(appdata->settings->style, new_style)) {
    g_free(new_style);
    g_free(fname);
    return;
  }

  style_t *nstyle = style_load_fname(appdata, fname);
  if (nstyle == NULL) {
    errorf(GTK_WIDGET(appdata->window),
           _("Error loading style %s"), fname);
    g_free(new_style);
    g_free(fname);
    return;
  }
  g_free(fname);

  g_free(appdata->settings->style);
  appdata->settings->style = new_style;

  map_clear(appdata, MAP_LAYER_OBJECTS_ONLY);
  /* let gtk clean up first */
  while(gtk_events_pending()) {
    putchar('.');
    gtk_main_iteration();
  }

  style_free(appdata->map->style);
  appdata->map->style = nstyle;

  /* canvas background may have changed */
  canvas_set_background(appdata->map->canvas,
			appdata->map->style->background.color);

  map_paint(appdata);
}
Ejemplo n.º 2
0
GtkWidget *style_select_widget(appdata_t *appdata) {
  file_chain_t *chain = file_scan(".style");

  /* there must be at least one style, otherwise */
  /* the program wouldn't be running */
  g_assert(chain);

  GtkWidget *cbox = combo_box_new(_("Style"));

  /* fill combo box with presets */
  int cnt = 0, match = -1;
  while(chain) {
    file_chain_t *next = chain->next;

    printf("  file: %s\n", chain->name);

    style_t *style = style_parse(appdata, chain->name, NULL, TRUE);
    printf("    name: %s\n", style->name);
    combo_box_append_text(cbox, style->name);

    char *basename = style_basename(chain->name);
    if(strcmp(basename, appdata->settings->style) == 0) match = cnt;
    g_free(basename);

    style_free(style);

    cnt++;

    g_free(chain->name);
    g_free(chain);
    chain = next;
  }

  if(match >= 0)
    combo_box_set_active(cbox, match);

  return cbox;
}
Ejemplo n.º 3
0
 inline void operator()(const std::pair<std::string, std::string> &pair) {
   gtk_list_store_insert_with_values(store, nullptr, -1, 0, pair.first.c_str(), 1, pair.second.c_str(), -1);
   if(match < 0 && style_basename(pair.second) == currentstyle)
     match = cnt;
   cnt++;
 }