- made FlatCAM so that whenever an associated file is double clicked, if there is an opened instance of FlatCAM, the file will be opened in the first instance without launching a new instance of FlatCAM. If FlatCAM is launched again it will spawn a new process (hopefully it will work when freezed).

This commit is contained in:
Marius Stanciu
2019-08-27 03:59:36 +03:00
committed by Marius
parent 9a8fa1ac4c
commit bb9c35a527
3 changed files with 58 additions and 8 deletions

View File

@@ -4,9 +4,10 @@ import os
from PyQt5 import QtWidgets from PyQt5 import QtWidgets
from PyQt5.QtCore import QSettings, Qt from PyQt5.QtCore import QSettings, Qt
from FlatCAMApp import App from FlatCAMApp import App
from multiprocessing import freeze_support
from flatcamGUI import VisPyPatches from flatcamGUI import VisPyPatches
from multiprocessing import freeze_support
if sys.platform == "win32": if sys.platform == "win32":
# cx_freeze 'module win32' workaround # cx_freeze 'module win32' workaround
pass pass
@@ -58,5 +59,4 @@ if __name__ == '__main__':
app.setAttribute(Qt.AA_EnableHighDpiScaling, False) app.setAttribute(Qt.AA_EnableHighDpiScaling, False)
fc = App() fc = App()
sys.exit(app.exec_()) sys.exit(app.exec_())

View File

@@ -29,6 +29,11 @@ import gc
from xml.dom.minidom import parseString as parse_xml_string from xml.dom.minidom import parseString as parse_xml_string
from multiprocessing.connection import Listener, Client
from multiprocessing import Pool
import socket
from array import array
# ####################################### # #######################################
# # Imports part of FlatCAM ## # # Imports part of FlatCAM ##
# ####################################### # #######################################
@@ -51,7 +56,6 @@ from vispy.io import write_png
from flatcamTools import * from flatcamTools import *
from multiprocessing import Pool
import tclCommands import tclCommands
import gettext import gettext
@@ -67,6 +71,40 @@ if '_' not in builtins.__dict__:
# ######################################## # ########################################
class ArgsThread(QtCore.QThread):
open_signal = pyqtSignal(list)
if sys.platform == 'win32':
address = (r'\\.\pipe\NPtest', 'AF_PIPE')
else:
address = ('/tmp/testipc', 'AF_UNIX')
def my_loop(self, address):
try:
listener = Listener(*address)
while True:
conn = listener.accept()
self.serve(conn)
except socket.error as e:
conn = Client(*address)
conn.send(sys.argv)
conn.send('close')
# close the current instance only if there are args
if len(sys.argv) > 1:
sys.exit()
def serve(self, conn):
while True:
msg = conn.recv()
if msg == 'close':
break
self.open_signal.emit(msg)
conn.close()
def run(self):
self.my_loop(self.address)
class App(QtCore.QObject): class App(QtCore.QObject):
""" """
The main application class. The constructor starts the GUI. The main application class. The constructor starts the GUI.
@@ -200,6 +238,10 @@ class App(QtCore.QObject):
self.main_thread = QtWidgets.QApplication.instance().thread() self.main_thread = QtWidgets.QApplication.instance().thread()
self.new_launch = ArgsThread()
self.new_launch.start()
self.new_launch.open_signal[list].connect(self.on_startup_args)
# ####################### # #######################
# # ## OS-specific ###### # # ## OS-specific ######
# ####################### # #######################
@@ -1747,7 +1789,7 @@ class App(QtCore.QObject):
self.on_excellon_options_button) self.on_excellon_options_button)
# when there are arguments at application startup this get launched # when there are arguments at application startup this get launched
self.args_at_startup.connect(self.on_startup_args) self.args_at_startup.connect(lambda: self.on_startup_args())
self.log.debug("Finished connecting Signals.") self.log.debug("Finished connecting Signals.")
# this is a flag to signal to other tools that the ui tooltab is locked and not accessible # this is a flag to signal to other tools that the ui tooltab is locked and not accessible
@@ -2198,7 +2240,6 @@ class App(QtCore.QObject):
if App.args: if App.args:
self.args_at_startup.emit() self.args_at_startup.emit()
@staticmethod @staticmethod
def copy_and_overwrite(from_path, to_path): def copy_and_overwrite(from_path, to_path):
""" """
@@ -2216,9 +2257,14 @@ class App(QtCore.QObject):
from_new_path = os.path.dirname(os.path.realpath(__file__)) + '\\flatcamGUI\\VisPyData\\data' from_new_path = os.path.dirname(os.path.realpath(__file__)) + '\\flatcamGUI\\VisPyData\\data'
shutil.copytree(from_new_path, to_path) shutil.copytree(from_new_path, to_path)
def on_startup_args(self): def on_startup_args(self, args=None):
log.debug("Application was started with an argument. Processing ...") if args:
for argument in App.args: args_to_process = args
else:
args_to_process = App.args
log.debug("Application was started with an argument. Processing ...")
for argument in args_to_process:
if '.FlatPrj' in argument: if '.FlatPrj' in argument:
try: try:
project_name = str(argument) project_name = str(argument)

View File

@@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing.
================================================= =================================================
27.08.2019
- made FlatCAM so that whenever an associated file is double clicked, if there is an opened instance of FlatCAM, the file will be opened in the first instance without launching a new instance of FlatCAM. If FlatCAM is launched again it will spawn a new process (hopefully it will work when freezed).
26.08.2019 26.08.2019
- added support for file associations with FlatCAM, for Windows - added support for file associations with FlatCAM, for Windows