[project @ 8]
[mussa.git] / mussa_gui_seq.cc
1 #include "mussa_gui_seq.hh"
2 #include <sstream>
3
4 SeqWinMaster::SeqWinMaster(int x_size, string name, int sq_num, 
5                            vector<Sequence> *some_seqs, 
6                            list<vector<int> > some_paths, 
7                            vector<int> some_lens,
8                            vector<motif> *some_motifs)
9 {
10   int seq_i;
11
12   x_max = x_size;
13   // give 50 pixels of height per sequence
14   y_max = sq_num * 50;
15
16   // most of this stuff is here just to pass to SeqView object
17   ana_name = name;
18   seq_num = sq_num;
19   S = some_seqs;
20   P = some_paths;
21   seq_lens = some_lens;
22   the_motifs = some_motifs;
23 }
24
25
26 void
27 set_align_cb(Fl_Widget* widg, void* the_data)
28 {
29   menu_align_data_bundle * blah = (menu_align_data_bundle *) the_data;
30   SeqWinMaster* T= blah->swm_ptr;
31   T->real_set_align_cb(blah->which_align);
32 }
33
34
35 void
36 SeqWinMaster::real_set_align_cb(int which_align)
37 {
38   vector<int> a_path;
39   int window_length;
40
41
42   a_path = *P.begin();
43   window_length = a_path[0];
44   cout << window_length << endl;
45
46   cout << "fum1\n";    
47   seq_box->align_offsets(which_align);
48   seq_box->redraw();
49 }
50
51
52 void
53 show_align_cb(Fl_Widget* widg, void* the_data)
54 {
55   menu_align_data_bundle * blah = (menu_align_data_bundle *) the_data;
56   SeqWinMaster* T= blah->swm_ptr;
57   T->real_show_align_cb(blah->which_align);
58 }
59
60
61 void
62 SeqWinMaster::real_show_align_cb(int which_align)
63 {
64   vector<int> a_path;
65   int window_length;
66
67
68   cout << "fumish\n";    
69   seq_box->toggle_align(which_align);
70   seq_box->redraw();
71 }
72
73
74 void
75 toggle_bars_cb(Fl_Button* o, void* v)
76 {
77   SeqWinMaster* T=(SeqWinMaster*)v;
78   T->real_toggle_bars_cb();
79 }
80
81
82 void
83 SeqWinMaster::real_toggle_bars_cb()
84 {
85   seq_box->toggle_bars();
86 }
87
88
89 void
90 toggle_motifs_cb(Fl_Button* o, void* v)
91 {
92   SeqWinMaster* T=(SeqWinMaster*)v;
93   T->real_toggle_motifs_cb();
94 }
95
96
97 void
98 SeqWinMaster::real_toggle_motifs_cb()
99 {
100   seq_box->toggle_motifs();
101 }
102
103
104 void
105 SeqWinMaster::make_window()
106 {
107   menu_align_data_bundle * some_menu_data;
108
109   vector<int> a_path;
110   int window_length, align_number;
111   int i;
112   ostringstream align_id_ostr;
113   string align_id_string;
114   list<vector<int> >::iterator align_iter;
115
116   Fl_Double_Window *seq_window = new Fl_Double_Window(x_max, y_max,
117                                                       "Mussa Sequence");
118   //seq_window->resizable();
119   seq_window->color(FL_WHITE);
120   seq_window->begin();
121
122   // make the menu that allows alignment selection
123   choose_align_menu = new Fl_Menu_Button(3, 2, 180, 30, "Choose Alignment");
124   choose_align_menu->color(FL_WHITE,FL_BLUE);
125   choose_align_menu->box(FL_PLASTIC_UP_BOX);
126   choose_align_menu->clear();
127   
128   // make the menu that allows alignment selection
129   show_align_menu = new Fl_Menu_Button(186, 2, 180, 30, "Show Alignment");
130   show_align_menu->color(FL_WHITE,FL_BLUE);
131   show_align_menu->box(FL_PLASTIC_UP_BOX);
132   show_align_menu->clear();
133   align_iter = P.begin();
134   align_number = 0;
135   while(align_iter != P.end())
136   {
137     some_menu_data = new menu_align_data_bundle;
138     some_menu_data->swm_ptr = this;
139     some_menu_data->which_align = align_number;
140     align_id_ostr << (*align_iter)[0] << ": ";
141     for(i = 1; i <= seq_num; i++)
142       align_id_ostr << (*align_iter)[i] << ", ";
143     align_id_string = align_id_ostr.str();
144     choose_align_menu->add((const char*)align_id_string.c_str(), 0, 
145                            (Fl_Callback *) set_align_cb, 
146                            (void*) some_menu_data);
147     show_align_menu->add((const char*)align_id_string.c_str(), 0, 
148                            (Fl_Callback *) show_align_cb, 
149                            (void*) some_menu_data, FL_MENU_TOGGLE|FL_MENU_VALUE);
150
151     align_id_ostr.str("");
152     ++align_number;
153     ++align_iter;
154   }
155
156   /*
157   show_align_menu->add("f&ee"); 
158   show_align_menu->add("f&ie"); 
159   show_align_menu->add("f&oe"); 
160   show_align_menu->add("f&um"); 
161   */
162
163   Fl_Button *test_but = new Fl_Button(369, 2, 180, 30, "Toggle Motifs");
164   test_but->color(FL_WHITE,FL_BLUE);
165   test_but->box(FL_PLASTIC_UP_BOX);
166   test_but->callback((Fl_Callback*) toggle_motifs_cb, this);
167
168   toggle_bars = new Fl_Button(552, 2, 180, 30, "Toggle 10bp bars");
169   toggle_bars->color(FL_WHITE,FL_BLUE);
170   toggle_bars->box(FL_PLASTIC_UP_BOX);
171   toggle_bars->callback((Fl_Callback*) toggle_bars_cb, this);
172  
173
174   // make the view of the sequence
175   seq_box = new SeqView(0, 34, x_max, y_max-34);
176   seq_box->setup(ana_name, seq_num, S, P, seq_lens, the_motifs);
177   //real_set_align_cb(2);
178
179   seq_window->end();
180   Fl::visual(FL_DOUBLE|FL_INDEX);
181   seq_window->show();
182 }
183
184 /*
185   some_menu_data = new menu_align_data_bundle;
186   some_menu_data->swm_ptr = this;
187   some_menu_data->which_align = 2;
188   choose_align_menu->add("f&ie", FL_ALT+'i', (Fl_Callback *) set_align_cb,
189                   (void*) some_menu_data);
190
191   some_menu_data = new menu_align_data_bundle;
192   some_menu_data->swm_ptr = this;
193   some_menu_data->which_align = 3;
194   choose_align_menu->add("f&oe", FL_ALT+'o', (Fl_Callback *) set_align_cb,
195                   (void*) some_menu_data);
196
197   some_menu_data = new menu_align_data_bundle;
198   some_menu_data->swm_ptr = this;
199   some_menu_data->which_align = 4;
200   choose_align_menu->add("f&um", FL_ALT+'u', (Fl_Callback *) set_align_cb,
201                   (void*) some_menu_data);
202 */
203
204
205
206