summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
d8425a9)
The DATASET CLOSE command, when it acts on the active dataset, just
removes the active dataset's name, changing it to the empty string.
(This is the documented behavior.) However, the GUI relies on
every dataset having a name, so this caused the following warning:
GLib-GObject-WARNING **: value """" of type `gchararray' is invalid
or out of range for property `id' of type `gchararray'
This commit fixes the problem by giving any unnamed dataset a name
after running syntax.
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
struct hmapx datasets;
struct dataset *active;
char *syntax_encoding; /* Default encoding for syntax files. */
struct hmapx datasets;
struct dataset *active;
char *syntax_encoding; /* Default encoding for syntax files. */
+ unsigned int n_dataset_names; /* For session_generate_dataset_name(). */
};
static struct hmapx_node *session_lookup_dataset__ (const struct session *,
};
static struct hmapx_node *session_lookup_dataset__ (const struct session *,
hmapx_init (&s->datasets);
s->active = NULL;
s->syntax_encoding = xstrdup ("Auto");
hmapx_init (&s->datasets);
s->active = NULL;
s->syntax_encoding = xstrdup ("Auto");
+ s->n_dataset_names = 0;
return ds;
return NULL;
}
return ds;
return NULL;
}
+
+/* Returns an identifier that is is not currently in use as a dataset name.
+ The caller must free the returned identifier, with free(). */
+char *
+session_generate_dataset_name (struct session *s)
+{
+ for (;;)
+ {
+ char *name;
+
+ s->n_dataset_names++;
+ assert(s->n_dataset_names != 0);
+
+ name = xasprintf ("DataSet%u", s->n_dataset_names);
+ if (!session_lookup_dataset (s, name))
+ return name;
+ free (name);
+ }
+}
\f
static struct hmapx_node *
session_lookup_dataset__ (const struct session *s_, const char *name)
\f
static struct hmapx_node *
session_lookup_dataset__ (const struct session *s_, const char *name)
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2010, 2011, 2012 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
struct dataset *session_get_dataset_by_seqno (const struct session *,
unsigned int seqno);
struct dataset *session_get_dataset_by_seqno (const struct session *,
unsigned int seqno);
+char *session_generate_dataset_name (struct session *);
+
/* PSPPIRE - a graphical user interface for PSPP.
/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation
+ Copyright (C) 2007, 2009, 2010, 2011, 2012 Free Software Foundation
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return psppire_data_store_get_reader (data_store);
}
return psppire_data_store_get_reader (data_store);
}
+/* Ensures that dataset DS has a name, because some parts of the GUI insist
+ upon this. */
+static void
+name_dataset_cb (struct dataset *ds, void *aux UNUSED)
+{
+ if (dataset_name (ds)[0] == '\0')
+ {
+ struct session *session = dataset_session (ds);
+ char *dataset_name = session_generate_dataset_name (session);
+ dataset_set_name (ds, dataset_name);
+ free (dataset_name);
+ }
+}
+
static void
new_pdw_cb (struct dataset *ds, void *aux UNUSED)
{
static void
new_pdw_cb (struct dataset *ds, void *aux UNUSED)
{
+ session_for_each_dataset (the_session, name_dataset_cb, NULL);
+
ll_for_each_safe (pdw, next_pdw, PsppireDataWindow, ll, &all_data_windows)
{
struct dataset *ds;
ll_for_each_safe (pdw, next_pdw, PsppireDataWindow, ll, &all_data_windows)
{
struct dataset *ds;
- static int n_datasets;
- char *dataset_name;
-
- dataset_name = xasprintf ("DataSet%d", ++n_datasets);
+ char *dataset_name = session_generate_dataset_name (the_session);
ds = dataset_create (the_session, dataset_name);
free (dataset_name);
}
ds = dataset_create (the_session, dataset_name);
free (dataset_name);
}