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