void PrefabSelector::handleSelectionChange() { wxDataViewItem item = _treeView->GetSelection(); if (!item.IsOk()) { clearPreview(); return; } wxutil::TreeModel::Row row(item, *_treeView->GetModel()); if (row[_columns.isFolder].getBool()) { clearPreview(); return; } std::string prefabPath = row[_columns.vfspath]; _mapResource = GlobalMapResourceManager().capture(prefabPath); if (_mapResource == NULL) { clearPreview(); return; } _lastPrefab = prefabPath; // Suppress the map loading dialog to avoid user // getting stuck in the "drag filename" operation registry::ScopedKeyChanger<bool> changer( RKEY_MAP_SUPPRESS_LOAD_STATUS_DIALOG, true ); if (_mapResource->load()) { // Get the node from the resource scene::INodePtr root = _mapResource->getNode(); assert(root != NULL); // Set the new rootnode _preview->setRootNode(root); _preview->getWidget()->Refresh(); } else { // Map load failed rWarning() << "Could not load prefab: " << prefabPath << std::endl; clearPreview(); } updateUsageInfo(); }
void Map::createNew() { setMapName(_(MAP_UNNAMED_STRING)); m_resource = GlobalMapResourceManager().capture(_mapName); m_resource->addObserver(*this); SceneChangeNotify(); setModified(false); focusViews(Vector3(0,0,0), Vector3(0,0,0)); }
void Map::load(const std::string& filename) { rMessage() << "Loading map from " << filename << "\n"; setMapName(filename); // Reset all layers before loading the file GlobalLayerSystem().reset(); GlobalSelectionSystem().setSelectedAll(false); { ScopeTimer timer("map load"); m_resource = GlobalMapResourceManager().capture(_mapName); // greebo: Add the observer, this usually triggers a onResourceRealise() call. m_resource->addObserver(*this); // Traverse the scenegraph and find the worldspawn MapWorldspawnFinder finder; GlobalSceneGraph().root()->traverse(finder); } rMessage() << "--- LoadMapFile ---\n"; rMessage() << _mapName << "\n"; rMessage() << GlobalCounters().getCounter(counterBrushes).get() << " brushes\n"; rMessage() << GlobalCounters().getCounter(counterPatches).get() << " patches\n"; rMessage() << GlobalCounters().getCounter(counterEntities).get() << " entities\n"; // Move the view to a start position gotoStartPosition(); // Load the stored map positions from the worldspawn entity GlobalMapPosition().loadPositions(); // Remove them, so that the user doesn't get bothered with them GlobalMapPosition().removePositions(); // Disable the region to make sure GlobalRegion().disable(); // Clear the shaderclipboard, the references are most probably invalid now GlobalShaderClipboard().clear(); // Let the filtersystem update the filtered status of all instances GlobalFilterSystem().update(); // Update the layer control dialog ui::LayerControlDialog::Instance().refresh(); // Clear the modified flag setModified(false); }
bool Map::import(const std::string& filename) { ui::ScreenUpdateBlocker blocker(_("Importing..."), filename); bool success = false; { IMapResourcePtr resource = GlobalMapResourceManager().capture(filename); if (resource->load()) { // load() returned TRUE, this means that the resource node // is not the NULL node scene::INodePtr otherRoot = resource->getNode(); // Adjust all new names to fit into the existing map namespace, // this routine will be changing a lot of names in the importNamespace INamespacePtr nspace = getRoot()->getNamespace(); if (nspace) { // Prepare our namespace for import nspace->ensureNoConflicts(otherRoot); // Now add the imported names to the local namespace nspace->connect(otherRoot); } MergeMap(otherRoot); success = true; } } SceneChangeNotify(); return success; }