1 #include <objseq.h>
2 #include <seqport.h>
3 #include <gather.h>
4 #include <picture.h>
5 #include <viewer.h>
6 #include <ncbibs.h>
7
8 #include <seqanal.h>
9 #include <seqgraph.h>
10
ButRegNew(void)11 extern ButRegPtr ButRegNew (void)
12 {
13 ButRegPtr burp;
14 Int4 i;
15
16 if ((burp = (ButRegPtr) MemNew (sizeof (ButReg))) == NULL)
17 return burp;
18
19 burp->b = NULL;
20 burp->g = NULL;
21 burp->c = NULL;
22
23 burp->b = (ButtoN PNTR) MemNew (sizeof (ButtoN) * BCOUNT);
24 burp->g = (GrouP PNTR) MemNew (sizeof (GrouP) * BCOUNT);
25 burp->c = (Int4 PNTR) MemNew (sizeof (Int4) * BCOUNT);
26
27 if (burp->b == NULL || burp->g == NULL || burp->c == NULL)
28 {
29 MemFree (burp->b);
30 MemFree (burp->b);
31 MemFree (burp->b);
32 return (ButRegPtr) MemFree (burp);
33 }
34
35 i = 0;
36 while (i < BCOUNT)
37 {
38 burp->b[i] = NULL;
39 burp->g[i] = NULL;
40 burp->c[i] = 0;
41 i++;
42 }
43 return burp;
44 }
45
ButRegFree(ButRegPtr burp)46 extern ButRegPtr ButRegFree (ButRegPtr burp)
47 {
48 burp->b = (ButtoN PNTR) MemFree (burp->b);
49 burp->g = (GrouP PNTR) MemFree (burp->g);
50 burp->c = (Int4 PNTR) MemFree (burp->c);
51 return (ButRegPtr) MemFree (burp);
52 }
53
ButRegAdd(ButRegPtr burp,ButtoN b,GrouP g,Int4 current)54 extern void ButRegAdd (ButRegPtr burp, ButtoN b, GrouP g, Int4 current)
55 {
56 Int4 i;
57
58 if (g == NULL)
59 return;
60
61 i = 0;
62 while (i < BCOUNT)
63 {
64 if (burp->b[i] == NULL)
65 {
66 burp->b[i] = b;
67 burp->g[i] = g;
68 burp->c[i] = current;
69 return;
70 }
71 i++;
72 }
73 return;
74 }
75
ButRegSelectProc(ButtoN b)76 extern void ButRegSelectProc (ButtoN b)
77 {
78 ButRegPtr burp;
79 Int4 i;
80
81 if (b != NULL)
82 {
83 if ((burp = (ButRegPtr) GetObjectExtra (b)) != NULL)
84 {
85 i = 0;
86 while (i < BCOUNT)
87 {
88 if (burp->b[i] == b && burp->c[i] == 1)
89 {
90 return;
91 }
92 i++;
93 }
94 i = 0;
95 while (i < BCOUNT)
96 {
97 if (burp->c[i] == 1)
98 {
99 Disable (burp->g[i]);
100 burp->c[i] = 0;
101 }
102 i++;
103 }
104 i = 0;
105 while (i < BCOUNT)
106 {
107 if (burp->b[i] == b)
108 {
109 Enable (burp->g[i]);
110 burp->c[i] = 1;
111 return;
112 }
113 i++;
114 }
115 }
116 }
117 return;
118 }
119
AnalyseSeqAnalProc(ButtoN b)120 static void AnalyseSeqAnalProc (ButtoN b)
121 {
122 SeqAnalFormPtr sqap;
123 ButRegPtr burp;
124 Int4 i, j;
125
126 if (b != NULL)
127 {
128 if ((sqap = (SeqAnalFormPtr) GetObjectExtra (b)) != NULL)
129 {
130 burp = sqap->burp;
131 i = 0;
132 while (i < BCOUNT)
133 {
134 if (burp->c[i] == 1)
135 break;
136 i++;
137 }
138 if (i == BCOUNT)
139 return;
140 if ((j = (Int4) GetValue (burp->g[i])) == 0)
141 return;
142 }
143 }
144 return;
145 }
146
SeqAnalFormNew(void)147 extern SeqAnalFormPtr SeqAnalFormNew (void)
148 {
149 SeqAnalFormPtr sqap;
150
151 sqap = (SeqAnalFormPtr) MemNew (sizeof (SeqAnalForm));
152 if (sqap != NULL)
153 {
154 sqap->burp = NULL;
155 }
156 return sqap;
157 }
158
SeqAnalFormFree(SeqAnalFormPtr sqap)159 extern SeqAnalFormPtr SeqAnalFormFree (SeqAnalFormPtr sqap)
160 {
161 sqap = MemFree (sqap);
162 return sqap;
163 }
164
CleanupSeqAnalForm(GraphiC g,VoidPtr data)165 static void CleanupSeqAnalForm (GraphiC g, VoidPtr data)
166 {
167 SeqAnalFormPtr sqap;
168
169 if ((sqap = (SeqAnalFormPtr) data) != NULL)
170 {
171 WatchCursor ();
172 ButRegFree (sqap->burp);
173 ArrowCursor ();
174 }
175 StdCleanupFormProc (g, data);
176 return;
177 }
178
CloseSeqAnalProc(ButtoN b)179 static void CloseSeqAnalProc (ButtoN b)
180 {
181 WindoW w;
182 SeqAnalFormPtr sqap;
183
184 if (b != NULL)
185 {
186 if ((sqap = (SeqAnalFormPtr) GetObjectExtra (b)) != NULL)
187 {
188 w = (WindoW) sqap->form;
189 Remove (w);
190 }
191 }
192 return;
193 }
194
BioseqPtrToSeqAnalForm(ForM f,Pointer data)195 extern void BioseqPtrToSeqAnalForm (ForM f, Pointer data)
196 {
197 SeqAnalFormPtr sqap;
198 BioseqPtr bsp;
199 GrouP g, g2;
200 GrouP h, h2;
201 ButtoN bc, ba, b2;
202 ButRegPtr burp;
203
204 WatchCursor ();
205 sqap = (SeqAnalFormPtr) GetObjectExtra (f);
206 bsp = (BioseqPtr) data;
207 if (sqap != NULL && bsp != NULL)
208 {
209 if ((burp = ButRegNew ()) != NULL)
210 {
211 sqap->burp = burp;
212 g = HiddenGroup ((WindoW) sqap->form, -1, 0, NULL);
213 /*
214 g1 = NormalGroup (g, 2, 0, "Patterns", NULL, NULL);
215 b1 = PushButton (g1, " ", ButRegSelectProc);
216 SetObjectExtra (b1, burp, NULL);
217 h1 = HiddenGroup (g1, 6, 0, NULL);
218 RadioButton (h1, "Canned");
219 RadioButton (h1, "Select");
220 SetValue (h1, 1);
221 Enable (h1);
222 ButRegAdd (burp, b1, h1, 1);
223 */
224 g2 = NormalGroup (g, 2, 0, "Profiles", NULL, NULL);
225 b2 = PushButton (g2, " ", ButRegSelectProc);
226 SetObjectExtra (b2, burp, NULL);
227 h2 = HiddenGroup (g2, 6, 0, NULL);
228 RadioButton (h2, "Canned");
229 RadioButton (h2, "Select");
230 SetValue (h2, 1);
231 Disable (h2);
232 ButRegAdd (burp, b2, h2, 0);
233
234 h = HiddenGroup (g, 2, 0, NULL);
235 ba = PushButton (h, "Analyse", AnalyseSeqAnalProc);
236 SetObjectExtra (ba, sqap, NULL);
237 bc = PushButton (h, "Close", CloseSeqAnalProc);
238 SetObjectExtra (bc, sqap, NULL);
239 }
240 }
241 ArrowCursor ();
242 return;
243 }
244
CreateSeqAnalForm(Int2 left,Int2 top,CharPtr title,BioseqPtr bsp)245 extern ForM CreateSeqAnalForm (Int2 left, Int2 top, CharPtr title,
246 BioseqPtr bsp)
247 {
248 WindoW w;
249 SeqAnalFormPtr sqap;
250
251 w = NULL;
252 if (bsp == NULL)
253 return (ForM) w;
254 sqap = SeqAnalFormNew ();
255 if (sqap != NULL)
256 {
257 w = DocumentWindow (left, top, -10, -10, title,
258 NULL, NULL);
259 SetObjectExtra (w, sqap, CleanupSeqAnalForm);
260 sqap->form = (ForM) w;
261 sqap->actproc = NULL;
262 sqap->toform = BioseqPtrToSeqAnalForm;
263 sqap->bsp = bsp;
264 sqap->entityID = 0;
265 sqap->itemID = 0;
266 }
267 return (ForM) w;
268 }
269