Skip to content

Commit

Permalink
Initial support for VClamp names.
Browse files Browse the repository at this point in the history
This names are used in the plot window to identify each node in the circuit.
  • Loading branch information
Ricardo Markiewicz committed May 12, 2008
1 parent 1a992a9 commit 43e2025
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 4 deletions.
65 changes: 65 additions & 0 deletions data/dialogs/clamp-properties-dialog.glade2
Expand Up @@ -60,6 +60,71 @@
<property name="homogeneous">False</property>
<property name="spacing">0</property>

<child>
<widget class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="label_yalign">0.5</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>

<child>
<widget class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">1</property>
<property name="yscale">1</property>
<property name="top_padding">0</property>
<property name="bottom_padding">0</property>
<property name="left_padding">12</property>
<property name="right_padding">0</property>

<child>
<widget class="GtkEntry" id="name">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
</child>
</widget>
</child>

<child>
<widget class="GtkLabel" id="label22">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Name&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">label_item</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>

<child>
<widget class="GtkLabel" id="label17">
<property name="visible">True</property>
Expand Down
4 changes: 4 additions & 0 deletions data/libraries/default.oreglib
Expand Up @@ -4462,6 +4462,10 @@
<ogo:name>ac_db</ogo:name>
<ogo:value>false</ogo:value>
</ogo:property>
<ogo:property>
<ogo:name>name</ogo:name>
<ogo:value>?</ogo:value>
</ogo:property>
</ogo:properties>
</ogo:part>

Expand Down
38 changes: 35 additions & 3 deletions src/engines/gnucap.c
Expand Up @@ -76,6 +76,8 @@ struct _OreganoGnuCapPriv {
guint status;
guint buf_count;
gchar buf[256]; // FIXME later
gchar **clamp_names;
int clamp_names_count;
};

static void gnucap_class_init (OreganoGnuCapClass *klass);
Expand Down Expand Up @@ -139,6 +141,10 @@ gnucap_finalize (GObject *object)
int i;

gnucap = OREGANO_GNUCAP (object);
for (i=0; i<gnucap->priv->clamp_names_count; i++) {
g_free (gnucap->priv->clamp_names[i]);
}
g_free (gnucap->priv->clamp_names);

lst = gnucap->priv->analysis;
while (lst) {
Expand Down Expand Up @@ -196,6 +202,7 @@ gnucap_generate_netlist (OreganoEngine *engine, const gchar *filename, GError **
GList *list;
FILE *file;
GError *local_error = NULL;
int i;

gnucap = OREGANO_GNUCAP (engine);

Expand All @@ -204,6 +211,21 @@ gnucap_generate_netlist (OreganoEngine *engine, const gchar *filename, GError **
g_propagate_error (error, local_error);
return;
}

/* Copy clamps names into Engine */
list = output.clamps;
gnucap->priv->clamp_names_count = g_slist_length (output.clamps);
gnucap->priv->clamp_names = (char**) g_new0 (gpointer, gnucap->priv->clamp_names_count);
i = 0;
while (list) {
g_print("Name (%s) at pos %d\n", (char *)g_slist_nth_data (output.clamps, i), i);
gnucap->priv->clamp_names[i] = g_slist_nth_data (output.clamps, i);

list = list->next;
++i;
}
/* This only free the list, the data is now pointed by clamp_names */
g_slist_free (output.clamps);

file = fopen (filename, "w");
if (!file) {
Expand Down Expand Up @@ -590,7 +612,7 @@ gnucap_parse (gchar *raw, gint len, OreganoGnuCap *gnucap)
static Analysis *data;
GCap_Variable *variables;
OreganoGnuCapPriv *priv = gnucap->priv;
gint i, j, n;
gint i, j, n, i_name;
gdouble val;
gchar *s;

Expand Down Expand Up @@ -641,8 +663,18 @@ gnucap_parse (gchar *raw, gint len, OreganoGnuCap *gnucap)
sdata->min_data[i] = G_MAXDOUBLE;
sdata->max_data[i] = -G_MAXDOUBLE;
}
for (i = 0; i < n; i++) {
sdata->var_names[i] = g_strdup (variables[i].name);
for (i = 0, i_name=0; i < n; i++) {
if (variables[i].name[0] == 'v') {
if (i_name < priv->clamp_names_count) {
sdata->var_names[i] = g_strdup (priv->clamp_names[i_name]);
g_print ("Using %s insted of %s\n", sdata->var_names[i_name], variables[i].name);
} else {
g_print ("%d out of names. Got %d spected %d\n", i_name, n, priv->clamp_names_count);
sdata->var_names[i] = g_strdup (variables[i].name);
}
++i_name;
}

switch (sdata->type) {
case TRANSIENT:
if (i==0)
Expand Down
14 changes: 13 additions & 1 deletion src/engines/netlist.c
Expand Up @@ -146,6 +146,7 @@ netlist_helper_init_data (NetlistData *data)
data->node_nr = 1;
data->gnd_list = NULL;
data->clamp_list = NULL;
data->clamp_name = NULL;
data->mark_list = NULL;
data->node_and_number_list = NULL;
}
Expand Down Expand Up @@ -231,7 +232,9 @@ netlist_helper_node_traverse (Node *node, NetlistData *data)
} else if (!g_strcasecmp (prop, "ground")) {
data->gnd_list = g_slist_prepend (data->gnd_list, GINT_TO_POINTER (data->node_nr));
} else if (!g_strcasecmp (prop, "punta")) {
gchar * name = part_get_property (pin->part, "name");
data->clamp_list = g_slist_prepend (data->clamp_list, GINT_TO_POINTER (data->node_nr));
data->clamp_name = g_slist_prepend (data->clamp_name, g_strdup (name));
} else if (!g_strncasecmp (prop, "jumper", 5)) {
/* Either jumper2 or jumper4. */
Node *opposite_node;
Expand Down Expand Up @@ -606,9 +609,18 @@ netlist_helper_create (Schematic *sm, Netlist *out, GError **error)
g_free (node2real[i]);
}
g_free (node2real);

g_hash_table_foreach (data.models, (GHFunc)foreach_model_save, &out->models);

out->clamps = g_slist_copy (data.clamp_name);
/*{
GSList *l = data.clamp_name;
while (l) {
g_print("Data = %p\n", (gchar *)l->data);
out->clamps = g_slist_append (out->clamps, g_strdup((char *)l->data));
l = l->next;
}
}*/

return;

bail_out:
Expand Down
2 changes: 2 additions & 0 deletions src/engines/netlist.h
Expand Up @@ -40,6 +40,7 @@ typedef struct {
GHashTable *models;
GSList *gnd_list; ///< Ground parts on the schematic
GSList *clamp_list; ///< Test clamps on the schematic
GSList *clamp_name; ///< Test clamps names on the schematic
GSList *mark_list;
GList *node_and_number_list;
NodeStore *store;
Expand All @@ -52,6 +53,7 @@ typedef struct {
SimSettings *settings;
NodeStore *store;
GList *models;
GSList *clamps;
} Netlist;

typedef struct {
Expand Down
7 changes: 7 additions & 0 deletions src/sheet/part-item.c
Expand Up @@ -586,6 +586,7 @@ edit_properties_punta (PartItem *item)
GtkRadioButton *radio_v, *radio_c;
GtkRadioButton *ac_r, *ac_m, *ac_i, *ac_p;
GtkCheckButton *chk_db;
GtkEntry *name;
gint response;

priv = item->priv;
Expand Down Expand Up @@ -618,6 +619,7 @@ edit_properties_punta (PartItem *item)

radio_v = GTK_RADIO_BUTTON (glade_xml_get_widget (gui, "radio_v"));
radio_c = GTK_RADIO_BUTTON (glade_xml_get_widget (gui, "radio_c"));
name = GTK_ENTRY (glade_xml_get_widget (gui, "name"));

/* FIXME : Desactivada mientras se trabaja en el backend */
gtk_widget_set_sensitive (GTK_WIDGET (radio_c), FALSE);
Expand Down Expand Up @@ -657,6 +659,8 @@ edit_properties_punta (PartItem *item)
} else if (!g_strcasecmp (prop->name, "ac_db")) {
if (!g_strcasecmp (prop->value, "true"))
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chk_db), TRUE);
} else if (!g_strcasecmp (prop->name, "name")) {
gtk_entry_set_text (name, prop->value);
}
}
}
Expand Down Expand Up @@ -697,6 +701,9 @@ edit_properties_punta (PartItem *item)
prop->value = g_strdup ("true");
else
prop->value = g_strdup ("false");
} else if (!g_strcasecmp (prop->name, "name")) {
g_free (prop->value);
prop->value = g_strdup (gtk_entry_get_text (name));
}
}
}
Expand Down

0 comments on commit 43e2025

Please sign in to comment.