public void loadFilter(string selectedFilter, string staticFilter = "") { ArrayObject MatEdScheduleArray = "MatEdScheduleArray"; ArrayObject MatEdPreviewArray = "MatEdPreviewArray"; GuiDynamicCtrlArrayControl materialSelection = this.FOT("materialSelection"); GuiStackControl materialPreviewPagesStack = this.FOT("materialPreviewPagesStack"); GuiPopUpMenuCtrlEx materialPreviewCountPopup = this.FOT("materialPreviewCountPopup"); // manage schedule array properly if (!MatEdScheduleArray.isObject()) MatEdScheduleArray = new ObjectCreator("ArrayObject", "MatEdScheduleArray").Create(); // if we select another list... delete all schedules that were created by // previous load for (int i = 0; i < MatEdScheduleArray.count(); i++) Util.cancel(MatEdScheduleArray.getKey(i).AsInt()); // we have to empty out the list; so when we create new schedules, these dont linger MatEdScheduleArray.empty(); // manage preview array if (!MatEdPreviewArray.isObject()) MatEdPreviewArray = new ObjectCreator("ArrayObject", "MatEdPreviewArray").Create(); // we have to empty out the list; so when we create new guicontrols, these dont linger MatEdPreviewArray.empty(); materialSelection.deleteAllObjects(); materialPreviewPagesStack.deleteAllObjects(); // changed to accomadate tagging. dig through the array for each tag name, // call unique value, sort, and we have a perfect set of materials if (staticFilter != "") this.currentStaticFilter = staticFilter; this.currentFilter = selectedFilter; ArrayObject filteredObjectsArray = new ObjectCreator("ArrayObject").Create(); int previewsPerPage = materialPreviewCountPopup.getTextById(materialPreviewCountPopup.getSelected()).AsInt(); int tagCount = Util.getWordCount(this.currentFilter); if (tagCount != 0) { for (int j = 0; j < tagCount; j++) { for (int i = 0; i < this.currentStaticFilter.count(); i++) { string currentTag = Util.getWord(this.currentFilter, j); if (this.currentStaticFilter.getKey(i) == currentTag) filteredObjectsArray.add(this.currentStaticFilter.getKey(i), this.currentStaticFilter.getValue(i)); } } filteredObjectsArray.uniqueValue(); filteredObjectsArray.sortd(); this.totalPages = Util.mCeil(filteredObjectsArray.count()/previewsPerPage); //Can we maintain the current preview page, or should we go to page 1? if ((this.currentPreviewPage*previewsPerPage) >= filteredObjectsArray.count()) this.currentPreviewPage = 0; // Build out the pages buttons this.buildPagesButtons(this.currentPreviewPage, this.totalPages); int previewCount = previewsPerPage; int possiblePreviewCount = filteredObjectsArray.count() - this.currentPreviewPage*previewsPerPage; if (possiblePreviewCount < previewCount) previewCount = possiblePreviewCount; int start = this.currentPreviewPage*previewsPerPage; for (int i = start; i < start + previewCount; i++) this.buildPreviewArray(filteredObjectsArray.getValue(i)); filteredObjectsArray.delete(); } else { this.currentStaticFilter.sortd(); // Rebuild the static filter list without tagged materials ArrayObject noTagArray = new ObjectCreator("ArrayObject").Create(); for (int i = 0; i < this.currentStaticFilter.count(); i++) { if (this.currentStaticFilter.getKey(i) != "") continue; SimObject material = this.currentStaticFilter.getValue(i); // CustomMaterials are not available for selection if (!material.isObject() || material.isMemberOfClass("CustomMaterial")) continue; noTagArray.add("", material); } this.totalPages = Util.mCeil(noTagArray.count()/previewsPerPage); //Can we maintain the current preview page, or should we go to page 1? if ((this.currentPreviewPage*previewsPerPage) >= noTagArray.count()) this.currentPreviewPage = 0; // Build out the pages buttons this.buildPagesButtons(this.currentPreviewPage, this.totalPages); int previewCount = previewsPerPage; int possiblePreviewCount = noTagArray.count() - this.currentPreviewPage*previewsPerPage; if (possiblePreviewCount < previewCount) previewCount = possiblePreviewCount; int start = this.currentPreviewPage*previewsPerPage; for (int i = start; i < start + previewCount; i++) this.buildPreviewArray(noTagArray.getValue(i)); } this.loadImages(0); }
public static bool sfxAutodetect() { // Get all the available devices. string devices = omni.Util.sfxGetAvailableDevices(); // Collect and sort the devices by preferentiality. int count = omni.Util.getRecordCount(devices); ArrayObject deviceTrySequence = new ObjectCreator("ArrayObject").Create().AsString(); for (int i = 0; i < count; i++) { string info = omni.Util.getRecord(devices, i); string provider = omni.Util.getField(info, 0); deviceTrySequence.push_back(provider, info); } deviceTrySequence.sortfk("sfxCompareProvider"); // Try the devices in order. count = deviceTrySequence.count(); for (int i = 0; i < count; i++) { string provider = deviceTrySequence.getKey(i); string info = deviceTrySequence.getValue(i); omni.sGlobal["$pref::SFX::provider"] = provider; omni.sGlobal["$pref::SFX::device"] = omni.Util.getField(info, 1); omni.sGlobal["$pref::SFX::useHardware"] = omni.Util.getField(info, 2); // By default we've decided to avoid hardware devices as // they are buggy and prone to problems. omni.bGlobal["$pref::SFX::useHardware"] = false; if (!sfxInit()) continue; omni.bGlobal["$pref::SFX::autoDetect"] = false; deviceTrySequence.delete(); return true; } // Found no suitable device. omni.console.error("sfxAutodetect - Could not initialize a valid SFX device."); omni.sGlobal["$pref::SFX::provider"] = ""; omni.sGlobal["$pref::SFX::device"] = ""; omni.sGlobal["$pref::SFX::useHardware"] = ""; deviceTrySequence.delete(); return false; }