yet another attempt to deal with ffmpeg seeks, fred name/color change
[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,  // If nonzero, prompt for insertion strategy
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 *titles[] =
278 {
279         N_("On"),
280         N_("Hostname"),
281         N_("Port"),
282         N_("Framerate")
283 };
284
285 static int widths[] =
286 {
287         30,
288         150,
289         50,
290         50
291 };
292
293
294 void PerformancePrefs::update_node_list()
295 {
296         node_list->update(nodes,
297                                                 titles,
298                                                 widths,
299                                                 TOTAL_COLUMNS,
300                                                 node_list->get_xposition(),
301                                                 node_list->get_yposition(),
302                                                 node_list->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,
550         int x,
551         int y)
552  : BC_ListBox(x,
553                 y,
554                 340,
555                 230,
556                 LISTBOX_TEXT,                         // Display text list or icons
557                 subwindow->nodes,
558                 titles,
559                 widths,
560                 4)
561 {
562         this->subwindow = subwindow;
563         this->pwindow = pwindow;
564 }
565 PrefsRenderFarmNodes::~PrefsRenderFarmNodes()
566 {
567 }
568
569 int PrefsRenderFarmNodes::column_resize_event()
570 {
571         for(int i = 0; i < 3; i++)
572                 widths[i] = get_column_width(i);
573         return 1;
574 }
575
576 int PrefsRenderFarmNodes::handle_event()
577 {
578 SET_TRACE
579         if(get_selection_number(0, 0) >= 0)
580         {
581                 subwindow->hot_node = get_selection_number(1, 0);
582                 subwindow->edit_node->update(get_selection(1, 0)->get_text());
583                 subwindow->edit_port->update(get_selection(2, 0)->get_text());
584                 if(get_cursor_x() < widths[0])
585                 {
586                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node] =
587                                 !pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node];
588                         subwindow->generate_node_list();
589                         subwindow->update_node_list();
590                 }
591         }
592         else
593         {
594                 subwindow->hot_node = -1;
595                 subwindow->edit_node->update("");
596         }
597 SET_TRACE
598         return 1;
599 }
600 int PrefsRenderFarmNodes::selection_changed()
601 {
602         handle_event();
603         return 1;
604 }
605
606
607
608
609
610
611
612 PrefsRenderFarmEditNode::PrefsRenderFarmEditNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
613  : BC_TextBox(x, y, 240, 1, "")
614 {
615         this->pwindow = pwindow;
616         this->subwindow = subwindow;
617 }
618
619 PrefsRenderFarmEditNode::~PrefsRenderFarmEditNode()
620 {
621 }
622
623 int PrefsRenderFarmEditNode::handle_event()
624 {
625         return 1;
626 }
627
628
629
630
631
632
633 PrefsRenderFarmNewNode::PrefsRenderFarmNewNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
634  : BC_GenericButton(x, y, _("Add Node"))
635 {
636         this->pwindow = pwindow;
637         this->subwindow = subwindow;
638 }
639 PrefsRenderFarmNewNode::~PrefsRenderFarmNewNode()
640 {
641 }
642 int PrefsRenderFarmNewNode::handle_event()
643 {
644         pwindow->thread->preferences->add_node(subwindow->edit_node->get_text(),
645                 pwindow->thread->preferences->renderfarm_port,
646                 1,
647                 0.0);
648         pwindow->thread->preferences->reset_rates();
649         subwindow->generate_node_list();
650         subwindow->update_node_list();
651         subwindow->hot_node = -1;
652         return 1;
653 }
654
655
656
657
658
659
660
661 PrefsRenderFarmReplaceNode::PrefsRenderFarmReplaceNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
662  : BC_GenericButton(x, y, _("Apply Changes"))
663 {
664         this->pwindow = pwindow;
665         this->subwindow = subwindow;
666 }
667 PrefsRenderFarmReplaceNode::~PrefsRenderFarmReplaceNode()
668 {
669 }
670 int PrefsRenderFarmReplaceNode::handle_event()
671 {
672         if(subwindow->hot_node >= 0)
673         {
674                 pwindow->thread->preferences->edit_node(subwindow->hot_node,
675                         subwindow->edit_node->get_text(),
676                         pwindow->thread->preferences->renderfarm_port,
677                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node]);
678                 subwindow->generate_node_list();
679                 subwindow->update_node_list();
680         }
681         return 1;
682 }
683
684
685
686
687
688 PrefsRenderFarmDelNode::PrefsRenderFarmDelNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
689  : BC_GenericButton(x, y, _("Delete Node"))
690 {
691         this->pwindow = pwindow;
692         this->subwindow = subwindow;
693 }
694 PrefsRenderFarmDelNode::~PrefsRenderFarmDelNode()
695 {
696 }
697 int PrefsRenderFarmDelNode::handle_event()
698 {
699         if( subwindow->hot_node >= 0 ) {
700                 pwindow->thread->preferences->delete_node(subwindow->hot_node);
701
702                 subwindow->generate_node_list();
703                 subwindow->update_node_list();
704                 subwindow->hot_node = -1;
705         }
706         return 1;
707 }
708
709
710
711
712
713 PrefsRenderFarmSortNodes::PrefsRenderFarmSortNodes(PreferencesWindow *pwindow,
714         PerformancePrefs *subwindow,
715         int x,
716         int y)
717  : BC_GenericButton(x, y, _("Sort nodes"))
718 {
719         this->pwindow = pwindow;
720         this->subwindow = subwindow;
721 }
722
723 PrefsRenderFarmSortNodes::~PrefsRenderFarmSortNodes()
724 {
725 }
726
727 int PrefsRenderFarmSortNodes::handle_event()
728 {
729         pwindow->thread->preferences->sort_nodes();
730         subwindow->generate_node_list();
731         subwindow->update_node_list();
732         subwindow->hot_node = -1;
733         return 1;
734 }
735
736
737
738
739
740 PrefsRenderFarmReset::PrefsRenderFarmReset(PreferencesWindow *pwindow,
741         PerformancePrefs *subwindow,
742         int x,
743         int y)
744  : BC_GenericButton(x, y, _("Reset rates"))
745 {
746         this->pwindow = pwindow;
747         this->subwindow = subwindow;
748 }
749
750 int PrefsRenderFarmReset::handle_event()
751 {
752         pwindow->thread->preferences->reset_rates();
753         subwindow->generate_node_list();
754         subwindow->update_node_list();
755
756         char string[BCTEXTLEN];
757         sprintf(string,
758                 MASTER_NODE_FRAMERATE_TEXT,
759                 pwindow->thread->preferences->local_rate);
760         subwindow->master_rate->update(string);
761         subwindow->hot_node = -1;
762         return 1;
763 }
764
765
766
767
768
769 PrefsProjectSMP::PrefsProjectSMP(PreferencesWindow *pwindow,
770                 PerformancePrefs *subwindow, int x, int y)
771  : BC_TumbleTextBox(subwindow,
772         (int64_t)pwindow->thread->preferences->project_smp,
773         (int64_t)1, (int64_t)100, x, y, 100)
774 {
775         this->pwindow = pwindow;
776 }
777 PrefsProjectSMP::~PrefsProjectSMP()
778 {
779 }
780 int PrefsProjectSMP::handle_event()
781 {
782         pwindow->thread->preferences->project_smp = atol(get_text());
783         return 1;
784 }
785
786
787
788
789
790 PrefsRenderFarmJobs::PrefsRenderFarmJobs(PreferencesWindow *pwindow,
791                 PerformancePrefs *subwindow,
792                 int x,
793                 int y)
794  : BC_TumbleTextBox(subwindow,
795         (int64_t)pwindow->thread->preferences->renderfarm_job_count,
796         (int64_t)1,
797         (int64_t)100,
798         x,
799         y,
800         100)
801 {
802         this->pwindow = pwindow;
803 }
804 PrefsRenderFarmJobs::~PrefsRenderFarmJobs()
805 {
806 }
807 int PrefsRenderFarmJobs::handle_event()
808 {
809         pwindow->thread->preferences->renderfarm_job_count = atol(get_text());
810         return 1;
811 }
812
813
814
815 PrefsRenderFarmMountpoint::PrefsRenderFarmMountpoint(PreferencesWindow *pwindow,
816                 PerformancePrefs *subwindow,
817                 int x,
818                 int y)
819  : BC_TextBox(x,
820         y,
821         100,
822         1,
823         pwindow->thread->preferences->renderfarm_mountpoint)
824 {
825         this->pwindow = pwindow;
826         this->subwindow = subwindow;
827 }
828 PrefsRenderFarmMountpoint::~PrefsRenderFarmMountpoint()
829 {
830 }
831 int PrefsRenderFarmMountpoint::handle_event()
832 {
833         strcpy(pwindow->thread->preferences->renderfarm_mountpoint, get_text());
834         return 1;
835 }
836
837
838
839
840 PrefsRenderFarmVFS::PrefsRenderFarmVFS(PreferencesWindow *pwindow,
841         PerformancePrefs *subwindow, int x, int y)
842  : BC_CheckBox(x, y, pwindow->thread->preferences->renderfarm_vfs,
843         _("Use virtual filesystem"))
844 {
845         this->pwindow = pwindow;
846         this->subwindow = subwindow;
847 }
848
849 int PrefsRenderFarmVFS::handle_event()
850 {
851         pwindow->thread->preferences->renderfarm_vfs = get_value();
852         return 1;
853 }
854