parent
4c253d6cdc
commit
bc0d2e8e1d
@ -0,0 +1,8 @@ |
|||||||
|
[Desktop Entry] |
||||||
|
Name=Weather Extension Perference |
||||||
|
GenericName=Perference Editor for gnome-shell-extension-weather |
||||||
|
Exec=system-monitor-applet-config |
||||||
|
Terminal=false |
||||||
|
Type=Application |
||||||
|
Icon=utilities-system-monitor |
||||||
|
Categories=GNOME;System; |
@ -0,0 +1,211 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding: utf-8 -*- |
||||||
|
# -*- Mode: Python; py-indent-offset: 4 -*- |
||||||
|
# vim: tabstop=4 shiftwidth=4 expandtab |
||||||
|
|
||||||
|
# weather-extension-configurator: |
||||||
|
# configures gnome-shell-extension-weather by simon04 |
||||||
|
# Copyright (C) 2011 Igor Ingultsov aka inv, aka invy |
||||||
|
# |
||||||
|
# based on a configurator for system-monitor-extension by Florian Mounier aka paradoxxxzero |
||||||
|
|
||||||
|
# This program is free software: you can redistribute it and/or modify |
||||||
|
# it under the terms of the GNU General Public License as published by |
||||||
|
# the Free Software Foundation, either version 3 of the License, or |
||||||
|
# (at your option) any later version. |
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful, |
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
# GNU General Public License for more details. |
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License |
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||||
|
|
||||||
|
# Author: Igor Ingultsov aka inv, aka invy |
||||||
|
|
||||||
|
""" |
||||||
|
gnome-shell-weather-extension-config |
||||||
|
Tool for editing gnome-shell-weather-extension-config preference as |
||||||
|
an alternative of dconf-editor |
||||||
|
|
||||||
|
""" |
||||||
|
|
||||||
|
from gi.repository import Gtk, Gio, Gdk |
||||||
|
|
||||||
|
|
||||||
|
def up_first(string): |
||||||
|
return string[0].upper() + string[1:] |
||||||
|
|
||||||
|
|
||||||
|
class IntSelect: |
||||||
|
def __init__(self, name, value, minv, maxv, incre, page): |
||||||
|
self.label = Gtk.Label(name + ":") |
||||||
|
self.spin = Gtk.SpinButton() |
||||||
|
self.actor = Gtk.HBox() |
||||||
|
self.actor.add(self.label) |
||||||
|
self.actor.add(self.spin) |
||||||
|
self.spin.set_range(minv, maxv) |
||||||
|
self.spin.set_increments(incre, page) |
||||||
|
self.spin.set_numeric(True) |
||||||
|
self.spin.set_value(value) |
||||||
|
|
||||||
|
|
||||||
|
class TextSelect: |
||||||
|
def __init__(self, name, value): |
||||||
|
self.label = Gtk.Label(name + ":") |
||||||
|
self.entry = Gtk.Entry() |
||||||
|
self.actor = Gtk.HBox() |
||||||
|
self.actor.add(self.label) |
||||||
|
self.actor.add(self.entry) |
||||||
|
self.entry.set_text(value) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Select: |
||||||
|
def __init__(self, name, value, items): |
||||||
|
self.label = Gtk.Label(name + ":") |
||||||
|
self.selector = Gtk.ComboBoxText() |
||||||
|
self.actor = Gtk.HBox() |
||||||
|
for item in items: |
||||||
|
self.selector.append_text(item) |
||||||
|
self.selector.set_active(value) |
||||||
|
self.actor.add(self.label) |
||||||
|
self.actor.add(self.selector) |
||||||
|
|
||||||
|
|
||||||
|
def set_boolean(check, schema, name): |
||||||
|
schema.set_boolean(name, check.get_active()) |
||||||
|
|
||||||
|
|
||||||
|
def set_int(spin, schema, name): |
||||||
|
schema.set_int(name, spin.get_value_as_int()) |
||||||
|
return False |
||||||
|
|
||||||
|
def set_text(tb, schema, name): |
||||||
|
schema.set_text(name, tb.get_text()) |
||||||
|
|
||||||
|
def set_enum(combo, schema, name): |
||||||
|
schema.set_enum(name, combo.get_active()) |
||||||
|
|
||||||
|
|
||||||
|
def set_color(cb, schema, name): |
||||||
|
schema.set_string(name, color_to_hex(cb.get_rgba())) |
||||||
|
|
||||||
|
|
||||||
|
class SettingFrame: |
||||||
|
def __init__(self, name, schema): |
||||||
|
self.schema = schema |
||||||
|
self.label = Gtk.Label(name) |
||||||
|
self.frame = Gtk.Frame() |
||||||
|
self.frame.set_border_width(10) |
||||||
|
self.vbox = Gtk.VBox(spacing=20) |
||||||
|
self.hbox0 = Gtk.HBox(spacing=20) |
||||||
|
self.hbox1 = Gtk.HBox(spacing=20) |
||||||
|
self.hbox2 = Gtk.HBox(spacing=20) |
||||||
|
self.frame.add(self.vbox) |
||||||
|
self.vbox.add(self.hbox0) |
||||||
|
self.vbox.add(self.hbox1) |
||||||
|
self.vbox.add(self.hbox2) |
||||||
|
self.items = [] |
||||||
|
|
||||||
|
def add(self, key): |
||||||
|
if key == 'city': |
||||||
|
item = TextSelect('City', |
||||||
|
self.schema.get_string(key)) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox1.add(item.actor) |
||||||
|
item.entry.connect('insert-at-cursor', set_text, self.schema, key) |
||||||
|
elif key == 'woeid': |
||||||
|
item = TextSelect('Enter WOEID', |
||||||
|
self.schema.get_string(key)) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox1.add(item.actor) |
||||||
|
item.entry.connect('insert-at-cursor', set_text, self.schema, key) |
||||||
|
|
||||||
|
elif key == 'position-in-panel': |
||||||
|
item = Select('Position in Panel', |
||||||
|
self.schema.get_enum(key), |
||||||
|
('Center', 'Right')) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox0.add(item.actor) |
||||||
|
item.selector.connect('changed', set_enum, self.schema, key) |
||||||
|
elif key == 'unit': |
||||||
|
item = Select('Units', |
||||||
|
self.schema.get_enum(key), |
||||||
|
('c', 'f')) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox0.add(item.actor) |
||||||
|
item.selector.connect('changed', set_enum, self.schema, key) |
||||||
|
|
||||||
|
elif key == 'show-comment-in-panel': |
||||||
|
item = Gtk.CheckButton(label='Show comment in Panel') |
||||||
|
item.set_active(self.schema.get_boolean(key)) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox1.add(item) |
||||||
|
item.connect('toggled', set_boolean, self.schema, key) |
||||||
|
elif key == 'show-text-in-panel': |
||||||
|
item = Gtk.CheckButton(label='Show text in Panel') |
||||||
|
item.set_active(self.schema.get_boolean(key)) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox1.add(item) |
||||||
|
item.connect('toggled', set_boolean, self.schema, key) |
||||||
|
elif key == 'translate-condition': |
||||||
|
item = Gtk.CheckButton(label='Translate Conditions') |
||||||
|
item.set_active(self.schema.get_boolean(key)) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox1.add(item) |
||||||
|
item.connect('toggled', set_boolean, self.schema, key) |
||||||
|
elif key == 'use-symbolic-icons': |
||||||
|
item = Gtk.CheckButton(label='Use symbolic icons') |
||||||
|
item.set_active(self.schema.get_boolean(key)) |
||||||
|
self.items.append(item) |
||||||
|
self.hbox1.add(item) |
||||||
|
item.connect('toggled', set_boolean, self.schema, key) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class App: |
||||||
|
opt = {} |
||||||
|
setting_items = ('location', 'appearences') |
||||||
|
|
||||||
|
def __init__(self): |
||||||
|
self.schema = Gio.Settings('org.gnome.shell.extensions.weather') |
||||||
|
keys = self.schema.keys() |
||||||
|
self.window = Gtk.Window(title='Weather Extension Configurator') |
||||||
|
self.window.connect('destroy', Gtk.main_quit) |
||||||
|
self.window.set_border_width(10) |
||||||
|
self.items = [] |
||||||
|
self.settings = {} |
||||||
|
for setting in self.setting_items: |
||||||
|
self.settings[setting] = SettingFrame( |
||||||
|
up_first(setting), self.schema) |
||||||
|
|
||||||
|
self.main_vbox = Gtk.VBox(spacing=10) |
||||||
|
self.main_vbox.set_border_width(10) |
||||||
|
self.hbox1 = Gtk.HBox(spacing=20) |
||||||
|
self.hbox1.set_border_width(10) |
||||||
|
self.main_vbox.add(self.hbox1) |
||||||
|
self.window.add(self.main_vbox) |
||||||
|
|
||||||
|
for key in keys: |
||||||
|
sections = key.split('-') |
||||||
|
if sections[0] == 'city' or sections[0] == 'woeid': |
||||||
|
self.settings['location'].add(key) |
||||||
|
else: |
||||||
|
self.settings['appearences'].add(key) |
||||||
|
|
||||||
|
self.notebook = Gtk.Notebook() |
||||||
|
for setting in self.setting_items: |
||||||
|
self.notebook.append_page( |
||||||
|
self.settings[setting].frame, self.settings[setting].label) |
||||||
|
self.main_vbox.add(self.notebook) |
||||||
|
self.window.show_all() |
||||||
|
|
||||||
|
|
||||||
|
def main(): |
||||||
|
App() |
||||||
|
Gtk.main() |
||||||
|
|
||||||
|
if __name__ == '__main__': |
||||||
|
main() |
Loading…
Reference in new issue