1 /* gEDA - GPL Electronic Design Automation
2  * gattrib -- gEDA component and net attribute manipulation using spreadsheet.
3  * Copyright (C) 2003-2010 Stuart D. Brorson.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 /* ----------------------------------------------------------------- */
21 /*! \file
22  *  \brief Definitions of structures used in gattrib
23  *
24  *  This file holds definitions of the structures used in gattrib.
25  */
26 /* ----------------------------------------------------------------- */
27 
28 
29 #ifndef SHEET_DATA_STRUCT
30 #define SHEET_DATA_STRUCT
31 
32 #include <gtk/gtk.h>
33 #include <gdk/gdk.h>
34 #include <gdk/gdkkeysyms.h>
35 
36 #include <glib.h>
37 #include <glib-object.h>
38 
39 /* -------  Includes needed to make the GTK stuff work  ------ */
40 
41 #include "gtksheet_2_2.h"
42 
43 
44 /* ========  Data structures used in processing below here  ========== */
45 
46 
47 /* ----------------------------------------------------------------- *
48  *  The sheet data hierarchy built by the prog should look like this:
49  *  SHEET_DATA->(STRING_LIST *master_XXX_list)          // list of comps/nets/pins (row labels)
50  *            ->(STRING_LIST *master_XXX_attrib_list)   // list of attached names  (column labels)
51  *            ->(TABLE *XXX_table)                      // table of attrib values (table entries)
52  * ----------------------------------------------------------------- */
53 typedef struct st_sheet_data SHEET_DATA;
54 typedef struct st_table TABLE;
55 typedef struct st_string_list STRING_LIST;
56 typedef struct st_pin_list PIN_LIST;
57 typedef struct st_main_window MAIN_WINDOW;
58 
59 
60 /* -------------------------------------------------------------------- */
61 /*! \brief Sheet data structure
62  *
63  * st_sheet_data defines SHEET_DATA, and holds master lists holding
64  * sorted lists of comp/netlist names.  Also holds pointers to the heads
65  * of the attribute-holding component and net structures.
66  */
67 /* -------------------------------------------------------------------- */
68 struct st_sheet_data {
69   STRING_LIST *master_comp_list_head;         /*!< Sorted list of all component refdeses used in design */
70   STRING_LIST *master_comp_attrib_list_head;  /*!< Sorted list of all component attribs used in design */
71   int comp_count;                             /*!< This cannnot change -- user must edit design using gschem */
72   int comp_attrib_count;                      /*!< This can change in this prog if the user adds attribs */
73 
74   STRING_LIST *master_net_list_head;          /*!< Sorted list of all net names used in design */
75   STRING_LIST *master_net_attrib_list_head;   /*!< Sorted list of all net attribs used in design */
76   int net_count;                              /*!< This cannnot change -- user must edit design using gschem */
77   int net_attrib_count;                       /*!< This can change in this prog if the user adds attribs */
78 
79   STRING_LIST *master_pin_list_head;          /*!< Sorted list of all refdes:pin items used in design.   */
80   STRING_LIST *master_pin_attrib_list_head;   /*!< Sorted list of all pin attribs used in design */
81   int pin_count;                              /*!< This cannnot change -- user must edit design using gschem */
82   int pin_attrib_count;                       /*!< This can change in this prog if the user adds attribs */
83 
84 
85   TABLE **component_table;                    /*!< points to 2d array of component attribs */
86   TABLE **net_table;                          /*!< points to 2d array of net attribs */
87   TABLE **pin_table;                          /*!< points to 2d array of pin attribs */
88 
89   int CHANGED;                                /*!< for "file not saved" warning upon exit */
90 };
91 
92 
93 
94 /* -------------------------------------------------------------------- */
95 /* \brief Table cell struct
96  *
97  * st_table defined what is held in a spreadsheet cell for both
98  * comp and net spreadsheets.  Holds pointer to individual comp/net name, and
99  * pointer to attrib list.  Ideally, the name pointer points to the
100  * refdes/netname string held in the TOPLEVEL data structure, so that
101  * when SHEET_DATA is manipulated, so is TOPLEVEL.
102  */
103 /* -------------------------------------------------------------------- */
104 struct st_table {
105   int row;                       /*!< location on spreadsheet */
106   int col;                       /*!< location on spreadsheet */
107   gchar *row_name;               /*!< comp, net, or refdes:pin name */
108   gchar *col_name;               /*!< attrib name */
109   gchar *attrib_value;           /*!< attrib value */
110   gint visibility;
111   gint show_name_value;
112 
113 };
114 
115 
116 /* -------------------------------------------------------------------- */
117 /*! \brief A list of strings.
118  *
119  * STRING_LIST is a doubly-linked list of strings.  This struct is
120  * used for several different jobs, including serving as base class
121  * for master lists.
122  *
123  * \todo Consider replacing with a GList-based implementation
124  */
125 /* -------------------------------------------------------------------- */
126 struct st_string_list {
127   gchar *data;     /*!< points to zero-terminated string */
128   int pos;         /*!< position on spreadsheet */
129   int length;      /*!< number of items in list */
130   STRING_LIST *prev; /*!< pointer to previous item in linked list */
131   STRING_LIST *next; /*!< pointer to next item in linked list */
132 };
133 
134 /* -------------------------------------------------------------------- */
135 /*! \brief A list of pins
136  *
137  * PIN_LIST is a special struct used for keeping track of pins.  Since
138  * the master_pin_list must keep track of both refdes and pin, we need a
139  * special struct for pins.  Later processing will for a STRING_LIST
140  * of refdes:pinnumber pairs for insertion in the spreadsheet.
141  *
142  * \todo Is this still in use? Consider replacing with a GList-based
143  *       implementation.
144  */
145 /* -------------------------------------------------------------------- */
146 struct st_pin_list {
147   gchar *refdes;       /*!< holds refdes string */
148   gint pinnumber;
149   gchar *pinlabel;     /*!< holds pin label string */
150   int pos;             /*!< pos on spreadsheet */
151   int length;          /*!< number of items in list */
152   PIN_LIST *prev;
153   PIN_LIST *next;
154 };
155 
156 #endif // #ifndef SHEET_DATA_STRUCT
157 
158 
159 
160 
161 
162 
163