00001 #include "bcsignals.h"
00002 #include "clip.h"
00003 #include "edl.h"
00004 #include "edlsession.h"
00005 #include "formattools.h"
00006 #include "language.h"
00007 #include "mwindow.h"
00008 #include "performanceprefs.h"
00009 #include "preferences.h"
00010 #include <string.h>
00011 #include "theme.h"
00012
00013
00014 PerformancePrefs::PerformancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
00015 : PreferencesDialog(mwindow, pwindow)
00016 {
00017 hot_node = -1;
00018 }
00019
00020 PerformancePrefs::~PerformancePrefs()
00021 {
00022 delete brender_tools;
00023 nodes[0].remove_all_objects();
00024 nodes[1].remove_all_objects();
00025 nodes[2].remove_all_objects();
00026 nodes[3].remove_all_objects();
00027 }
00028
00029 int PerformancePrefs::create_objects()
00030 {
00031 int x, y;
00032 int xmargin1;
00033 int xmargin2 = 170;
00034 int xmargin3 = 250;
00035 int xmargin4 = 380;
00036 char string[BCTEXTLEN];
00037 BC_Resources *resources = BC_WindowBase::get_resources();
00038
00039 node_list = 0;
00040 generate_node_list();
00041
00042 xmargin1 = x = mwindow->theme->preferencesoptions_x;
00043 y = mwindow->theme->preferencesoptions_y;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 add_subwindow(new BC_Title(x, y + 5, _("Cache size (MB):"), MEDIUMFONT, resources->text_default));
00054 cache_size = new CICacheSize(x + 230,
00055 y,
00056 pwindow,
00057 this);
00058 cache_size->create_objects();
00059
00060 y += 30;
00061 add_subwindow(new BC_Title(x, y + 5, _("Seconds to preroll renders:")));
00062 PrefsRenderPreroll *preroll = new PrefsRenderPreroll(pwindow,
00063 this,
00064 x + 230,
00065 y);
00066 preroll->create_objects();
00067 y += 30;
00068 add_subwindow(new PrefsForceUniprocessor(pwindow, x, y));
00069
00070 y += 35;
00071
00072
00073
00074
00075
00076 add_subwindow(new BC_Bar(5, y, get_w() - 10));
00077 y += 5;
00078
00079
00080 add_subwindow(new BC_Title(x, y, _("Background Rendering (Video only)"), LARGEFONT, resources->text_default));
00081 y += 30;
00082
00083 add_subwindow(new PrefsUseBRender(pwindow,
00084 x,
00085 y));
00086
00087
00088 add_subwindow(new BC_Title(x, y + 40, _("Frames per background rendering job:")));
00089 PrefsBRenderFragment *brender_fragment = new PrefsBRenderFragment(pwindow,
00090 this,
00091 x,
00092 y + 60);
00093 brender_fragment->create_objects();
00094 add_subwindow(new BC_Title(x, y + 95, _("Frames to preroll background:")));
00095 PrefsBRenderPreroll *bpreroll = new PrefsBRenderPreroll(pwindow,
00096 this,
00097 x + xmargin3,
00098 y + 90);
00099 bpreroll->create_objects();
00100
00101
00102 x += xmargin4;
00103 add_subwindow(new BC_Title(x, y, _("Output for background rendering:")));
00104 y += 20;
00105 brender_tools =
00106 new FormatTools(mwindow,
00107 this,
00108 pwindow->thread->preferences->brender_asset);
00109 brender_tools->create_objects(x,
00110 y,
00111 0,
00112 1,
00113 0,
00114 0,
00115 0,
00116 1,
00117 0,
00118 0,
00119 0,
00120 1);
00121 x = xmargin1;
00122
00123
00124
00125 add_subwindow(new BC_Bar(5, y, get_w() - 10));
00126 y += 5;
00127
00128
00129 add_subwindow(new BC_Title(x, y, _("Render Farm"), LARGEFONT, resources->text_default));
00130 y += 25;
00131
00132 add_subwindow(new PrefsRenderFarm(pwindow, x, y));
00133 add_subwindow(new BC_Title(x + xmargin4, y, _("Nodes:")));
00134 y += 30;
00135 add_subwindow(new BC_Title(x, y, _("Hostname:")));
00136 add_subwindow(new BC_Title(x + xmargin3, y, _("Port:")));
00137 add_subwindow(node_list = new PrefsRenderFarmNodes(pwindow,
00138 this,
00139 x + xmargin4,
00140 y - 5));
00141 #if 0
00142 N_("Master node framerate: %0.3f")
00143 #endif
00144 #define MASTER_NODE_FRAMERATE_TEXT "Master node framerate: %0.3f"
00145 sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT),
00146 pwindow->thread->preferences->local_rate);
00147 add_subwindow(master_rate = new BC_Title(x + xmargin4, y + node_list->get_h(), string));
00148
00149 y += 25;
00150 add_subwindow(edit_node = new PrefsRenderFarmEditNode(pwindow,
00151 this,
00152 x,
00153 y));
00154 edit_port = new PrefsRenderFarmPort(pwindow,
00155 this,
00156 x + xmargin3,
00157 y);
00158 edit_port->create_objects();
00159
00160 y += 30;
00161
00162
00163 add_subwindow(new PrefsRenderFarmReplaceNode(pwindow,
00164 this,
00165 x,
00166 y));
00167 add_subwindow(new PrefsRenderFarmNewNode(pwindow,
00168 this,
00169 x + xmargin2,
00170 y));
00171 y += 30;
00172 add_subwindow(new PrefsRenderFarmDelNode(pwindow,
00173 this,
00174 x + xmargin2,
00175 y));
00176 add_subwindow(new PrefsRenderFarmSortNodes(pwindow,
00177 this,
00178 x,
00179 y));
00180 y += 30;
00181 add_subwindow(new PrefsRenderFarmReset(pwindow,
00182 this,
00183 x,
00184 y));
00185 y += 35;
00186 add_subwindow(new BC_Title(x,
00187 y,
00188 _("Total jobs to create:")));
00189 add_subwindow(new BC_Title(x,
00190 y + 30,
00191 _("(overridden if new file at each label is checked)")));
00192 PrefsRenderFarmJobs *jobs = new PrefsRenderFarmJobs(pwindow,
00193 this,
00194 x + xmargin3,
00195 y);
00196 jobs->create_objects();
00197 y += 55;
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211 return 0;
00212 }
00213
00214 void PerformancePrefs::generate_node_list()
00215 {
00216 int selected_row = node_list ? node_list->get_selection_number(0, 0) : -1;
00217 nodes[0].remove_all_objects();
00218 nodes[1].remove_all_objects();
00219 nodes[2].remove_all_objects();
00220 nodes[3].remove_all_objects();
00221 for(int i = 0;
00222 i < pwindow->thread->preferences->renderfarm_nodes.total;
00223 i++)
00224 {
00225 BC_ListBoxItem *item;
00226 nodes[0].append(item = new BC_ListBoxItem(
00227 (char*)(pwindow->thread->preferences->renderfarm_enabled.values[i] ? "X" : " ")));
00228 if(i == selected_row) item->set_selected(1);
00229
00230 nodes[1].append(item = new BC_ListBoxItem(
00231 pwindow->thread->preferences->renderfarm_nodes.values[i]));
00232 if(i == selected_row) item->set_selected(1);
00233
00234 char string[BCTEXTLEN];
00235 sprintf(string, "%d", pwindow->thread->preferences->renderfarm_ports.values[i]);
00236 nodes[2].append(item = new BC_ListBoxItem(string));
00237 if(i == selected_row) item->set_selected(1);
00238
00239 sprintf(string, "%0.3f", pwindow->thread->preferences->renderfarm_rate.values[i]);
00240 nodes[3].append(item = new BC_ListBoxItem(string));
00241 if(i == selected_row) item->set_selected(1);
00242 }
00243 }
00244
00245 static char *titles[] =
00246 {
00247 N_("On"),
00248 N_("Hostname"),
00249 N_("Port"),
00250 N_("Framerate")
00251 };
00252
00253 static int widths[] =
00254 {
00255 30,
00256 150,
00257 50,
00258 50
00259 };
00260
00261
00262 void PerformancePrefs::update_node_list()
00263 {
00264 node_list->update(nodes,
00265 titles,
00266 widths,
00267 4,
00268 node_list->get_xposition(),
00269 node_list->get_yposition(),
00270 node_list->get_selection_number(0, 0));
00271 }
00272
00273
00274
00275 PrefsUseBRender::PrefsUseBRender(PreferencesWindow *pwindow,
00276 int x,
00277 int y)
00278 : BC_CheckBox(x,
00279 y,
00280 pwindow->thread->preferences->use_brender,
00281 _("Use background rendering"))
00282 {
00283 this->pwindow = pwindow;
00284 }
00285
00286 int PrefsUseBRender::handle_event()
00287 {
00288 pwindow->thread->redraw_overlays = 1;
00289 pwindow->thread->redraw_times = 1;
00290 pwindow->thread->preferences->use_brender = get_value();
00291 return 1;
00292 }
00293
00294
00295
00296
00297
00298
00299 PrefsBRenderFragment::PrefsBRenderFragment(PreferencesWindow *pwindow,
00300 PerformancePrefs *subwindow,
00301 int x,
00302 int y)
00303 : BC_TumbleTextBox(subwindow,
00304 (int64_t)pwindow->thread->preferences->brender_fragment,
00305 (int64_t)1,
00306 (int64_t)65535,
00307 x,
00308 y,
00309 100)
00310 {
00311 this->pwindow = pwindow;
00312 }
00313 int PrefsBRenderFragment::handle_event()
00314 {
00315 pwindow->thread->preferences->brender_fragment = atol(get_text());
00316 return 1;
00317 }
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329 CICacheSize::CICacheSize(int x,
00330 int y,
00331 PreferencesWindow *pwindow,
00332 PerformancePrefs *subwindow)
00333 : BC_TumbleTextBox(subwindow,
00334 (int64_t)pwindow->thread->preferences->cache_size / 0x100000,
00335 (int64_t)MIN_CACHE_SIZE / 0x100000,
00336 (int64_t)MAX_CACHE_SIZE / 0x100000,
00337 x,
00338 y,
00339 100)
00340 {
00341 this->pwindow = pwindow;
00342 set_increment(1);
00343 }
00344
00345 int CICacheSize::handle_event()
00346 {
00347 int64_t result;
00348 result = (int64_t)atol(get_text()) * 0x100000;
00349 CLAMP(result, MIN_CACHE_SIZE, MAX_CACHE_SIZE);
00350 pwindow->thread->preferences->cache_size = result;
00351 return 0;
00352 }
00353
00354
00355 PrefsRenderPreroll::PrefsRenderPreroll(PreferencesWindow *pwindow,
00356 PerformancePrefs *subwindow,
00357 int x,
00358 int y)
00359 : BC_TumbleTextBox(subwindow,
00360 (float)pwindow->thread->preferences->render_preroll,
00361 (float)0,
00362 (float)100,
00363 x,
00364 y,
00365 100)
00366 {
00367 this->pwindow = pwindow;
00368 set_increment(0.1);
00369 }
00370 PrefsRenderPreroll::~PrefsRenderPreroll()
00371 {
00372 }
00373 int PrefsRenderPreroll::handle_event()
00374 {
00375 pwindow->thread->preferences->render_preroll = atof(get_text());
00376 return 1;
00377 }
00378
00379
00380 PrefsBRenderPreroll::PrefsBRenderPreroll(PreferencesWindow *pwindow,
00381 PerformancePrefs *subwindow,
00382 int x,
00383 int y)
00384 : BC_TumbleTextBox(subwindow,
00385 (int64_t)pwindow->thread->preferences->brender_preroll,
00386 (int64_t)0,
00387 (int64_t)100,
00388 x,
00389 y,
00390 100)
00391 {
00392 this->pwindow = pwindow;
00393 }
00394 int PrefsBRenderPreroll::handle_event()
00395 {
00396 pwindow->thread->preferences->brender_preroll = atol(get_text());
00397 return 1;
00398 }
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410 PrefsRenderFarm::PrefsRenderFarm(PreferencesWindow *pwindow, int x, int y)
00411 : BC_CheckBox(x,
00412 y,
00413 pwindow->thread->preferences->use_renderfarm,
00414 _("Use render farm"))
00415 {
00416 this->pwindow = pwindow;
00417 }
00418 PrefsRenderFarm::~PrefsRenderFarm()
00419 {
00420 }
00421 int PrefsRenderFarm::handle_event()
00422 {
00423 pwindow->thread->preferences->use_renderfarm = get_value();
00424 return 1;
00425 }
00426
00427
00428
00429
00430 PrefsForceUniprocessor::PrefsForceUniprocessor(PreferencesWindow *pwindow, int x, int y)
00431 : BC_CheckBox(x,
00432 y,
00433 pwindow->thread->preferences->force_uniprocessor,
00434 _("Force single processor use"))
00435 {
00436 this->pwindow = pwindow;
00437 }
00438 PrefsForceUniprocessor::~PrefsForceUniprocessor()
00439 {
00440 }
00441 int PrefsForceUniprocessor::handle_event()
00442 {
00443 pwindow->thread->preferences->force_uniprocessor = get_value();
00444 return 1;
00445 }
00446
00447
00448
00449
00450
00451
00452
00453 PrefsRenderFarmConsolidate::PrefsRenderFarmConsolidate(PreferencesWindow *pwindow, int x, int y)
00454 : BC_CheckBox(x,
00455 y,
00456 pwindow->thread->preferences->renderfarm_consolidate,
00457 _("Consolidate output files on completion"))
00458 {
00459 this->pwindow = pwindow;
00460 }
00461 PrefsRenderFarmConsolidate::~PrefsRenderFarmConsolidate()
00462 {
00463 }
00464 int PrefsRenderFarmConsolidate::handle_event()
00465 {
00466 pwindow->thread->preferences->renderfarm_consolidate = get_value();
00467 return 1;
00468 }
00469
00470
00471
00472
00473
00474 PrefsRenderFarmPort::PrefsRenderFarmPort(PreferencesWindow *pwindow,
00475 PerformancePrefs *subwindow,
00476 int x,
00477 int y)
00478 : BC_TumbleTextBox(subwindow,
00479 (int64_t)pwindow->thread->preferences->renderfarm_port,
00480 (int64_t)1,
00481 (int64_t)65535,
00482 x,
00483 y,
00484 100)
00485 {
00486 this->pwindow = pwindow;
00487 }
00488
00489 PrefsRenderFarmPort::~PrefsRenderFarmPort()
00490 {
00491 }
00492
00493 int PrefsRenderFarmPort::handle_event()
00494 {
00495 pwindow->thread->preferences->renderfarm_port = atol(get_text());
00496 return 1;
00497 }
00498
00499
00500
00501 PrefsRenderFarmNodes::PrefsRenderFarmNodes(PreferencesWindow *pwindow,
00502 PerformancePrefs *subwindow, int x, int y)
00503 : BC_ListBox(x,
00504 y,
00505 340,
00506 230,
00507 LISTBOX_TEXT,
00508 subwindow->nodes,
00509 titles,
00510 widths,
00511 4)
00512 {
00513 this->subwindow = subwindow;
00514 this->pwindow = pwindow;
00515 }
00516 PrefsRenderFarmNodes::~PrefsRenderFarmNodes()
00517 {
00518 }
00519
00520 int PrefsRenderFarmNodes::column_resize_event()
00521 {
00522 for(int i = 0; i < 3; i++)
00523 widths[i] = get_column_width(i);
00524 return 1;
00525 }
00526
00527 int PrefsRenderFarmNodes::handle_event()
00528 {
00529 SET_TRACE
00530 if(get_selection_number(0, 0) >= 0)
00531 {
00532 subwindow->hot_node = get_selection_number(1, 0);
00533 subwindow->edit_node->update(get_selection(1, 0)->get_text());
00534 subwindow->edit_port->update(get_selection(2, 0)->get_text());
00535 if(get_cursor_x() < widths[0])
00536 {
00537 pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node] =
00538 !pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node];
00539 subwindow->generate_node_list();
00540 subwindow->update_node_list();
00541 }
00542 }
00543 else
00544 {
00545 subwindow->hot_node = -1;
00546 subwindow->edit_node->update("");
00547 }
00548 SET_TRACE
00549 return 1;
00550 }
00551 int PrefsRenderFarmNodes::selection_changed()
00552 {
00553 handle_event();
00554 return 1;
00555 }
00556
00557
00558
00559
00560
00561
00562
00563 PrefsRenderFarmEditNode::PrefsRenderFarmEditNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
00564 : BC_TextBox(x, y, 240, 1, "")
00565 {
00566 this->pwindow = pwindow;
00567 this->subwindow = subwindow;
00568 }
00569
00570 PrefsRenderFarmEditNode::~PrefsRenderFarmEditNode()
00571 {
00572 }
00573
00574 int PrefsRenderFarmEditNode::handle_event()
00575 {
00576 return 1;
00577 }
00578
00579
00580
00581
00582
00583
00584 PrefsRenderFarmNewNode::PrefsRenderFarmNewNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
00585 : BC_GenericButton(x, y, _("Add Node"))
00586 {
00587 this->pwindow = pwindow;
00588 this->subwindow = subwindow;
00589 }
00590 PrefsRenderFarmNewNode::~PrefsRenderFarmNewNode()
00591 {
00592 }
00593 int PrefsRenderFarmNewNode::handle_event()
00594 {
00595 pwindow->thread->preferences->add_node(subwindow->edit_node->get_text(),
00596 pwindow->thread->preferences->renderfarm_port,
00597 1,
00598 0.0);
00599 pwindow->thread->preferences->reset_rates();
00600 subwindow->generate_node_list();
00601 subwindow->update_node_list();
00602 subwindow->hot_node = -1;
00603 return 1;
00604 }
00605
00606
00607
00608
00609
00610
00611
00612 PrefsRenderFarmReplaceNode::PrefsRenderFarmReplaceNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
00613 : BC_GenericButton(x, y, _("Apply Changes"))
00614 {
00615 this->pwindow = pwindow;
00616 this->subwindow = subwindow;
00617 }
00618 PrefsRenderFarmReplaceNode::~PrefsRenderFarmReplaceNode()
00619 {
00620 }
00621 int PrefsRenderFarmReplaceNode::handle_event()
00622 {
00623 if(subwindow->hot_node >= 0)
00624 {
00625 pwindow->thread->preferences->edit_node(subwindow->hot_node,
00626 subwindow->edit_node->get_text(),
00627 pwindow->thread->preferences->renderfarm_port,
00628 pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node]);
00629 subwindow->generate_node_list();
00630 subwindow->update_node_list();
00631 }
00632 return 1;
00633 }
00634
00635
00636
00637
00638
00639 PrefsRenderFarmDelNode::PrefsRenderFarmDelNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
00640 : BC_GenericButton(x, y, _("Delete Node"))
00641 {
00642 this->pwindow = pwindow;
00643 this->subwindow = subwindow;
00644 }
00645 PrefsRenderFarmDelNode::~PrefsRenderFarmDelNode()
00646 {
00647 }
00648 int PrefsRenderFarmDelNode::handle_event()
00649 {
00650 if(strlen(subwindow->edit_node->get_text()))
00651 {
00652 pwindow->thread->preferences->delete_node(subwindow->hot_node);
00653 subwindow->generate_node_list();
00654 subwindow->update_node_list();
00655 subwindow->hot_node = -1;
00656 }
00657 return 1;
00658 }
00659
00660
00661
00662
00663
00664 PrefsRenderFarmSortNodes::PrefsRenderFarmSortNodes(PreferencesWindow *pwindow,
00665 PerformancePrefs *subwindow,
00666 int x,
00667 int y)
00668 : BC_GenericButton(x, y, _("Sort nodes"))
00669 {
00670 this->pwindow = pwindow;
00671 this->subwindow = subwindow;
00672 }
00673
00674 PrefsRenderFarmSortNodes::~PrefsRenderFarmSortNodes()
00675 {
00676 }
00677
00678 int PrefsRenderFarmSortNodes::handle_event()
00679 {
00680 pwindow->thread->preferences->sort_nodes();
00681 subwindow->generate_node_list();
00682 subwindow->update_node_list();
00683 subwindow->hot_node = -1;
00684 return 1;
00685 }
00686
00687
00688
00689
00690
00691 PrefsRenderFarmReset::PrefsRenderFarmReset(PreferencesWindow *pwindow,
00692 PerformancePrefs *subwindow,
00693 int x,
00694 int y)
00695 : BC_GenericButton(x, y, _("Reset rates"))
00696 {
00697 this->pwindow = pwindow;
00698 this->subwindow = subwindow;
00699 }
00700
00701 int PrefsRenderFarmReset::handle_event()
00702 {
00703 pwindow->thread->preferences->reset_rates();
00704 subwindow->generate_node_list();
00705 subwindow->update_node_list();
00706
00707 char string[BCTEXTLEN];
00708 sprintf(string,
00709 MASTER_NODE_FRAMERATE_TEXT,
00710 pwindow->thread->preferences->local_rate);
00711 subwindow->master_rate->update(string);
00712 subwindow->hot_node = -1;
00713 return 1;
00714 }
00715
00716
00717
00718
00719
00720
00721
00722 PrefsRenderFarmJobs::PrefsRenderFarmJobs(PreferencesWindow *pwindow,
00723 PerformancePrefs *subwindow,
00724 int x,
00725 int y)
00726 : BC_TumbleTextBox(subwindow,
00727 (int64_t)pwindow->thread->preferences->renderfarm_job_count,
00728 (int64_t)1,
00729 (int64_t)100,
00730 x,
00731 y,
00732 100)
00733 {
00734 this->pwindow = pwindow;
00735 }
00736 PrefsRenderFarmJobs::~PrefsRenderFarmJobs()
00737 {
00738 }
00739 int PrefsRenderFarmJobs::handle_event()
00740 {
00741 pwindow->thread->preferences->renderfarm_job_count = atol(get_text());
00742 return 1;
00743 }
00744
00745
00746
00747 PrefsRenderFarmMountpoint::PrefsRenderFarmMountpoint(PreferencesWindow *pwindow,
00748 PerformancePrefs *subwindow,
00749 int x,
00750 int y)
00751 : BC_TextBox(x,
00752 y,
00753 100,
00754 1,
00755 pwindow->thread->preferences->renderfarm_mountpoint)
00756 {
00757 this->pwindow = pwindow;
00758 this->subwindow = subwindow;
00759 }
00760 PrefsRenderFarmMountpoint::~PrefsRenderFarmMountpoint()
00761 {
00762 }
00763 int PrefsRenderFarmMountpoint::handle_event()
00764 {
00765 strcpy(pwindow->thread->preferences->renderfarm_mountpoint, get_text());
00766 return 1;
00767 }
00768
00769
00770
00771
00772 PrefsRenderFarmVFS::PrefsRenderFarmVFS(PreferencesWindow *pwindow,
00773 PerformancePrefs *subwindow,
00774 int x,
00775 int y)
00776 : BC_CheckBox(x, y, pwindow->thread->preferences->renderfarm_vfs, _("Use virtual filesystem"))
00777 {
00778 this->pwindow = pwindow;
00779 this->subwindow = subwindow;
00780 }
00781
00782 int PrefsRenderFarmVFS::handle_event()
00783 {
00784 pwindow->thread->preferences->renderfarm_vfs = get_value();
00785 return 1;
00786 }
00787