4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5 * Copyright (C) 2003-2016 Cinelerra CV contributors
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include "bcsignals.h"
26 #include "edlsession.h"
27 #include "formattools.h"
30 #include "performanceprefs.h"
31 #include "preferences.h"
36 #define MASTER_NODE_FRAMERATE_TEXT "Master node framerate: %0.3f"
38 N_(MASTER_NODE_FRAMERATE_TEXT)
41 PerformancePrefs::PerformancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
42 : PreferencesDialog(mwindow, pwindow)
45 // *** CONTEXT_HELP ***
46 context_help_set_keyword("Performance");
49 PerformancePrefs::~PerformancePrefs()
52 nodes[0].remove_all_objects();
53 nodes[1].remove_all_objects();
54 nodes[2].remove_all_objects();
55 nodes[3].remove_all_objects();
58 void PerformancePrefs::create_objects()
60 int xs5 = xS(5), xs10 = xS(10);
61 int ys5 = yS(5), ys10 = yS(10), ys20 = yS(20), ys30 = yS(30), ys35 = yS(35);
63 int xmargin2 = xS(180);
64 int xmargin3 = xS(260);
65 int xmargin4 = xS(420);
66 char string[BCTEXTLEN];
67 BC_Resources *resources = BC_WindowBase::get_resources();
74 int xmargin1 = x = mwindow->theme->preferencesoptions_x;
75 y = mwindow->theme->preferencesoptions_y;
78 win = add_subwindow(new BC_Title(x, y + ys5, _("Cache size (MB):"), MEDIUMFONT, resources->text_default));
79 win->context_help_set_keyword("Performance section");
80 int maxw = win->get_w();
82 win = add_subwindow(new BC_Title(x, y1 + ys5, _("Seconds to preroll renders:")));
83 win->context_help_set_keyword("Performance section");
84 maxw = bmax(win->get_w(), maxw);
85 int x2 = x + maxw + xs5;
87 cache_size = new CICacheSize(x2, y0, pwindow, this);
88 cache_size->create_objects();
89 PrefsRenderPreroll *preroll = new PrefsRenderPreroll(pwindow, this, x2, y1);
90 preroll->create_objects();
91 add_subwindow(new PrefsForceUniprocessor(pwindow, x, y2));
94 int x1 = x + xmargin4;
95 add_subwindow(cache_transitions = new CacheTransitions(x1, y0, pwindow, this));
96 cache_transitions->context_help_set_keyword("Performance section");
97 win = add_subwindow(new BC_Title(x1, y1, _("Use HW Device:")));
98 win->context_help_set_keyword("Performance section");
100 win = add_subwindow(new BC_Title(x1, y2, _("Project SMP cpus:")));
101 win->context_help_set_keyword("Performance section");
102 maxw = bmax(win->get_w(), maxw);
103 x2 = x1 + maxw + xs5;
104 PrefsUseHWDev *use_hw_dev = new PrefsUseHWDev(pwindow, this, x2, y1);
105 use_hw_dev->create_objects();
106 PrefsProjectSMP *proj_smp = new PrefsProjectSMP(pwindow, this, x2, y2);
107 proj_smp->create_objects();
109 // Background rendering
110 add_subwindow(new BC_Bar(xs5, y, get_w() - xs10));
114 add_subwindow(title = new BC_Title(x, y, _("Background Rendering (Video only)"), LARGEFONT, resources->text_default));
115 title->context_help_set_keyword("Background Rendering");
118 win = add_subwindow(new PrefsUseBRender(pwindow, x, y));
119 win->context_help_set_keyword("Background Rendering");
121 y += win->get_h() + ys10;
122 win = add_subwindow(new BC_Title(x, y, _("Frames per background rendering job:")));
123 win->context_help_set_keyword("Background Rendering");
124 y += win->get_h() + ys5;
125 PrefsBRenderFragment *brender_fragment = new PrefsBRenderFragment(pwindow, this,
127 brender_fragment->create_objects();
128 y += brender_fragment->get_h() + ys5;
129 win = add_subwindow(new BC_Title(x, y, _("Frames to preroll background:")));
130 win->context_help_set_keyword("Background Rendering");
131 y += win->get_h() + ys5;
132 PrefsBRenderPreroll *bpreroll = new PrefsBRenderPreroll(pwindow, this,
133 x + xmargin3, y + ys5);
134 bpreroll->create_objects();
135 y += bpreroll->get_h() + ys20;
138 add_subwindow(title = new BC_Title(x, y1, _("Output for background rendering:")));
139 title->context_help_set_keyword("Background Rendering");
141 brender_tools = new FormatTools(mwindow, this,
142 pwindow->thread->preferences->brender_asset);
143 brender_tools->create_objects(x, y1,
144 0, // Include tools for audio
145 1, // Include tools for video
146 0, // Include checkbox for audio
147 0, // Include checkbox for video
150 0, // Select compressors to be offered
151 0, // Prompt for recording options
152 0, // prompt for use labels
153 1); // Supply file formats for background rendering
158 add_subwindow(new BC_Bar(xs5, y, get_w() - xs10));
160 add_subwindow(title = new BC_Title(x, y, _("Render Farm"), LARGEFONT, resources->text_default));
161 title->context_help_set_keyword("Render Farm Menu");
162 x1 = get_w() - BC_GenericButton::calculate_w(this, _("Reset rates")) - x;
163 add_subwindow(new PrefsRenderFarmReset(pwindow, this, x1, y));
165 BC_Title *node_title = new BC_Title(x1, y, _("Nodes:"));
166 add_subwindow(node_title);
167 node_title->context_help_set_keyword("Render Farm Menu");
168 x1 += node_title->get_w() + xS(15);
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 master_rate->context_help_set_keyword("Render Farm Menu");
173 add_subwindow(node_list = new PrefsRenderFarmNodes(pwindow, this, x + xmargin4, y+=yS(25)));
174 node_list->context_help_set_keyword("Render Farm Menu");
175 add_subwindow(new PrefsRenderFarm(pwindow, x, y+=ys5));
176 add_subwindow(title = new BC_Title(x, y+=ys30, _("Hostname:")));
177 title->context_help_set_keyword("Render Farm Menu");
178 add_subwindow(title = new BC_Title(x + xmargin3, y, _("Port:")));
179 title->context_help_set_keyword("Render Farm Menu");
180 add_subwindow(edit_node = new PrefsRenderFarmEditNode(pwindow, this, x, y+=yS(25)));
181 edit_node->context_help_set_keyword("Render Farm Menu");
182 edit_port = new PrefsRenderFarmPort(pwindow, this, x+xmargin3, y);
183 edit_port->create_objects();
185 add_subwindow(new PrefsRenderFarmReplaceNode(pwindow, this, x, y+=ys30));
186 add_subwindow(new PrefsRenderFarmNewNode(pwindow, this, x+xmargin2, y));
187 add_subwindow(new PrefsRenderFarmSortNodes(pwindow, this, x, y+=ys30));
188 add_subwindow(new PrefsRenderFarmDelNode(pwindow, this, x+xmargin2, y));
189 add_subwindow(title = new BC_Title(x, y+=ys35, _("Client Watchdog Timeout:")));
190 title->context_help_set_keyword("Render Farm Menu");
191 renderfarm_watchdog = new PrefsRenderFarmWatchdog(pwindow, this, x+xmargin3, y-ys5);
192 renderfarm_watchdog->create_objects();
193 add_subwindow(title = new BC_Title(x, y+=ys35, _("Total jobs to create:")));
194 title->context_help_set_keyword("Render Farm Menu");
195 PrefsRenderFarmJobs *jobs = new PrefsRenderFarmJobs(pwindow, this,
196 x + xmargin3, y-ys5);
197 jobs->create_objects();
198 y += jobs->get_h() + ys5;
199 win = add_subwindow(new BC_Title(x, y,
200 _("(overridden if new file at each label is checked)")));
201 win->context_help_set_keyword("Render Farm Menu");
202 // y += win->get_h() + ys5;
203 // add_subwindow(new PrefsRenderFarmVFS(pwindow, this, x, y));
204 // add_subwindow(new BC_Title(x, y,
205 // _("Filesystem prefix on remote nodes:")));
206 // add_subwindow(new PrefsRenderFarmMountpoint(pwindow, this, x + xmargin3, y));
210 void PerformancePrefs::generate_node_list()
212 int selected_row = node_list ? node_list->get_selection_number(0, 0) : -1;
214 for(int i = 0; i < TOTAL_COLUMNS; i++)
215 nodes[i].remove_all_objects();
218 i < pwindow->thread->preferences->renderfarm_nodes.size();
221 BC_ListBoxItem *item;
222 nodes[ENABLED_COLUMN].append(item = new BC_ListBoxItem(
223 (char*)(pwindow->thread->preferences->renderfarm_enabled.get(i) ? "X" : " ")));
224 if(i == selected_row) item->set_selected(1);
226 nodes[HOSTNAME_COLUMN].append(item = new BC_ListBoxItem(
227 pwindow->thread->preferences->renderfarm_nodes.get(i)));
228 if(i == selected_row) item->set_selected(1);
230 char string[BCTEXTLEN];
231 sprintf(string, "%d", pwindow->thread->preferences->renderfarm_ports.get(i));
232 nodes[PORT_COLUMN].append(item = new BC_ListBoxItem(string));
233 if(i == selected_row) item->set_selected(1);
235 sprintf(string, "%0.3f", pwindow->thread->preferences->renderfarm_rate.get(i));
236 nodes[RATE_COLUMN].append(item = new BC_ListBoxItem(string));
237 if(i == selected_row) item->set_selected(1);
242 static const char *default_titles[] = {
243 N_("On"), N_("Hostname"), N_("Port"), N_("Framerate")
246 static int default_widths[] = {
251 void PerformancePrefs::update_node_list()
253 node_list->update_list();
256 void PrefsRenderFarmNodes::update_list()
258 update(subwindow->nodes, titles, widths, PerformancePrefs::TOTAL_COLUMNS,
259 get_xposition(), get_yposition(), get_selection_number(0, 0));
263 void PerformancePrefs::update_rates()
265 //printf("PerformancePrefs::update_rates %d\n", __LINE__);
266 char string[BCTEXTLEN];
268 i < mwindow->preferences->renderfarm_rate.size();
271 if(i < nodes[RATE_COLUMN].size())
273 sprintf(string, "%0.3f", mwindow->preferences->renderfarm_rate.get(i));
274 nodes[RATE_COLUMN].get(i)->set_text(string);
278 sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT),
279 mwindow->preferences->local_rate);
280 master_rate->update(string);
286 PrefsUseBRender::PrefsUseBRender(PreferencesWindow *pwindow,
291 pwindow->thread->preferences->use_brender,
292 _("Use background rendering"))
294 this->pwindow = pwindow;
297 int PrefsUseBRender::handle_event()
299 pwindow->thread->redraw_overlays = 1;
300 pwindow->thread->redraw_times = 1;
301 pwindow->thread->preferences->use_brender = get_value();
306 PrefsBRenderFragment::PrefsBRenderFragment(PreferencesWindow *pwindow,
307 PerformancePrefs *subwindow, int x, int y)
308 : BC_TumbleTextBox(subwindow,
309 (int64_t)pwindow->thread->preferences->brender_fragment,
310 (int64_t)1, (int64_t)65535, x, y, xS(100))
312 this->pwindow = pwindow;
314 int PrefsBRenderFragment::handle_event()
316 pwindow->thread->preferences->brender_fragment = atol(get_text());
320 CICacheSize::CICacheSize(int x, int y,
321 PreferencesWindow *pwindow, PerformancePrefs *subwindow)
322 : BC_TumbleTextBox(subwindow,
323 (int64_t)pwindow->thread->preferences->cache_size / 0x100000,
324 (int64_t)MIN_CACHE_SIZE / 0x100000,
325 (int64_t)MAX_CACHE_SIZE / 0x100000,
328 this->pwindow = pwindow;
332 int CICacheSize::handle_event()
335 result = (int64_t)atol(get_text()) * 0x100000;
336 CLAMP(result, MIN_CACHE_SIZE, MAX_CACHE_SIZE);
337 pwindow->thread->preferences->cache_size = result;
341 CacheTransitions::CacheTransitions(int x, int y,
342 PreferencesWindow *pwindow, PerformancePrefs *subwindow)
343 : BC_CheckBox(x, y, pwindow->thread->preferences->cache_transitions,
344 _("Cache Transitions"))
346 this->pwindow = pwindow;
349 int CacheTransitions::handle_event()
351 pwindow->thread->preferences->cache_transitions = get_value();
356 PrefsUseHWDev::PrefsUseHWDev(PreferencesWindow *pwindow,
357 PerformancePrefs *subwindow, int x, int y)
358 : BC_PopupTextBox(subwindow,0,0,x,y,xS(100),yS(80),LISTBOX_TEXT)
360 this->pwindow = pwindow;
363 void PrefsUseHWDev::create_objects()
365 BC_PopupTextBox::create_objects();
366 set_tooltip(_("vdpau - Nvidia, Nouveau\n"
367 "vaapi - Broadcom, Intel HD graphics, Amdgpu, Radeon\n"
368 "cuda - Nvidia + Cuda SDK"));
369 hw_dev_names.append(new BC_ListBoxItem(_("none")));
371 hw_dev_names.append(new BC_ListBoxItem("vaapi"));
374 hw_dev_names.append(new BC_ListBoxItem("vdpau"));
377 hw_dev_names.append(new BC_ListBoxItem("cuda"));
379 update_list(&hw_dev_names);
380 update(&pwindow->thread->preferences->use_hw_dev[0]);
383 int PrefsUseHWDev::handle_event()
385 strncpy(&pwindow->thread->preferences->use_hw_dev[0],
386 get_text(), sizeof(pwindow->thread->preferences->use_hw_dev));
390 PrefsRenderPreroll::PrefsRenderPreroll(PreferencesWindow *pwindow,
391 PerformancePrefs *subwindow, int x, int y)
392 : BC_TumbleTextBox(subwindow,
393 (float)pwindow->thread->preferences->render_preroll,
394 0.f, 100.f, x, y, xS(100))
396 this->pwindow = pwindow;
399 PrefsRenderPreroll::~PrefsRenderPreroll()
402 int PrefsRenderPreroll::handle_event()
404 pwindow->thread->preferences->render_preroll = atof(get_text());
409 PrefsBRenderPreroll::PrefsBRenderPreroll(PreferencesWindow *pwindow,
410 PerformancePrefs *subwindow,
413 : BC_TumbleTextBox(subwindow,
414 (int64_t)pwindow->thread->preferences->brender_preroll,
415 (int64_t)0, (int64_t)100, x, y, xS(100))
417 this->pwindow = pwindow;
419 int PrefsBRenderPreroll::handle_event()
421 pwindow->thread->preferences->brender_preroll = atol(get_text());
426 PrefsRenderFarm::PrefsRenderFarm(PreferencesWindow *pwindow, int x, int y)
429 pwindow->thread->preferences->use_renderfarm,
430 _("Use render farm"))
432 this->pwindow = pwindow;
433 // *** CONTEXT_HELP ***
434 context_help_set_keyword("Render Farm section");
436 PrefsRenderFarm::~PrefsRenderFarm()
439 int PrefsRenderFarm::handle_event()
441 pwindow->thread->preferences->use_renderfarm = get_value();
446 PrefsForceUniprocessor::PrefsForceUniprocessor(PreferencesWindow *pwindow, int x, int y)
449 pwindow->thread->preferences->force_uniprocessor,
450 _("Force single processor use"))
452 this->pwindow = pwindow;
453 // *** CONTEXT_HELP ***
454 context_help_set_keyword("Performance section");
456 PrefsForceUniprocessor::~PrefsForceUniprocessor()
459 int PrefsForceUniprocessor::handle_event()
461 pwindow->thread->preferences->force_uniprocessor = get_value();
467 PrefsRenderFarmConsolidate::PrefsRenderFarmConsolidate(PreferencesWindow *pwindow, int x, int y)
470 pwindow->thread->preferences->renderfarm_consolidate,
471 _("Consolidate output files on completion"))
473 this->pwindow = pwindow;
475 PrefsRenderFarmConsolidate::~PrefsRenderFarmConsolidate()
478 int PrefsRenderFarmConsolidate::handle_event()
480 pwindow->thread->preferences->renderfarm_consolidate = get_value();
485 PrefsRenderFarmPort::PrefsRenderFarmPort(PreferencesWindow *pwindow,
486 PerformancePrefs *subwindow,
489 : BC_TumbleTextBox(subwindow,
490 (int64_t)pwindow->thread->preferences->renderfarm_port,
491 (int64_t)1, (int64_t)65535, x, y, xS(100))
493 this->pwindow = pwindow;
496 PrefsRenderFarmPort::~PrefsRenderFarmPort()
500 int PrefsRenderFarmPort::handle_event()
502 pwindow->thread->preferences->renderfarm_port = atol(get_text());
508 PrefsRenderFarmNodes::PrefsRenderFarmNodes(PreferencesWindow *pwindow,
509 PerformancePrefs *subwindow, int x, int y)
510 : BC_ListBox(x, y, xS(340), yS(230), LISTBOX_TEXT, 0,0,0,1, 0,0, LISTBOX_MULTIPLE)
512 for( int i=0; i<PerformancePrefs::TOTAL_COLUMNS; ++i ) {
513 titles[i] = _(default_titles[i]);
514 widths[i] = xS(default_widths[i]);
516 update(subwindow->nodes, titles, widths, PerformancePrefs::TOTAL_COLUMNS,
518 this->subwindow = subwindow;
519 this->pwindow = pwindow;
521 PrefsRenderFarmNodes::~PrefsRenderFarmNodes()
525 int PrefsRenderFarmNodes::column_resize_event()
527 for( int i=0; i<PerformancePrefs::TOTAL_COLUMNS; ++i )
528 widths[i] = get_column_width(i);
532 int PrefsRenderFarmNodes::handle_event()
535 if(get_selection_number(0, 0) >= 0)
537 subwindow->hot_node = get_selection_number(1, 0);
538 subwindow->edit_node->update(get_selection(1, 0)->get_text());
539 const char *text = get_selection(2, 0)->get_text();
540 subwindow->edit_port->update(text);
541 pwindow->thread->preferences->renderfarm_port = atol(text);
542 if(get_cursor_x() < widths[0])
544 pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node] =
545 !pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node];
546 subwindow->generate_node_list();
547 subwindow->update_node_list();
552 subwindow->hot_node = -1;
553 subwindow->edit_node->update("");
558 int PrefsRenderFarmNodes::selection_changed()
565 PrefsRenderFarmEditNode::PrefsRenderFarmEditNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
566 : BC_TextBox(x, y, xS(240), 1, "")
568 this->pwindow = pwindow;
569 this->subwindow = subwindow;
572 PrefsRenderFarmEditNode::~PrefsRenderFarmEditNode()
576 int PrefsRenderFarmEditNode::handle_event()
582 PrefsRenderFarmNewNode::PrefsRenderFarmNewNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
583 : BC_GenericButton(x, y, _("Add Nodes"))
585 this->pwindow = pwindow;
586 this->subwindow = subwindow;
587 // *** CONTEXT_HELP ***
588 context_help_set_keyword("Render Farm Menu");
590 PrefsRenderFarmNewNode::~PrefsRenderFarmNewNode()
593 int PrefsRenderFarmNewNode::handle_event()
595 const char *name = subwindow->edit_node->get_text();
596 char *cp = (char*)subwindow->edit_port->get_text();
597 int64_t start_port = strtol(cp, &cp, 0), end_port = start_port;
598 while( isspace(*cp) ) ++cp;
600 end_port = strtol(cp, &cp, 0);
601 for( int port=start_port; port<=end_port; ++port ) {
602 pwindow->thread->preferences->add_node(name, port, 1, 0.0);
604 pwindow->thread->preferences->renderfarm_port = end_port;
605 subwindow->edit_port->update(end_port);
606 pwindow->thread->preferences->reset_rates();
607 subwindow->generate_node_list();
608 subwindow->update_node_list();
609 subwindow->hot_node = -1;
614 PrefsRenderFarmReplaceNode::PrefsRenderFarmReplaceNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
615 : BC_GenericButton(x, y, _("Apply Changes"))
617 this->pwindow = pwindow;
618 this->subwindow = subwindow;
619 // *** CONTEXT_HELP ***
620 context_help_set_keyword("Render Farm Menu");
622 PrefsRenderFarmReplaceNode::~PrefsRenderFarmReplaceNode()
625 int PrefsRenderFarmReplaceNode::handle_event()
627 if(subwindow->hot_node >= 0)
629 pwindow->thread->preferences->edit_node(subwindow->hot_node,
630 subwindow->edit_node->get_text(),
631 pwindow->thread->preferences->renderfarm_port,
632 pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node]);
633 subwindow->generate_node_list();
634 subwindow->update_node_list();
640 PrefsRenderFarmDelNode::PrefsRenderFarmDelNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
641 : BC_GenericButton(x, y, _("Delete Nodes"))
643 this->pwindow = pwindow;
644 this->subwindow = subwindow;
645 // *** CONTEXT_HELP ***
646 context_help_set_keyword("Render Farm Menu");
648 PrefsRenderFarmDelNode::~PrefsRenderFarmDelNode()
651 int PrefsRenderFarmDelNode::handle_event()
653 ArrayList<BC_ListBoxItem *> &item_list = subwindow->nodes[0];
654 for( int i=item_list.size(); --i>=0; ) {
655 if( !item_list[i]->get_selected() ) continue;
656 pwindow->thread->preferences->delete_node(i);
658 subwindow->generate_node_list();
659 subwindow->update_node_list();
660 subwindow->hot_node = -1;
665 PrefsRenderFarmSortNodes::PrefsRenderFarmSortNodes(PreferencesWindow *pwindow,
666 PerformancePrefs *subwindow,
669 : BC_GenericButton(x, y, _("Sort nodes"))
671 this->pwindow = pwindow;
672 this->subwindow = subwindow;
673 // *** CONTEXT_HELP ***
674 context_help_set_keyword("Render Farm Menu");
677 PrefsRenderFarmSortNodes::~PrefsRenderFarmSortNodes()
681 int PrefsRenderFarmSortNodes::handle_event()
683 pwindow->thread->preferences->sort_nodes();
684 subwindow->generate_node_list();
685 subwindow->update_node_list();
686 subwindow->hot_node = -1;
691 PrefsRenderFarmReset::PrefsRenderFarmReset(PreferencesWindow *pwindow,
692 PerformancePrefs *subwindow, int x, int y)
693 : BC_GenericButton(x, y, _("Reset rates"))
695 this->pwindow = pwindow;
696 this->subwindow = subwindow;
697 // *** CONTEXT_HELP ***
698 context_help_set_keyword("Render Farm Menu");
701 int PrefsRenderFarmReset::handle_event()
703 pwindow->thread->preferences->reset_rates();
704 subwindow->generate_node_list();
705 subwindow->update_node_list();
707 char string[BCTEXTLEN];
709 _(MASTER_NODE_FRAMERATE_TEXT),
710 pwindow->thread->preferences->local_rate);
711 subwindow->master_rate->update(string);
712 subwindow->hot_node = -1;
717 PrefsProjectSMP::PrefsProjectSMP(PreferencesWindow *pwindow,
718 PerformancePrefs *subwindow, int x, int y)
719 : BC_TumbleTextBox(subwindow,
720 (int64_t)pwindow->thread->preferences->project_smp,
721 (int64_t)1, (int64_t)100, x, y, xS(100))
723 this->pwindow = pwindow;
725 PrefsProjectSMP::~PrefsProjectSMP()
728 int PrefsProjectSMP::handle_event()
730 pwindow->thread->preferences->project_smp = atol(get_text());
735 PrefsRenderFarmJobs::PrefsRenderFarmJobs(PreferencesWindow *pwindow,
736 PerformancePrefs *subwindow,
739 : BC_TumbleTextBox(subwindow,
740 (int64_t)pwindow->thread->preferences->renderfarm_job_count,
741 (int64_t)1, (int64_t)100, x, y, xS(100))
743 this->pwindow = pwindow;
745 PrefsRenderFarmJobs::~PrefsRenderFarmJobs()
748 int PrefsRenderFarmJobs::handle_event()
750 pwindow->thread->preferences->renderfarm_job_count = atol(get_text());
755 PrefsRenderFarmMountpoint::PrefsRenderFarmMountpoint(PreferencesWindow *pwindow,
756 PerformancePrefs *subwindow, int x, int y)
757 : BC_TextBox(x, y, xS(100), 1,
758 pwindow->thread->preferences->renderfarm_mountpoint)
760 this->pwindow = pwindow;
761 this->subwindow = subwindow;
763 PrefsRenderFarmMountpoint::~PrefsRenderFarmMountpoint()
766 int PrefsRenderFarmMountpoint::handle_event()
768 strcpy(pwindow->thread->preferences->renderfarm_mountpoint, get_text());
773 PrefsRenderFarmVFS::PrefsRenderFarmVFS(PreferencesWindow *pwindow,
774 PerformancePrefs *subwindow, int x, int y)
775 : BC_CheckBox(x, y, pwindow->thread->preferences->renderfarm_vfs,
776 _("Use virtual filesystem"))
778 this->pwindow = pwindow;
779 this->subwindow = subwindow;
782 int PrefsRenderFarmVFS::handle_event()
784 pwindow->thread->preferences->renderfarm_vfs = get_value();
789 PrefsRenderFarmWatchdog::PrefsRenderFarmWatchdog(PreferencesWindow *pwindow,
790 PerformancePrefs *subwindow, int x, int y)
791 : BC_TumbleTextBox(subwindow,
792 (int64_t)pwindow->thread->preferences->renderfarm_watchdog_timeout,
793 (int64_t)0, (int64_t)1000, x, y, xS(100))
795 this->pwindow = pwindow;
799 int PrefsRenderFarmWatchdog::handle_event()
801 pwindow->thread->preferences->renderfarm_watchdog_timeout = atol(get_text());