Updated the quantize buttons with real pictures.
[epichord.git] / src / ui.cpp
blob60b2e9c223695185820fb7a7fb80e12b680f99f8
1 // generated by Fast Light User Interface Designer (fluid) version 2.1000
3 #include "ui.h"
4 /*
5 Epichord - a midi sequencer
6 Copyright (C) 2008 Evan Rinehart
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License
10 as published by the Free Software Foundation; either version 2
11 of the License, or (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to
21 The Free Software Foundation, Inc.
22 51 Franklin Street, Fifth Floor
23 Boston, MA 02110-1301, USA
25 #include <fltk/events.h>
26 #include <fltk/file_chooser.h>
27 #include "backend.h"
28 #include "util.h"
29 #include "uihelper.h"
30 #include "config.h"
31 extern UI* ui;
33 inline void UI::cb_main_window_i(fltk::Window* o, void*) {
34 config_window->hide();
35 help_window->hide();
36 action_window->hide();
37 o->hide();
39 void UI::cb_main_window(fltk::Window* o, void* v) {
40 ((UI*)(o->user_data()))->cb_main_window_i(o,v);
43 inline void UI::cb__i(fltk::Button*, void*) {
44 ui->track_info->toggle_controls();
46 void UI::cb_(fltk::Button* o, void* v) {
47 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb__i(o,v);
50 inline void UI::cb_1_i(fltk::Button*, void*) {
51 ui->pattern_edit->hide();
52 ui->song_edit->activate();
53 ui->song_edit->show();
54 ui->song_edit->take_focus();
56 void UI::cb_1(fltk::Button* o, void* v) {
57 ((UI*)(o->parent()->parent()->parent()->parent()->user_data()))->cb_1_i(o,v);
60 inline void UI::cb_play_button_i(fltk::Button*, void*) {
61 press_play();
63 void UI::cb_play_button(fltk::Button* o, void* v) {
64 ((UI*)(o->parent()->parent()->user_data()))->cb_play_button_i(o,v);
67 inline void UI::cb_stop_button_i(fltk::Button*, void*) {
68 press_stop();
70 void UI::cb_stop_button(fltk::Button* o, void* v) {
71 ((UI*)(o->parent()->parent()->user_data()))->cb_stop_button_i(o,v);
74 inline void UI::cb_record_button_i(fltk::Button*, void*) {
75 toggle_backend_recording();
77 void UI::cb_record_button(fltk::Button* o, void* v) {
78 ((UI*)(o->parent()->parent()->user_data()))->cb_record_button_i(o,v);
81 inline void UI::cb_loop_toggle_i(fltk::Button*, void*) {
82 toggle_loop();
84 void UI::cb_loop_toggle(fltk::Button* o, void* v) {
85 ((UI*)(o->parent()->parent()->user_data()))->cb_loop_toggle_i(o,v);
88 inline void UI::cb_config_button_i(fltk::Button*, void*) {
89 ui->config_window->show();
91 void UI::cb_config_button(fltk::Button* o, void* v) {
92 ((UI*)(o->parent()->parent()->user_data()))->cb_config_button_i(o,v);
95 inline void UI::cb_file_button_i(fltk::Button*, void*) {
96 //load(fltk::file_chooser("save file",NULL,"~"));
97 ui->action_window->show();
99 void UI::cb_file_button(fltk::Button* o, void* v) {
100 ((UI*)(o->parent()->parent()->user_data()))->cb_file_button_i(o,v);
103 inline void UI::cb_help_button_i(fltk::Button*, void*) {
104 help_window->show();
106 void UI::cb_help_button(fltk::Button* o, void* v) {
107 ((UI*)(o->parent()->parent()->user_data()))->cb_help_button_i(o,v);
110 inline void UI::cb_qbutton4_i(fltk::Button*, void*) {
111 set_quant(4);
113 void UI::cb_qbutton4(fltk::Button* o, void* v) {
114 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton4_i(o,v);
117 inline void UI::cb_qbutton8_i(fltk::Button*, void*) {
118 set_quant(8);
120 void UI::cb_qbutton8(fltk::Button* o, void* v) {
121 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton8_i(o,v);
124 inline void UI::cb_qbutton16_i(fltk::Button*, void*) {
125 set_quant(16);
127 void UI::cb_qbutton16(fltk::Button* o, void* v) {
128 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton16_i(o,v);
131 inline void UI::cb_qbutton32_i(fltk::Button*, void*) {
132 set_quant(32);
134 void UI::cb_qbutton32(fltk::Button* o, void* v) {
135 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton32_i(o,v);
138 inline void UI::cb_qbutton64_i(fltk::Button*, void*) {
139 set_quant(64);
141 void UI::cb_qbutton64(fltk::Button* o, void* v) {
142 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton64_i(o,v);
145 inline void UI::cb_qbutton128_i(fltk::Button*, void*) {
146 set_quant(128);
148 void UI::cb_qbutton128(fltk::Button* o, void* v) {
149 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton128_i(o,v);
152 inline void UI::cb_qbutton0_i(fltk::Button*, void*) {
153 set_quant(0);
155 void UI::cb_qbutton0(fltk::Button* o, void* v) {
156 ((UI*)(o->parent()->parent()->parent()->user_data()))->cb_qbutton0_i(o,v);
159 inline void UI::cb_bpm_wheel_i(fltk::ThumbWheel* o, void*) {
160 set_bpm((int)o->value());
161 ui->bpm_output->value(o->value());
163 void UI::cb_bpm_wheel(fltk::ThumbWheel* o, void* v) {
164 ((UI*)(o->parent()->user_data()))->cb_bpm_wheel_i(o,v);
167 inline void UI::cb_new_i(fltk::Button*, void*) {
168 clear();
169 init_seq();
170 track_info->update();
171 action_window->hide();
173 void UI::cb_new(fltk::Button* o, void* v) {
174 ((UI*)(o->parent()->user_data()))->cb_new_i(o,v);
177 inline void UI::cb_save_i(fltk::Button*, void*) {
178 action_window->hide();
179 save();
181 void UI::cb_save(fltk::Button* o, void* v) {
182 ((UI*)(o->parent()->user_data()))->cb_save_i(o,v);
185 inline void UI::cb_save1_i(fltk::Button*, void*) {
186 action_window->hide();
187 save(fltk::file_chooser("save file",NULL,get_last_dir()));
189 void UI::cb_save1(fltk::Button* o, void* v) {
190 ((UI*)(o->parent()->user_data()))->cb_save1_i(o,v);
193 inline void UI::cb_load_i(fltk::Button*, void*) {
194 action_window->hide();
195 load(fltk::file_chooser("open file",NULL,get_last_dir()));
197 void UI::cb_load(fltk::Button* o, void* v) {
198 ((UI*)(o->parent()->user_data()))->cb_load_i(o,v);
201 inline void UI::cb_export_i(fltk::Button*, void*) {
202 action_window->hide();
203 savesmf(fltk::file_chooser("export file",NULL,get_last_dir()));
205 void UI::cb_export(fltk::Button* o, void* v) {
206 ((UI*)(o->parent()->user_data()))->cb_export_i(o,v);
209 UI::UI() {
210 fltk::Window* w;
211 {fltk::Window* o = main_window = new fltk::Window(640, 480, "Epichord");
212 o->shortcut(0xff1b);
213 o->callback((fltk::Callback*)cb_main_window, (void*)(this));
214 o->begin();
215 {fltk::Group* o = new fltk::Group(0, 0, 640, 445);
216 o->begin();
217 {fltk::Group* o = song_edit = new fltk::Group(0, 0, 640, 445);
218 o->begin();
219 {fltk::Group* o = new fltk::Group(0, 0, 255, 445);
220 o->set_vertical();
221 o->box(fltk::FLAT_BOX);
222 o->begin();
223 {TrackInfo* o = track_info = new TrackInfo(0, 15, 255, 415, "track info");
224 o->set_vertical();
225 fltk::Group::current()->resizable(o);
227 {fltk::Button* o = new fltk::Button(0, 0, 255, 15, "@+");
228 o->callback((fltk::Callback*)cb_);
230 o->end();
232 {fltk::Group* o = new fltk::Group(255, 0, 385, 15);
233 o->begin();
234 {Timeline* o = song_timeline = new Timeline(0, 0, 370, 15, "timeline");
235 fltk::Group::current()->resizable(o);
236 o->scale=16;
237 o->label_scale=4;
239 o->end();
241 {fltk::ScrollGroup* o = song_scroll = new fltk::ScrollGroup(255, 15, 385, 430);
242 o->set_vertical();
243 o->begin();
244 {Arranger* o = arranger = new Arranger(0, 0, 245, 220, "arranger");
245 o->box(fltk::FLAT_BOX);
246 o->resize(1000,1000);
248 o->end();
249 o->type(fltk::ScrollGroup::BOTH_ALWAYS);
250 fltk::Group::current()->resizable(o);
252 o->end();
254 {fltk::Group* o = pattern_edit = new fltk::Group(0, 0, 640, 445);
255 o->hide();
256 o->begin();
257 {fltk::Group* o = new fltk::Group(45, 0, 595, 445);
258 o->begin();
259 {fltk::Group* o = new fltk::Group(0, 0, 595, 15);
260 o->begin();
261 {Timeline* o = pattern_timeline = new Timeline(0, 0, 580, 15, "timeline");
262 o->box(fltk::FLAT_BOX);
263 fltk::Group::current()->resizable(o);
265 o->end();
267 {fltk::ScrollGroup* o = pattern_scroll = new fltk::ScrollGroup(0, 15, 595, 355);
268 o->box(fltk::FLAT_BOX);
269 o->shortcut(0xff1b);
270 o->when(fltk::WHEN_CHANGED);
271 o->begin();
272 {PianoRoll* o = piano_roll = new PianoRoll(0, 0, 595, 355, "pianoroll");
273 o->box(fltk::FLAT_BOX);
274 fltk::Group::current()->resizable(o);
275 o->resize(960,900);
277 o->end();
278 o->type(fltk::ScrollGroup::BOTH_ALWAYS);
279 fltk::Group::current()->resizable(o);
281 {fltk::Group* o = new fltk::Group(0, 370, 595, 75);
282 o->begin();
283 {EventEdit* o = event_edit = new EventEdit(0, 0, 580, 75, "event editor");
284 o->box(fltk::FLAT_BOX);
285 fltk::Group::current()->resizable(o);
287 {fltk::Button* o = new fltk::Button(580, 0, 15, 15, "E");
288 o->tooltip("pick event type");
290 {fltk::Button* o = new fltk::Button(580, 15, 15, 15, "Q");
291 o->tooltip("quantization resolution");
293 new fltk::Button(580, 30, 15, 15, "?");
294 new fltk::Button(580, 45, 15, 15, "?");
295 new fltk::Button(580, 60, 15, 15, "?");
296 o->end();
298 o->end();
299 fltk::Group::current()->resizable(o);
301 {fltk::Group* o = new fltk::Group(0, 0, 45, 445);
302 o->begin();
303 new fltk::Button(0, 0, 45, 15, "@+");
304 {fltk::Group* o = new fltk::Group(0, 15, 45, 340);
305 o->set_vertical();
306 o->begin();
307 {TrackSelect* o = track_select = new TrackSelect(0, 35, 45, 305, "track picker");
308 o->set_vertical();
310 {SampleView* o = sample_view = new SampleView(0, 35, 45, 305, "sample names");
311 o->set_vertical();
313 {Keyboard* o = keyboard = new Keyboard(0, 0, 45, 340, "keyboard");
314 o->set_vertical();
316 o->end();
317 fltk::Group::current()->resizable(o);
319 {fltk::Button* o = new fltk::Button(0, 370, 45, 75, "@<-");
320 o->set_vertical();
321 o->callback((fltk::Callback*)cb_1);
323 o->end();
325 o->end();
327 o->end();
328 fltk::Group::current()->resizable(o);
330 {fltk::Group* o = new fltk::Group(0, 445, 640, 35);
331 o->box(fltk::UP_BOX);
332 o->begin();
333 {fltk::Button* o = play_button = new fltk::Button(5, 5, 25, 25, "@>");
334 o->labelcolor((fltk::Color)0x800000);
335 o->callback((fltk::Callback*)cb_play_button);
337 {fltk::Button* o = stop_button = new fltk::Button(35, 5, 25, 25, "@square");
338 o->labelcolor((fltk::Color)0x800000);
339 o->callback((fltk::Callback*)cb_stop_button);
341 {fltk::Button* o = record_button = new fltk::Button(65, 5, 25, 25, "@circle");
342 o->labelcolor((fltk::Color)0xff000000);
343 o->callback((fltk::Callback*)cb_record_button);
344 o->type(fltk::Button::TOGGLE);
346 {fltk::Group* o = new fltk::Group(95, 0, 20, 35);
347 o->set_vertical();
348 fltk::Group::current()->resizable(o);
350 {fltk::Button* o = loop_toggle = new fltk::Button(490, 5, 25, 25);
351 o->callback((fltk::Callback*)cb_loop_toggle);
352 o->tooltip("toggle looping");
353 o->type(fltk::Button::TOGGLE);
355 {fltk::Button* o = keyboard_toggle = new fltk::Button(520, 5, 25, 25);
356 o->tooltip("toggle keyboard");
357 o->type(fltk::Button::TOGGLE);
359 {fltk::Button* o = config_button = new fltk::Button(550, 5, 25, 25);
360 o->callback((fltk::Callback*)cb_config_button);
361 o->tooltip("config");
363 {fltk::Button* o = file_button = new fltk::Button(580, 5, 25, 25);
364 o->callback((fltk::Callback*)cb_file_button);
366 {fltk::Button* o = help_button = new fltk::Button(610, 5, 25, 25);
367 o->callback((fltk::Callback*)cb_help_button);
368 o->tooltip("help");
370 {fltk::Group* o = new fltk::Group(310, 5, 175, 25);
371 o->begin();
372 {fltk::Button* o = qbutton4 = new fltk::Button(0, 0, 25, 25);
373 o->callback((fltk::Callback*)cb_qbutton4);
374 o->type(fltk::Button::TOGGLE);
376 {fltk::Button* o = qbutton8 = new fltk::Button(25, 0, 25, 25);
377 o->callback((fltk::Callback*)cb_qbutton8);
378 o->type(fltk::Button::TOGGLE);
380 {fltk::Button* o = qbutton16 = new fltk::Button(50, 0, 25, 25);
381 o->callback((fltk::Callback*)cb_qbutton16);
382 o->type(fltk::Button::TOGGLE);
383 o->state(1);
385 {fltk::Button* o = qbutton32 = new fltk::Button(75, 0, 25, 25);
386 o->callback((fltk::Callback*)cb_qbutton32);
387 o->type(fltk::Button::TOGGLE);
389 {fltk::Button* o = qbutton64 = new fltk::Button(100, 0, 25, 25);
390 o->callback((fltk::Callback*)cb_qbutton64);
391 o->type(fltk::Button::TOGGLE);
393 {fltk::Button* o = qbutton128 = new fltk::Button(125, 0, 25, 25);
394 o->callback((fltk::Callback*)cb_qbutton128);
395 o->type(fltk::Button::TOGGLE);
397 {fltk::Button* o = qbutton0 = new fltk::Button(150, 0, 25, 25);
398 o->callback((fltk::Callback*)cb_qbutton0);
399 o->type(fltk::Button::TOGGLE);
401 o->end();
403 o->end();
405 o->end();
406 o->size_range(640,455);
407 o->resize(640,455);
409 {fltk::Window* o = config_window = new fltk::Window(315, 260, "config");
410 o->shortcut(0xff1b);
411 o->user_data((void*)(this));
412 o->begin();
413 {fltk::ValueInput* o = new fltk::ValueInput(145, 10, 45, 20, "beats per measure");
414 o->minimum(2);
415 o->maximum(31);
416 o->step(1);
417 o->value(4);
419 {fltk::ValueInput* o = new fltk::ValueInput(145, 35, 45, 20, "measures per phrase");
420 o->maximum(128);
421 o->step(1);
422 o->value(4);
424 {fltk::ValueOutput* o = bpm_output = new fltk::ValueOutput(145, 60, 45, 20, "bpm");
425 o->minimum(1);
426 o->maximum(1000);
427 o->step(1);
428 o->value(120);
430 {fltk::ThumbWheel* o = bpm_wheel = new fltk::ThumbWheel(195, 60, 105, 20);
431 o->minimum(1);
432 o->maximum(1000);
433 o->step(1);
434 o->value(120);
435 o->callback((fltk::Callback*)cb_bpm_wheel);
436 o->align(fltk::ALIGN_LEFT);
438 {fltk::ValueInput* o = new fltk::ValueInput(145, 85, 45, 20, "metronome lead-in");
439 o->maximum(128);
440 o->step(1);
441 o->value(4);
443 {fltk::CheckButton* o = new fltk::CheckButton(145, 110, 25, 25, "always hard copy");
444 o->align(fltk::ALIGN_LEFT);
446 {fltk::CheckButton* o = new fltk::CheckButton(285, 110, 25, 25, "auto track name");
447 o->align(fltk::ALIGN_LEFT);
449 {fltk::CheckButton* o = new fltk::CheckButton(145, 135, 25, 26, "record pass-thru");
450 o->set_flag(fltk::STATE);
451 o->align(fltk::ALIGN_LEFT);
453 {fltk::CheckButton* o = new fltk::CheckButton(285, 135, 25, 26, "play note insertion");
454 o->set_flag(fltk::STATE);
455 o->align(fltk::ALIGN_LEFT);
457 {fltk::CheckButton* o = new fltk::CheckButton(145, 160, 25, 26, "follow playback");
458 o->set_flag(fltk::STATE);
459 o->align(fltk::ALIGN_LEFT);
461 {fltk::CheckButton* o = new fltk::CheckButton(285, 160, 25, 26, "play note selection");
462 o->set_flag(fltk::STATE);
463 o->align(fltk::ALIGN_LEFT);
465 {fltk::CheckButton* o = new fltk::CheckButton(285, 185, 25, 25, "quantize note off");
466 o->set_flag(fltk::STATE);
467 o->align(fltk::ALIGN_LEFT);
469 {fltk::Choice* o = new fltk::Choice(145, 215, 160, 25, "record mode");
470 o->begin();
471 new fltk::Item("merge");
472 new fltk::Item("overwrite");
473 new fltk::Item("layer");
474 o->end();
476 o->end();
477 o->resizable(o);
479 {fltk::Window* o = help_window = new fltk::Window(580, 370, "help");
480 o->shortcut(0xff1b);
481 o->user_data((void*)(this));
482 o->begin();
483 {fltk::TabGroup* o = new fltk::TabGroup(0, 0, 580, 370);
484 o->begin();
485 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "info");
486 o->begin();
487 title_text = new fltk::Input(55, 5, 520, 20, "Title");
488 author_text = new fltk::Input(55, 30, 520, 20, "Author");
489 {fltk::TextEditor* o = info_text = new fltk::TextEditor(5, 55, 570, 285);
490 o->textfont(fltk::COURIER);
491 fltk::Group::current()->resizable(o);
493 o->end();
494 fltk::Group::current()->resizable(o);
496 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "controls");
497 o->hide();
498 o->begin();
499 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
500 o->textfont(fltk::COURIER);
501 fltk::Group::current()->resizable(o);
502 load_text(o,ROOT_DATA_DIR"doc/controls.txt");
504 o->end();
506 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "guide");
507 o->hide();
508 o->begin();
509 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
510 o->textfont(fltk::COURIER);
511 fltk::Group::current()->resizable(o);
512 load_text(o,ROOT_DATA_DIR"doc/guide.txt");
514 o->end();
516 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "license");
517 o->hide();
518 o->begin();
519 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
520 o->textfont(fltk::COURIER);
521 fltk::Group::current()->resizable(o);
522 load_text(o,ROOT_DATA_DIR"doc/license.txt");
524 o->end();
526 {fltk::Group* o = new fltk::Group(0, 25, 580, 345, "about");
527 o->hide();
528 o->begin();
529 {fltk::TextDisplay* o = new fltk::TextDisplay(5, 5, 570, 335);
530 o->textfont(fltk::COURIER);
531 fltk::Group::current()->resizable(o);
532 load_text(o,ROOT_DATA_DIR"doc/README");
534 o->end();
536 o->end();
538 o->end();
539 o->size_range(555,370);
540 o->resizable(o);
542 {fltk::Window* o = action_window = new fltk::Window(100, 130, "menu");
543 o->shortcut(0xff1b);
544 o->user_data((void*)(this));
545 o->begin();
546 {fltk::Button* o = new fltk::Button(5, 5, 90, 20, "new");
547 o->callback((fltk::Callback*)cb_new);
549 {fltk::Button* o = new fltk::Button(5, 25, 90, 20, "save");
550 o->callback((fltk::Callback*)cb_save);
552 {fltk::Button* o = new fltk::Button(5, 45, 90, 20, "save as");
553 o->callback((fltk::Callback*)cb_save1);
555 {fltk::Button* o = new fltk::Button(5, 65, 90, 20, "load");
556 o->callback((fltk::Callback*)cb_load);
558 new fltk::Button(5, 85, 90, 20, "import");
559 {fltk::Button* o = new fltk::Button(5, 105, 90, 20, "export");
560 o->callback((fltk::Callback*)cb_export);
562 o->end();
563 o->resizable(o);
565 {fltk::Window* o = key_config = new fltk::Window(650, 370, "key layout");
566 w = o;
567 o->shortcut(0xff1b);
568 o->user_data((void*)(this));
569 o->begin();
570 {fltk::Widget* o = new fltk::Widget(45, 105, 25, 25, "C1");
571 o->align(fltk::ALIGN_BOTTOM);
573 {fltk::Widget* o = new fltk::Widget(615, 15, 25, 25, "octave up");
574 o->align(fltk::ALIGN_LEFT);
576 {fltk::Widget* o = new fltk::Widget(615, 75, 25, 25, "zoom in");
577 o->align(fltk::ALIGN_LEFT);
579 {fltk::Widget* o = new fltk::Widget(615, 105, 25, 25, "zoom out");
580 o->align(fltk::ALIGN_LEFT);
582 o->end();
584 loop_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/loop.gif"));
585 keyboard_toggle->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/keys.gif"));
586 config_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/conf.gif"));
587 file_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/file.gif"));
588 help_button->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/help.gif"));
590 qbutton4->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q4.gif"));
591 qbutton8->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q8.gif"));
592 qbutton16->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q16.gif"));
593 qbutton32->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q32.gif"));
594 qbutton64->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q64.gif"));
595 qbutton128->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q128.gif"));
596 qbutton0->image(fltk::SharedImage::get(ROOT_DATA_DIR"gfx/q0.gif"));
597 main_window->show();