Search in sources :

Example 6 with AddScoreObjectEdit

use of blue.ui.core.score.undo.AddScoreObjectEdit in project blue by kunstmusik.

the class PasteBSBAsSoundAction method actionPerformed.

@Override
public void actionPerformed(ActionEvent e) {
    double start = (double) p.x / timeState.getPixelSecond();
    if (timeState.isSnapEnabled()) {
        start = ScoreUtilities.getSnapValueStart(start, timeState.getSnapValue());
    }
    Object obj = CopyBuffer.getBufferedObject(CopyBuffer.INSTRUMENT);
    Sound sound = new Sound();
    sound.setStartTime(start);
    BlueSynthBuilder bsbCopy = ((BlueSynthBuilder) obj).deepCopy();
    // clear out any existing automations
    for (Parameter param : bsbCopy.getParameterList()) {
        param.setAutomationEnabled(false);
        param.getLine().clear();
        param.getLine().addLinePoint(new LinePoint(0.0, param.getValue(0.0)));
        param.getLine().addLinePoint(new LinePoint(1.0, param.getValue(0.0)));
    }
    sound.setBlueSynthBuilder(bsbCopy);
    Layer layer = scorePath.getGlobalLayerForY(p.y);
    if (!layer.accepts(sound)) {
        JOptionPane.showMessageDialog(null, "Unable to paste due to target layers not " + "accepting types of objects within the copy buffer (i.e. trying to " + "paste a SoundObject into an AudioLayer");
        return;
    }
    SoundLayer sLayer = (SoundLayer) layer;
    sLayer.add(sound);
    BlueData data = BlueProjectManager.getInstance().getCurrentBlueData();
    AddScoreObjectEdit undoEdit = new AddScoreObjectEdit(sLayer, sound);
    BlueUndoManager.setUndoManager("score");
    BlueUndoManager.addEdit(undoEdit);
}
Also used : BlueData(blue.BlueData) LinePoint(blue.components.lines.LinePoint) AddScoreObjectEdit(blue.ui.core.score.undo.AddScoreObjectEdit) SoundLayer(blue.SoundLayer) Parameter(blue.automation.Parameter) ScoreObject(blue.score.ScoreObject) Sound(blue.soundObject.Sound) BlueSynthBuilder(blue.orchestra.BlueSynthBuilder) SoundLayer(blue.SoundLayer) Layer(blue.score.layers.Layer)

Example 7 with AddScoreObjectEdit

use of blue.ui.core.score.undo.AddScoreObjectEdit in project blue by kunstmusik.

the class PasteSoundObjectAction method actionPerformed.

@Override
public void actionPerformed(ActionEvent e) {
    double start = (double) p.x / timeState.getPixelSecond();
    if (timeState.isSnapEnabled()) {
        start = ScoreUtilities.getSnapValueStart(start, timeState.getSnapValue());
    }
    ScoreController.ScoreObjectBuffer buffer = ScoreController.getInstance().getScoreObjectBuffer();
    List<Layer> allLayers = scorePath.getAllLayers();
    int selectedLayerIndex = scorePath.getGlobalLayerIndexForY(p.y);
    int minLayer = Integer.MAX_VALUE;
    int maxLayer = Integer.MIN_VALUE;
    double bufferStart = Double.POSITIVE_INFINITY;
    for (int i = 0; i < buffer.scoreObjects.size(); i++) {
        ScoreObject scoreObj = buffer.scoreObjects.get(i);
        int layer = buffer.layerIndexes.get(i);
        if (scoreObj.getStartTime() < bufferStart) {
            bufferStart = scoreObj.getStartTime();
        }
        if (layer < minLayer) {
            minLayer = layer;
        }
        if (layer > maxLayer) {
            maxLayer = layer;
        }
    }
    int layerTranslation = selectedLayerIndex - minLayer;
    double startTranslation = start - bufferStart;
    if ((maxLayer + layerTranslation) >= allLayers.size()) {
        JOptionPane.showMessageDialog(null, "Not Enough Layers to Paste");
        return;
    }
    for (int i = 0; i < buffer.scoreObjects.size(); i++) {
        ScoreObject scoreObj = buffer.scoreObjects.get(i);
        int index = buffer.layerIndexes.get(i);
        Layer layer = allLayers.get(index + layerTranslation);
        if (!layer.accepts(scoreObj)) {
            JOptionPane.showMessageDialog(null, "Unable to paste due to target layers not " + "accepting types of objects within the copy buffer (i.e. trying to " + "paste a SoundObject into an AudioLayer");
            return;
        }
    }
    BlueData data = BlueProjectManager.getInstance().getCurrentBlueData();
    SoundObjectLibrary sObjLib = data.getSoundObjectLibrary();
    AddScoreObjectEdit undoEdit = null;
    // FIXME - Need a generic way to handle shadow objects; perhaps need to
    // deal with this in the model...
    List<Instance> instanceSoundObjects = new ArrayList<>();
    for (int i = 0; i < buffer.scoreObjects.size(); i++) {
        ScoreObject sObj = buffer.scoreObjects.get(i).deepCopy();
        int newLayerIndex = buffer.layerIndexes.get(i) + layerTranslation;
        if (sObj instanceof Instance) {
            instanceSoundObjects.add((Instance) sObj);
        } else if (sObj instanceof PolyObject) {
            PolyObject pObj = (PolyObject) sObj;
            getInstancesFromPolyObject(instanceSoundObjects, pObj);
        }
        sObj.setStartTime(sObj.getStartTime() + startTranslation);
        ScoreObjectLayer<ScoreObject> layer = (ScoreObjectLayer<ScoreObject>) allLayers.get(newLayerIndex);
        layer.add(sObj);
        AddScoreObjectEdit tempEdit = new AddScoreObjectEdit(layer, sObj);
        if (undoEdit == null) {
            undoEdit = tempEdit;
        } else {
            undoEdit.addSubEdit(tempEdit);
        }
    }
    checkAndAddInstanceSoundObjects(sObjLib, instanceSoundObjects);
    BlueUndoManager.setUndoManager("score");
    BlueUndoManager.addEdit(undoEdit);
}
Also used : BlueData(blue.BlueData) Instance(blue.soundObject.Instance) ScoreObject(blue.score.ScoreObject) ArrayList(java.util.ArrayList) SoundObjectLibrary(blue.SoundObjectLibrary) SoundLayer(blue.SoundLayer) ScoreObjectLayer(blue.score.layers.ScoreObjectLayer) Layer(blue.score.layers.Layer) Point(java.awt.Point) ScoreController(blue.ui.core.score.ScoreController) ScoreObjectLayer(blue.score.layers.ScoreObjectLayer) AddScoreObjectEdit(blue.ui.core.score.undo.AddScoreObjectEdit) PolyObject(blue.soundObject.PolyObject)

Aggregations

AddScoreObjectEdit (blue.ui.core.score.undo.AddScoreObjectEdit)7 ScoreObject (blue.score.ScoreObject)5 ScoreObjectLayer (blue.score.layers.ScoreObjectLayer)5 SoundLayer (blue.SoundLayer)4 Point (java.awt.Point)4 BlueData (blue.BlueData)3 Layer (blue.score.layers.Layer)3 SoundObject (blue.soundObject.SoundObject)3 SoundObjectLibrary (blue.SoundObjectLibrary)2 Instance (blue.soundObject.Instance)2 PolyObject (blue.soundObject.PolyObject)2 ScoreController (blue.ui.core.score.ScoreController)2 ScorePath (blue.ui.core.score.ScorePath)2 ScoreTimeCanvas (blue.ui.core.score.layers.soundObject.ScoreTimeCanvas)2 ArrayList (java.util.ArrayList)2 Parameter (blue.automation.Parameter)1 LinePoint (blue.components.lines.LinePoint)1 BlueSynthBuilder (blue.orchestra.BlueSynthBuilder)1 TimeState (blue.score.TimeState)1 Sound (blue.soundObject.Sound)1