diff --git a/interface/src/scripting/RenderScriptingInterface.cpp b/interface/src/scripting/RenderScriptingInterface.cpp index 338a5ab883..f23dc598a9 100644 --- a/interface/src/scripting/RenderScriptingInterface.cpp +++ b/interface/src/scripting/RenderScriptingInterface.cpp @@ -54,7 +54,7 @@ void RenderScriptingInterface::forceRenderMethod(RenderMethod renderMethod) { _renderMethod = (int)renderMethod; _renderMethodSetting.set((int)renderMethod); - auto config = dynamic_cast<task::SwitchConfig*>(qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DeferredForwardSwitch")); + auto config = dynamic_cast<render::SwitchConfig*>(qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DeferredForwardSwitch")); if (config) { config->setBranch((int)renderMethod); } diff --git a/libraries/render/src/render/Engine.h b/libraries/render/src/render/Engine.h index 130ed6533f..f1d59727d3 100644 --- a/libraries/render/src/render/Engine.h +++ b/libraries/render/src/render/Engine.h @@ -70,7 +70,7 @@ namespace render { GPUTaskConfig() = default; - GPUTaskConfig(bool enabled) : TaskConfig(enabled) {} + GPUTaskConfig(bool enabled) : render::TaskConfig(enabled) {} // Running Time measurement on GPU and for Batch execution void setGPUBatchRunTime(double msGpuTime, double msBatchTime) { _msGPURunTime = msGpuTime; _msBatchRunTime = msBatchTime; } diff --git a/libraries/task/src/task/Config.cpp b/libraries/task/src/task/Config.cpp index 79e0b9f7fb..bcf5eb7d1f 100644 --- a/libraries/task/src/task/Config.cpp +++ b/libraries/task/src/task/Config.cpp @@ -79,8 +79,8 @@ void JobConfig::refresh() { _jobConcept->applyConfiguration(); } -TaskConfig* TaskConfig::getRootConfig(const std::string& jobPath, std::string& jobName) const { - TaskConfig* root = const_cast<TaskConfig*> (this); +JobConfig* JobConfig::getRootConfig(const std::string& jobPath, std::string& jobName) const { + JobConfig* root = const_cast<JobConfig*> (this); std::list<std::string> tokens; std::size_t pos = 0, sepPos; @@ -105,7 +105,7 @@ TaskConfig* TaskConfig::getRootConfig(const std::string& jobPath, std::string& j while (tokens.size() > 1) { auto taskName = tokens.front(); tokens.pop_front(); - root = root->findChild<TaskConfig*>((taskName.empty() ? QString() : QString(taskName.c_str()))); + root = root->findChild<JobConfig*>((taskName.empty() ? QString() : QString(taskName.c_str()))); if (!root) { return nullptr; } @@ -115,7 +115,7 @@ TaskConfig* TaskConfig::getRootConfig(const std::string& jobPath, std::string& j return root; } -JobConfig* TaskConfig::getJobConfig(const std::string& jobPath) const { +JobConfig* JobConfig::getJobConfig(const std::string& jobPath) const { std::string jobName; auto root = getRootConfig(jobPath, jobName); @@ -134,10 +134,10 @@ JobConfig* TaskConfig::getJobConfig(const std::string& jobPath) const { } } -void SwitchConfig::setBranch(uint8_t branch) { +void JobConfig::setBranch(uint8_t branch) { if (_branch != branch) { _branch = branch; // We can re-use this signal here emit dirtyEnabled(); } -} \ No newline at end of file +} diff --git a/libraries/task/src/task/Config.h b/libraries/task/src/task/Config.h index ab76bc5fba..8c674da31c 100644 --- a/libraries/task/src/task/Config.h +++ b/libraries/task/src/task/Config.h @@ -83,11 +83,19 @@ protected: Setting::Handle<QString> _preset; }; +class JobConfig; + +class TConfigProxy { +public: + using Config = JobConfig; +}; + // A default Config is always on; to create an enableable Config, use the ctor JobConfig(bool enabled) class JobConfig : public QObject { Q_OBJECT Q_PROPERTY(double cpuRunTime READ getCPURunTime NOTIFY newStats()) //ms Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY dirtyEnabled()) + Q_PROPERTY(int branch READ getBranch WRITE setBranch NOTIFY dirtyEnabled) double _msCPURunTime{ 0.0 }; @@ -96,7 +104,11 @@ protected: bool _isEnabled{ true }; + uint8_t _branch { 0 }; public: + bool _isTask{ false }; + bool _isSwitch{ false }; + using Persistent = PersistentConfig<JobConfig>; JobConfig() = default; @@ -121,44 +133,86 @@ public: */ Q_INVOKABLE void load(const QVariantMap& map) { qObjectFromJsonValue(QJsonObject::fromVariantMap(map), *this); emit loaded(); } - Q_INVOKABLE QObject* getConfig(const QString& name) { return nullptr; } + //Q_INVOKABLE QObject* getConfig(const QString& name) { return nullptr; } // Running Time measurement // The new stats signal is emitted once per run time of a job when stats (cpu runtime) are updated void setCPURunTime(const std::chrono::nanoseconds& runtime) { _msCPURunTime = std::chrono::duration<double, std::milli>(runtime).count(); emit newStats(); } double getCPURunTime() const { return _msCPURunTime; } + /**jsdoc + * @function Render.getConfig + * @param {string} name + * @returns {object} + */ + // Get a sub job config through task.getConfig(path) + // where path can be: + // - <job_name> search for the first job named job_name traversing the the sub graph of task and jobs (from this task as root) + // - <parent_name>.[<sub_parent_names>.]<job_name> + // Allowing to first look for the parent_name job (from this task as root) and then search from there for the + // optional sub_parent_names and finally from there looking for the job_name (assuming every job in the path were found) + // + // getter for qml integration, prefer the templated getter + Q_INVOKABLE QObject* getConfig(const QString& name) { return getConfig<TConfigProxy>(name.toStdString()); } + + // getter for cpp (strictly typed), prefer this getter + JobConfig* getRootConfig(const std::string& jobPath, std::string& jobName) const; + JobConfig* getJobConfig(const std::string& jobPath) const; + template <class T> typename T::Config* getConfig(std::string jobPath = "") const { + return dynamic_cast<typename T::Config*>(getJobConfig(jobPath)); + } + + Q_INVOKABLE bool isTask() const { return _isTask; } + Q_INVOKABLE bool isSwitch() const { return _isSwitch; } + + Q_INVOKABLE QObjectList getSubConfigs() const { + auto list = findChildren<JobConfig*>(QRegExp(".*"), Qt::FindDirectChildrenOnly); + QObjectList returned; + for (int i = 0; i < list.size(); i++) { + returned.push_back(list[i]); + } + return returned; + } + Q_INVOKABLE int getNumSubs() const { return getSubConfigs().size(); } + Q_INVOKABLE QObject* getSubConfig(int i) const { + auto subs = getSubConfigs(); + return ((i < 0 || i >= subs.size()) ? nullptr : subs[i]); + } + // Describe the node graph data connections of the associated Job/Task /**jsdoc * @function Render.isTask * @returns {boolean} */ - Q_INVOKABLE virtual bool isTask() const { return false; } + //Q_INVOKABLE virtual bool isTask() const { return false; } /**jsdoc * @function Render.getSubConfigs * @returns {object[]} */ - Q_INVOKABLE virtual QObjectList getSubConfigs() const { return QObjectList(); } + // Q_INVOKABLE virtual QObjectList getSubConfigs() const { return QObjectList(); } /**jsdoc * @function Render.getNumSubs * @returns {number} */ - Q_INVOKABLE virtual int getNumSubs() const { return 0; } + // Q_INVOKABLE virtual int getNumSubs() const { return 0; } /**jsdoc * @function Render.getSubConfig * @param {number} index * @returns {object} */ - Q_INVOKABLE virtual QObject* getSubConfig(int i) const { return nullptr; } + //Q_INVOKABLE virtual QObject* getSubConfig(int i) const { return nullptr; } void connectChildConfig(std::shared_ptr<JobConfig> childConfig, const std::string& name); void transferChildrenConfigs(std::shared_ptr<JobConfig> source); JobConcept* _jobConcept; + uint8_t getBranch() const { return _branch; } + void setBranch(uint8_t index); + public slots: /**jsdoc @@ -195,12 +249,9 @@ signals: using QConfigPointer = std::shared_ptr<JobConfig>; -class TConfigProxy { -public: - using Config = JobConfig; -}; +#ifdef SPECIALIZE_CONFIG /**jsdoc * @namespace Render * @@ -270,7 +321,7 @@ public: protected: uint8_t _branch { 0 }; }; - +#endif } #endif // hifi_task_Config_h diff --git a/libraries/task/src/task/Task.h b/libraries/task/src/task/Task.h index cdc279ff36..0871cb5982 100644 --- a/libraries/task/src/task/Task.h +++ b/libraries/task/src/task/Task.h @@ -69,7 +69,7 @@ class JobConcept { public: using Config = JobConfig; - JobConcept(const std::string& name, QConfigPointer config) : _config(config), _name(name) {} + JobConcept(const std::string& name, QConfigPointer config) : _config(config), _name(name) { config->_jobConcept = this; } virtual ~JobConcept() = default; const std::string& getName() const { return _name; } @@ -80,7 +80,8 @@ public: virtual QConfigPointer& getConfiguration() { return _config; } virtual void applyConfiguration() = 0; - void setCPURunTime(const std::chrono::nanoseconds& runtime) { std::static_pointer_cast<Config>(_config)->setCPURunTime(runtime); } + void setCPURunTime(const std::chrono::nanoseconds& runtime) { + /*std::static_pointer_cast<Config>*/(_config)->setCPURunTime(runtime); } QConfigPointer _config; protected: @@ -94,9 +95,9 @@ template <class T, class C> void jobConfigure(T& data, const C& configuration) { template<class T> void jobConfigure(T&, const JobConfig&) { // nop, as the default JobConfig was used, so the data does not need a configure method } -template<class T> void jobConfigure(T&, const TaskConfig&) { +/*template<class T> void jobConfigure(T&, const TaskConfig&) { // nop, as the default TaskConfig was used, so the data does not need a configure method -} +}*/ template <class T, class JC> void jobRun(T& data, const JC& jobContext, const JobNoIO& input, JobNoIO& output) { data.run(jobContext); @@ -158,7 +159,17 @@ public: return std::make_shared<Model>(name, input, std::make_shared<C>(), std::forward<A>(args)...); } - + void createConfiguration() { + // A brand new config + auto config = std::make_shared<C>(); + // Make sure we transfer the former children configs to the new config + config->transferChildrenConfigs(Concept::_config); + // swap + Concept::_config = config; + // Capture this + Concept::_config->_jobConcept = this; + } + void applyConfiguration() override { TimeProfiler probe(("configure::" + JobConcept::getName())); @@ -228,7 +239,7 @@ public: using Context = JC; using TimeProfiler = TP; using ContextPointer = std::shared_ptr<Context>; - using Config = TaskConfig; + using Config = JobConfig; //TaskConfig; using JobType = Job<JC, TP>; using None = typename JobType::None; using Concept = typename JobType::Concept; @@ -247,14 +258,15 @@ public: const Varying getOutput() const override { return _output; } Varying& editInput() override { return _input; } - TaskConcept(const std::string& name, const Varying& input, QConfigPointer config) : Concept(name, config), _input(input) {} + TaskConcept(const std::string& name, const Varying& input, QConfigPointer config) : Concept(name, config), _input(input) {config->_isTask = true;} // Create a new job in the container's queue; returns the job's output template <class NT, class... NA> const Varying addJob(std::string name, const Varying& input, NA&&... args) { _jobs.emplace_back((NT::JobModel::create(name, input, std::forward<NA>(args)...))); // Conect the child config to this task's config - std::static_pointer_cast<TaskConfig>(Concept::getConfiguration())->connectChildConfig(_jobs.back().getConfiguration(), name); + // std::static_pointer_cast<TaskConfig>(Concept::getConfiguration())->connectChildConfig(_jobs.back().getConfiguration(), name); + std::static_pointer_cast<JobConfig>(Concept::getConfiguration())->connectChildConfig(_jobs.back().getConfiguration(), name); return _jobs.back().getOutput(); } @@ -285,8 +297,8 @@ public: model->_data.build(*(model), model->_input, model->_output, std::forward<A>(args)...); } // Recreate the Config to use the templated type - model->createConfiguration(); - model->applyConfiguration(); + // model->createConfiguration(); + // model->applyConfiguration(); return model; } @@ -369,7 +381,7 @@ public: using Context = JC; using TimeProfiler = TP; using ContextPointer = std::shared_ptr<Context>; - using Config = SwitchConfig; + using Config = JobConfig; //SwitchConfig; using JobType = Job<JC, TP>; using None = typename JobType::None; using Concept = typename JobType::Concept; @@ -388,14 +400,15 @@ public: const Varying getOutput() const override { return _output; } Varying& editInput() override { return _input; } - SwitchConcept(const std::string& name, const Varying& input, QConfigPointer config) : Concept(name, config), _input(input) {} + SwitchConcept(const std::string& name, const Varying& input, QConfigPointer config) : Concept(name, config), _input(input) + {config->_isTask = true; config->_isSwitch = true; } template <class NT, class... NA> const Varying addBranch(std::string name, uint8_t index, const Varying& input, NA&&... args) { auto& branch = _branches[index]; branch = JobType(NT::JobModel::create(name, input, std::forward<NA>(args)...)); // Conect the child config to this task's config - std::static_pointer_cast<SwitchConfig>(Concept::getConfiguration())->connectChildConfig(branch.getConfiguration(), name); + std::static_pointer_cast<JobConfig>(Concept::getConfiguration())->connectChildConfig(branch.getConfiguration(), name); return branch.getOutput(); } @@ -405,7 +418,7 @@ public: } }; - template <class T, class C = SwitchConfig, class I = None, class O = None> class SwitchModel : public SwitchConcept { + template <class T, class C = Config, class I = None, class O = None> class SwitchModel : public SwitchConcept { public: using Data = T; using Input = I; @@ -427,8 +440,8 @@ public: model->_data.build(*(model), model->_input, model->_output, std::forward<A>(args)...); } // Recreate the Config to use the templated type - model->createConfiguration(); - model->applyConfiguration(); + // model->createConfiguration(); + // model->applyConfiguration(); return model; } @@ -475,8 +488,8 @@ public: } } }; - template <class T, class C = SwitchConfig> using Model = SwitchModel<T, C, None, None>; - template <class T, class I, class C = SwitchConfig> using ModelI = SwitchModel<T, C, I, None>; + template <class T, class C = Config> using Model = SwitchModel<T, C, None, None>; + template <class T, class I, class C = Config> using ModelI = SwitchModel<T, C, I, None>; // TODO: Switches don't support Outputs yet //template <class T, class O, class C = SwitchConfig> using ModelO = SwitchModel<T, C, None, O>; //template <class T, class I, class O, class C = SwitchConfig> using ModelIO = SwitchModel<T, C, I, O>; @@ -500,7 +513,7 @@ class Engine : public Task<JC, TP> { public: using Context = JC; using ContextPointer = std::shared_ptr<Context>; - using Config = TaskConfig; + using Config = JobConfig; //TaskConfig; using TaskType = Task<JC, TP>; using ConceptPointer = typename TaskType::ConceptPointer; @@ -526,10 +539,11 @@ protected: } + #define Task_DeclareTypeAliases(ContextType, TimeProfiler) \ using JobConfig = task::JobConfig; \ - using TaskConfig = task::TaskConfig; \ - using SwitchConfig = task::SwitchConfig; \ + using TaskConfig = task::JobConfig; \ + using SwitchConfig = task::JobConfig; \ template <class T> using PersistentConfig = task::PersistentConfig<T>; \ using Job = task::Job<ContextType, TimeProfiler>; \ using Switch = task::Switch<ContextType, TimeProfiler>; \ diff --git a/scripts/developer/utilities/lib/jet/jet.js b/scripts/developer/utilities/lib/jet/jet.js index 52c13c5279..4c3188a5cf 100644 --- a/scripts/developer/utilities/lib/jet/jet.js +++ b/scripts/developer/utilities/lib/jet/jet.js @@ -18,7 +18,7 @@ // @param depth: the depth of the recurse loop since the initial call. function task_traverse(root, functor, depth) { if (root.isTask()) { - depth++; + depth++; for (var i = 0; i <root.getNumSubs(); i++) { var sub = root.getSubConfig(i); if (functor(sub, depth, i)) { @@ -41,15 +41,19 @@ function task_traverseTree(root, functor) { function job_propKeys(job) { var keys = Object.keys(job) var propKeys = []; + if (job.isSwitch()) { + propKeys.push("branch") + } for (var k=0; k < keys.length;k++) { // Filter for relevant property var key = keys[k] if ((typeof job[key]) !== "function") { - if ((key !== "objectName") && (key !== "cpuRunTime") && (key !== "enabled")) { + if ((key !== "objectName") && (key !== "cpuRunTime") && (key !== "enabled") && (key !== "branch")) { propKeys.push(keys[k]); } } } + return propKeys; } diff --git a/scripts/developer/utilities/lib/jet/qml/TaskList.qml b/scripts/developer/utilities/lib/jet/qml/TaskList.qml index e4b0267d3f..0cfd9c049a 100644 --- a/scripts/developer/utilities/lib/jet/qml/TaskList.qml +++ b/scripts/developer/utilities/lib/jet/qml/TaskList.qml @@ -31,7 +31,7 @@ Rectangle { } Component.onCompleted: { - var message = "" + var message = "sam" var functor = Jet.job_print_functor(function (line) { message += line + "\n"; }, false, true); Jet.task_traverseTree(rootConfig, functor); textArea.append(message); diff --git a/scripts/developer/utilities/lib/jet/qml/TaskPropView.qml b/scripts/developer/utilities/lib/jet/qml/TaskPropView.qml index 0dd978be63..ea5af4896f 100644 --- a/scripts/developer/utilities/lib/jet/qml/TaskPropView.qml +++ b/scripts/developer/utilities/lib/jet/qml/TaskPropView.qml @@ -73,7 +73,7 @@ Prop.PropGroup { anchors.right:parent.right anchors.verticalCenter: parent.verticalCenter filled: root.jobEnabled - fillColor: (root.jobEnabled ? global.colorGreenHighlight : global.colorOrangeAccent) + fillColor: (root.jobEnabled ? root.global.colorGreenHighlight : global.colorOrangeAccent) icon: 5 MouseArea{ diff --git a/scripts/developer/utilities/lib/prop/PropItem.qml b/scripts/developer/utilities/lib/prop/PropItem.qml index f1a3b236d8..6d2f4c11ad 100644 --- a/scripts/developer/utilities/lib/prop/PropItem.qml +++ b/scripts/developer/utilities/lib/prop/PropItem.qml @@ -44,8 +44,8 @@ Item { property alias labelControl: labelControl property alias label: labelControl.text - property var labelAreaWidth: root.width * global.splitterRightWidthScale - global.splitterWidth - + property var labelAreaWidth: root.width * global.splitterLeftWidthScale - global.splitterWidth + PropText { id: labelControl text: root.label diff --git a/scripts/developer/utilities/lib/prop/PropScalar.qml b/scripts/developer/utilities/lib/prop/PropScalar.qml index ae86c6ef81..ce89342997 100644 --- a/scripts/developer/utilities/lib/prop/PropScalar.qml +++ b/scripts/developer/utilities/lib/prop/PropScalar.qml @@ -1,5 +1,5 @@ // -// PropItem.qml +// PropScalar.qml // // Created by Sam Gateau on 3/2/2019 // Copyright 2019 High Fidelity, Inc. @@ -42,8 +42,8 @@ PropItem { enabled: root.showValue anchors.left: root.splitter.right + anchors.right: (root.readOnly ? root.right : sliderControl.left) anchors.verticalCenter: root.verticalCenter - width: root.width * (root.readOnly ? 1.0 : global.valueAreaWidthScale) horizontalAlignment: global.valueTextAlign height: global.slimHeight @@ -55,17 +55,25 @@ PropItem { border.width: global.valueBorderWidth radius: global.valueBorderRadius } + + MouseArea{ + id: mousearea + anchors.fill: parent + onDoubleClicked: { sliderControl.visible = !sliderControl.visible } + } } HifiControls.Slider { id: sliderControl visible: !root.readOnly + stepSize: root.integral ? 1.0 : 0.0 - anchors.left: valueLabel.right - anchors.right: root.right - anchors.verticalCenter: root.verticalCenter value: root.sourceValueVar onValueChanged: { applyValueVarFromWidgets(value) } + + width: root.width * (root.readOnly ? 0.0 : global.handleAreaWidthScale) + anchors.right: root.right + anchors.verticalCenter: root.verticalCnter } diff --git a/scripts/developer/utilities/lib/prop/style/Global.qml b/scripts/developer/utilities/lib/prop/style/Global.qml index 2330d9876c..b8ea41371e 100644 --- a/scripts/developer/utilities/lib/prop/style/Global.qml +++ b/scripts/developer/utilities/lib/prop/style/Global.qml @@ -40,7 +40,8 @@ Item { readonly property var fontWeight: Font.DemiBold readonly property color fontColor: hifi.colors.faintGray - readonly property var splitterRightWidthScale: 0.45 + readonly property var splitterLeftWidthScale: 0.45 + readonly property var splitterRightWidthScale: 1.0 - splitterLeftWidthScale readonly property real splitterWidth: 8 readonly property real iconWidth: fontSize @@ -49,8 +50,9 @@ Item { readonly property var labelTextAlign: Text.AlignRight readonly property var labelTextElide: Text.ElideMiddle - readonly property var valueAreaWidthScale: 0.3 * (1.0 - splitterRightWidthScale) + readonly property var valueAreaWidthScale: 0.3 * (splitterRightWidthScale) + readonly property var handleAreaWidthScale: 0.7 * (splitterRightWidthScale) readonly property var valueTextAlign: Text.AlignHCenter readonly property real valueBorderWidth: 1 readonly property real valueBorderRadius: 2 -} \ No newline at end of file +} diff --git a/scripts/developer/utilities/render/engineInspector.js b/scripts/developer/utilities/render/engineInspector.js index cd2b74f907..36eba46a2a 100644 --- a/scripts/developer/utilities/render/engineInspector.js +++ b/scripts/developer/utilities/render/engineInspector.js @@ -1,57 +1,5 @@ - (function() { - var TABLET_BUTTON_NAME = "Inspector"; - var QMLAPP_URL = Script.resolvePath("./engineInspector.qml"); - var ICON_URL = Script.resolvePath("../../../system/assets/images/luci-i.svg"); - var ACTIVE_ICON_URL = Script.resolvePath("../../../system/assets/images/luci-a.svg"); - - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - var button = tablet.addButton({ - text: TABLET_BUTTON_NAME, - icon: ICON_URL, - activeIcon: ACTIVE_ICON_URL - }); - - Script.scriptEnding.connect(function () { - killWindow() - button.clicked.disconnect(onClicked); - tablet.removeButton(button); - }); - - button.clicked.connect(onClicked); - - var onScreen = false; - var window; - - function onClicked() { - if (onScreen) { - killWindow() - } else { - createWindow() - } - } - - function createWindow() { - var qml = Script.resolvePath(QMLAPP_URL); - window = new OverlayWindow({ - title: 'Render Engine Inspector', - source: qml, - width: 250, - height: 500 - }); - window.setPosition(200, 50); - window.closed.connect(killWindow); - onScreen = true - button.editProperties({isActive: true}); - } - - function killWindow() { - if (window !== undefined) { - window.closed.disconnect(killWindow); - window.close() - window = undefined - } - onScreen = false - button.editProperties({isActive: false}) - } - }()); - \ No newline at end of file +var window = Desktop.createWindow(Script.resolvePath('./engineInspector.qml'), { + title: "Render Engine Inspector", + presentationMode: Desktop.PresentationMode.NATIVE, + size: {x: 350, y: 700} +}); \ No newline at end of file diff --git a/scripts/developer/utilities/render/engineInspector.qml b/scripts/developer/utilities/render/engineInspector.qml index 1e05605ac7..fabbbe449b 100644 --- a/scripts/developer/utilities/render/engineInspector.qml +++ b/scripts/developer/utilities/render/engineInspector.qml @@ -23,7 +23,7 @@ Item { property var rootConfig: Render.getConfig("") - Jet.TaskListView { + Jet.TaskPropView { rootConfig: root.rootConfig anchors.fill: root } diff --git a/scripts/developer/utilities/render/engineList.js b/scripts/developer/utilities/render/engineList.js index 85028ded53..30d9ed3c12 100644 --- a/scripts/developer/utilities/render/engineList.js +++ b/scripts/developer/utilities/render/engineList.js @@ -1,13 +1,5 @@ - function openEngineTaskView() { - // Set up the qml ui - var qml = Script.resolvePath('engineList.qml'); - var window = new OverlayWindow({ - title: 'Render Engine', - source: qml, - width: 300, - height: 400 - }); - window.setPosition(200, 50); - //window.closed.connect(function() { Script.stop(); }); - } - openEngineTaskView(); \ No newline at end of file +var window = Desktop.createWindow(Script.resolvePath('./engineList.qml'), { + title: "Render Engine Inspector", + presentationMode: Desktop.PresentationMode.NATIVE, + size: {x: 350, y: 700} +}); \ No newline at end of file diff --git a/scripts/developer/utilities/render/engineList.qml b/scripts/developer/utilities/render/engineList.qml index bf5c2a13a8..55df1bd187 100644 --- a/scripts/developer/utilities/render/engineList.qml +++ b/scripts/developer/utilities/render/engineList.qml @@ -24,7 +24,7 @@ Item { property var mainViewTask: Render.getConfig("RenderMainView") Jet.TaskList { - rootConfig: Render + rootConfig: Render.getConfig("") anchors.fill: render } } \ No newline at end of file