1 // This file is part of the Mussa source distribution.
2 // http://mussa.caltech.edu/
3 // Contact author: Tristan De Buysscher, tristan@caltech.edu
5 // This program and all associated source code files are Copyright (C) 2005
6 // the California Institute of Technology, Pasadena, CA, 91125 USA. It is
7 // under the GNU Public License; please see the included LICENSE.txt
8 // file for more information, or contact Tristan directly.
11 #include "gui/SeqWindow.hpp"
20 set_align_cb(Fl_Widget* widg, void* the_data)
22 menu_align_data_bundle * blah = (menu_align_data_bundle *) the_data;
23 SeqWindow* T= blah->swm_ptr;
24 T->real_set_align_cb(blah->which_align);
29 SeqWindow::real_set_align_cb(int which_align)
31 seq_box->align_offsets(which_align);
37 show_align_cb(Fl_Widget* widg, void* the_data)
39 menu_align_data_bundle * blah = (menu_align_data_bundle *) the_data;
40 SeqWindow* T= blah->swm_ptr;
41 T->real_show_align_cb(blah->which_align);
46 SeqWindow::real_show_align_cb(int which_align)
52 seq_box->toggle_align(which_align);
58 toggle_bars_cb(Fl_Button* o, void* v)
60 SeqWindow* T=(SeqWindow*)v;
61 T->real_toggle_bars_cb();
66 SeqWindow::real_toggle_bars_cb()
68 seq_box->toggle_bars();
73 toggle_motifs_cb(Fl_Button* o, void* v)
75 SeqWindow* T=(SeqWindow*)v;
76 T->real_toggle_motifs_cb();
81 SeqWindow::real_toggle_motifs_cb()
83 seq_box->toggle_motifs();
87 // main code, window creation
89 SeqWindow::SeqWindow(int w, int h, const char* title, int sq_num,
90 vector<Sequence> *some_seqs,
91 list<ConservedPath > some_paths,
92 vector<int> some_lens,
93 vector<fltk_motif> *some_motifs):
94 Fl_Double_Window(w,h,title)
96 menu_align_data_bundle * some_menu_data;
97 int window_length, align_number;
99 ostringstream align_id_ostr;
100 string align_id_string;
101 list<ConservedPath >::iterator align_iter;
103 // most of this stuff is here just to pass to SeqView object
104 // some is needed to setup the window menus
108 seq_lens = some_lens;
109 the_motifs = some_motifs;
116 // make the menu that allows alignment selection
117 choose_align_menu = new Fl_Menu_Button(5, 2, 180, 30, "Choose Alignment");
118 choose_align_menu->color(FL_WHITE,FL_BLUE);
119 choose_align_menu->box(FL_BORDER_BOX);
120 choose_align_menu->clear();
122 // make the menu that allows alignment selection
123 show_align_menu = new Fl_Menu_Button(190, 2, 180, 30, "Show Alignment");
124 show_align_menu->color(FL_WHITE,FL_BLUE);
125 show_align_menu->box(FL_BORDER_BOX);
126 show_align_menu->clear();
129 // adds menu items for each path
130 align_iter = P.begin();
132 while(align_iter != P.end())
134 some_menu_data = new menu_align_data_bundle;
135 some_menu_data->swm_ptr = this;
136 some_menu_data->which_align = align_number;
137 align_id_ostr << (*align_iter).window_size << ": ";
138 for(i = 0; i != seq_num; i++)
139 align_id_ostr << (*align_iter).track_indexes[i] << ", ";
140 align_id_string = align_id_ostr.str();
141 choose_align_menu->add((const char*)align_id_string.c_str(), 0,
142 (Fl_Callback *) set_align_cb,
143 (void*) some_menu_data);
144 show_align_menu->add((const char*)align_id_string.c_str(), 0,
145 (Fl_Callback *) show_align_cb,
146 (void*) some_menu_data, FL_MENU_TOGGLE|FL_MENU_VALUE);
148 align_id_ostr.str("");
153 Fl_Button *test_but = new Fl_Button(375, 2, 150, 30, "Toggle Motifs");
154 test_but->color(FL_WHITE,FL_BLUE);
155 test_but->box(FL_BORDER_BOX);
156 test_but->callback((Fl_Callback*) toggle_motifs_cb, this);
158 toggle_bars = new Fl_Button(530, 2, 150, 30, "Toggle 10bp bars");
159 toggle_bars->color(FL_WHITE,FL_BLUE);
160 toggle_bars->box(FL_BORDER_BOX);
161 toggle_bars->callback((Fl_Callback*) toggle_bars_cb, this);
164 // make the view of the sequence
165 seq_box = new SeqView(0, 34, w, h-34);
166 seq_box->setup(analysis_name, seq_num, S, P, seq_lens, the_motifs);
167 //real_set_align_cb(2);
170 Fl::visual(FL_DOUBLE|FL_INDEX);