rework batchrender, renderfarm improvements, ffmpeg audio quality, a few fixes
[goodguy/history.git] / cinelerra-5.1 / cinelerra / performanceprefs.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 "bcsignals.h"
23 #include "clip.h"
24 #include "edl.h"
25 #include "edlsession.h"
26 #include "formattools.h"
27 #include "language.h"
28 #include "mwindow.h"
29 #include "performanceprefs.h"
30 #include "preferences.h"
31 #include <ctype.h>
32 #include <string.h>
33 #include "theme.h"
34
35 #define MASTER_NODE_FRAMERATE_TEXT "Master node framerate: %0.3f"
36 #if 0
37 N_(MASTER_NODE_FRAMERATE_TEXT)
38 #endif
39
40 PerformancePrefs::PerformancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
41  : PreferencesDialog(mwindow, pwindow)
42 {
43         hot_node = -1;
44 }
45
46 PerformancePrefs::~PerformancePrefs()
47 {
48         delete brender_tools;
49         nodes[0].remove_all_objects();
50         nodes[1].remove_all_objects();
51         nodes[2].remove_all_objects();
52         nodes[3].remove_all_objects();
53 }
54
55 void PerformancePrefs::create_objects()
56 {
57         int x, y;
58         int xmargin1;
59         int xmargin2 = 180;
60         int xmargin3 = 260;
61         int xmargin4 = 420;
62         char string[BCTEXTLEN];
63         BC_Resources *resources = BC_WindowBase::get_resources();
64         BC_WindowBase *win;
65         int maxw, curw;
66
67         node_list = 0;
68         generate_node_list();
69
70         xmargin1 = x = mwindow->theme->preferencesoptions_x;
71         y = mwindow->theme->preferencesoptions_y;
72
73 //      add_subwindow(new BC_Title(x,
74 //              y,
75 //              _("Time Format"),
76 //              LARGEFONT,
77 //              resources->text_default));
78 //
79 //      y += get_text_height(LARGEFONT) + 5;
80
81         int y0 = y;
82
83         win = add_subwindow(new BC_Title(x, y + 5, _("Cache size (MB):"), MEDIUMFONT, resources->text_default));
84         maxw = win->get_w();
85
86         int y1 = y += 30;
87         win = add_subwindow(new BC_Title(x, y + 5, _("Seconds to preroll renders:")));
88         if((curw = win->get_w()) > maxw)
89                 maxw = curw;
90         maxw += x + 5;
91
92         cache_size = new CICacheSize(maxw, y0, pwindow, this);
93         cache_size->create_objects();
94
95         add_subwindow(new BC_Title(x, y + 5, _("Seconds to preroll renders:")));
96         PrefsRenderPreroll *preroll = new PrefsRenderPreroll(pwindow, this, maxw, y1);
97         preroll->create_objects();
98         y += 30;
99
100         int x1 = x + xmargin4;
101         BC_Title *smp_title = new BC_Title(x1, y + 5, _("Project SMP cpus:"));
102         add_subwindow(smp_title);
103         int x2 = x1 + smp_title->get_w() + 5;
104         PrefsProjectSMP *proj_smp = new PrefsProjectSMP(pwindow, this, x2, y);
105         proj_smp->create_objects();
106
107         PrefsForceUniprocessor *force_1cpu = new PrefsForceUniprocessor(pwindow, x, y);
108         add_subwindow(force_1cpu);
109         y += 30;
110
111 // Background rendering
112         add_subwindow(new BC_Bar(5, y,  get_w() - 10));
113         y += 5;
114
115
116         add_subwindow(new BC_Title(x, y, _("Background Rendering (Video only)"), LARGEFONT, resources->text_default));
117         y1 = y += 30;
118
119         win = add_subwindow(new PrefsUseBRender(pwindow, x, y));
120
121         y += win->get_h() + 10;
122         win = add_subwindow(new BC_Title(x, y, _("Frames per background rendering job:")));
123         y += win->get_h() + 5;
124         PrefsBRenderFragment *brender_fragment = new PrefsBRenderFragment(pwindow,
125                 this,
126                 x + xmargin3,
127                 y);
128         brender_fragment->create_objects();
129         y += brender_fragment->get_h() + 5;
130         win = add_subwindow(new BC_Title(x, y, _("Frames to preroll background:")));
131         y += win->get_h() + 5;
132         PrefsBRenderPreroll *bpreroll = new PrefsBRenderPreroll(pwindow,
133                 this,
134                 x + xmargin3,
135                 y + 5);
136         bpreroll->create_objects();
137         y += bpreroll->get_h() + 20;
138
139
140         x += xmargin4;
141         add_subwindow(new BC_Title(x, y1, _("Output for background rendering:")));
142         y1 += 20;
143         brender_tools =
144                 new FormatTools(mwindow,
145                         this,
146                         pwindow->thread->preferences->brender_asset);
147         brender_tools->create_objects(x,
148                 y1,
149                 0,  // Include tools for audio
150                 1,  // Include tools for video
151                 0,  // Include checkbox for audio
152                 0,  // Include checkbox for video
153                 0,
154                 1,
155                 0,  // Select compressors to be offered
156                 0,  // Prompt for recording options
157                 0,  // prompt for use labels
158                 1); // Supply file formats for background rendering
159         x = xmargin1;
160
161
162 // Renderfarm
163         add_subwindow(new BC_Bar(5, y, get_w() - 10));
164         y += 5;
165         add_subwindow(new BC_Title(x, y, _("Render Farm"), LARGEFONT, resources->text_default));
166         x1 = x + xmargin4;
167         BC_Title *node_title = new BC_Title(x1, y, _("Nodes:"));
168         add_subwindow(node_title);
169         x1 += node_title->get_w() + 25;
170         sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT),
171                 pwindow->thread->preferences->local_rate);
172         add_subwindow(master_rate = new BC_Title(x1, y, string));
173         y += 25;
174         add_subwindow(node_list = new PrefsRenderFarmNodes(pwindow,
175                 this,
176                 x + xmargin4,
177                 y));
178         y += 5;
179         add_subwindow(new PrefsRenderFarm(pwindow, x, y));
180         y += 30;
181         add_subwindow(new BC_Title(x, y, _("Hostname:")));
182         add_subwindow(new BC_Title(x + xmargin3, y, _("Port:")));
183
184         y += 25;
185         add_subwindow(edit_node = new PrefsRenderFarmEditNode(pwindow,
186                 this,
187                 x,
188                 y));
189         edit_port = new PrefsRenderFarmPort(pwindow,
190                 this,
191                 x + xmargin3,
192                 y);
193         edit_port->create_objects();
194
195         y += 30;
196
197
198         add_subwindow(new PrefsRenderFarmReplaceNode(pwindow,
199                 this,
200                 x,
201                 y));
202         add_subwindow(new PrefsRenderFarmNewNode(pwindow,
203                 this,
204                 x + xmargin2,
205                 y));
206         y += 30;
207         add_subwindow(new PrefsRenderFarmDelNode(pwindow,
208                 this,
209                 x + xmargin2,
210                 y));
211         add_subwindow(new PrefsRenderFarmSortNodes(pwindow,
212                 this,
213                 x,
214                 y));
215         y += 30;
216         add_subwindow(new PrefsRenderFarmReset(pwindow,
217                 this,
218                 x,
219                 y));
220         y += 35;
221         add_subwindow(new BC_Title(x,
222                 y,
223                 _("Total jobs to create:")));
224         add_subwindow(new BC_Title(x,
225                 y + 30,
226                 _("(overridden if new file at each label is checked)")));
227         PrefsRenderFarmJobs *jobs = new PrefsRenderFarmJobs(pwindow,
228                 this,
229                 x + xmargin3,
230                 y);
231         jobs->create_objects();
232         y += 55;
233 //      add_subwindow(new PrefsRenderFarmVFS(pwindow,
234 //              this,
235 //              x,
236 //              y));
237 //      add_subwindow(new BC_Title(x,
238 //              y,
239 //              _("Filesystem prefix on remote nodes:")));
240 //      add_subwindow(new PrefsRenderFarmMountpoint(pwindow,
241 //              this,
242 //              x + xmargin3,
243 //              y));
244 //      y += 30;
245 }
246
247 void PerformancePrefs::generate_node_list()
248 {
249         int selected_row = node_list ? node_list->get_selection_number(0, 0) : -1;
250
251         for(int i = 0; i < TOTAL_COLUMNS; i++)
252                 nodes[i].remove_all_objects();
253
254         for(int i = 0;
255                 i < pwindow->thread->preferences->renderfarm_nodes.size();
256                 i++)
257         {
258                 BC_ListBoxItem *item;
259                 nodes[ENABLED_COLUMN].append(item = new BC_ListBoxItem(
260                         (char*)(pwindow->thread->preferences->renderfarm_enabled.get(i) ? "X" : " ")));
261                 if(i == selected_row) item->set_selected(1);
262
263                 nodes[HOSTNAME_COLUMN].append(item = new BC_ListBoxItem(
264                         pwindow->thread->preferences->renderfarm_nodes.get(i)));
265                 if(i == selected_row) item->set_selected(1);
266
267                 char string[BCTEXTLEN];
268                 sprintf(string, "%d", pwindow->thread->preferences->renderfarm_ports.get(i));
269                 nodes[PORT_COLUMN].append(item = new BC_ListBoxItem(string));
270                 if(i == selected_row) item->set_selected(1);
271
272                 sprintf(string, "%0.3f", pwindow->thread->preferences->renderfarm_rate.get(i));
273                 nodes[RATE_COLUMN].append(item = new BC_ListBoxItem(string));
274                 if(i == selected_row) item->set_selected(1);
275         }
276 }
277
278 static const char *default_titles[] =
279 {
280         N_("On"),
281         N_("Hostname"),
282         N_("Port"),
283         N_("Framerate")
284 };
285
286 static int default_widths[] =
287 {
288         30,
289         150,
290         50,
291         50
292 };
293
294
295 void PerformancePrefs::update_node_list()
296 {
297         node_list->update_list();
298 }
299
300 void PrefsRenderFarmNodes::update_list()
301 {
302         update(subwindow->nodes, titles, widths, PerformancePrefs::TOTAL_COLUMNS,
303                 get_xposition(), get_yposition(), get_selection_number(0, 0));
304 }
305
306
307 void PerformancePrefs::update_rates()
308 {
309 //printf("PerformancePrefs::update_rates %d\n", __LINE__);
310         char string[BCTEXTLEN];
311         for(int i = 0;
312                 i < mwindow->preferences->renderfarm_rate.size();
313                 i++)
314         {
315                 if(i < nodes[RATE_COLUMN].size())
316                 {
317                         sprintf(string, "%0.3f", mwindow->preferences->renderfarm_rate.get(i));
318                         nodes[RATE_COLUMN].get(i)->set_text(string);
319                 }
320         }
321
322         sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT),
323                 mwindow->preferences->local_rate);
324         master_rate->update(string);
325
326         update_node_list();
327 }
328
329
330 PrefsUseBRender::PrefsUseBRender(PreferencesWindow *pwindow,
331         int x,
332         int y)
333  : BC_CheckBox(x,
334         y,
335         pwindow->thread->preferences->use_brender,
336         _("Use background rendering"))
337 {
338         this->pwindow = pwindow;
339 }
340
341 int PrefsUseBRender::handle_event()
342 {
343         pwindow->thread->redraw_overlays = 1;
344         pwindow->thread->redraw_times = 1;
345         pwindow->thread->preferences->use_brender = get_value();
346         return 1;
347 }
348
349
350
351
352
353
354 PrefsBRenderFragment::PrefsBRenderFragment(PreferencesWindow *pwindow,
355         PerformancePrefs *subwindow,
356         int x,
357         int y)
358  : BC_TumbleTextBox(subwindow,
359         (int64_t)pwindow->thread->preferences->brender_fragment,
360         (int64_t)1,
361         (int64_t)65535,
362         x,
363         y,
364         100)
365 {
366         this->pwindow = pwindow;
367 }
368 int PrefsBRenderFragment::handle_event()
369 {
370         pwindow->thread->preferences->brender_fragment = atol(get_text());
371         return 1;
372 }
373
374
375
376
377
378
379
380
381
382
383
384 CICacheSize::CICacheSize(int x,
385         int y,
386         PreferencesWindow *pwindow,
387         PerformancePrefs *subwindow)
388  : BC_TumbleTextBox(subwindow,
389         (int64_t)pwindow->thread->preferences->cache_size / 0x100000,
390         (int64_t)MIN_CACHE_SIZE / 0x100000,
391         (int64_t)MAX_CACHE_SIZE / 0x100000,
392         x,
393         y,
394         100)
395 {
396         this->pwindow = pwindow;
397         set_increment(1);
398 }
399
400 int CICacheSize::handle_event()
401 {
402         int64_t result;
403         result = (int64_t)atol(get_text()) * 0x100000;
404         CLAMP(result, MIN_CACHE_SIZE, MAX_CACHE_SIZE);
405         pwindow->thread->preferences->cache_size = result;
406         return 0;
407 }
408
409
410 PrefsRenderPreroll::PrefsRenderPreroll(PreferencesWindow *pwindow,
411                 PerformancePrefs *subwindow,
412                 int x,
413                 int y)
414  : BC_TumbleTextBox(subwindow,
415         (float)pwindow->thread->preferences->render_preroll,
416         (float)0,
417         (float)100,
418         x,
419         y,
420         100)
421 {
422         this->pwindow = pwindow;
423         set_increment(0.1);
424 }
425 PrefsRenderPreroll::~PrefsRenderPreroll()
426 {
427 }
428 int PrefsRenderPreroll::handle_event()
429 {
430         pwindow->thread->preferences->render_preroll = atof(get_text());
431         return 1;
432 }
433
434
435 PrefsBRenderPreroll::PrefsBRenderPreroll(PreferencesWindow *pwindow,
436                 PerformancePrefs *subwindow,
437                 int x,
438                 int y)
439  : BC_TumbleTextBox(subwindow,
440         (int64_t)pwindow->thread->preferences->brender_preroll,
441         (int64_t)0,
442         (int64_t)100,
443         x,
444         y,
445         100)
446 {
447         this->pwindow = pwindow;
448 }
449 int PrefsBRenderPreroll::handle_event()
450 {
451         pwindow->thread->preferences->brender_preroll = atol(get_text());
452         return 1;
453 }
454
455
456
457
458
459
460
461
462
463
464
465 PrefsRenderFarm::PrefsRenderFarm(PreferencesWindow *pwindow, int x, int y)
466  : BC_CheckBox(x,
467         y,
468         pwindow->thread->preferences->use_renderfarm,
469         _("Use render farm"))
470 {
471         this->pwindow = pwindow;
472 }
473 PrefsRenderFarm::~PrefsRenderFarm()
474 {
475 }
476 int PrefsRenderFarm::handle_event()
477 {
478         pwindow->thread->preferences->use_renderfarm = get_value();
479         return 1;
480 }
481
482
483
484
485 PrefsForceUniprocessor::PrefsForceUniprocessor(PreferencesWindow *pwindow, int x, int y)
486  : BC_CheckBox(x,
487         y,
488         pwindow->thread->preferences->force_uniprocessor,
489         _("Force single processor use"))
490 {
491         this->pwindow = pwindow;
492 }
493 PrefsForceUniprocessor::~PrefsForceUniprocessor()
494 {
495 }
496 int PrefsForceUniprocessor::handle_event()
497 {
498         pwindow->thread->preferences->force_uniprocessor = get_value();
499         return 1;
500 }
501
502
503
504 PrefsRenderFarmConsolidate::PrefsRenderFarmConsolidate(PreferencesWindow *pwindow, int x, int y)
505  : BC_CheckBox(x,
506         y,
507         pwindow->thread->preferences->renderfarm_consolidate,
508         _("Consolidate output files on completion"))
509 {
510         this->pwindow = pwindow;
511 }
512 PrefsRenderFarmConsolidate::~PrefsRenderFarmConsolidate()
513 {
514 }
515 int PrefsRenderFarmConsolidate::handle_event()
516 {
517         pwindow->thread->preferences->renderfarm_consolidate = get_value();
518         return 1;
519 }
520
521
522 PrefsRenderFarmPort::PrefsRenderFarmPort(PreferencesWindow *pwindow,
523         PerformancePrefs *subwindow,
524         int x,
525         int y)
526  : BC_TumbleTextBox(subwindow,
527         (int64_t)pwindow->thread->preferences->renderfarm_port,
528         (int64_t)1,
529         (int64_t)65535,
530         x,
531         y,
532         100)
533 {
534         this->pwindow = pwindow;
535 }
536
537 PrefsRenderFarmPort::~PrefsRenderFarmPort()
538 {
539 }
540
541 int PrefsRenderFarmPort::handle_event()
542 {
543         pwindow->thread->preferences->renderfarm_port = atol(get_text());
544         return 1;
545 }
546
547
548
549 PrefsRenderFarmNodes::PrefsRenderFarmNodes(PreferencesWindow *pwindow,
550         PerformancePrefs *subwindow, int x, int y)
551  : BC_ListBox(x, y, 340, 230, LISTBOX_TEXT, 0,0,0,1, 0,0, LISTBOX_MULTIPLE)
552 {
553         for( int i=0; i<PerformancePrefs::TOTAL_COLUMNS; ++i ) {
554                 titles[i] = _(default_titles[i]);
555                 widths[i] = default_widths[i];
556         }
557         update(subwindow->nodes, titles, widths, PerformancePrefs::TOTAL_COLUMNS,
558                 0, 0, -1, 0, 0);
559         this->subwindow = subwindow;
560         this->pwindow = pwindow;
561 }
562 PrefsRenderFarmNodes::~PrefsRenderFarmNodes()
563 {
564 }
565
566 int PrefsRenderFarmNodes::column_resize_event()
567 {
568         for( int i=0; i<PerformancePrefs::TOTAL_COLUMNS; ++i )
569                 widths[i] = get_column_width(i);
570         return 1;
571 }
572
573 int PrefsRenderFarmNodes::handle_event()
574 {
575 SET_TRACE
576         if(get_selection_number(0, 0) >= 0)
577         {
578                 subwindow->hot_node = get_selection_number(1, 0);
579                 subwindow->edit_node->update(get_selection(1, 0)->get_text());
580                 const char *text = get_selection(2, 0)->get_text();
581                 subwindow->edit_port->update(text);
582                 pwindow->thread->preferences->renderfarm_port = atol(text);
583                 if(get_cursor_x() < widths[0])
584                 {
585                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node] =
586                                 !pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node];
587                         subwindow->generate_node_list();
588                         subwindow->update_node_list();
589                 }
590         }
591         else
592         {
593                 subwindow->hot_node = -1;
594                 subwindow->edit_node->update("");
595         }
596 SET_TRACE
597         return 1;
598 }
599 int PrefsRenderFarmNodes::selection_changed()
600 {
601         handle_event();
602         return 1;
603 }
604
605
606
607
608
609
610
611 PrefsRenderFarmEditNode::PrefsRenderFarmEditNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
612  : BC_TextBox(x, y, 240, 1, "")
613 {
614         this->pwindow = pwindow;
615         this->subwindow = subwindow;
616 }
617
618 PrefsRenderFarmEditNode::~PrefsRenderFarmEditNode()
619 {
620 }
621
622 int PrefsRenderFarmEditNode::handle_event()
623 {
624         return 1;
625 }
626
627
628
629
630
631
632 PrefsRenderFarmNewNode::PrefsRenderFarmNewNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
633  : BC_GenericButton(x, y, _("Add Nodes"))
634 {
635         this->pwindow = pwindow;
636         this->subwindow = subwindow;
637 }
638 PrefsRenderFarmNewNode::~PrefsRenderFarmNewNode()
639 {
640 }
641 int PrefsRenderFarmNewNode::handle_event()
642 {
643         const char *name = subwindow->edit_node->get_text();
644         char *cp = (char*)subwindow->edit_port->get_text();
645         int64_t start_port = strtol(cp, &cp, 0), end_port = start_port;
646         while( isspace(*cp) ) ++cp;
647         if( *cp++ == '-' )
648                 end_port = strtol(cp, &cp, 0);
649         for( int port=start_port; port<=end_port; ++port ) {
650                 pwindow->thread->preferences->add_node(name, port, 1, 0.0);
651         }
652         pwindow->thread->preferences->renderfarm_port = end_port;
653         subwindow->edit_port->update(end_port);
654         pwindow->thread->preferences->reset_rates();
655         subwindow->generate_node_list();
656         subwindow->update_node_list();
657         subwindow->hot_node = -1;
658         return 1;
659 }
660
661
662
663
664
665
666
667 PrefsRenderFarmReplaceNode::PrefsRenderFarmReplaceNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
668  : BC_GenericButton(x, y, _("Apply Changes"))
669 {
670         this->pwindow = pwindow;
671         this->subwindow = subwindow;
672 }
673 PrefsRenderFarmReplaceNode::~PrefsRenderFarmReplaceNode()
674 {
675 }
676 int PrefsRenderFarmReplaceNode::handle_event()
677 {
678         if(subwindow->hot_node >= 0)
679         {
680                 pwindow->thread->preferences->edit_node(subwindow->hot_node,
681                         subwindow->edit_node->get_text(),
682                         pwindow->thread->preferences->renderfarm_port,
683                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node]);
684                 subwindow->generate_node_list();
685                 subwindow->update_node_list();
686         }
687         return 1;
688 }
689
690
691
692
693
694 PrefsRenderFarmDelNode::PrefsRenderFarmDelNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
695  : BC_GenericButton(x, y, _("Delete Nodes"))
696 {
697         this->pwindow = pwindow;
698         this->subwindow = subwindow;
699 }
700 PrefsRenderFarmDelNode::~PrefsRenderFarmDelNode()
701 {
702 }
703 int PrefsRenderFarmDelNode::handle_event()
704 {
705         ArrayList<BC_ListBoxItem *> &item_list = subwindow->nodes[0];
706         for( int i=item_list.size(); --i>=0; ) {
707                 if( !item_list[i]->get_selected() ) continue;
708                 pwindow->thread->preferences->delete_node(i);
709         }
710         subwindow->generate_node_list();
711         subwindow->update_node_list();
712         subwindow->hot_node = -1;
713         return 1;
714 }
715
716
717
718
719
720 PrefsRenderFarmSortNodes::PrefsRenderFarmSortNodes(PreferencesWindow *pwindow,
721         PerformancePrefs *subwindow,
722         int x,
723         int y)
724  : BC_GenericButton(x, y, _("Sort nodes"))
725 {
726         this->pwindow = pwindow;
727         this->subwindow = subwindow;
728 }
729
730 PrefsRenderFarmSortNodes::~PrefsRenderFarmSortNodes()
731 {
732 }
733
734 int PrefsRenderFarmSortNodes::handle_event()
735 {
736         pwindow->thread->preferences->sort_nodes();
737         subwindow->generate_node_list();
738         subwindow->update_node_list();
739         subwindow->hot_node = -1;
740         return 1;
741 }
742
743
744
745
746
747 PrefsRenderFarmReset::PrefsRenderFarmReset(PreferencesWindow *pwindow,
748         PerformancePrefs *subwindow,
749         int x,
750         int y)
751  : BC_GenericButton(x, y, _("Reset rates"))
752 {
753         this->pwindow = pwindow;
754         this->subwindow = subwindow;
755 }
756
757 int PrefsRenderFarmReset::handle_event()
758 {
759         pwindow->thread->preferences->reset_rates();
760         subwindow->generate_node_list();
761         subwindow->update_node_list();
762
763         char string[BCTEXTLEN];
764         sprintf(string,
765                 MASTER_NODE_FRAMERATE_TEXT,
766                 pwindow->thread->preferences->local_rate);
767         subwindow->master_rate->update(string);
768         subwindow->hot_node = -1;
769         return 1;
770 }
771
772
773
774
775
776 PrefsProjectSMP::PrefsProjectSMP(PreferencesWindow *pwindow,
777                 PerformancePrefs *subwindow, int x, int y)
778  : BC_TumbleTextBox(subwindow,
779         (int64_t)pwindow->thread->preferences->project_smp,
780         (int64_t)1, (int64_t)100, x, y, 100)
781 {
782         this->pwindow = pwindow;
783 }
784 PrefsProjectSMP::~PrefsProjectSMP()
785 {
786 }
787 int PrefsProjectSMP::handle_event()
788 {
789         pwindow->thread->preferences->project_smp = atol(get_text());
790         return 1;
791 }
792
793
794
795
796
797 PrefsRenderFarmJobs::PrefsRenderFarmJobs(PreferencesWindow *pwindow,
798                 PerformancePrefs *subwindow,
799                 int x,
800                 int y)
801  : BC_TumbleTextBox(subwindow,
802         (int64_t)pwindow->thread->preferences->renderfarm_job_count,
803         (int64_t)1,
804         (int64_t)100,
805         x,
806         y,
807         100)
808 {
809         this->pwindow = pwindow;
810 }
811 PrefsRenderFarmJobs::~PrefsRenderFarmJobs()
812 {
813 }
814 int PrefsRenderFarmJobs::handle_event()
815 {
816         pwindow->thread->preferences->renderfarm_job_count = atol(get_text());
817         return 1;
818 }
819
820
821
822 PrefsRenderFarmMountpoint::PrefsRenderFarmMountpoint(PreferencesWindow *pwindow,
823                 PerformancePrefs *subwindow,
824                 int x,
825                 int y)
826  : BC_TextBox(x,
827         y,
828         100,
829         1,
830         pwindow->thread->preferences->renderfarm_mountpoint)
831 {
832         this->pwindow = pwindow;
833         this->subwindow = subwindow;
834 }
835 PrefsRenderFarmMountpoint::~PrefsRenderFarmMountpoint()
836 {
837 }
838 int PrefsRenderFarmMountpoint::handle_event()
839 {
840         strcpy(pwindow->thread->preferences->renderfarm_mountpoint, get_text());
841         return 1;
842 }
843
844
845
846
847 PrefsRenderFarmVFS::PrefsRenderFarmVFS(PreferencesWindow *pwindow,
848         PerformancePrefs *subwindow, int x, int y)
849  : BC_CheckBox(x, y, pwindow->thread->preferences->renderfarm_vfs,
850         _("Use virtual filesystem"))
851 {
852         this->pwindow = pwindow;
853         this->subwindow = subwindow;
854 }
855
856 int PrefsRenderFarmVFS::handle_event()
857 {
858         pwindow->thread->preferences->renderfarm_vfs = get_value();
859         return 1;
860 }
861