Improved alert message setup

This commit is contained in:
itdominator 2021-11-28 00:40:47 -06:00
parent 96f3ba0735
commit f78cd5fdf1
6 changed files with 75 additions and 18 deletions

View File

@ -604,6 +604,12 @@ PyFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspecti
</object> </object>
</child> </child>
</object> </object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-justify-center</property>
</object>
<object class="GtkTextBuffer" id="message_buffer"/>
<object class="GtkImage" id="open_with_img"> <object class="GtkImage" id="open_with_img">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -940,6 +946,29 @@ PyFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspecti
</child> </child>
</object> </object>
</child> </child>
<child>
<object class="GtkMenuItem">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Debug</property>
<child type="submenu">
<object class="GtkMenu">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkImageMenuItem">
<property name="label">Show Errors</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="image">image1</property>
<property name="use-stock">False</property>
<signal name="button-release-event" handler="show_messages_popup" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -1390,16 +1419,28 @@ PyFM is developed on Atom, git, and using Python 3+ with Gtk GObject introspecti
<object class="GtkPopover" id="message_widget"> <object class="GtkPopover" id="message_widget">
<property name="width-request">320</property> <property name="width-request">320</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="relative-to">controll_box</property> <property name="relative-to">controll_box</property>
<property name="position">bottom</property> <property name="position">bottom</property>
<child> <child>
<object class="GtkLabel" id="message_label"> <object class="GtkScrolledWindow">
<property name="height-request">600</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="justify">center</property> <property name="hexpand">True</property>
<attributes> <property name="shadow-type">in</property>
<attribute name="scale" value="2"/> <property name="overlay-scrolling">False</property>
</attributes> <child>
<object class="GtkTextView" id="message_view">
<property name="name">message_view</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hexpand">True</property>
<property name="editable">False</property>
<property name="cursor-visible">False</property>
<property name="buffer">message_buffer</property>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>

View File

@ -31,6 +31,9 @@ treeview.view,
color: rgba(255, 255, 255, 0.5);; color: rgba(255, 255, 255, 0.5);;
} }
#message_view {
font: 16px "Monospace";
}
/* Rubberband coloring */ /* Rubberband coloring */
/* .rubberband, /* .rubberband,

View File

@ -1,5 +1,5 @@
# Python imports # Python imports
import threading, subprocess, signal, inspect, os, time import sys, traceback, threading, subprocess, signal, inspect, os, time
# Gtk imports # Gtk imports
import gi import gi
@ -21,7 +21,8 @@ def threaded(fn):
class Controller(Controller_Data, ShowHideMixin, KeyboardSignalsMixin, WidgetFileActionMixin, \ class Controller(Controller_Data, ShowHideMixin, KeyboardSignalsMixin, WidgetFileActionMixin, \
PaneMixin, WindowMixin): PaneMixin, WindowMixin):
def __init__(self, args, unknownargs, _settings): def __init__(self, args, unknownargs, _settings):
self.settings = _settings sys.excepthook = self.my_except_hook
self.settings = _settings
self.setup_controller_data() self.setup_controller_data()
self.window.show() self.window.show()
@ -63,13 +64,23 @@ class Controller(Controller_Data, ShowHideMixin, KeyboardSignalsMixin, WidgetFil
print(repr(e)) print(repr(e))
def my_except_hook(self, exctype, value, _traceback):
trace = ''.join(traceback.format_tb(_traceback))
data = f"Exectype: {exctype} <--> Value: {value}\n\n{trace}\n\n\n\n"
start_itr = self.message_buffer.get_start_iter()
self.message_buffer.place_cursor(start_itr)
self.display_message(self.error, data)
# print "Handler code goes here"
# else:
# sys.__excepthook__(exctype, value, traceback)
def display_message(self, type, text, seconds=None):
def display_message(self, type, text, seconds=3): # markup = "<span foreground='" + type + "'>" + text + "</span>"
markup = "<span foreground='" + type + "'>" + text + "</span>" # self.message_label.set_markup(markup)
self.message_label.set_markup(markup) self.message_buffer.insert_at_cursor(text)
self.message_widget.popup() self.message_widget.popup()
self.hide_message_timeout(seconds) if seconds:
self.hide_message_timeout(seconds)
@threaded @threaded
def hide_message_timeout(self, seconds=3): def hide_message_timeout(self, seconds=3):

View File

@ -23,7 +23,8 @@ class Controller_Data:
self.window3 = self.builder.get_object("window_3") self.window3 = self.builder.get_object("window_3")
self.window4 = self.builder.get_object("window_4") self.window4 = self.builder.get_object("window_4")
self.message_widget = self.builder.get_object("message_widget") self.message_widget = self.builder.get_object("message_widget")
self.message_label = self.builder.get_object("message_label") self.message_view = self.builder.get_object("message_view")
self.message_buffer = self.builder.get_object("message_buffer")
self.bottom_size_label = self.builder.get_object("bottom_size_label") self.bottom_size_label = self.builder.get_object("bottom_size_label")
self.bottom_file_count_label = self.builder.get_object("bottom_file_count_label") self.bottom_file_count_label = self.builder.get_object("bottom_file_count_label")

View File

@ -9,7 +9,10 @@ from gi.repository import Gtk
class ShowHideMixin: class ShowHideMixin:
def show_about_page(self, widget, eve): def show_messages_popup(self, type, text, seconds=None):
self.message_widget.popup()
def show_about_page(self, widget=None, eve=None):
about_page = self.builder.get_object("about_page") about_page = self.builder.get_object("about_page")
response = about_page.run() response = about_page.run()
if response == -4: if response == -4:

View File

@ -248,9 +248,7 @@ class WidgetFileActionMixin:
if not state: if not state:
raise GObject.GError("Failed to perform requested dir/file action!") raise GObject.GError("Failed to perform requested dir/file action!")
except GObject.GError as e: except GObject.GError as e:
if debug: raise OSError(e)
print(repr(e))
self.display_message(self.error, f"{e.message}")
def preprocess_paths(self, paths): def preprocess_paths(self, paths):
if not isinstance(paths, list): if not isinstance(paths, list):