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