diff --git a/icons/yms.svg b/icons/yms.svg new file mode 100644 index 0000000..35a717a --- /dev/null +++ b/icons/yms.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + diff --git a/yms48.png b/icons/yms48.png similarity index 100% rename from yms48.png rename to icons/yms48.png diff --git a/icons/yms64.png b/icons/yms64.png new file mode 100644 index 0000000..31b56ee Binary files /dev/null and b/icons/yms64.png differ diff --git a/yms.desktop b/yms.desktop new file mode 100644 index 0000000..b1bba6e --- /dev/null +++ b/yms.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Name=YMS +Comment=Yacht Management Software +Exec=/usr/local/bin/yms +Icon=yms +StartupNotify=true +Terminal=false +Type=Application +Categories=Office; +Keywords=Database;Documentation diff --git a/yms.sh b/yms.sh new file mode 100755 index 0000000..1cb43fd --- /dev/null +++ b/yms.sh @@ -0,0 +1,3 @@ +#!/bin/sh +# should be located in /usr/local/bin as yms +exec /usr/bin/python3 /usr/local/lib/yms/ymsgui.py "$@" diff --git a/yms/gtkutils.py b/yms/gtkutils.py index 87d9d80..0a79b18 100644 --- a/yms/gtkutils.py +++ b/yms/gtkutils.py @@ -31,3 +31,41 @@ def init_named_controls(window, builder): continue var = getattr(window, ctrltype[nameparts[0]]) var[nameparts[2]] = widget + +def messagebox(messagetext, symbol=None, title=None, parent=None): + if not symbol: + symbol = Gtk.MessageType.INFO + if parent: + flags = Gtk.DialogFlags.DESTROY_WITH_PARENT + else: + flags = 0 + md = Gtk.MessageDialog(parent=parent, flags=flags, message_type=symbol, buttons=Gtk.ButtonsType.CLOSE) + md.set_markup(messagetext) + if title: + md.set_title(title) + if not parent: + md.set_position(Gtk.WindowPosition.CENTER) + md.run() + md.destroy() + +def questionbox(messagetext, symbol=None, title=None, parent=None): + """ + Ja/Nein-Nachfrage bei wirklich wichtigen Entscheidungen + Die Entscheidung wird als Rückgabewert geliefert: True falls + zugestimmt wurde, False bei Ablehnung + """ + if not symbol: + symbol = Gtk.MessageType.QUESTION + if parent: + flags = Gtk.DialogFlags.DESTROY_WITH_PARENT + else: + flags = 0 + md = Gtk.MessageDialog(parent=parent, flags=flags, message_type=symbol, buttons=Gtk.ButtonsType.YES_NO) + md.set_markup(messagetext) + if title: + md.set_title(title) + if not parent: + md.set_position(Gtk.WindowPosition.CENTER) + response = md.run() + md.destroy() + return response == Gtk.ResponseType.YES diff --git a/ymsgui.py b/ymsgui.py index 34bc679..ddf80d7 100755 --- a/ymsgui.py +++ b/ymsgui.py @@ -110,7 +110,7 @@ class Frontend(): self.window.show_all() Gtk.main() - def user_display(self) + def user_display(self): self.entry['user_login'].set_text(self._user.login) self.entry['user_displayname'].set_text(self._user.displayname) combobox.activate_row(self.combo['user_role'], self._user.role) @@ -132,6 +132,12 @@ class Frontend(): def on_but_user_del_clicked(self, widget): print("Delete user") + answer = gtkutils.questionbox( + _("Delete user!\n" + "Are you sure?" + ), title="YMS") + if answer == False: + return self._user.delete() selection = self.tree['user'].get_selection() model, tree_iter = selection.get_selected() @@ -210,20 +216,6 @@ class Frontend(): def on_destroy(self, widget, data=None): Gtk.main_quit() -def messagebox(messagetext, symbol=None, title=None, parent=None): - if not symbol: - symbol = Gtk.MessageType.INFO - if parent: - symbol |= Gtk.DIALOG_DESTROY_WITH_PARENT - md = Gtk.MessageDialog(parent=parent, flags=0, message_type=symbol, buttons=Gtk.ButtonsType.CLOSE) - md.set_markup(messagetext) - if title: - md.set_title(title) - if not parent: - md.set_position(Gtk.WindowPosition.CENTER) - md.run() - md.destroy() - def create_config(cfgfile): # create inital config file with open(cfgfile, 'w') as fh: @@ -238,6 +230,21 @@ def create_config(cfgfile): os.chmod(cfgfile, 0o600) if __name__ == "__main__": + + dialog = Gtk.MessageDialog( + message_type=Gtk.MessageType.QUESTION, + buttons=Gtk.ButtonsType.YES_NO, + text="Are you sure?" + ) + image = Gtk.Image.new_from_stock( + Gtk.STOCK_DIALOG_QUESTION, + Gtk.IconSize.DIALOG + ) + dialog.set_image(image) + dialog.show_all() + response = dialog.run() + dialog.destroy() + locale.setlocale(locale.LC_ALL, '') gettext.bindtextdomain('ymsgui', 'locale') gettext.textdomain('ymsgui') @@ -246,11 +253,12 @@ if __name__ == "__main__": cfgfile = os.path.expanduser(cfg['cfgfile']) if not config.read(cfgfile): create_config(cfgfile) - messagebox(_("Configuration file '%s' not found.\n" - "Default configuration has been created.\n" - "Please edit that file according to your needs.\n\n" - "Then restart this program." - ) % cfgfile, title="YMS") + gtkutils.messagebox( + _("Configuration file '{}' not found.\n" + "Default configuration has been created.\n" + "Please edit that file according to your needs.\n\n" + "Then restart this program." + ).format(cfgfile), title="YMS") else: cfg['host'] = config.get('DB', 'host') cfg['db'] = config.get('DB', 'db')