Files
DemonEditor/app/ui/dialogs.py

108 lines
2.9 KiB
Python
Raw Normal View History

2017-11-09 19:01:09 +03:00
""" Common module for showing dialogs """
2018-03-06 11:34:06 +03:00
import locale
2017-12-09 16:25:54 +03:00
from enum import Enum
2018-02-18 17:14:02 +03:00
from app.commons import run_idle
2018-03-02 17:06:53 +03:00
from . import Gtk, UI_RESOURCES_PATH, TEXT_DOMAIN
2017-11-09 19:01:09 +03:00
2018-03-11 21:52:10 +03:00
class Action(Enum):
EDIT = 0
ADD = 1
2017-12-09 16:25:54 +03:00
class DialogType(Enum):
INPUT = "input_dialog"
CHOOSER = "path_chooser_dialog"
ERROR = "error_dialog"
QUESTION = "question_dialog"
ABOUT = "about_dialog"
2018-02-18 17:14:02 +03:00
WAIT = "wait_dialog"
class WaitDialog:
def __init__(self, transient):
builder, dialog = get_dialog_from_xml(DialogType.WAIT, transient)
self._dialog = dialog
self._dialog.set_transient_for(transient)
def show(self):
self._dialog.show()
@run_idle
def hide(self):
self._dialog.hide()
2017-12-09 16:25:54 +03:00
def show_dialog(dialog_type: DialogType, transient, text=None, options=None, action_type=None, file_filter=None):
2017-11-09 19:01:09 +03:00
""" Shows dialogs by name """
2018-02-18 17:14:02 +03:00
builder, dialog = get_dialog_from_xml(dialog_type, transient)
2017-11-09 19:01:09 +03:00
2017-12-09 16:25:54 +03:00
if dialog_type is DialogType.CHOOSER and options:
if action_type is not None:
dialog.set_action(action_type)
if file_filter is not None:
dialog.add_filter(file_filter)
2017-12-30 21:51:57 +03:00
2017-12-30 22:58:47 +03:00
path = options.get("data_dir_path")
2017-12-30 21:51:57 +03:00
dialog.set_current_folder(path)
2017-12-09 16:25:54 +03:00
2017-12-08 18:32:28 +03:00
response = dialog.run()
2017-12-09 16:25:54 +03:00
if response == -12: # -12 for fix assertion 'gtk_widget_get_can_default (widget)' failed
if dialog.get_filename():
path = dialog.get_filename()
if action_type is not Gtk.FileChooserAction.OPEN:
path = path + "/"
response = path
2018-03-13 10:42:56 +03:00
dialog.destroy()
2017-12-09 16:25:54 +03:00
2017-12-08 18:32:28 +03:00
return response
2017-11-09 19:01:09 +03:00
2017-12-09 16:25:54 +03:00
if dialog_type is DialogType.INPUT:
2017-11-09 19:01:09 +03:00
entry = builder.get_object("input_entry")
2017-12-19 22:57:04 +03:00
entry.set_text(text if text else "")
2017-11-09 19:01:09 +03:00
response = dialog.run()
txt = entry.get_text()
2018-03-13 10:42:56 +03:00
dialog.destroy()
2017-12-09 16:25:54 +03:00
2017-11-09 19:01:09 +03:00
return txt if response == Gtk.ResponseType.OK else Gtk.ResponseType.CANCEL
if text:
2018-03-06 11:34:06 +03:00
dialog.set_markup(get_message(text))
2017-11-09 19:01:09 +03:00
response = dialog.run()
2018-03-13 10:42:56 +03:00
dialog.destroy()
2017-11-09 19:01:09 +03:00
return response
2018-02-18 17:14:02 +03:00
def get_dialog_from_xml(dialog_type, transient):
builder = Gtk.Builder()
2018-03-02 17:06:53 +03:00
builder.set_translation_domain(TEXT_DOMAIN)
2018-03-13 10:42:56 +03:00
builder.add_objects_from_file(UI_RESOURCES_PATH + "dialogs.glade", (dialog_type.value,))
2018-02-18 17:14:02 +03:00
dialog = builder.get_object(dialog_type.value)
dialog.set_transient_for(transient)
2018-03-13 10:42:56 +03:00
2018-02-18 17:14:02 +03:00
return builder, dialog
2018-01-31 00:13:42 +03:00
def get_chooser_dialog(transient, options, pattern, name):
file_filter = Gtk.FileFilter()
file_filter.add_pattern(pattern)
file_filter.set_name(name)
2018-03-13 10:42:56 +03:00
2018-01-31 00:13:42 +03:00
return show_dialog(dialog_type=DialogType.CHOOSER,
transient=transient,
options=options,
action_type=Gtk.FileChooserAction.OPEN,
file_filter=file_filter)
2018-03-06 11:34:06 +03:00
def get_message(message):
""" returns translated message """
return locale.dgettext(TEXT_DOMAIN, message)
2017-11-09 19:01:09 +03:00
if __name__ == "__main__":
pass