Beispiel #1
0
void ShaderManager::unregisterShader(Shader* shader) {
    shaders_.erase(std::remove(shaders_.begin(), shaders_.end(), shader), shaders_.end());
    const Shader::ShaderObjectMap& shaderObjects = shader->getShaderObjects();

    for (const auto& shaderObject : shaderObjects) {
        if (shaderObject.second != nullptr) {
            stopFileObservation(shaderObject.second->getAbsoluteFileName());
            std::vector<std::string> shaderIncludes = shaderObject.second->getIncludeFileNames();

            for (auto& shaderInclude : shaderIncludes) stopFileObservation(shaderInclude);
        }
    }
}
Beispiel #2
0
void PythonEditorWidget::open() {
    if (unsavedChanges_) {
        int ret =
            QMessageBox::information(this, "Python Editor", "Do you want to save unsaved changes?",
                                     "Save", "Discard", "Cancel");

        if (ret == 0) save();

        if (ret == 2)  // Cancel
            return;
    }

    InviwoFileDialog openFileDialog(this, "Open Python Script ...", "script");

    openFileDialog.setFileMode(QFileDialog::AnyFile);

    openFileDialog.addSidebarPath(InviwoApplication::PATH_SCRIPTS);

    openFileDialog.addExtension("py", "Python Script");

    if (openFileDialog.exec()) {
        stopFileObservation(scriptFileName_);
        scriptFileName_ = openFileDialog.selectedFiles().at(0).toLocal8Bit().constData();
        settings_.beginGroup("PythonEditor");
        settings_.setValue("lastScript", scriptFileName_.c_str());
        settings_.endGroup();
        startFileObservation(scriptFileName_);
        readFile();
    }
}
Beispiel #3
0
void PythonEditorWidget::save() {
    if (script_.getSource() == defaultSource) return;  // nothig to be saved

    if (scriptFileName_.size() == 0) {
        saveAs();
    } else if (unsavedChanges_) {
        stopFileObservation(scriptFileName_);
        std::ofstream file(scriptFileName_.c_str());
        file << pythonCode_->toPlainText().toLocal8Bit().constData();
        file.close();
        startFileObservation(scriptFileName_);
        LogInfo("Python Script saved(" << scriptFileName_ << ")");
        settings_.beginGroup("PythonEditor");
        settings_.setValue("lastScript", scriptFileName_.c_str());
        settings_.endGroup();
        unsavedChanges_ = false;
    }
}
Beispiel #4
0
void PythonEditorWidget::setDefaultText() {
    if (unsavedChanges_) {
        int ret =
            QMessageBox::information(this, "Python Editor", "Do you want to save unsaved changes?",
                                     "Save", "Discard Changes", "Cancel");

        if (ret == 0)
            save();
        else if (ret == 2)  // cancel
            return;
    }

    pythonCode_->setPlainText(defaultSource.c_str());
    script_.setSource(defaultSource);
    stopFileObservation(scriptFileName_);
    scriptFileName_ = "";
    settings_.beginGroup("PythonEditor");
    settings_.setValue("lastScript", scriptFileName_.c_str());
    settings_.endGroup();
    unsavedChanges_ = false;
}
void PythonEditorWidget::saveAs() {
    InviwoFileDialog saveFileDialog(this, "Save Python Script ...", "script");

    saveFileDialog.setFileMode(QFileDialog::AnyFile);
    saveFileDialog.setAcceptMode(QFileDialog::AcceptSave);
    saveFileDialog.setConfirmOverwrite(true);

    saveFileDialog.addSidebarPath(PathType::Scripts);

    saveFileDialog.addExtension("py", "Python Script");

    if (saveFileDialog.exec()) {
        stopFileObservation(scriptFileName_);
        QString path = saveFileDialog.selectedFiles().at(0);

        if (!path.endsWith(".py")) path.append(".py");

        setFileName(path.toLocal8Bit().constData());
        unsavedChanges_ = true;
        save();
    }
}
Beispiel #6
0
void PythonEditorWidget::saveAs() {
    if (script_.getSource() == defaultSource) return;  // nothig to be saved

    InviwoFileDialog saveFileDialog(this, "Save Python Script ...", "script");

    saveFileDialog.setFileMode(QFileDialog::AnyFile);
    saveFileDialog.setAcceptMode(QFileDialog::AcceptSave);
    saveFileDialog.setConfirmOverwrite(true);

    saveFileDialog.addSidebarPath(InviwoApplication::PATH_SCRIPTS);

    saveFileDialog.addExtension("py", "Python Script");

    if (saveFileDialog.exec()) {
        stopFileObservation(scriptFileName_);
        QString path = saveFileDialog.selectedFiles().at(0);

        if (!path.endsWith(".py")) path.append(".py");

        scriptFileName_ = path.toLocal8Bit().constData();
        unsavedChanges_ = true;
        save();
    }
}
Beispiel #7
0
void PortInspector::initialize() {
    if (active_ == false && needsUpdate_) {
        if (inspectorNetwork_) {
            inspectorNetwork_.reset();
            processors_.clear();
            inPorts_.clear();
            connections_.clear();
            propertyLinks_.clear();
            canvasProcessor_ = nullptr;
        }

        stopFileObservation(inspectorNetworkFileName_);
        needsUpdate_ = false;
    }

    if (inspectorNetwork_) {
        return;
    }

    // Observe the filename;
    startFileObservation(inspectorNetworkFileName_);
    try {
        // Deserialize the network
        IvwDeserializer xmlDeserializer(inspectorNetworkFileName_);
        inspectorNetwork_ = util::make_unique<ProcessorNetwork>();
        inspectorNetwork_->deserialize(xmlDeserializer);
        processors_ = inspectorNetwork_->getProcessors();

        for (auto processor : processors_) {
            // Set Identifiers
            std::string newIdentifier =
                getPortClassName() + "_Port_Inspector_" + processor->getIdentifier();
            processor->setIdentifier(newIdentifier);
            processor->initialize();
            // Find the and save inports.
            std::vector<Inport*> inports = processor->getInports();

            for (auto& inport : inports) {
                if (!inport->isConnected()) inPorts_.push_back(inport);
            }

            ProcessorMetaData* meta = processor->getMetaData<ProcessorMetaData>(ProcessorMetaData::CLASS_IDENTIFIER);
            meta->setVisibile(false);
            meta->setSelected(false);
           

            // Find and save the canvasProcessor
            CanvasProcessor* canvasProcessor = dynamic_cast<CanvasProcessor*>(processor);

            if (canvasProcessor) {
                canvasProcessor_ = canvasProcessor;
            }
        }

        // Store the connections and and disconnect them.
        connections_ = inspectorNetwork_->getConnections();

        for (auto& elem : connections_) elem->getInport()->disconnectFrom(elem->getOutport());

        // store the processor links.
        propertyLinks_ = inspectorNetwork_->getLinks();
    } catch (AbortException& e) {
        // Error deserializing file
        needsUpdate_ = true;
        LogError(e.what());
    }
}