Fix save / poweroff preference, menu availability

This commit is contained in:
Jeffrey Morgan 2015-02-26 22:03:46 -05:00
parent 26f2d4c113
commit fafc9d0793
6 changed files with 192 additions and 186 deletions

View File

@ -45,7 +45,7 @@ app.on('ready', function() {
mainWindow.loadUrl(path.normalize('file://' + path.join(__dirname, '..', 'build/index.html')));
app.on('will-quit', function () {
if (saveVMOnQuit) {
exec('/usr/bin/VBoxManage controlvm dev savestate', function () {});
exec('/usr/bin/VBoxManage controlvm dev poweroff', function () {});
}
});
}

View File

@ -173,12 +173,13 @@ gulp.task('release', function () {
});
gulp.task('default', ['download', 'copy', 'js', 'images', 'styles'], function () {
livereload.listen();
gulp.watch('src/**/*.js', ['js']);
gulp.watch('index.html', ['copy']);
gulp.watch('styles/**/*.less', ['styles']);
gulp.watch('images/**', ['images']);
livereload.listen();
var env = process.env;
env.NODE_ENV = 'development';
gulp.src('').pipe(shell(['./cache/Atom.app/Contents/MacOS/Atom .'], {

View File

@ -112,7 +112,7 @@ var Containers = React.createClass({
},
handleMouseEnterDockerTerminal: function () {
this.setState({
currentButtonLabel: 'Open terminal to use Docker CLI.'
currentButtonLabel: 'Open Docker-Ready Mac Terminal.'
});
},
handleMouseLeaveDockerTerminal: function () {
@ -122,7 +122,7 @@ var Containers = React.createClass({
},
handleMouseEnterReportIssue: function () {
this.setState({
currentButtonLabel: 'Report issues or suggest feedbacks.'
currentButtonLabel: 'Report an Issue'
});
},
handleMouseLeaveReportIssue: function () {
@ -132,7 +132,7 @@ var Containers = React.createClass({
},
handleMouseEnterPreferences: function () {
this.setState({
currentButtonLabel: 'Change app preferences.'
currentButtonLabel: 'Change app Preferences.'
});
},
handleMouseLeavePreferences: function () {

View File

@ -1,14 +1,4 @@
var remote = require('remote');
if (localStorage.getItem('settings.width') && localStorage.getItem('settings.height')) {
remote.getCurrentWindow().setSize(parseInt(localStorage.getItem('settings.width')), parseInt(localStorage.getItem('settings.height')));
remote.getCurrentWindow().center();
}
window.addEventListener('resize', function () {
localStorage.setItem('settings.width', window.outerWidth);
localStorage.setItem('settings.height', window.outerHeight);
});
require.main.paths.splice(0, 0, process.env.NODE_PATH);
var app = remote.require('app');
var React = require('react');
@ -20,11 +10,20 @@ var machine = require('./DockerMachine');
var ContainerStore = require('./ContainerStore');
var SetupStore = require('./SetupStore');
var metrics = require('./Metrics');
var MenuTemplate = require('./MenuTemplate');
var template = require('./MenuTemplate');
var Menu = remote.require('menu');
var menu = Menu.buildFromTemplate(MenuTemplate);
Menu.setApplicationMenu(menu);
if (localStorage.getItem('settings.width') && localStorage.getItem('settings.height')) {
remote.getCurrentWindow().setSize(parseInt(localStorage.getItem('settings.width')), parseInt(localStorage.getItem('settings.height')));
remote.getCurrentWindow().center();
}
window.addEventListener('resize', function () {
localStorage.setItem('settings.width', window.outerWidth);
localStorage.setItem('settings.height', window.outerHeight);
});
Menu.setApplicationMenu(Menu.buildFromTemplate(template()));
var settingsjson;
try {
@ -84,6 +83,7 @@ setInterval(function () {
router.run(Handler => React.render(<Handler/>, document.body));
SetupStore.run().then(machine.info).then(machine => {
docker.setup(machine.url, machine.name);
Menu.setApplicationMenu(Menu.buildFromTemplate(template()));
ContainerStore.init(function (err) {
if (err) { console.log(err); }
router.transitionTo('containers');

View File

@ -4,170 +4,174 @@ var router = require('./Router');
var util = require('./Util');
var metrics = require('./Metrics');
var machine = require('./DockerMachine');
var docker = require('./Docker');
// main.js
var MenuTemplate = [
{
label: 'Kitematic',
submenu: [
{
label: 'About Kitematic',
selector: 'orderFrontStandardAboutPanel:'
},
{
type: 'separator'
},
{
label: 'Preferences',
accelerator: 'Command+,',
click: function () {
metrics.track('Opened Preferences', {
from: 'menu'
});
router.transitionTo('preferences');
}
},
{
type: 'separator'
},
{
label: 'Services',
submenu: []
},
{
type: 'separator'
},
{
label: 'Hide Kitematic',
accelerator: 'Command+H',
selector: 'hide:'
},
{
label: 'Hide Others',
accelerator: 'Command+Shift+H',
selector: 'hideOtherApplications:'
},
{
label: 'Show All',
selector: 'unhideAllApplications:'
},
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'Command+Q',
click: function() {
app.quit();
}
},
]
},
{
label: 'File',
submenu: [
{
type: 'separator'
},
{
label: 'Open Docker Terminal',
accelerator: 'Command+Shift+T',
click: function() {
metrics.track('Opened Docker Terminal', {
from: 'menu'
});
machine.dockerTerminal();
}
},
]
},
{
label: 'Edit',
submenu: [
{
label: 'Undo',
accelerator: 'Command+Z',
selector: 'undo:'
},
{
label: 'Redo',
accelerator: 'Shift+Command+Z',
selector: 'redo:'
},
{
type: 'separator'
},
{
label: 'Cut',
accelerator: 'Command+X',
selector: 'cut:'
},
{
label: 'Copy',
accelerator: 'Command+C',
selector: 'copy:'
},
{
label: 'Paste',
accelerator: 'Command+V',
selector: 'paste:'
},
{
label: 'Select All',
accelerator: 'Command+A',
selector: 'selectAll:'
},
]
},
{
label: 'View',
submenu: [
var MenuTemplate = function () {
return [
{
label: 'Toggle DevTools',
accelerator: 'Alt+Command+I',
click: function() { remote.getCurrentWindow().toggleDevTools(); }
label: 'Kitematic',
submenu: [
{
label: 'About Kitematic',
selector: 'orderFrontStandardAboutPanel:'
},
{
type: 'separator'
},
{
label: 'Preferences',
accelerator: 'Command+,',
enabled: !!docker.host(),
click: function () {
metrics.track('Opened Preferences', {
from: 'menu'
});
router.transitionTo('preferences');
}
},
{
type: 'separator'
},
{
label: 'Services',
submenu: []
},
{
type: 'separator'
},
{
label: 'Hide Kitematic',
accelerator: 'Command+H',
selector: 'hide:'
},
{
label: 'Hide Others',
accelerator: 'Command+Shift+H',
selector: 'hideOtherApplications:'
},
{
label: 'Show All',
selector: 'unhideAllApplications:'
},
{
type: 'separator'
},
{
label: 'Quit',
accelerator: 'Command+Q',
click: function() {
app.quit();
}
},
]
},
]
},
{
label: 'Window',
submenu: [
{
label: 'Minimize',
accelerator: 'Command+M',
selector: 'performMiniaturize:'
},
{
label: 'Close',
accelerator: 'Command+W',
click: function () {
remote.getCurrentWindow().hide();
}
},
{
type: 'separator'
},
{
label: 'Bring All to Front',
selector: 'arrangeInFront:'
},
]
},
{
label: 'Help',
submenu: [
{
label: 'Report an Issue...',
click: function () {
metrics.track('Opened Issue Reporter', {
from: 'menu'
});
util.exec(['open', 'https://github.com/kitematic/kitematic/issues/new']);
}
label: 'File',
submenu: [
{
type: 'separator'
},
{
label: 'Open Docker Terminal',
accelerator: 'Command+Shift+T',
enabled: !!docker.host(),
click: function() {
metrics.track('Opened Docker Terminal', {
from: 'menu'
});
machine.dockerTerminal();
}
},
]
},
]
},
];
{
label: 'Edit',
submenu: [
{
label: 'Undo',
accelerator: 'Command+Z',
selector: 'undo:'
},
{
label: 'Redo',
accelerator: 'Shift+Command+Z',
selector: 'redo:'
},
{
type: 'separator'
},
{
label: 'Cut',
accelerator: 'Command+X',
selector: 'cut:'
},
{
label: 'Copy',
accelerator: 'Command+C',
selector: 'copy:'
},
{
label: 'Paste',
accelerator: 'Command+V',
selector: 'paste:'
},
{
label: 'Select All',
accelerator: 'Command+A',
selector: 'selectAll:'
},
]
},
{
label: 'View',
submenu: [
{
label: 'Toggle DevTools',
accelerator: 'Alt+Command+I',
click: function() { remote.getCurrentWindow().toggleDevTools(); }
},
]
},
{
label: 'Window',
submenu: [
{
label: 'Minimize',
accelerator: 'Command+M',
selector: 'performMiniaturize:'
},
{
label: 'Close',
accelerator: 'Command+W',
click: function () {
remote.getCurrentWindow().hide();
}
},
{
type: 'separator'
},
{
label: 'Bring All to Front',
selector: 'arrangeInFront:'
},
]
},
{
label: 'Help',
submenu: [
{
label: 'Report an Issue...',
click: function () {
metrics.track('Opened Issue Reporter', {
from: 'menu'
});
util.exec(['open', 'https://github.com/kitematic/kitematic/issues/new']);
}
},
]
},
];
};
module.exports = MenuTemplate;

View File

@ -3,7 +3,7 @@ var ipc = require('ipc');
var metrics = require('./Metrics');
var Router = require('react-router');
if (localStorage.getItem('settings.saveVMOnQuit') === 'true') {
if (localStorage.getItem('settings.closeVMOnQuit') === 'true') {
ipc.send('vm', true);
} else {
ipc.send('vm', false);
@ -13,7 +13,7 @@ var Preferences = React.createClass({
mixins: [Router.Navigation],
getInitialState: function () {
return {
saveVMOnQuit: localStorage.getItem('settings.saveVMOnQuit') === 'true',
closeVMOnQuit: localStorage.getItem('settings.closeVMOnQuit') === 'true',
metricsEnabled: metrics.enabled()
};
},
@ -21,14 +21,15 @@ var Preferences = React.createClass({
this.goBack();
metrics.track('Went Back From Preferences');
},
handleChangeSaveVMOnQuit: function (e) {
handleChangeCloseVMOnQuit: function (e) {
var checked = e.target.checked;
this.setState({
saveVMOnQuit: checked
closeVMOnQuit: checked
});
localStorage.setItem('settings.closeVMOnQuit', checked);
ipc.send('vm', checked);
metrics.track('Toggled Save VM On Quit', {
save: checked
metrics.track('Toggled Close VM On Quit', {
close: checked
});
},
handleChangeMetricsEnabled: function (e) {
@ -49,10 +50,10 @@ var Preferences = React.createClass({
<div className="title">VM Settings</div>
<div className="option">
<div className="option-name">
Save Linux VM state on closing Kitematic
Shut Down Linux VM on closing Kitematic
</div>
<div className="option-value">
<input type="checkbox" checked={this.state.saveVMOnQuit} onChange={this.handleChangeSaveVMOnQuit}/>
<input type="checkbox" checked={this.state.closeVMOnQuit} onChange={this.handleChangeCloseVMOnQuit}/>
</div>
</div>
<div className="title">App Settings</div>