enable print button

pull/432/head
Lex Neva 2019-04-12 17:45:57 -04:00
rodzic 785e3798c4
commit 9b2a47136b
5 zmienionych plików z 42 dodań i 41 usunięć

Wyświetl plik

@ -6,12 +6,19 @@
"main": "src/index.js",
"scripts": {
"pack": "electron-builder --dir",
"dist": "electron-builder"
"dist": "electron-builder",
"dev": "electron ."
},
"build": {
"linux": { "target": "dir" },
"win": { "target": "dir" },
"mac": { "target": "dir" }
"linux": {
"target": "dir"
},
"win": {
"target": "dir"
},
"mac": {
"target": "dir"
}
},
"keywords": [],
"author": "lex",

Wyświetl plik

@ -1,4 +1,5 @@
import { app, BrowserWindow } from 'electron';
import { app, BrowserWindow, ipcMain, dialog } from 'electron';
var fs = require('fs');
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
@ -11,8 +12,16 @@ const createWindow = () => {
mainWindow.maximize();
// and load the index.html of the app.
mainWindow.loadURL(process.argv[1]);
if (process.argv[1] == ".") {
// run in development mode with `electron . <url>`
var url = process.argv[2];
} else {
var url = process.argv[1];
}
mainWindow.loadURL(url);
mainWindow.webContents.openDevTools();
// Emitted when the window is closed.
mainWindow.on('closed', () => {
// Dereference the window object, usually you would store windows
@ -31,3 +40,11 @@ app.on('ready', createWindow);
app.on('window-all-closed', () => {
app.quit();
});
ipcMain.on('print', function (event, pageSize) {
mainWindow.webContents.printToPDF({"pageSize": pageSize}, function(error, data) {
dialog.showSaveDialog(mainWindow, {"defaultPath": "inkstitch.pdf"}, function(filename, bookmark) {
fs.writeFileSync(filename, data, 'utf-8');
})
})
})

Wyświetl plik

@ -88,18 +88,6 @@ class PrintPreviewServer(Thread):
def resources(resource):
return send_from_directory(self.resources_path, resource, cache_timeout=1)
@self.app.route('/printing/start')
def printing_start():
# temporarily turn off the watcher while the print dialog is up,
# because javascript will be frozen
self.last_request_time = None
return "OK"
@self.app.route('/printing/end')
def printing_end():
# nothing to do here -- request_started() will restart the watcher
return "OK"
@self.app.route('/settings/<field_name>', methods=['POST'])
def set_field(field_name):
self.metadata[field_name] = request.json['value']

Wyświetl plik

@ -1,4 +1,3 @@
from glob import glob
import os
import subprocess
import sys
@ -14,21 +13,14 @@ def open_url(url):
if getattr(sys, 'frozen', None) is not None:
electron_path = os.path.join(get_bundled_dir("electron"), "inkstitch-gui")
if sys.platform == "darwin":
electron_path += ".app/Contents/MacOS/inkstitch-gui"
subprocess.Popen(["open", "-a", electron_path, "--args", url])
else:
app_process = subprocess.Popen([electron_path, url])
else:
# It's a bit trickier to find the electron app in a development environment.
base_dir = get_bundled_dir("electron")
try:
package_dir = glob(os.path.join(base_dir, 'dist', '*-unpacked'))[0]
except IndexError:
raise Exception("Electron app not found. Be sure to run 'yarn; yarn dist' in %s." % base_dir)
electron_path = os.path.join(base_dir, package_dir, "inkstitch-gui")
if sys.platform == "darwin":
electron_path += ".app/Contents/MacOS/inkstitch-gui"
app_process = subprocess.Popen(["open", "-a", electron_path, "--args", url])
else:
app_process = subprocess.Popen([electron_path, url])
# if we're not running in a pyinstaller bundle, run electron directly
app_process = subprocess.Popen(["yarn", "dev", url], cwd=get_bundled_dir("electron"))
return app_process

Wyświetl plik

@ -1,3 +1,5 @@
var electron = require('electron');
$.postJSON = function(url, data, success=null) {
return $.ajax(url, {
type: 'POST',
@ -366,13 +368,8 @@ $(function() {
});
$('button.print').click(function() {
// printing halts all javascript activity, so we need to tell the backend
// not to shut down until we're done.
$.get("/printing/start")
.done(function() {
window.print();
$.get("/printing/end");
});
var pageSize = $('select#printing-size').find(':selected').text();
electron.ipcRenderer.send('print', pageSize)
});
$('button.settings').click(function(){