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