r125: This commit was manufactured by cvs2svn to create tag 'r1_1_7-last'.
[cinelerra_cv/mob.git] / hvirtual / plugins / reframe / reframe.C
blobd88a01e7fee30b37f675f4c64bccb2818227a836
1 #include "bcdisplayinfo.h"
2 #include "defaults.h"
3 #include "mainprogress.h"
4 #include "picon_png.h"
5 #include "reframe.h"
8 #include <libintl.h>
9 #define _(String) gettext(String)
10 #define gettext_noop(String) String
11 #define N_(String) gettext_noop (String)
16 REGISTER_PLUGIN(ReFrame)
27 ReFrame::ReFrame(PluginServer *server)
28  : PluginVClient(server)
30         load_defaults();
31         current_position = 0;
34 ReFrame::~ReFrame()
36         save_defaults();
37         delete defaults;
40 char* ReFrame::plugin_title() { return _("Reframe"); }
42 NEW_PICON_MACRO(ReFrame) 
45 int ReFrame::load_defaults()
47         char directory[1024];
49 // set the default directory
50         sprintf(directory, "%sreframe.rc", BCASTDIR);
52 // load the defaults
54         defaults = new Defaults(directory);
56         defaults->load();
58         scale = defaults->get("SCALE", (double)1);
59         return 0;
62 int ReFrame::save_defaults()
64         defaults->update("SCALE", scale);
65         defaults->save();
66         return 0;
69 int ReFrame::get_parameters()
71         BC_DisplayInfo info;
72         ReFrameWindow window(this, info.get_abs_cursor_x(), info.get_abs_cursor_y());
73         window.create_objects();
74         int result = window.run_window();
75         
76         return result;
80 int ReFrame::start_loop()
82         if(PluginClient::interactive)
83         {
84                 char string[BCTEXTLEN];
85                 sprintf(string, "%s...", plugin_title());
86                 progress = start_progress(string, 
87                         (PluginClient::end - PluginClient::start));
88         }
90         current_position = 0;
91         return 0;
94 int ReFrame::stop_loop()
96         if(PluginClient::interactive)
97         {
98                 progress->stop_progress();
99                 delete progress;
100         }
101         return 0;
105 int ReFrame::process_loop(VFrame *buffer)
107         int result = 0;
108         
109         int64_t input_offset = Units::to_int64((double)current_position * 
110                 scale + 
111                 PluginClient::start);
113         read_frame(buffer, input_offset);
115         current_position++;
116         input_offset = Units::to_int64((double)current_position * 
117                 scale + 
118                 PluginClient::start);
120         if(PluginClient::interactive) 
121                 result = progress->update(input_offset - PluginClient::start);
123         if(input_offset >= PluginClient::end) result = 1;
125         return result;
139 ReFrameOutput::ReFrameOutput(ReFrame *plugin, int x, int y)
140  : BC_TextBox(x, y, 150, 1, (float)plugin->scale)
142         this->plugin = plugin;
145 int ReFrameOutput::handle_event()
147         plugin->scale = atof(get_text());
148         return 1;
153 ReFrameWindow::ReFrameWindow(ReFrame *plugin, int x, int y)
154  : BC_Window(plugin->plugin_title(), 
155         x, 
156         y, 
157         230, 
158         160, 
159         230, 
160         160, 
161         0, 
162         0,
163         1)
165         this->plugin = plugin;
168 ReFrameWindow::~ReFrameWindow()
173 void ReFrameWindow::create_objects()
175         int x = 10, y = 10;
176         add_subwindow(new BC_Title(x, y, _("Scale factor:")));
177         y += 20;
178         add_subwindow(new ReFrameOutput(plugin, x, y));
179         add_subwindow(new BC_OKButton(this));
180         add_subwindow(new BC_CancelButton(this));
182         show_window();
183         flush();
186 int ReFrameWindow::close_event()
188         set_done(1);
189         return 1;