Merge branch 'rename-sound-update-refs'

Conflicts:
	src/scratch/ScratchRuntime.as
This commit is contained in:
Nathan Dinsmore 2014-06-24 18:59:43 -04:00
commit 55652f899b
3 changed files with 34 additions and 4 deletions

View file

@ -133,11 +133,19 @@ public class ScratchObj extends Sprite {
} }
public function isCostumeNameUsed(name:String):Boolean { public function isCostumeNameUsed(name:String):Boolean {
var existingNames:Array = []; name = name.toLowerCase();
for each (var c:ScratchCostume in costumes) { for each (var c:ScratchCostume in costumes) {
existingNames.push(c.costumeName.toLowerCase()); if (c.costumeName.toLowerCase() == name) return true;
} }
return (existingNames.indexOf(name.toLowerCase()) > -1); return false;
}
public function isSoundNameUsed(name:String):Boolean {
name = name.toLowerCase();
for each (var s:ScratchSound in sounds) {
if (s.soundName.toLowerCase() == name) return true;
}
return false;
} }
public function unusedCostumeName(baseName:String = ''):String { public function unusedCostumeName(baseName:String = ''):String {

View file

@ -700,6 +700,17 @@ public class ScratchRuntime {
app.setSaveNeeded(); app.setSaveNeeded();
} }
public function renameSound(s:ScratchSound, newName:String):void {
var obj:ScratchObj = app.viewedObj();
var oldName:String = s.soundName;
if (obj.isSoundNameUsed(newName)) return;
s.soundName = newName;
allUsesOfSoundDo(oldName, function (a:BlockArg):void {
a.setArgValue(newName);
});
app.setSaveNeeded();
}
public function clearRunFeedback():void { public function clearRunFeedback():void {
if(app.editMode) { if(app.editMode) {
for each (var stack:Block in allStacks()) { for each (var stack:Block in allStacks()) {
@ -808,6 +819,16 @@ public class ScratchRuntime {
return result; return result;
} }
public function allUsesOfSoundDo(soundName:String, f:Function):void {
for each (var stack:Block in app.viewedObj().scripts) {
stack.allBlocksDo(function (b:Block):void {
for each (var a:BlockArg in b.args) {
if (a.menuName == 'sound' && a.argValue == soundName) f(a);
}
});
}
}
public function allCallsOf(callee:String, owner:ScratchObj):Array { public function allCallsOf(callee:String, owner:ScratchObj):Array {
var result:Array = []; var result:Array = [];
for each (var stack:Block in owner.scripts) { for each (var stack:Block in owner.scripts) {

View file

@ -201,7 +201,8 @@ public class SoundsPart extends UIPart {
private function nameChanged():void { private function nameChanged():void {
currentIndex = Math.min(currentIndex, app.viewedObj().sounds.length - 1); currentIndex = Math.min(currentIndex, app.viewedObj().sounds.length - 1);
var current:ScratchSound = app.viewedObj().sounds[currentIndex] as ScratchSound; var current:ScratchSound = app.viewedObj().sounds[currentIndex] as ScratchSound;
current.soundName = nameField.contents(); app.runtime.renameSound(current, nameField.contents());
nameField.setContents(current.soundName);
(listFrame.contents as MediaPane).refresh(); (listFrame.contents as MediaPane).refresh();
} }