modify key map

This commit is contained in:
mkwiser 2014-10-07 21:51:28 +08:00
parent abebe9469d
commit 136fa15b3c
5 changed files with 135 additions and 62 deletions

View File

@ -16,7 +16,7 @@ define(
var ProjectViewer = require('../widget/projectviewer'); var ProjectViewer = require('../widget/projectviewer');
var TTFManager = require('../widget/ttfmanager'); var TTFManager = require('../widget/ttfmanager');
var program = require('../widget/program'); var program = require('../widget/program');
var clipboard = require('../widget/clipboard'); var controller = require('../widget/controller/default');
var string = require('common/string'); var string = require('common/string');
@ -100,6 +100,7 @@ define(
var list = project.add(name, program.ttfmanager.get()); var list = project.add(name, program.ttfmanager.get());
program.projectViewer.show(list); program.projectViewer.show(list);
program.data.projectName = name; program.data.projectName = name;
program.ttfmanager.setState('new');
} }
} }
@ -180,58 +181,18 @@ define(
// 查看器 // 查看器
program.viewer = new GLYFViewer($('#glyf-list')); program.viewer = new GLYFViewer($('#glyf-list'));
// 项目管理 // 项目管理
program.project = project;
program.projectViewer = new ProjectViewer($('#project-list')); program.projectViewer = new ProjectViewer($('#project-list'));
// ttf管理 // ttf管理
program.ttfmanager = new TTFManager(); program.ttfmanager = new TTFManager();
controller.init(program);
program.viewer.on('del', function(e) { // 加载项目
if (e.list) {
program.ttfmanager.removeGlyf(e.list);
}
}).on('copy', function(e) {
var list = program.ttfmanager.getGlyf(e.list);
clipboard.set(list, 'glyf');
}).on('cut', function(e) {
var list = program.ttfmanager.getGlyf(e.list);
clipboard.set(list, 'glyf');
program.ttfmanager.removeGlyf(e.list);
}).on('paste', function(e) {
var glyfList = clipboard.get('glyf');
if (glyfList && glyfList.length) {
program.ttfmanager.appendGlyf(glyfList, e.list);
}
}).on('undo', function(e) {
program.ttfmanager.undo();
}).on('redo', function(e) {
program.ttfmanager.redo();
});
program.projectViewer.on('open', function(e) {
var imported = project.get(e.projectName);
if (imported) {
if (program.ttfmanager.isChanged() && !window.confirm('是否放弃保存当前项目?')) {
return;
}
program.ttfmanager.set(imported);
program.data.projectName = e.projectName;
program.viewer.focus();
}
}).on('del', function(e) {
if (e.projectName && window.confirm('是否删除项目?')) {
program.projectViewer.show(project.remove(e.projectName));
}
program.viewer.focus();
})
program.projectViewer.show(project.items()); program.projectViewer.show(project.items());
program.ttfmanager.on('change', function(e) {
program.viewer.show(e.ttf);
});
} }
}; };

View File

@ -10,7 +10,7 @@
define( define(
function(require) { function(require) {
var storage = window.sessionStorage; var storage = window.localStorage;
var storageName = 'clipboard.default'; var storageName = 'clipboard.default';
@ -40,12 +40,19 @@ define(
if (null !== data) { if (null !== data) {
data = JSON.parse(data); data = JSON.parse(data);
if (data.type == type) { if (data.type == type) {
storage.removeItem(storageName); //storage.removeItem(storageName);
return data.data; return data.data;
} }
} }
return null; return null;
},
/**
* 清空
*/
clear: function() {
storage.removeItem(storageName);
} }
}; };

View File

@ -0,0 +1,76 @@
/**
* @file default.js
* @author mengke01
* @date
* @description
* 默认的页面控制器
*/
define(
function(require) {
var clipboard = require('../clipboard');
var lang = require('common/lang');
return {
/**
* 初始化控制器
*
* @param {Object} program 项目组件
*/
init: function(program) {
program.viewer.on('del', function(e) {
if (e.list) {
program.ttfmanager.removeGlyf(e.list);
}
}).on('copy', function(e) {
var list = program.ttfmanager.getGlyf(e.list);
clipboard.set(list, 'glyf');
}).on('cut', function(e) {
var list = program.ttfmanager.getGlyf(e.list);
clipboard.set(list, 'glyf');
program.ttfmanager.removeGlyf(e.list);
}).on('paste', function(e) {
var glyfList = clipboard.get('glyf');
if (glyfList && glyfList.length) {
program.ttfmanager.appendGlyf(glyfList);
}
}).on('undo', function(e) {
program.ttfmanager.undo();
}).on('redo', function(e) {
program.ttfmanager.redo();
});
program.projectViewer.on('open', function(e) {
var imported = program.project.get(e.projectName);
if (imported) {
if (program.ttfmanager.isChanged() && !window.confirm('是否放弃保存当前项目?')) {
return;
}
program.ttfmanager.set(imported);
program.data.projectName = e.projectName;
program.viewer.focus();
}
}).on('del', function(e) {
if (e.projectName && window.confirm('是否删除项目?')) {
program.projectViewer.show(program.project.remove(e.projectName));
}
program.viewer.focus();
})
program.ttfmanager.on('change', function(e) {
program.viewer.show(e.ttf);
program.viewer.focus();
});
window.onbeforeunload = function() {
if (program.ttfmanager.isChanged()) {
return '是否放弃保存当前项目?';
}
};
}
};
}
);

View File

@ -16,8 +16,10 @@ define(
var GLYF_ITEM_TPL = '' var GLYF_ITEM_TPL = ''
+ '<div data-index="${index}" class="glyf-item ${compound} ${modify}">' + '<div data-index="${index}" class="glyf-item ${compound} ${modify}">'
+ '<i data-action="del" class="i-del" title="删除"></i>' + '<i data-action="del" class="i-del" title="删除"></i>'
+ '<svg class="glyf" viewbox="0 0 ${unitsPerEm} ${unitsPerEm}"><g transform="scale(1, -1) translate(0, -${descent}) scale(0.95, 0.95) "><path class="path" ${d}/></g></svg>' + '<svg class="glyf" viewbox="0 0 ${unitsPerEm} ${unitsPerEm}">'
+ '<div data-field="unicode" class="unicode" title="${unicode}">${unicode}</div><div data-field="name" class="name" title="${name}">${name}</div>' + '<g transform="scale(1, -1) translate(0, -${descent}) scale(0.95, 0.95) "><path class="path" ${d}/></g></svg>'
+ '<div data-field="unicode" class="unicode" title="${unicode}">${unicode}</div>'
+ '<div data-field="name" class="name" title="${name}">${name}</div>'
+ '</div>'; + '</div>';
var keyMap = { var keyMap = {
@ -93,16 +95,10 @@ define(
var me = this; var me = this;
me.downlistener = function(e) {
// 绑定键盘事件 // 阻止ctrl+A默认事件
me.listener = function(e) { if (65 === e.keyCode && e.ctrlKey) {
e.preventDefault();
// 取消选中
if (27 === e.keyCode) {
e.stopPropagation();
me.main.children().removeClass('selected');
}
else if (65 === e.keyCode && e.ctrlKey) {
e.stopPropagation(); e.stopPropagation();
me.main.children().addClass('selected'); me.main.children().addClass('selected');
} }
@ -116,6 +112,11 @@ define(
e.stopPropagation(); e.stopPropagation();
me.fire('redo'); me.fire('redo');
} }
// 取消选中
else if (27 === e.keyCode) {
e.stopPropagation();
me.main.children().removeClass('selected');
}
// 其他操作 // 其他操作
else if (keyMap[e.keyCode] && (e.keyCode == 46 || e.ctrlKey)) { else if (keyMap[e.keyCode] && (e.keyCode == 46 || e.ctrlKey)) {
e.stopPropagation(); e.stopPropagation();
@ -211,13 +212,13 @@ define(
GlyfViewer.prototype.focus = function() { GlyfViewer.prototype.focus = function() {
if (!this.listening) { if (!this.listening) {
document.body.addEventListener('keyup', this.listener, false); document.body.addEventListener('keydown', this.downlistener);
this.listening = true; this.listening = true;
} }
}; };
GlyfViewer.prototype.blur = function() { GlyfViewer.prototype.blur = function() {
document.body.removeEventListener('keyup', this.listener); document.body.removeEventListener('keydown', this.downlistener);
this.listening = false; this.listening = false;
}; };

View File

@ -14,6 +14,18 @@ define(
var pathAdjust = require('graphics/pathAdjust'); var pathAdjust = require('graphics/pathAdjust');
var History = require('editor/util/History'); var History = require('editor/util/History');
/**
* 清除glyf编辑状态
*
* @param {Array} glyfList glyf列表
* @return {Array} glyf列表
*/
function clearGlyfTag(glyfList) {
glyfList.forEach(function(g) {
delete g.modify;
});
return glyfList;
}
/** /**
* 合并两个ttfObject此处仅合并简单字形 * 合并两个ttfObject此处仅合并简单字形
@ -119,6 +131,7 @@ define(
* @return {this} * @return {this}
*/ */
Manager.prototype.addGlyf = function(glyf) { Manager.prototype.addGlyf = function(glyf) {
glyf.modify = 'new';
this.ttf.glyf.push(glyf); this.ttf.glyf.push(glyf);
this.fireChange(true); this.fireChange(true);
return this; return this;
@ -220,6 +233,9 @@ define(
glyfList = glyfList.slice(l); glyfList = glyfList.slice(l);
} }
if (glyfList.length) { if (glyfList.length) {
glyfList.forEach(function(g) {
g.modify = 'new';
});
Array.prototype.splice.apply(glyf, [glyf.length, 0].concat(glyfList)); Array.prototype.splice.apply(glyf, [glyf.length, 0].concat(glyfList));
} }
@ -283,6 +299,18 @@ define(
return !!this.changed; return !!this.changed;
}; };
/**
* 设置状态
* @return {this}
*/
Manager.prototype.setState = function(state) {
if (state == 'new') {
this.changed = false;
}
};
Manager.prototype.clearGlyfTag = clearGlyfTag;
/** /**
* 注销 * 注销
*/ */