summaryrefslogtreecommitdiff
path: root/gui.js
diff options
context:
space:
mode:
authorMichael Ball <cycomachead@gmail.com>2014-02-04 11:59:45 -0800
committerMichael Ball <cycomachead@gmail.com>2014-02-04 11:59:45 -0800
commit817f4c5420e5d55409c88386c478f14e4735a627 (patch)
tree29af845c58934508a0ea842786c5838e8deb4519 /gui.js
parent9aa3921dd04ee8b6fedec0116f9e3f5503e4043b (diff)
parent8b5fa2ff9bd81ad9227b2593f9ccd6fdb8d32444 (diff)
downloadsnap-byow-817f4c5420e5d55409c88386c478f14e4735a627.tar.gz
snap-byow-817f4c5420e5d55409c88386c478f14e4735a627.zip
resolve merge conflicts; date problems only
Diffstat (limited to 'gui.js')
-rw-r--r--gui.js106
1 files changed, 102 insertions, 4 deletions
diff --git a/gui.js b/gui.js
index d7f562e..7640393 100644
--- a/gui.js
+++ b/gui.js
@@ -9,7 +9,7 @@
written by Jens Mönig
jens@moenig.org
- Copyright (C) 2013 by Jens Mönig
+ Copyright (C) 2014 by Jens Mönig
This file is part of Snap!.
@@ -64,11 +64,11 @@ standardSettings, Sound, BlockMorph, ToggleMorph, InputSlotDialogMorph,
ScriptsMorph, isNil, SymbolMorph, BlockExportDialogMorph,
BlockImportDialogMorph, SnapTranslator, localize, List, InputSlotMorph,
SnapCloud, Uint8Array, HandleMorph, SVG_Costume, fontHeight, hex_sha512,
-sb, CommentMorph, CommandBlockMorph, BlockLabelPlaceHolderMorph*/
+sb, CommentMorph, CommandBlockMorph, BlockLabelPlaceHolderMorph, Audio*/
// Global stuff ////////////////////////////////////////////////////////
-modules.gui = '2013-November-07';
+modules.gui = '2014-February-04';
// Declarations
@@ -2212,6 +2212,16 @@ IDE_Morph.prototype.settingsMenu = function () {
'check for smooth, predictable\nanimations across computers'
);
addPreference(
+ 'Flat line ends',
+ function () {
+ SpriteMorph.prototype.useFlatLineEnds =
+ !SpriteMorph.prototype.useFlatLineEnds;
+ },
+ SpriteMorph.prototype.useFlatLineEnds,
+ 'uncheck for round ends of lines',
+ 'check for flat ends of lines'
+ );
+ addPreference(
'Codification support',
function () {
StageMorph.prototype.enableCodeMapping =
@@ -2233,6 +2243,8 @@ IDE_Morph.prototype.projectMenu = function () {
myself = this,
world = this.world(),
pos = this.controlBar.projectButton.bottomLeft(),
+ graphicsName = this.currentSprite instanceof SpriteMorph ?
+ 'Costumes' : 'Backgrounds',
shiftClicked = (world.currentKey === 16);
menu = new MenuMorph(this);
@@ -2380,9 +2392,94 @@ IDE_Morph.prototype.projectMenu = function () {
'Select categories of additional blocks to add to this project.'
);
+ menu.addItem(
+ localize(graphicsName) + '...',
+ function () {
+ var dir = graphicsName,
+ names = myself.getCostumesList(dir),
+ libMenu = new MenuMorph(
+ myself,
+ localize('Import') + ' ' + localize(dir)
+ );
+
+ function loadCostume(name) {
+ var url = dir + '/' + name,
+ img = new Image();
+ img.onload = function () {
+ var canvas = newCanvas(new Point(img.width, img.height));
+ canvas.getContext('2d').drawImage(img, 0, 0);
+ myself.droppedImage(canvas, name);
+ };
+ img.src = url;
+ }
+
+ names.forEach(function (line) {
+ if (line.length > 0) {
+ libMenu.addItem(
+ line,
+ function () {loadCostume(line); }
+ );
+ }
+ });
+ libMenu.popup(world, pos);
+ },
+ 'Select a costume from the media library'
+ );
+ menu.addItem(
+ localize('Sounds') + '...',
+ function () {
+ var names = this.getCostumesList('Sounds'),
+ libMenu = new MenuMorph(this, 'Import sound');
+
+ function loadSound(name) {
+ var url = 'Sounds/' + name,
+ audio = new Audio();
+ audio.src = url;
+ audio.load();
+ myself.droppedAudio(audio, name);
+ }
+
+ names.forEach(function (line) {
+ if (line.length > 0) {
+ libMenu.addItem(
+ line,
+ function () {loadSound(line); }
+ );
+ }
+ });
+ libMenu.popup(world, pos);
+ },
+ 'Select a sound from the media library'
+ );
+
menu.popup(world, pos);
};
+IDE_Morph.prototype.getCostumesList = function (dirname) {
+ var dir,
+ costumes = [];
+
+ dir = this.getURL(dirname);
+ dir.split('\n').forEach(
+ function (line) {
+ var startIdx = line.search(new RegExp('href="[^./?].*"')),
+ endIdx,
+ name;
+
+ if (startIdx > 0) {
+ name = line.substring(startIdx + 6);
+ endIdx = name.search(new RegExp('"'));
+ name = name.substring(0, endIdx);
+ costumes.push(name);
+ }
+ }
+ );
+ costumes.sort(function (x, y) {
+ return x < y ? -1 : 1;
+ });
+ return costumes;
+};
+
// IDE_Morph menu actions
IDE_Morph.prototype.aboutSnap = function () {
@@ -2391,7 +2488,7 @@ IDE_Morph.prototype.aboutSnap = function () {
world = this.world();
aboutTxt = 'Snap! 4.0\nBuild Your Own Blocks\n\n--- beta ---\n\n'
- + 'Copyright \u24B8 2013 Jens M\u00F6nig and '
+ + 'Copyright \u24B8 2014 Jens M\u00F6nig and '
+ 'Brian Harvey\n'
+ 'jens@moenig.org, bh@cs.berkeley.edu\n\n'
@@ -2602,6 +2699,7 @@ IDE_Morph.prototype.newProject = function () {
StageMorph.prototype.codeMappings = {};
StageMorph.prototype.codeHeaders = {};
StageMorph.prototype.enableCodeMapping = false;
+ SpriteMorph.prototype.useFlatLineEnds = false;
this.setProjectName('');
this.projectNotes = '';
this.createStage();