use of blue.score.layers.Layer in project blue by kunstmusik.
the class ConvertToPolyObjectAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
int retVal = JOptionPane.showConfirmDialog(null, "This operation can not be undone.\nAre you sure?");
if (retVal != JOptionPane.OK_OPTION) {
return;
}
List<Layer> allLayers = scorePath.getAllLayers();
List<SoundObject> sObjList = new ArrayList<>();
List<Integer> layerIndexes = new ArrayList<>();
int layerMin = Integer.MAX_VALUE;
int layerMax = Integer.MIN_VALUE;
double start = Double.POSITIVE_INFINITY;
for (SoundObject sObj : soundObjects) {
sObjList.add(sObj);
double sObjStart = sObj.getStartTime();
if (sObj.getStartTime() < start) {
start = sObj.getStartTime();
}
for (int i = 0; i < allLayers.size(); i++) {
if (allLayers.get(i).contains(sObj)) {
layerIndexes.add(i);
if (i < layerMin) {
layerMin = i;
}
if (i > layerMax) {
layerMax = i;
}
break;
}
}
if (sObjList.size() != layerIndexes.size()) {
throw new RuntimeException("Error: Unable to find layer for SoundObject.");
}
}
int numLayers = layerMax - layerMin + 1;
for (int i = 0; i < numLayers; i++) {
pObj.newLayerAt(-1);
}
for (int i = 0; i < sObjList.size(); i++) {
SoundObject sObj = sObjList.get(i);
int layerNum = layerIndexes.get(i);
SoundLayer layer = (SoundLayer) allLayers.get(layerNum);
layer.remove(sObj);
// don't need to clone here...
pObj.get(layerNum - layerMin).add(sObj);
}
pObj.normalizeSoundObjects();
pObj.setStartTime(start);
((SoundLayer) scorePath.getGlobalLayerForY(p.y)).add(pObj);
ScoreController.getInstance().setSelectedScoreObjects(Collections.singleton(pObj));
}
use of blue.score.layers.Layer in project blue by kunstmusik.
the class FreezeUnfreezeAction method actionPerformed.
@Override
public void actionPerformed(ActionEvent e) {
List<Layer> allLayers = scorePath.getAllLayers();
List<SoundObject> sObjList = new ArrayList<>(soundObjects);
List<Layer> layers = new ArrayList<>();
for (SoundObject sObj : sObjList) {
for (Layer layer : allLayers) {
if (layer.contains(sObj)) {
layers.add(layer);
break;
}
}
}
if (layers.size() != sObjList.size()) {
throw new RuntimeException("Error: Could not find layers for selected SoundObjects");
}
ProgressUtils.showProgressDialogAndRun(new FreezeRunnable(sObjList, layers), "Freeze/Unfreeze SoundObjects", true);
}
use of blue.score.layers.Layer in project blue by kunstmusik.
the class ScoreTopComponent method listChanged.
@Override
public void listChanged(ObservableListEvent<LayerGroup<? extends Layer>> evt) {
if (evt.getType() == ObservableListEvent.DATA_ADDED) {
Score score = data.getScore();
for (int i = evt.getStartIndex(); i <= evt.getEndIndex(); i++) {
addPanelsForLayerGroup(i, score.get(i), score.getTimeState());
}
layerHeaderPanel.revalidate();
checkSize();
} else if (evt.getType() == ObservableListEvent.DATA_REMOVED) {
removePanelsForLayerGroups(evt.getStartIndex(), evt.getEndIndex());
} else if (evt.getType() == ObservableListEvent.DATA_CHANGED) {
List<LayerGroup<? extends Layer>> layerGroups = evt.getAffectedItems();
JComponent c = (JComponent) layerPanel.getComponent(evt.getStartIndex());
LayerGroup lGroup = (LayerGroup) c.getClientProperty("layerGroup");
if (layerGroups.get(1) == lGroup) {
// handle push down
Component comp = layerPanel.getComponent(evt.getEndIndex());
layerPanel.remove(comp);
layerPanel.add(comp, evt.getStartIndex());
Component comp2 = layerHeaderPanel.getComponent(evt.getEndIndex());
layerHeaderPanel.remove(comp2);
layerHeaderPanel.add(comp2, evt.getStartIndex());
layerPanel.revalidate();
layerHeaderPanel.revalidate();
layerPanel.repaint();
layerHeaderPanel.repaint();
} else {
// handle push up
Component comp = layerPanel.getComponent(evt.getStartIndex());
layerPanel.remove(comp);
layerPanel.add(comp, evt.getEndIndex());
Component comp2 = layerHeaderPanel.getComponent(evt.getStartIndex());
layerHeaderPanel.remove(comp2);
layerHeaderPanel.add(comp2, evt.getEndIndex());
layerPanel.revalidate();
layerHeaderPanel.revalidate();
layerPanel.repaint();
layerHeaderPanel.repaint();
}
}
}
use of blue.score.layers.Layer in project blue by kunstmusik.
the class ScorePath method getGlobalLayerIndexForY.
public int getGlobalLayerIndexForY(int y) {
LayerGroup<? extends Layer> layerGroup = getLastLayerGroup();
if (layerGroup == null) {
return getScore().getGlobalLayerIndexForY(y);
}
int runningY = 0;
for (int i = 0; i < layerGroup.size(); i++) {
Layer layer = layerGroup.get(i);
if (y <= runningY + layer.getLayerHeight()) {
return i;
}
runningY += layer.getLayerHeight();
}
return layerGroup.size() - 1;
}
use of blue.score.layers.Layer in project blue by kunstmusik.
the class LayerHeightWheelListener method mouseWheelMoved.
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
int shortcutKey = BlueSystem.getMenuShortcutKey();
if ((e.getModifiers() & shortcutKey) == shortcutKey) {
double rotation = e.getPreciseWheelRotation();
int value = (rotation > 0.0) ? 1 : -1;
Point p = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), source);
Layer layer = ScoreController.getInstance().getScorePath().getGlobalLayerForY(p.y);
if (layer instanceof ScoreObjectLayer) {
ScoreObjectLayer sLayer = (ScoreObjectLayer) layer;
int index = sLayer.getHeightIndex();
int newIndex = index + value;
if (newIndex >= 0 && newIndex <= ScoreObjectLayer.HEIGHT_MAX_INDEX) {
sLayer.setHeightIndex(newIndex);
}
e.consume();
}
} else {
source.getParent().dispatchEvent(e);
}
}
Aggregations