Added multi-window support

This commit is contained in:
Philip Trauner 2016-03-05 17:41:05 +01:00
parent 35f61ab771
commit 9083ff3758

View file

@ -20,15 +20,17 @@ import socket
from ESock import ESock from ESock import ESock
import Routing import Routing
from SublimeMenu import * from SublimeMenu import *
import Logging
import webbrowser import webbrowser
def plugin_unloaded(): def plugin_unloaded():
observer.stop() observer.stop()
try: try:
fl0w.invoke_disconnect() for window in windows:
window.fl0w.invoke_disconnect()
except: except:
pass print("Error while unloading fl0w for %s" % window.folders())
print("Observer stopped!") print("Observer stopped!")
@ -113,13 +115,11 @@ class Fl0w:
debug_menu = Menu(subtitles=False) debug_menu = Menu(subtitles=False)
debug_menu.add(Entry("On", action=self.set_debug, kwargs={"debug" : True})) debug_menu.add(Entry("On", action=self.set_debug, kwargs={"debug" : True}))
debug_menu.add(Entry("Off", action=self.set_debug, kwargs={"debug" : False})) debug_menu.add(Entry("Off", action=self.set_debug, kwargs={"debug" : False}))
debug_menu.add(Entry("Sync Settings", action=self.invoke_sync_settings))
debug_menu.invoke(self.window, back=self.main_menu) debug_menu.invoke(self.window, back=self.main_menu)
def set_debug(self, debug): def set_debug(self, debug):
print("Debug now %s" % debug) sublime.status_message("fl0w: Debug now '%s'" % debug)
self.sock.debug = debug self.sock.debug = debug
@ -134,10 +134,10 @@ class Fl0w:
def invoke_disconnect(self): def invoke_disconnect(self):
self.sock.close()
if self.connected: if self.connected:
sublime.message_dialog("Connection closed") sublime.message_dialog("Connection closed ('%s')" % ", ".join(self.window.folders()))
self.connected = False self.connected = False
self.sock.close()
@ -146,10 +146,13 @@ class Fl0w:
connect_details = connect_details.split(":") connect_details = connect_details.split(":")
if len(connect_details) == 2: if len(connect_details) == 2:
try: try:
self.sock = ESock(socket.create_connection((connect_details[0], int(connect_details[1]))), disconnect_callback=self.invoke_disconnect) # Establish connection to the server
self.sock = ESock(socket.create_connection((connect_details[0], int(connect_details[1]))), disconnect_callback=self.invoke_disconnect, debug=True)
sublime.status_message("Connected to %s:%s." % (connect_details[0], connect_details[1])) sublime.status_message("Connected to %s:%s." % (connect_details[0], connect_details[1]))
self.connected = True self.connected = True
_thread.start_new_thread(sock_handler, (self.sock, {"error_report": Fl0w.ErrorReport(), "info" : Fl0w.Info(), "wallaby_control" : Fl0w.WallabyControl()}, self)) _thread.start_new_thread(sock_handler, (self.sock, {"error_report": Fl0w.ErrorReport(),
"info" : Fl0w.Info(), "wallaby_control" : Fl0w.WallabyControl()}, self))
# Saving last server address
sublime.load_settings("fl0w.sublime-setting").set("server_address", connect_details_raw) sublime.load_settings("fl0w.sublime-setting").set("server_address", connect_details_raw)
sublime.save_settings("fl0w.sublime-setting") sublime.save_settings("fl0w.sublime-setting")
self.main_menu.invoke(self.window) self.main_menu.invoke(self.window)
@ -162,16 +165,31 @@ class Fl0w:
class Fl0wCommand(sublime_plugin.WindowCommand): class Fl0wCommand(sublime_plugin.WindowCommand):
def run(self, menu=None, action=None): def run(self, menu=None, action=None):
if fl0w.window == None: valid_window_setup = True
fl0w.window = self.window folder_count = len(self.window.folders())
if not fl0w.connected: if folder_count > 1:
fl0w.start_menu.invoke(self.window) sublime.error_message("Only one open folder per window is allowed.")
valid_window_setup = False
elif folder_count == 0:
sublime.error_message("No folder open in window.")
valid_window_setup = False
if valid_window_setup:
if not hasattr(self.window, "fl0w"):
self.window.fl0w = Fl0w()
self.window.fl0w.window = self.window
windows.append(self.window)
if not self.window.fl0w.connected:
self.window.fl0w.start_menu.invoke(self.window)
else:
self.window.fl0w.main_menu.invoke(self.window)
else: else:
fl0w.main_menu.invoke(self.window) if hasattr(self.window, "fl0w"):
if self.window.fl0w.connected:
self.window.fl0w.invoke_disconnect()
windows = []
fl0w = Fl0w()
observer = Observer() observer = Observer()
observer.schedule(ReloadHandler(), path=".", recursive=True) observer.schedule(ReloadHandler(), path=".", recursive=True)
#observer.start() #observer.start()