Search in sources :

Example 36 with ScoreObject

use of blue.score.ScoreObject in project blue by kunstmusik.

the class SoundObjectPropertiesTopComponent method updateTimeBehavior.

private void updateTimeBehavior() {
    if (!(sObj instanceof ScoreObject)) {
        return;
    }
    SoundObject soundObj = (SoundObject) sObj;
    soundObj.setTimeBehavior(timeBehaviorBox.getSelectedIndex());
    if (timeBehaviorBox.getSelectedIndex() == SoundObject.TIME_BEHAVIOR_REPEAT) {
        boolean repeatPointUsed = soundObj.getRepeatPoint() > 0.0f;
        useRepeatPoint.setSelected(repeatPointUsed);
        useRepeatPoint.setEnabled(true);
        repeatePointText.setEnabled(repeatPointUsed);
    } else {
        useRepeatPoint.setSelected(false);
        useRepeatPoint.setEnabled(false);
        repeatePointText.setEnabled(false);
        if (!isUpdating) {
            soundObj.setRepeatPoint(-1.0f);
        }
    }
}
Also used : SoundObject(blue.soundObject.SoundObject) ScoreObject(blue.score.ScoreObject)

Example 37 with ScoreObject

use of blue.score.ScoreObject in project blue by kunstmusik.

the class PasteAsPolyObjectAction method actionPerformed.

@Override
public void actionPerformed(ActionEvent e) {
    BlueData data = BlueProjectManager.getInstance().getCurrentBlueData();
    SoundObjectLibrary sObjLib = data.getSoundObjectLibrary();
    List<Instance> instanceSoundObjects = new ArrayList<>();
    ScoreController.ScoreObjectBuffer buffer = ScoreController.getInstance().getScoreObjectBuffer();
    double start = (double) p.x / timeState.getPixelSecond();
    if (timeState.isSnapEnabled()) {
        start = ScoreUtilities.getSnapValueStart(start, timeState.getSnapValue());
    }
    int minLayer = Integer.MAX_VALUE;
    int maxLayer = Integer.MIN_VALUE;
    for (Integer layerIndex : layerIndexes) {
        if (layerIndex < minLayer) {
            minLayer = layerIndex;
        }
        if (layerIndex > maxLayer) {
            maxLayer = layerIndex;
        }
    }
    int numLayers = maxLayer - minLayer + 1;
    for (int i = 0; i < numLayers; i++) {
        pObj.newLayerAt(-1);
    }
    for (int i = 0; i < scoreObjects.size(); i++) {
        ScoreObject scoreObj = scoreObjects.get(i);
        int layerIndex = layerIndexes.get(i);
        SoundLayer layer = pObj.get(layerIndex - minLayer);
        SoundObject clone = (SoundObject) scoreObj.deepCopy();
        layer.add(clone);
        if (clone instanceof Instance) {
            instanceSoundObjects.add((Instance) clone);
        }
    }
    sObjLib.checkAndAddInstanceSoundObjects(instanceSoundObjects);
    pObj.normalizeSoundObjects();
    pObj.setStartTime(start);
    final ScoreObjectLayer layer = (ScoreObjectLayer) scorePath.getGlobalLayerForY(p.y);
    layer.add(pObj);
    AddScoreObjectEdit edit = new AddScoreObjectEdit(layer, pObj);
    BlueUndoManager.setUndoManager("score");
    BlueUndoManager.addEdit(edit);
}
Also used : BlueData(blue.BlueData) Instance(blue.soundObject.Instance) ArrayList(java.util.ArrayList) ScoreObject(blue.score.ScoreObject) SoundObjectLibrary(blue.SoundObjectLibrary) Point(java.awt.Point) ScoreController(blue.ui.core.score.ScoreController) ScoreObjectLayer(blue.score.layers.ScoreObjectLayer) SoundObject(blue.soundObject.SoundObject) AddScoreObjectEdit(blue.ui.core.score.undo.AddScoreObjectEdit) SoundLayer(blue.SoundLayer)

Example 38 with ScoreObject

use of blue.score.ScoreObject 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)

Example 39 with ScoreObject

use of blue.score.ScoreObject in project blue by kunstmusik.

the class ScoreObjectEditorTopComponent method resultChanged.

@Override
public void resultChanged(LookupEvent ev) {
    if (!(TopComponent.getRegistry().getActivated() instanceof SoundObjectProvider)) {
        return;
    }
    Collection<? extends ScoreObject> scoreObjects = result.allInstances();
    if (scoreObjects.size() == 1) {
        SwingUtilities.invokeLater(() -> {
            BlueData data = BlueProjectManager.getInstance().getCurrentBlueData();
            ScoreObject sObj = scoreObjects.iterator().next();
            if (sObj instanceof PolyObject && data.getSoundObjectLibrary().contains(sObj)) {
                PolyObject pObj = (PolyObject) sObj;
                ScoreController.getInstance().editLayerGroup(pObj);
                editScoreObject(null);
            } else {
                editScoreObject(sObj);
            }
        });
    // FIXME - figure out how to discern if editing is from BlueLive...
    } else {
        SwingUtilities.invokeLater(() -> {
            editScoreObject(null);
        });
    }
}
Also used : SoundObjectProvider(blue.ui.core.score.layers.SoundObjectProvider) BlueData(blue.BlueData) ScoreObject(blue.score.ScoreObject) PolyObject(blue.soundObject.PolyObject)

Aggregations

ScoreObject (blue.score.ScoreObject)39 ScoreObjectLayer (blue.score.layers.ScoreObjectLayer)13 Layer (blue.score.layers.Layer)12 ArrayList (java.util.ArrayList)9 Point (java.awt.Point)8 BlueData (blue.BlueData)6 SoundObject (blue.soundObject.SoundObject)6 ScorePath (blue.ui.core.score.ScorePath)6 SoundLayer (blue.SoundLayer)5 AlignEdit (blue.ui.core.score.undo.AlignEdit)5 Instance (blue.soundObject.Instance)4 PolyObject (blue.soundObject.PolyObject)4 ScoreController (blue.ui.core.score.ScoreController)4 AddScoreObjectEdit (blue.ui.core.score.undo.AddScoreObjectEdit)4 MoveScoreObjectsEdit (blue.ui.core.score.undo.MoveScoreObjectsEdit)4 SoundObjectLibrary (blue.SoundObjectLibrary)2 AlphaMarquee (blue.components.AlphaMarquee)2 Score (blue.score.Score)2 GenericScore (blue.soundObject.GenericScore)2 Test (org.junit.Test)2