4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
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.
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.
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
22 #include "bcsignals.h"
25 #include "edlsession.h"
26 #include "formattools.h"
29 #include "performanceprefs.h"
30 #include "preferences.h"
35 #define MASTER_NODE_FRAMERATE_TEXT "Master node framerate: %0.3f"
37 N_(MASTER_NODE_FRAMERATE_TEXT)
40 PerformancePrefs::PerformancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
41 : PreferencesDialog(mwindow, pwindow)
46 PerformancePrefs::~PerformancePrefs()
49 nodes[0].remove_all_objects();
50 nodes[1].remove_all_objects();
51 nodes[2].remove_all_objects();
52 nodes[3].remove_all_objects();
55 void PerformancePrefs::create_objects()
57 int xs5 = xS(5), xs10 = xS(10);
58 int ys5 = yS(5), ys10 = yS(10), ys20 = yS(20), ys30 = yS(30), ys35 = yS(35);
60 int xmargin2 = xS(180);
61 int xmargin3 = xS(260);
62 int xmargin4 = xS(420);
63 char string[BCTEXTLEN];
64 BC_Resources *resources = BC_WindowBase::get_resources();
70 int xmargin1 = x = mwindow->theme->preferencesoptions_x;
71 y = mwindow->theme->preferencesoptions_y;
74 win = add_subwindow(new BC_Title(x, y + ys5, _("Cache size (MB):"), MEDIUMFONT, resources->text_default));
75 int maxw = win->get_w();
77 win = add_subwindow(new BC_Title(x, y1 + ys5, _("Seconds to preroll renders:")));
78 maxw = bmax(win->get_w(), maxw);
79 int x2 = x + maxw + xs5;
81 cache_size = new CICacheSize(x2, y0, pwindow, this);
82 cache_size->create_objects();
83 PrefsRenderPreroll *preroll = new PrefsRenderPreroll(pwindow, this, x2, y1);
84 preroll->create_objects();
85 add_subwindow(new PrefsForceUniprocessor(pwindow, x, y2));
88 int x1 = x + xmargin4;
89 add_subwindow(cache_transitions = new CacheTransitions(x1, y0, pwindow, this));
90 win = add_subwindow(new BC_Title(x1, y1, _("Use HW Device:")));
92 win = add_subwindow(new BC_Title(x1, y2, _("Project SMP cpus:")));
93 maxw = bmax(win->get_w(), maxw);
95 PrefsUseHWDev *use_hw_dev = new PrefsUseHWDev(pwindow, this, x2, y1);
96 use_hw_dev->create_objects();
97 PrefsProjectSMP *proj_smp = new PrefsProjectSMP(pwindow, this, x2, y2);
98 proj_smp->create_objects();
100 // Background rendering
101 add_subwindow(new BC_Bar(xs5, y, get_w() - xs10));
105 add_subwindow(new BC_Title(x, y, _("Background Rendering (Video only)"), LARGEFONT, resources->text_default));
108 win = add_subwindow(new PrefsUseBRender(pwindow, x, y));
110 y += win->get_h() + ys10;
111 win = add_subwindow(new BC_Title(x, y, _("Frames per background rendering job:")));
112 y += win->get_h() + ys5;
113 PrefsBRenderFragment *brender_fragment = new PrefsBRenderFragment(pwindow, this,
115 brender_fragment->create_objects();
116 y += brender_fragment->get_h() + ys5;
117 win = add_subwindow(new BC_Title(x, y, _("Frames to preroll background:")));
118 y += win->get_h() + ys5;
119 PrefsBRenderPreroll *bpreroll = new PrefsBRenderPreroll(pwindow, this,
120 x + xmargin3, y + ys5);
121 bpreroll->create_objects();
122 y += bpreroll->get_h() + ys20;
125 add_subwindow(new BC_Title(x, y1, _("Output for background rendering:")));
127 brender_tools = new FormatTools(mwindow, this,
128 pwindow->thread->preferences->brender_asset);
129 brender_tools->create_objects(x, y1,
130 0, // Include tools for audio
131 1, // Include tools for video
132 0, // Include checkbox for audio
133 0, // Include checkbox for video
136 0, // Select compressors to be offered
137 0, // Prompt for recording options
138 0, // prompt for use labels
139 1); // Supply file formats for background rendering
144 add_subwindow(new BC_Bar(xs5, y, get_w() - xs10));
146 add_subwindow(new BC_Title(x, y, _("Render Farm"), LARGEFONT, resources->text_default));
147 x1 = get_w() - BC_GenericButton::calculate_w(this, _("Reset rates")) - x;
148 add_subwindow(new PrefsRenderFarmReset(pwindow, this, x1, y));
150 BC_Title *node_title = new BC_Title(x1, y, _("Nodes:"));
151 add_subwindow(node_title);
152 x1 += node_title->get_w() + xS(15);
153 sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT),
154 pwindow->thread->preferences->local_rate);
155 add_subwindow(master_rate = new BC_Title(x1, y, string));
156 add_subwindow(node_list = new PrefsRenderFarmNodes(pwindow, this, x + xmargin4, y+=yS(25)));
157 add_subwindow(new PrefsRenderFarm(pwindow, x, y+=ys5));
158 add_subwindow(new BC_Title(x, y+=ys30, _("Hostname:")));
159 add_subwindow(new BC_Title(x + xmargin3, y, _("Port:")));
160 add_subwindow(edit_node = new PrefsRenderFarmEditNode(pwindow, this, x, y+=yS(25)));
161 edit_port = new PrefsRenderFarmPort(pwindow, this, x+xmargin3, y);
162 edit_port->create_objects();
164 add_subwindow(new PrefsRenderFarmReplaceNode(pwindow, this, x, y+=ys30));
165 add_subwindow(new PrefsRenderFarmNewNode(pwindow, this, x+xmargin2, y));
166 add_subwindow(new PrefsRenderFarmSortNodes(pwindow, this, x, y+=ys30));
167 add_subwindow(new PrefsRenderFarmDelNode(pwindow, this, x+xmargin2, y));
168 add_subwindow(new BC_Title(x, y+=ys35, _("Client Watchdog Timeout:")));
169 renderfarm_watchdog = new PrefsRenderFarmWatchdog(pwindow, this, x+xmargin3, y-ys5);
170 renderfarm_watchdog->create_objects();
171 add_subwindow(new BC_Title(x, y+=ys35, _("Total jobs to create:")));
172 PrefsRenderFarmJobs *jobs = new PrefsRenderFarmJobs(pwindow, this,
173 x + xmargin3, y-ys5);
174 jobs->create_objects();
175 y += jobs->get_h() + ys5;
176 win = add_subwindow(new BC_Title(x, y,
177 _("(overridden if new file at each label is checked)")));
178 // y += win->get_h() + ys5;
179 // add_subwindow(new PrefsRenderFarmVFS(pwindow, this, x, y));
180 // add_subwindow(new BC_Title(x, y,
181 // _("Filesystem prefix on remote nodes:")));
182 // add_subwindow(new PrefsRenderFarmMountpoint(pwindow, this, x + xmargin3, y));
186 void PerformancePrefs::generate_node_list()
188 int selected_row = node_list ? node_list->get_selection_number(0, 0) : -1;
190 for(int i = 0; i < TOTAL_COLUMNS; i++)
191 nodes[i].remove_all_objects();
194 i < pwindow->thread->preferences->renderfarm_nodes.size();
197 BC_ListBoxItem *item;
198 nodes[ENABLED_COLUMN].append(item = new BC_ListBoxItem(
199 (char*)(pwindow->thread->preferences->renderfarm_enabled.get(i) ? "X" : " ")));
200 if(i == selected_row) item->set_selected(1);
202 nodes[HOSTNAME_COLUMN].append(item = new BC_ListBoxItem(
203 pwindow->thread->preferences->renderfarm_nodes.get(i)));
204 if(i == selected_row) item->set_selected(1);
206 char string[BCTEXTLEN];
207 sprintf(string, "%d", pwindow->thread->preferences->renderfarm_ports.get(i));
208 nodes[PORT_COLUMN].append(item = new BC_ListBoxItem(string));
209 if(i == selected_row) item->set_selected(1);
211 sprintf(string, "%0.3f", pwindow->thread->preferences->renderfarm_rate.get(i));
212 nodes[RATE_COLUMN].append(item = new BC_ListBoxItem(string));
213 if(i == selected_row) item->set_selected(1);
218 static const char *default_titles[] = {
219 N_("On"), N_("Hostname"), N_("Port"), N_("Framerate")
222 static int default_widths[] = {
227 void PerformancePrefs::update_node_list()
229 node_list->update_list();
232 void PrefsRenderFarmNodes::update_list()
234 update(subwindow->nodes, titles, widths, PerformancePrefs::TOTAL_COLUMNS,
235 get_xposition(), get_yposition(), get_selection_number(0, 0));
239 void PerformancePrefs::update_rates()
241 //printf("PerformancePrefs::update_rates %d\n", __LINE__);
242 char string[BCTEXTLEN];
244 i < mwindow->preferences->renderfarm_rate.size();
247 if(i < nodes[RATE_COLUMN].size())
249 sprintf(string, "%0.3f", mwindow->preferences->renderfarm_rate.get(i));
250 nodes[RATE_COLUMN].get(i)->set_text(string);
254 sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT),
255 mwindow->preferences->local_rate);
256 master_rate->update(string);
262 PrefsUseBRender::PrefsUseBRender(PreferencesWindow *pwindow,
267 pwindow->thread->preferences->use_brender,
268 _("Use background rendering"))
270 this->pwindow = pwindow;
273 int PrefsUseBRender::handle_event()
275 pwindow->thread->redraw_overlays = 1;
276 pwindow->thread->redraw_times = 1;
277 pwindow->thread->preferences->use_brender = get_value();
282 PrefsBRenderFragment::PrefsBRenderFragment(PreferencesWindow *pwindow,
283 PerformancePrefs *subwindow, int x, int y)
284 : BC_TumbleTextBox(subwindow,
285 (int64_t)pwindow->thread->preferences->brender_fragment,
286 (int64_t)1, (int64_t)65535, x, y, xS(100))
288 this->pwindow = pwindow;
290 int PrefsBRenderFragment::handle_event()
292 pwindow->thread->preferences->brender_fragment = atol(get_text());
296 CICacheSize::CICacheSize(int x, int y,
297 PreferencesWindow *pwindow, PerformancePrefs *subwindow)
298 : BC_TumbleTextBox(subwindow,
299 (int64_t)pwindow->thread->preferences->cache_size / 0x100000,
300 (int64_t)MIN_CACHE_SIZE / 0x100000,
301 (int64_t)MAX_CACHE_SIZE / 0x100000,
304 this->pwindow = pwindow;
308 int CICacheSize::handle_event()
311 result = (int64_t)atol(get_text()) * 0x100000;
312 CLAMP(result, MIN_CACHE_SIZE, MAX_CACHE_SIZE);
313 pwindow->thread->preferences->cache_size = result;
317 CacheTransitions::CacheTransitions(int x, int y,
318 PreferencesWindow *pwindow, PerformancePrefs *subwindow)
319 : BC_CheckBox(x, y, pwindow->thread->preferences->cache_transitions,
320 _("Cache Transitions"))
322 this->pwindow = pwindow;
325 int CacheTransitions::handle_event()
327 pwindow->thread->preferences->cache_transitions = get_value();
332 PrefsUseHWDev::PrefsUseHWDev(PreferencesWindow *pwindow,
333 PerformancePrefs *subwindow, int x, int y)
334 : BC_PopupTextBox(subwindow,0,0,x,y,xS(100),yS(80),LISTBOX_TEXT)
336 this->pwindow = pwindow;
339 void PrefsUseHWDev::create_objects()
341 BC_PopupTextBox::create_objects();
342 set_tooltip(_("vdpau - Nvidia, Nouveau\n"
343 "vaapi - Broadcom, Intel HD graphics, Amdgpu, Radeon\n"
344 "cuda - Nvidia + Cuda SDK"));
345 hw_dev_names.append(new BC_ListBoxItem(_("none")));
347 hw_dev_names.append(new BC_ListBoxItem("vaapi"));
350 hw_dev_names.append(new BC_ListBoxItem("vdpau"));
353 hw_dev_names.append(new BC_ListBoxItem("cuda"));
355 update_list(&hw_dev_names);
356 update(&pwindow->thread->preferences->use_hw_dev[0]);
359 int PrefsUseHWDev::handle_event()
361 strncpy(&pwindow->thread->preferences->use_hw_dev[0],
362 get_text(), sizeof(pwindow->thread->preferences->use_hw_dev));
366 PrefsRenderPreroll::PrefsRenderPreroll(PreferencesWindow *pwindow,
367 PerformancePrefs *subwindow, int x, int y)
368 : BC_TumbleTextBox(subwindow,
369 (float)pwindow->thread->preferences->render_preroll,
370 0.f, 100.f, x, y, xS(100))
372 this->pwindow = pwindow;
375 PrefsRenderPreroll::~PrefsRenderPreroll()
378 int PrefsRenderPreroll::handle_event()
380 pwindow->thread->preferences->render_preroll = atof(get_text());
385 PrefsBRenderPreroll::PrefsBRenderPreroll(PreferencesWindow *pwindow,
386 PerformancePrefs *subwindow,
389 : BC_TumbleTextBox(subwindow,
390 (int64_t)pwindow->thread->preferences->brender_preroll,
391 (int64_t)0, (int64_t)100, x, y, xS(100))
393 this->pwindow = pwindow;
395 int PrefsBRenderPreroll::handle_event()
397 pwindow->thread->preferences->brender_preroll = atol(get_text());
402 PrefsRenderFarm::PrefsRenderFarm(PreferencesWindow *pwindow, int x, int y)
405 pwindow->thread->preferences->use_renderfarm,
406 _("Use render farm"))
408 this->pwindow = pwindow;
410 PrefsRenderFarm::~PrefsRenderFarm()
413 int PrefsRenderFarm::handle_event()
415 pwindow->thread->preferences->use_renderfarm = get_value();
420 PrefsForceUniprocessor::PrefsForceUniprocessor(PreferencesWindow *pwindow, int x, int y)
423 pwindow->thread->preferences->force_uniprocessor,
424 _("Force single processor use"))
426 this->pwindow = pwindow;
428 PrefsForceUniprocessor::~PrefsForceUniprocessor()
431 int PrefsForceUniprocessor::handle_event()
433 pwindow->thread->preferences->force_uniprocessor = get_value();
439 PrefsRenderFarmConsolidate::PrefsRenderFarmConsolidate(PreferencesWindow *pwindow, int x, int y)
442 pwindow->thread->preferences->renderfarm_consolidate,
443 _("Consolidate output files on completion"))
445 this->pwindow = pwindow;
447 PrefsRenderFarmConsolidate::~PrefsRenderFarmConsolidate()
450 int PrefsRenderFarmConsolidate::handle_event()
452 pwindow->thread->preferences->renderfarm_consolidate = get_value();
457 PrefsRenderFarmPort::PrefsRenderFarmPort(PreferencesWindow *pwindow,
458 PerformancePrefs *subwindow,
461 : BC_TumbleTextBox(subwindow,
462 (int64_t)pwindow->thread->preferences->renderfarm_port,
463 (int64_t)1, (int64_t)65535, x, y, xS(100))
465 this->pwindow = pwindow;
468 PrefsRenderFarmPort::~PrefsRenderFarmPort()
472 int PrefsRenderFarmPort::handle_event()
474 pwindow->thread->preferences->renderfarm_port = atol(get_text());
480 PrefsRenderFarmNodes::PrefsRenderFarmNodes(PreferencesWindow *pwindow,
481 PerformancePrefs *subwindow, int x, int y)
482 : BC_ListBox(x, y, xS(340), yS(230), LISTBOX_TEXT, 0,0,0,1, 0,0, LISTBOX_MULTIPLE)
484 for( int i=0; i<PerformancePrefs::TOTAL_COLUMNS; ++i ) {
485 titles[i] = _(default_titles[i]);
486 widths[i] = xS(default_widths[i]);
488 update(subwindow->nodes, titles, widths, PerformancePrefs::TOTAL_COLUMNS,
490 this->subwindow = subwindow;
491 this->pwindow = pwindow;
493 PrefsRenderFarmNodes::~PrefsRenderFarmNodes()
497 int PrefsRenderFarmNodes::column_resize_event()
499 for( int i=0; i<PerformancePrefs::TOTAL_COLUMNS; ++i )
500 widths[i] = get_column_width(i);
504 int PrefsRenderFarmNodes::handle_event()
507 if(get_selection_number(0, 0) >= 0)
509 subwindow->hot_node = get_selection_number(1, 0);
510 subwindow->edit_node->update(get_selection(1, 0)->get_text());
511 const char *text = get_selection(2, 0)->get_text();
512 subwindow->edit_port->update(text);
513 pwindow->thread->preferences->renderfarm_port = atol(text);
514 if(get_cursor_x() < widths[0])
516 pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node] =
517 !pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node];
518 subwindow->generate_node_list();
519 subwindow->update_node_list();
524 subwindow->hot_node = -1;
525 subwindow->edit_node->update("");
530 int PrefsRenderFarmNodes::selection_changed()
537 PrefsRenderFarmEditNode::PrefsRenderFarmEditNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
538 : BC_TextBox(x, y, xS(240), 1, "")
540 this->pwindow = pwindow;
541 this->subwindow = subwindow;
544 PrefsRenderFarmEditNode::~PrefsRenderFarmEditNode()
548 int PrefsRenderFarmEditNode::handle_event()
554 PrefsRenderFarmNewNode::PrefsRenderFarmNewNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
555 : BC_GenericButton(x, y, _("Add Nodes"))
557 this->pwindow = pwindow;
558 this->subwindow = subwindow;
560 PrefsRenderFarmNewNode::~PrefsRenderFarmNewNode()
563 int PrefsRenderFarmNewNode::handle_event()
565 const char *name = subwindow->edit_node->get_text();
566 char *cp = (char*)subwindow->edit_port->get_text();
567 int64_t start_port = strtol(cp, &cp, 0), end_port = start_port;
568 while( isspace(*cp) ) ++cp;
570 end_port = strtol(cp, &cp, 0);
571 for( int port=start_port; port<=end_port; ++port ) {
572 pwindow->thread->preferences->add_node(name, port, 1, 0.0);
574 pwindow->thread->preferences->renderfarm_port = end_port;
575 subwindow->edit_port->update(end_port);
576 pwindow->thread->preferences->reset_rates();
577 subwindow->generate_node_list();
578 subwindow->update_node_list();
579 subwindow->hot_node = -1;
584 PrefsRenderFarmReplaceNode::PrefsRenderFarmReplaceNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
585 : BC_GenericButton(x, y, _("Apply Changes"))
587 this->pwindow = pwindow;
588 this->subwindow = subwindow;
590 PrefsRenderFarmReplaceNode::~PrefsRenderFarmReplaceNode()
593 int PrefsRenderFarmReplaceNode::handle_event()
595 if(subwindow->hot_node >= 0)
597 pwindow->thread->preferences->edit_node(subwindow->hot_node,
598 subwindow->edit_node->get_text(),
599 pwindow->thread->preferences->renderfarm_port,
600 pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node]);
601 subwindow->generate_node_list();
602 subwindow->update_node_list();
608 PrefsRenderFarmDelNode::PrefsRenderFarmDelNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
609 : BC_GenericButton(x, y, _("Delete Nodes"))
611 this->pwindow = pwindow;
612 this->subwindow = subwindow;
614 PrefsRenderFarmDelNode::~PrefsRenderFarmDelNode()
617 int PrefsRenderFarmDelNode::handle_event()
619 ArrayList<BC_ListBoxItem *> &item_list = subwindow->nodes[0];
620 for( int i=item_list.size(); --i>=0; ) {
621 if( !item_list[i]->get_selected() ) continue;
622 pwindow->thread->preferences->delete_node(i);
624 subwindow->generate_node_list();
625 subwindow->update_node_list();
626 subwindow->hot_node = -1;
631 PrefsRenderFarmSortNodes::PrefsRenderFarmSortNodes(PreferencesWindow *pwindow,
632 PerformancePrefs *subwindow,
635 : BC_GenericButton(x, y, _("Sort nodes"))
637 this->pwindow = pwindow;
638 this->subwindow = subwindow;
641 PrefsRenderFarmSortNodes::~PrefsRenderFarmSortNodes()
645 int PrefsRenderFarmSortNodes::handle_event()
647 pwindow->thread->preferences->sort_nodes();
648 subwindow->generate_node_list();
649 subwindow->update_node_list();
650 subwindow->hot_node = -1;
655 PrefsRenderFarmReset::PrefsRenderFarmReset(PreferencesWindow *pwindow,
656 PerformancePrefs *subwindow, int x, int y)
657 : BC_GenericButton(x, y, _("Reset rates"))
659 this->pwindow = pwindow;
660 this->subwindow = subwindow;
663 int PrefsRenderFarmReset::handle_event()
665 pwindow->thread->preferences->reset_rates();
666 subwindow->generate_node_list();
667 subwindow->update_node_list();
669 char string[BCTEXTLEN];
671 _(MASTER_NODE_FRAMERATE_TEXT),
672 pwindow->thread->preferences->local_rate);
673 subwindow->master_rate->update(string);
674 subwindow->hot_node = -1;
679 PrefsProjectSMP::PrefsProjectSMP(PreferencesWindow *pwindow,
680 PerformancePrefs *subwindow, int x, int y)
681 : BC_TumbleTextBox(subwindow,
682 (int64_t)pwindow->thread->preferences->project_smp,
683 (int64_t)1, (int64_t)100, x, y, xS(100))
685 this->pwindow = pwindow;
687 PrefsProjectSMP::~PrefsProjectSMP()
690 int PrefsProjectSMP::handle_event()
692 pwindow->thread->preferences->project_smp = atol(get_text());
697 PrefsRenderFarmJobs::PrefsRenderFarmJobs(PreferencesWindow *pwindow,
698 PerformancePrefs *subwindow,
701 : BC_TumbleTextBox(subwindow,
702 (int64_t)pwindow->thread->preferences->renderfarm_job_count,
703 (int64_t)1, (int64_t)100, x, y, xS(100))
705 this->pwindow = pwindow;
707 PrefsRenderFarmJobs::~PrefsRenderFarmJobs()
710 int PrefsRenderFarmJobs::handle_event()
712 pwindow->thread->preferences->renderfarm_job_count = atol(get_text());
717 PrefsRenderFarmMountpoint::PrefsRenderFarmMountpoint(PreferencesWindow *pwindow,
718 PerformancePrefs *subwindow, int x, int y)
719 : BC_TextBox(x, y, xS(100), 1,
720 pwindow->thread->preferences->renderfarm_mountpoint)
722 this->pwindow = pwindow;
723 this->subwindow = subwindow;
725 PrefsRenderFarmMountpoint::~PrefsRenderFarmMountpoint()
728 int PrefsRenderFarmMountpoint::handle_event()
730 strcpy(pwindow->thread->preferences->renderfarm_mountpoint, get_text());
735 PrefsRenderFarmVFS::PrefsRenderFarmVFS(PreferencesWindow *pwindow,
736 PerformancePrefs *subwindow, int x, int y)
737 : BC_CheckBox(x, y, pwindow->thread->preferences->renderfarm_vfs,
738 _("Use virtual filesystem"))
740 this->pwindow = pwindow;
741 this->subwindow = subwindow;
744 int PrefsRenderFarmVFS::handle_event()
746 pwindow->thread->preferences->renderfarm_vfs = get_value();
751 PrefsRenderFarmWatchdog::PrefsRenderFarmWatchdog(PreferencesWindow *pwindow,
752 PerformancePrefs *subwindow, int x, int y)
753 : BC_TumbleTextBox(subwindow,
754 (int64_t)pwindow->thread->preferences->renderfarm_watchdog_timeout,
755 (int64_t)0, (int64_t)1000, x, y, xS(100))
757 this->pwindow = pwindow;
761 int PrefsRenderFarmWatchdog::handle_event()
763 pwindow->thread->preferences->renderfarm_watchdog_timeout = atol(get_text());