add ffmpeg image2 formats, fix segv when quit with render menu active
[goodguy/history.git] / cinelerra-5.1 / cinelerra / reindex.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  * 
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * 
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  * 
20  */
21
22 #include "reindex.h"
23
24
25 #include <libintl.h>
26 #define _(String) gettext(String)
27 #define gettext_noop(String) String
28 #define N_(String) gettext_noop (String)
29
30
31 ReIndex::ReIndex(MWindow *mwindow)
32  : BC_MenuItem(_("Redraw Indexes"), "", 0), Thread()
33 {
34         this->mwindow = mwindow;
35 }
36
37 ReIndex::~ReIndex()
38 {
39 }
40
41 ReIndex::handle_event() { start(); }
42
43 void ReIndex::run()
44 {
45         int result;
46         
47         if(mwindow->gui) mwindow->gui->disable_window();
48         if(mwindow->gui) mwindow->lock_resize();
49
50         {
51                 ReIndexWindow window;
52                 window.create_objects();
53                 result = window.run_window();
54         }
55         
56         if(!result)       // user didn't cancel
57         {
58 // ========== need pointers since mainmenu is created after tracks
59 // ==================================== delete old index files
60                 mwindow->tracks->delete_index_files();
61 // ==================================== create new index files
62                 mwindow->tracks->create_index_files(1);
63 // ==================================== draw
64                 mwindow->draw();
65         }
66         if(mwindow->gui) mwindow->unlock_resize();
67         if(mwindow->gui) mwindow->gui->enable_window();
68 }
69
70 ReIndexWindow::ReIndexWindow(char *display = "")
71  : BC_Window(display, MEGREY, _(PROGRAM_NAME ": Redraw Indexes"), 340, 140, 340, 140)
72 {
73 }
74
75 ReIndexWindow::~ReIndexWindow()
76 {
77         delete ok;
78         delete cancel;
79 }
80
81 ReIndexWindow::create_objects()
82 {
83         BC_SubWindow *subwindow;
84         
85         add_subwindow(subwindow = new BC_SubWindow(0, 0, w, h, MEGREY));
86         subwindow->add_subwindow(new BC_Title(5, 5, _("Redraw all indexes for the current project?")));
87         subwindow->add_subwindow(ok = new ReIndexOkButton(this));
88         subwindow->add_subwindow(cancel = new ReIndexCancelButton(this));
89 }
90
91 ReIndexOkButton::ReIndexOkButton(ReIndexWindow *window)
92  : BC_Button(5, 80, _("Yes"))
93 {
94         this->window = window;
95 }
96
97 ReIndexOkButton::handle_event()
98 {
99         window->set_done(0);
100 }
101
102 ReIndexOkButton::keypress_event()
103 {
104         if(window->get_keypress() == 13) { handle_event(); return 1; }
105         return 0;
106 }
107
108 ReIndexCancelButton::ReIndexCancelButton(ReIndexWindow *window)
109  : BC_Button(140, 80, _("No"))
110 {
111         this->window = window;
112 }
113
114 ReIndexCancelButton::handle_event()
115 {
116         window->set_done(1);
117 }
118
119 ReIndexCancelButton::keypress_event()
120 {
121         if(window->get_keypress() == ESC) { handle_event(); return 1; }
122         return 0;
123 }
124