Implementing Error Catching System
This commit is contained in:
parent
d9821e1aa6
commit
b71b55c7e0
1 changed files with 205 additions and 194 deletions
|
@ -29,6 +29,8 @@ from studio import studio_analyticsLayer
|
||||||
from studio import studio_scriptLayer
|
from studio import studio_scriptLayer
|
||||||
from studio import studio_multiuserLayer
|
from studio import studio_multiuserLayer
|
||||||
|
|
||||||
|
from troubleshooter import error_notify
|
||||||
|
|
||||||
# UI modules
|
# UI modules
|
||||||
from UI import UI_testing
|
from UI import UI_testing
|
||||||
from UI import UI_color
|
from UI import UI_color
|
||||||
|
@ -58,7 +60,9 @@ def run(project, win):
|
||||||
win.destroy()
|
win.destroy()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Setting up the window
|
# Setting up the window
|
||||||
win = Gtk.Window()
|
win = Gtk.Window()
|
||||||
win.maximize()
|
win.maximize()
|
||||||
|
@ -209,204 +213,211 @@ def pmdrawing(pmdrawing, main_layer, win):
|
||||||
# a bit simpler then making some kind of dynamic draw call system that might
|
# a bit simpler then making some kind of dynamic draw call system that might
|
||||||
# be used in such an application. But to hell with it. I did the same on the
|
# be used in such an application. But to hell with it. I did the same on the
|
||||||
# Blender-Organizer altho with way less cairo. And it works well enought.
|
# Blender-Organizer altho with way less cairo. And it works well enought.
|
||||||
|
|
||||||
# FPS counter
|
|
||||||
win.fFPS = datetime.datetime.now()
|
|
||||||
win.tFPS = win.fFPS - win.sFPS
|
|
||||||
|
|
||||||
if win.current["frame"] % 5 == 0:
|
|
||||||
win.blink = not win.blink # Iterating the blink
|
|
||||||
|
|
||||||
if win.current["frame"] % 10 == 0:
|
|
||||||
win.FPS = int ( 1.0 / ( win.tFPS.microseconds /1000000))
|
|
||||||
|
|
||||||
if "Auto_De-Blur" not in win.settings:
|
|
||||||
win.settings["Auto_De-Blur"] = True
|
|
||||||
|
|
||||||
# Fail switch for Graphics.
|
|
||||||
if win.FPS < 10 and win.settings["Auto_De-Blur"]:
|
|
||||||
win.settings["Blur"] = False
|
|
||||||
|
|
||||||
win.sFPS = datetime.datetime.now()
|
|
||||||
|
|
||||||
# Current frame (for animations and things like this)
|
|
||||||
win.current["frame"] += 1
|
|
||||||
|
|
||||||
# Getting data about the frame
|
|
||||||
win.current['mx'] = win.get_pointer()[0]
|
|
||||||
win.current['my'] = win.get_pointer()[1]
|
|
||||||
win.current['w'] = win.get_size()[0]
|
|
||||||
win.current['h'] = win.get_size()[1]
|
|
||||||
|
|
||||||
|
|
||||||
win.cursors = {
|
|
||||||
"arrow":Gdk.Cursor.new(Gdk.CursorType.ARROW),
|
|
||||||
"watch":Gdk.Cursor.new(Gdk.CursorType.WATCH),
|
|
||||||
"text" :Gdk.Cursor.new(Gdk.CursorType.XTERM),
|
|
||||||
"hand" :Gdk.Cursor.new(Gdk.CursorType.HAND1),
|
|
||||||
"cross":Gdk.Cursor.new(Gdk.CursorType.CROSS)
|
|
||||||
}
|
|
||||||
win.current["cursor"] = win.cursors["arrow"]
|
|
||||||
|
|
||||||
# Attemt to make things straight when pressing Ctrl.
|
|
||||||
if 65507 in win.current["keys"] and win.current["LMB"]:
|
|
||||||
|
|
||||||
# Let's see what's got more distance. X or Y motion of the mouse.
|
|
||||||
|
|
||||||
dx = win.current["LMB"][0] - win.current["mx"]
|
|
||||||
dx = max(dx, dx*-1)
|
|
||||||
dy = win.current["LMB"][1] - win.current["my"]
|
|
||||||
dy = max(dy, dy*-1)
|
|
||||||
|
|
||||||
# If X has more ditance. Then Y should be the same as begining.
|
|
||||||
|
|
||||||
if dx > dy:
|
|
||||||
win.current["my"] = win.current["LMB"][1]
|
|
||||||
else:
|
|
||||||
win.current["mx"] = win.current["LMB"][0]
|
|
||||||
|
|
||||||
# Attempt at making the mouse cursor a bit more usefull for stuff.
|
|
||||||
if win.previous["LMB"] and len(win.previous["LMB"]) > 2 and win.current["LMB"]:
|
|
||||||
win.current["LMB"] = win.previous["LMB"]
|
|
||||||
|
|
||||||
#Background color
|
|
||||||
UI_color.set(main_layer, win, "background")
|
|
||||||
main_layer.rectangle(
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
win.current['w'],
|
|
||||||
win.current['h'])
|
|
||||||
main_layer.fill()
|
|
||||||
|
|
||||||
# Tooltips and other junk has to be defined here. And then drawn later to
|
|
||||||
# the screen. So here we get a special layer. That will be drawn to during
|
|
||||||
# the time of drawing. And later composeted over everything.
|
|
||||||
|
|
||||||
win.tooltip_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, win.current['w'],
|
|
||||||
win.current['h'])
|
|
||||||
win.tooltip = cairo.Context(win.tooltip_surface)
|
|
||||||
win.tooltip.select_font_face("Monospace", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
|
|
||||||
|
|
||||||
|
|
||||||
# Layers. Order of them matter
|
|
||||||
Layers = []
|
|
||||||
|
|
||||||
if win.url == "story_editor":
|
|
||||||
Layers.append([studio_storyLayer.layer(win),"story_editor"])
|
|
||||||
if "story_editor" in win.layercashe:
|
|
||||||
del win.layercashe["story_editor"]
|
|
||||||
else:
|
|
||||||
if "story_editor" not in win.layercashe:
|
|
||||||
win.layercashe["story_editor" ] = studio_storyLayer.layer(win)
|
|
||||||
|
|
||||||
Layers.append([win.layercashe["story_editor" ],"story_editor"])
|
|
||||||
|
|
||||||
if win.url == "story_deletion_dialog":
|
|
||||||
Layers.append([studio_storyDeletionLayer.layer(win),"story_deletion_dialog"])
|
|
||||||
|
|
||||||
elif win.url == "settings_layer":
|
|
||||||
Layers.append([studio_settingsLayer.layer(win),"settings_layer"])
|
|
||||||
|
|
||||||
elif win.url == "analytics":
|
|
||||||
Layers.append([studio_analyticsLayer.layer(win),"analytics"])
|
|
||||||
|
|
||||||
elif win.url == "assets":
|
|
||||||
Layers.append([studio_assetLayer.layer(win),"assets"])
|
|
||||||
|
|
||||||
elif win.url == "script":
|
|
||||||
Layers.append([studio_scriptLayer.layer(win), "script"])
|
|
||||||
|
|
||||||
elif win.url == "multiuser":
|
|
||||||
Layers.append([studio_multiuserLayer.layer(win), "multiuser"])
|
|
||||||
|
|
||||||
# Call layers. See studio/studio_dialogs.py for explanation. It's wild.
|
|
||||||
|
|
||||||
win.calllayer = False
|
|
||||||
remlater = []
|
|
||||||
|
|
||||||
for call in list(win.current["calls"].keys()):
|
|
||||||
|
|
||||||
if win.current["calls"][call]["var"] == None:
|
|
||||||
Layers.append([win.current["calls"][call]["draw"](win, call)])
|
|
||||||
win.url = win.current["calls"][call]["url"]
|
|
||||||
win.calllayer = True
|
|
||||||
|
|
||||||
else:
|
|
||||||
win.url = win.current["calls"][call]["back"]
|
|
||||||
win.current["calls"][call]["call"](win, win.current["calls"][call]["var"])
|
|
||||||
win.textactive = ""
|
|
||||||
remlater.append(call)
|
|
||||||
|
|
||||||
for call in remlater:
|
try:
|
||||||
|
|
||||||
del win.current["calls"][call]
|
|
||||||
|
# FPS counter
|
||||||
|
win.fFPS = datetime.datetime.now()
|
||||||
|
win.tFPS = win.fFPS - win.sFPS
|
||||||
Layers.append([UI_testing.layer(win)])
|
|
||||||
Layers.append([win.tooltip_surface])
|
if win.current["frame"] % 5 == 0:
|
||||||
|
win.blink = not win.blink # Iterating the blink
|
||||||
# Combining layers
|
|
||||||
for layer in Layers:
|
if win.current["frame"] % 10 == 0:
|
||||||
if len(layer) > 1:
|
win.FPS = int ( 1.0 / ( win.tFPS.microseconds /1000000))
|
||||||
layer, url = layer
|
|
||||||
blur = UI_elements.animate(url+"_blur", win, 50)
|
if "Auto_De-Blur" not in win.settings:
|
||||||
if (win.url != url or win.calllayer):
|
win.settings["Auto_De-Blur"] = True
|
||||||
if win.current["tool"] not in ["schedule", "grab"]:
|
|
||||||
blur = UI_elements.animate(url+"_blur", win, blur, 50, 2, True)
|
# Fail switch for Graphics.
|
||||||
else:
|
if win.FPS < 10 and win.settings["Auto_De-Blur"]:
|
||||||
blur = UI_elements.animate(url+"_blur", win, 50, 50, 0, True)
|
win.settings["Blur"] = False
|
||||||
|
|
||||||
|
win.sFPS = datetime.datetime.now()
|
||||||
|
|
||||||
|
# Current frame (for animations and things like this)
|
||||||
|
win.current["frame"] += 1
|
||||||
|
|
||||||
|
# Getting data about the frame
|
||||||
|
win.current['mx'] = win.get_pointer()[0]
|
||||||
|
win.current['my'] = win.get_pointer()[1]
|
||||||
|
win.current['w'] = win.get_size()[0]
|
||||||
|
win.current['h'] = win.get_size()[1]
|
||||||
|
|
||||||
|
|
||||||
|
win.cursors = {
|
||||||
|
"arrow":Gdk.Cursor.new(Gdk.CursorType.ARROW),
|
||||||
|
"watch":Gdk.Cursor.new(Gdk.CursorType.WATCH),
|
||||||
|
"text" :Gdk.Cursor.new(Gdk.CursorType.XTERM),
|
||||||
|
"hand" :Gdk.Cursor.new(Gdk.CursorType.HAND1),
|
||||||
|
"cross":Gdk.Cursor.new(Gdk.CursorType.CROSS)
|
||||||
|
}
|
||||||
|
win.current["cursor"] = win.cursors["arrow"]
|
||||||
|
|
||||||
|
# Attemt to make things straight when pressing Ctrl.
|
||||||
|
if 65507 in win.current["keys"] and win.current["LMB"]:
|
||||||
|
|
||||||
|
# Let's see what's got more distance. X or Y motion of the mouse.
|
||||||
|
|
||||||
|
dx = win.current["LMB"][0] - win.current["mx"]
|
||||||
|
dx = max(dx, dx*-1)
|
||||||
|
dy = win.current["LMB"][1] - win.current["my"]
|
||||||
|
dy = max(dy, dy*-1)
|
||||||
|
|
||||||
|
# If X has more ditance. Then Y should be the same as begining.
|
||||||
|
|
||||||
|
if dx > dy:
|
||||||
|
win.current["my"] = win.current["LMB"][1]
|
||||||
else:
|
else:
|
||||||
if win.current["tool"] not in ["schedule", "grab"]:
|
win.current["mx"] = win.current["LMB"][0]
|
||||||
blur = UI_elements.animate(url+"_blur", win, blur, 0, 2, True)
|
|
||||||
else:
|
# Attempt at making the mouse cursor a bit more usefull for stuff.
|
||||||
blur = UI_elements.animate(url+"_blur", win, 0, 0, 0, True)
|
if win.previous["LMB"] and len(win.previous["LMB"]) > 2 and win.current["LMB"]:
|
||||||
layer = UI_elements.blur(layer, win, blur)
|
win.current["LMB"] = win.previous["LMB"]
|
||||||
|
|
||||||
|
#Background color
|
||||||
|
UI_color.set(main_layer, win, "background")
|
||||||
|
main_layer.rectangle(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
win.current['w'],
|
||||||
|
win.current['h'])
|
||||||
|
main_layer.fill()
|
||||||
|
|
||||||
|
# Tooltips and other junk has to be defined here. And then drawn later to
|
||||||
|
# the screen. So here we get a special layer. That will be drawn to during
|
||||||
|
# the time of drawing. And later composeted over everything.
|
||||||
|
|
||||||
|
win.tooltip_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, win.current['w'],
|
||||||
|
win.current['h'])
|
||||||
|
win.tooltip = cairo.Context(win.tooltip_surface)
|
||||||
|
win.tooltip.select_font_face("Monospace", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
|
||||||
|
|
||||||
|
|
||||||
|
# Layers. Order of them matter
|
||||||
|
Layers = []
|
||||||
|
|
||||||
|
if win.url == "story_editor":
|
||||||
|
Layers.append([studio_storyLayer.layer(win),"story_editor"])
|
||||||
|
if "story_editor" in win.layercashe:
|
||||||
|
del win.layercashe["story_editor"]
|
||||||
else:
|
else:
|
||||||
layer = layer[0]
|
if "story_editor" not in win.layercashe:
|
||||||
main_layer.set_source_surface(layer, 0 , 0)
|
win.layercashe["story_editor" ] = studio_storyLayer.layer(win)
|
||||||
main_layer.paint()
|
|
||||||
|
Layers.append([win.layercashe["story_editor" ],"story_editor"])
|
||||||
|
|
||||||
win.get_root_window().set_cursor(win.current["cursor"])
|
if win.url == "story_deletion_dialog":
|
||||||
|
Layers.append([studio_storyDeletionLayer.layer(win),"story_deletion_dialog"])
|
||||||
# If you press ESC you get back from any window to the main menu.
|
|
||||||
if 65307 in win.current["keys"] and win.url != "install_updates":
|
elif win.url == "settings_layer":
|
||||||
win.url = "story_editor"
|
Layers.append([studio_settingsLayer.layer(win),"settings_layer"])
|
||||||
win.story["selected"] = []
|
|
||||||
win.current["tool"] = "selection"
|
elif win.url == "analytics":
|
||||||
win.current["keys"] = []
|
Layers.append([studio_analyticsLayer.layer(win),"analytics"])
|
||||||
win.textactive = ""
|
|
||||||
|
elif win.url == "assets":
|
||||||
# For the rendering I will need to read render info at each frame and parse
|
Layers.append([studio_assetLayer.layer(win),"assets"])
|
||||||
# it in various windows.
|
|
||||||
|
elif win.url == "script":
|
||||||
network_renders.read_renders(win)
|
Layers.append([studio_scriptLayer.layer(win), "script"])
|
||||||
|
|
||||||
|
elif win.url == "multiuser":
|
||||||
|
Layers.append([studio_multiuserLayer.layer(win), "multiuser"])
|
||||||
|
|
||||||
|
# Call layers. See studio/studio_dialogs.py for explanation. It's wild.
|
||||||
|
|
||||||
|
win.calllayer = False
|
||||||
|
remlater = []
|
||||||
|
|
||||||
|
for call in list(win.current["calls"].keys()):
|
||||||
|
|
||||||
|
if win.current["calls"][call]["var"] == None:
|
||||||
|
Layers.append([win.current["calls"][call]["draw"](win, call)])
|
||||||
|
win.url = win.current["calls"][call]["url"]
|
||||||
|
win.calllayer = True
|
||||||
|
|
||||||
|
else:
|
||||||
|
win.url = win.current["calls"][call]["back"]
|
||||||
|
win.current["calls"][call]["call"](win, win.current["calls"][call]["var"])
|
||||||
|
win.textactive = ""
|
||||||
|
remlater.append(call)
|
||||||
|
|
||||||
|
for call in remlater:
|
||||||
|
|
||||||
|
del win.current["calls"][call]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Layers.append([UI_testing.layer(win)])
|
||||||
|
Layers.append([win.tooltip_surface])
|
||||||
|
|
||||||
|
# Combining layers
|
||||||
|
for layer in Layers:
|
||||||
|
if len(layer) > 1:
|
||||||
|
layer, url = layer
|
||||||
|
blur = UI_elements.animate(url+"_blur", win, 50)
|
||||||
|
if (win.url != url or win.calllayer):
|
||||||
|
if win.current["tool"] not in ["schedule", "grab"]:
|
||||||
|
blur = UI_elements.animate(url+"_blur", win, blur, 50, 2, True)
|
||||||
|
else:
|
||||||
|
blur = UI_elements.animate(url+"_blur", win, 50, 50, 0, True)
|
||||||
|
else:
|
||||||
|
if win.current["tool"] not in ["schedule", "grab"]:
|
||||||
|
blur = UI_elements.animate(url+"_blur", win, blur, 0, 2, True)
|
||||||
|
else:
|
||||||
|
blur = UI_elements.animate(url+"_blur", win, 0, 0, 0, True)
|
||||||
|
layer = UI_elements.blur(layer, win, blur)
|
||||||
|
else:
|
||||||
|
layer = layer[0]
|
||||||
|
main_layer.set_source_surface(layer, 0 , 0)
|
||||||
|
main_layer.paint()
|
||||||
|
|
||||||
|
|
||||||
|
win.get_root_window().set_cursor(win.current["cursor"])
|
||||||
|
|
||||||
|
# If you press ESC you get back from any window to the main menu.
|
||||||
|
if 65307 in win.current["keys"] and win.url != "install_updates":
|
||||||
|
win.url = "story_editor"
|
||||||
|
win.story["selected"] = []
|
||||||
|
win.current["tool"] = "selection"
|
||||||
|
win.current["keys"] = []
|
||||||
|
win.textactive = ""
|
||||||
|
|
||||||
|
|
||||||
|
# For the rendering I will need to read render info at each frame and parse
|
||||||
|
# it in various windows.
|
||||||
|
|
||||||
|
network_renders.read_renders(win)
|
||||||
|
|
||||||
|
|
||||||
|
# There is a but in the Gnome I guess. That autopresses the Shift and Ctrl
|
||||||
|
# keys when you scroll to different windows. So here is a little fix.
|
||||||
|
if not win.is_active():
|
||||||
|
win.current["keys"] = []
|
||||||
|
|
||||||
|
elif "is_active" in win.previous and not win.previous["is_active"]:
|
||||||
|
win.multiuser["last_request"] = ""
|
||||||
|
UI_elements.reload_images(win)
|
||||||
|
|
||||||
|
win.current["is_active"] = win.is_active()
|
||||||
|
|
||||||
|
# Saving data about this frame for the next one. A bit hard to get WTF am I
|
||||||
|
# doing here. Basically trying to avoid current and previous data to be links
|
||||||
|
# of the same data.
|
||||||
|
|
||||||
|
previous(win) # Moved it into a seprate function for obvoius reasons
|
||||||
|
|
||||||
|
# Refreshing those that need to be refrashed
|
||||||
|
win.current["scroll"] = [0,0]
|
||||||
|
|
||||||
|
# Refreshing the frame automatically
|
||||||
|
pmdrawing.queue_draw()
|
||||||
|
except:
|
||||||
|
Gtk.main_quit()
|
||||||
|
error_notify.show()
|
||||||
|
|
||||||
# There is a but in the Gnome I guess. That autopresses the Shift and Ctrl
|
|
||||||
# keys when you scroll to different windows. So here is a little fix.
|
|
||||||
if not win.is_active():
|
|
||||||
win.current["keys"] = []
|
|
||||||
|
|
||||||
elif "is_active" in win.previous and not win.previous["is_active"]:
|
|
||||||
win.multiuser["last_request"] = ""
|
|
||||||
UI_elements.reload_images(win)
|
|
||||||
|
|
||||||
win.current["is_active"] = win.is_active()
|
|
||||||
|
|
||||||
# Saving data about this frame for the next one. A bit hard to get WTF am I
|
|
||||||
# doing here. Basically trying to avoid current and previous data to be links
|
|
||||||
# of the same data.
|
|
||||||
|
|
||||||
previous(win) # Moved it into a seprate function for obvoius reasons
|
|
||||||
|
|
||||||
# Refreshing those that need to be refrashed
|
|
||||||
win.current["scroll"] = [0,0]
|
|
||||||
|
|
||||||
# Refreshing the frame automatically
|
|
||||||
pmdrawing.queue_draw()
|
|
||||||
|
|
||||||
|
|
||||||
# This program will have things like mouse and keyboard input. And this setup
|
# This program will have things like mouse and keyboard input. And this setup
|
||||||
# Will be done in both PM and the actuall Project window. ( Also in the render
|
# Will be done in both PM and the actuall Project window. ( Also in the render
|
||||||
|
|
Loading…
Add table
Reference in a new issue