#!/usr/bin/python3

import gi
gi.require_version('Gtk', '3.0')
gi.require_version('XApp', '1.0')
import sys

import gettext
from gi.repository import Gtk, Gio, XApp, Gdk

# i18n
import gettext
gettext.bindtextdomain('nemo-extensions')
gettext.textdomain('nemo-extensions')
_ = gettext.gettext

class LabeledItem(Gtk.Box):
    def __init__(self, label, item):
        super(LabeledItem, self).__init__(orientation=Gtk.Orientation.HORIZONTAL)

        self.label_widget = Gtk.Label(label=label)

        self.pack_start(self.label_widget, False, False, 6)
        self.pack_end(item, False, False, 6)

        self.show_all()

class Page(Gtk.Box):
    def __init__(self):
        super(Page, self).__init__(orientation=Gtk.Orientation.VERTICAL)

        self.set_spacing(15)
        self.set_margin_start(15)
        self.set_margin_end(15)
        self.set_margin_top(15)
        self.set_margin_bottom(15)

class NemoMediaColumnsPreferencesWindow(XApp.PreferencesWindow):
    def __init__(self):
        super(NemoMediaColumnsPreferencesWindow, self).__init__()

        self.set_icon_name("preferences-system")
        self.set_title(_("Nemo Media Columns Preferences"))
        self.set_skip_taskbar_hint(False)
        self.set_type_hint(Gdk.WindowTypeHint.NORMAL)
        self.set_default_size(-1, -1)

        self.connect("destroy", Gtk.main_quit)

        self.settings = Gio.Settings(schema_id="org.nemo.extensions.nemo-media-columns")

        page = Page()

        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        page.add(box)

        switch = Gtk.Switch()
        self.settings.bind("use-timeout",
                           switch, "active",
                           Gio.SettingsBindFlags.DEFAULT)

        widget = LabeledItem(_("Limit processing time for each file"), switch)
        box.pack_start(widget, False, False, 6)

        spinner = Gtk.SpinButton.new_with_range(0.1, 10.0, 0.1)
        spinner.set_digits(1)
        self.settings.bind("timeout",
                           spinner, "value",
                           Gio.SettingsBindFlags.DEFAULT)

        widget = LabeledItem(_("Timeout (in seconds)"), spinner)
        box.pack_start(widget, False, False, 6)

        self.settings.bind("use-timeout",
                           widget, "sensitive",
                           Gio.SettingsBindFlags.DEFAULT)

        self.add_page(page, "main", _("Timeout"))

        self.show_all()

    def quit(self, *args):
        self.destroy()
        Gtk.main_quit()

if __name__ == "__main__":
    import signal
    signal.signal(signal.SIGINT, signal.SIG_DFL)

    window = NemoMediaColumnsPreferencesWindow()

    Gtk.main()
