Pencil 基于Electron的GUI原型工具之菜单再探
为什么要重试呢?
主要是觉得Pencil这个工具还是比较有价值。就像Linus对Linux下分发版的态度“让用户有选择”一样,在现在这个Sass服务、Web服务化越来越普遍越便利的时代,这样一款定位于桌面式的开源软件,就是给用户的一种选择。
诚然,好的服务、核心的服务我们需要付费、愿意付费,但同样一个服务对于不同的人其重要性是不同的,比如我的设定里印象笔记、迅雷下载、Jetbrains的IDE、京东、书籍阅读等是需要付费的,因为这是我自己的核心诉求,笔记多端同步、经常要下载国外各种软件时的速度体验、京东VIP的购物体验等。而原型图设计我认为不是我的核心诉求,再一个我不需要用到完整的服务,比如Sketch。去年也买过一年授权,但使用频率极低,而且其核心功能的用户体验并不太好,所以今年到期后也不再续费了。
mac用户群的体验标准,我代表不了,我对于mac的整体评价,甚至应该是中下的那一个等级,但那种软硬件完美结合的体验理念,相对于市面上其它产品、绝对要点一个大大的赞。
重试
很奇怪,前两个月尝试过的对Pencil的macOS原生菜单改造过程,这两天要去重试的时候,已经记不清了,所以一定要及时记录、而且要记重点,大脑内部存储性能不行,就找外部存储。
1、事件驱动的开发方式
主进程 pencil/app/index.js
从主进程到渲染进程的异步通信
mainWindow.webContents.on("will-navigate", handleRedirect);
mainWindow.webContents.on("new-window", handleRedirect);
mainWindow.webContents.on('did-finish-load', function () {
console.log('页面内容加载完成');
if (process.platform == 'darwin') {
mainWindow.webContents.send('initMacOSMenu');
}
});
初始化Electron自带的关于菜单,如果有需求的话。
app.on('ready', function() {
app.setAboutPanelOptions({
applicationName: pkg.productName,
applicationVersion: pkg.version,
copyright: pkg.copyright,
version: '',
credits: '',
authors: '',
website: pkg.homepage,
iconPath: '',
});
渲染进程 pencil/app/app.js
/**
* 调整实现方式为完全在渲染进程中初始化原生菜单
*/
ipcRenderer.on('initMacOSMenu', (event) => {
console.log('initMacOSMenu web page received ');
var {MacOSToolbar} = require('./views/toolbars/MacOSToolbar');
MacOSToolbar.createMacOSToolbar();
});
2、具体实现
要让主进程的菜单点击事件触发后,渲染进程响应相应的指令。关键词:UICommandManager.getCommand、menu key。
菜单初始化 pencil/app/views/toolbars/MacOSToolbar.js
const {Menu, app, webContents} = require('electron').remote;
const pkg = require("../../package.json");
const FileToolMenu = require('../menus/FileToolMenu');
/**
* 原始逻辑是在主进程中,初始化MacOS下的原生菜单
* 目前改成在渲染进程中被调用
* 菜单的交互事件,需要在 渲染进程 中指定
*/
exports.MacOSToolbar = {
menuClicked(menuItem, browserWindow, event) {
// browserWindow.webContents.send('menuClicked', menuItem);
var command = UICommandManager.getCommand(menuItem.id);
if (!command) {
return;
}
command.run();
},
createMacOSToolbar() {
// Cli 环境执行
var menuClicked = this.menuClicked;
var fileMenus = [];
var fileCommands = FileToolMenu.allItems();
for (let i = 0; i < fileCommands.length; i++) {
const command = fileCommands[i];
let menu = {
id: command.key,
label: command.label,
accelerator: command.shortcut,
click: menuClicked,
};
if (command.type == 'separator') {
menu = {
type: "separator",
};
}
if (command.run) {
}
fileMenus.push(menu);
}

Pencil 基于Electron的GUI原型工具之菜单再探的更多相关文章
- Pencil 基于Electron的GUI原型工具之菜单三探 印象笔记同步
今天一鼓作气实现Pencil整合印象笔记同步的功能. 缘起,像Sketch或者Adobe XD等一些工具都开始陆续支持整合阿里巴巴的"语雀"云服务,将设计文档同步到云端,便于团队协 ...
- 4款最受欢迎的Mac原型工具
原型工具中Wireframe, Mockup和prototype之间的有什么不同? 无论你是一名刚入行的UX/UI设计师,还是入行多年的老手,在制作原型的过程中一定接触或听说过其中很重要的三个原型术语 ...
- 基于 electron 实现简单易用的抓包、mock 工具
背景 经常我们要去看一些页面所发出的请求时,经常会用到 Charles 做为抓包工具来进行接口抓取,但一方面市面是很多抓包工具都是收费或者无法二次开发的.当前我们团队大多数用的也都是 Charles, ...
- MonjaDB —— 基于 Eclipse 的 MongoDB GUI 客户端工具(转载)
原文链接http://www.oschina.net/question/12_59707 MonjaDB 是一个 MongoDB 的 GUI 客户端工具,提供直观的 MongoDB 数据管理的功能,支 ...
- 30款基本UX工具 - 思维流程工具 & 原型工具
来源:GBin1.com 现在的开发人员在建造网站时,注重的是布局和技术特性,但是往往忽略了更重要的一点,那就是用户体验. 如 果用户在使用的时候,不能简单清楚的知道该要如何操作,那么他们一定会选择另 ...
- 使用Squirrel创建基于Electron开发的Windows 应用安装包
我们把自己开发的Electron应用发布之前,需要把app打包成简单的安装包,这样app更容易被获取,以此来发布我们的应用.我们可以参考Wix或其他的安装程序,但是对于Electron应用更好的打包程 ...
- 转载:开发者眼中最好的 22 款 GUI 测试工具
对于很多同学来说gui程序的测试是一个难点,所以我从网上转载了一篇关于gui测试的一篇文章,里面罗列的很多工具,大家可以尝试一下学习学习. 英文原文:22 best GUI testing tools ...
- 开发者眼中最好的 22 款 GUI 测试工具
1.Abbot - Java GUI 测试框架 Abbot是一个基于GUI的简单的Java测试框架,它能够帮助开发者测试Java用户界面. 它提供事件自动生成和验证Java GUI组件,使您能够轻松地 ...
- Pencil-一个开源免费的UI原型工具,自带ios和android模板
Pencil是一个开源免费的UI原型工具,自带ios和android模板,可以很方便的做mockup. 下图是一个官方展示的模板:
随机推荐
- 一起学react (1) 10分钟 让你dva从入门到精通
前言 如果文章中有错误的地方的话 可以直接加我QQ:469373256 自己针对一些问题做的优化版本 目前刚启动 还不是很成熟 https://github.com/fangkyi03/fastkit ...
- 在Unity中使用自定义宏
最近写AVG工具时有这样的功能需求,AVG的角色可以支持动态的Spine动画,当没有Spine动画时采用默认的立绘图片替代. 这时在脚本中就可以采用自定义的宏来实现: 例如: #if VNSpine ...
- 2019_JAVA面试题_真实总结
来自刚被某互联网公司录取的朋友的分享. 整理的面试题1: 1.Java里面有哪几种基础数据类型, 2.Char为何是两个字节, 3.Object有哪些方法 4.final修饰变量,函数,类的作用, 5 ...
- python多进程multiprocessing Pool相关问题
python多进程想必大部分人都用到过,可以充分利用多核CPU让代码效率更高效. 我们看看multiprocessing.pool.Pool.map的官方用法 map(func, iterable[, ...
- 分词 | 双向匹配中文分词算法python实现
本次实验内容是基于词典的双向匹配算法的中文分词算法的实现.使用正向和反向最大匹配算法对给定句子进行分词,对得到的结果进行比较,从而决定正确的分词方法. 算法描述正向最大匹配算法先设定扫描的窗口大小ma ...
- docker-mysql-使用docker运行mysql8
1, 下载镜像, 我用的是8 docker pull mysql: 2, 启动镜像 docker run \ --name mysql8 \ -p : \ -v /Users/wenbronk/Con ...
- oracle学习笔记(十五) PL/SQL语法结构以及使用
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...
- [笔记] .net core WPF 程序,发布独立程序与单一执行程序
如何发布独立可运行的,和只有一个文件的 .net core WPF 程序. 1 发布并打包 Step 1 在项目上右键,在菜单中选择发布,使用文件发布,选择独立部署模式,其它的条件,依照自己的情况设置 ...
- go-运算符
算术运算符 ++,--只能放在变量后面,不能放在前面 独立使用 目的:更简洁 go语言不支持三元运算符 键盘输入 fmt.scanln 会在换行时扫描,所以最后一个条目必须换行或达到结束位置 fmt. ...
- 用Python制作只属于你和ta的聊天渠道吧
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Python应用宝典 PS:如有需要Python学习资料的小伙伴可 ...