Major refactor -- split windows into separate files

This commit is contained in:
Feross Aboukhadijeh
2016-05-27 00:01:30 -07:00
parent 3757507b18
commit 001601bc5f
15 changed files with 464 additions and 358 deletions

50
main/windows/about.js Normal file
View File

@@ -0,0 +1,50 @@
var about = module.exports = {
create,
win: null
}
var electron = require('electron')
var config = require('../../config')
var util = require('./util')
function create () {
if (about.win) {
return util.focusWindow(about.win)
}
var win = about.win = new electron.BrowserWindow({
backgroundColor: '#ECECEC',
center: true,
fullscreen: false,
height: 170,
icon: getIconPath(),
maximizable: false,
minimizable: false,
resizable: false,
show: false,
skipTaskbar: true,
useContentSize: true,
width: 300
})
win.loadURL(config.WINDOW_ABOUT)
// No menu on the About window
win.setMenu(null)
// TODO: can this be removed?
win.webContents.on('did-finish-load', function () {
win.show()
})
win.once('closed', function () {
about.win = null
})
}
function getIconPath () {
return process.platform === 'win32'
? config.APP_ICON + '.ico'
: config.APP_ICON + '.png'
}

3
main/windows/index.js Normal file
View File

@@ -0,0 +1,3 @@
exports.about = require('./about')
exports.main = require('./main')
exports.webtorrent = require('./webtorrent')

115
main/windows/main.js Normal file
View File

@@ -0,0 +1,115 @@
var main = module.exports = {
create,
focus,
hide,
send,
show,
toggleFullScreen,
win: null
}
var electron = require('electron')
var app = electron.app
var config = require('../../config')
var log = require('../log')
var menu = require('../menu')
var tray = require('../tray')
var util = require('./util')
var HEADER_HEIGHT = 37
var TORRENT_HEIGHT = 100
function create () {
if (main.win) {
return util.focusWindow(main.win)
}
var win = main.win = new electron.BrowserWindow({
backgroundColor: '#1E1E1E',
darkTheme: true, // Forces dark theme (GTK+3)
icon: getIconPath(), // Window icon (Windows, Linux)
minWidth: config.WINDOW_MIN_WIDTH,
minHeight: config.WINDOW_MIN_HEIGHT,
show: false, // Hide window until renderer sends 'ipcReady'
title: config.APP_WINDOW_TITLE,
titleBarStyle: 'hidden-inset', // Hide title bar (OS X)
useContentSize: true, // Specify web page size without OS chrome
width: 500,
height: HEADER_HEIGHT + (TORRENT_HEIGHT * 6) // header height + 5 torrents
})
win.loadURL(config.WINDOW_MAIN)
if (win.setSheetOffset) win.setSheetOffset(HEADER_HEIGHT)
win.webContents.on('dom-ready', function () {
menu.onToggleFullScreen()
})
win.on('blur', function () {
menu.onWindowHide()
tray.onWindowHide()
})
win.on('focus', function () {
menu.onWindowShow()
tray.onWindowShow()
})
win.on('enter-full-screen', () => menu.onToggleFullScreen(true))
win.on('leave-full-screen', () => menu.onToggleFullScreen(false))
win.on('close', function (e) {
if (process.platform !== 'darwin' && !tray.hasTray()) {
app.quit()
} else if (!app.isQuitting) {
e.preventDefault()
win.hide()
win.send('dispatch', 'backToList')
}
})
}
function getIconPath () {
return process.platform === 'win32'
? config.APP_ICON + '.ico'
: config.APP_ICON + '.png'
}
function toggleFullScreen (flag) {
if (!main.win || !main.win.isVisible()) {
return
}
if (flag == null) flag = !main.win.isFullScreen()
log('toggleFullScreen %s', flag)
if (flag) {
// Fullscreen behaves oddly unless the aspect ratio is disabled. (OS X)
main.win.setAspectRatio(0)
}
main.win.setFullScreen(flag)
}
function send (...args) {
if (!main.win) return
main.win.send(...args)
}
function show () {
if (!main.win) return
main.win.show()
}
function hide () {
if (!main.win) return
main.win.hide()
}
function focus () {
if (!main.win) return
util.focusWindow(main.win)
}

11
main/windows/util.js Normal file
View File

@@ -0,0 +1,11 @@
module.exports = {
focusWindow
}
function focusWindow (win) {
if (win.isMinimized()) {
// TODO: can this be removed?
win.restore()
}
win.show() // shows and gives focus
}

View File

@@ -0,0 +1,48 @@
var webtorrent = module.exports = {
create,
send,
show,
win: null
}
var config = require('../../config')
var electron = require('electron')
function create () {
var win = webtorrent.win = new electron.BrowserWindow({
backgroundColor: '#1E1E1E',
center: true,
fullscreen: false,
fullscreenable: false,
height: 150,
maximizable: false,
minimizable: false,
resizable: false,
show: false,
skipTaskbar: true,
title: 'webtorrent-hidden-window',
useContentSize: true,
width: 150
})
win.loadURL(config.WINDOW_WEBTORRENT)
// Prevent killing the WebTorrent process
win.on('close', function (e) {
if (electron.app.isQuitting) {
return
}
e.preventDefault()
win.hide()
})
}
function show () {
if (!webtorrent.win) return
webtorrent.win.show()
}
function send (...args) {
if (!webtorrent.win) return
webtorrent.win.send(...args)
}