e06d189d6e
git-svn-id: https://samskivert.googlecode.com/svn/trunk@1330 6335cc39-0255-0410-8fd6-9bcaacd3b74c
161 lines
5.4 KiB
Python
161 lines
5.4 KiB
Python
#
|
|
# $Id: properties.py,v 1.3 2003/11/28 21:34:59 mdb Exp $
|
|
#
|
|
# lookuplet - a utility for quickly looking up information
|
|
# Copyright (C) 2001-2002 Michael Bayne
|
|
#
|
|
# 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 2.1 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, write to the Free Software Foundation, Inc.,
|
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
import string
|
|
import re
|
|
|
|
import gobject
|
|
import gtk
|
|
import gtk.gdk
|
|
import gnome.ui
|
|
|
|
import edit_binding
|
|
|
|
class Properties:
|
|
# our configured key bindings
|
|
bindings = None;
|
|
|
|
# the properties panel
|
|
propsPanel = None;
|
|
|
|
# our binding editor
|
|
bindEditor = None;
|
|
|
|
# the bindings model
|
|
bindModel = None;
|
|
|
|
# the edit button
|
|
editButton = None;
|
|
|
|
# the delete button
|
|
deleteButton = None;
|
|
|
|
# the selected binding index
|
|
selection = None;
|
|
|
|
def __init__ (self, xmlui, bindings):
|
|
# keep a handle on our bindings
|
|
self.bindings = bindings;
|
|
|
|
# create our binding editor
|
|
self.bindEditor = edit_binding.BindingEditor(xmlui, self);
|
|
|
|
# get a reference to some widgets
|
|
self.propsPanel = xmlui.get_widget("properties");
|
|
self.editButton = xmlui.get_widget("edit");
|
|
self.deleteButton = xmlui.get_widget("delete");
|
|
|
|
# make our props panel not destroy itself on close
|
|
self.propsPanel.close_hides(gtk.TRUE);
|
|
|
|
# wire up our handlers
|
|
xmlui.signal_connect("on_properties_apply", self.on_properties_apply);
|
|
xmlui.signal_connect("on_add_clicked", self.on_add_clicked);
|
|
xmlui.signal_connect("on_edit_clicked", self.on_edit_clicked);
|
|
xmlui.signal_connect("on_delete_clicked", self.on_delete_clicked);
|
|
|
|
# set up our tree view
|
|
bindList = xmlui.get_widget("bindings");
|
|
renderer = gtk.CellRendererText();
|
|
bindList.append_column(gtk.TreeViewColumn("Key", renderer, text=0));
|
|
bindList.append_column(gtk.TreeViewColumn("Name", renderer, text=1));
|
|
|
|
# create a data model for our bindings list view
|
|
self.bindModel = gtk.ListStore(gobject.TYPE_STRING,
|
|
gobject.TYPE_STRING,
|
|
gobject.TYPE_PYOBJECT);
|
|
|
|
# configure our properties panel with the loaded bindings
|
|
for binding in bindings.bindings:
|
|
iter = self.bindModel.append()
|
|
self.bindModel.set_value(iter, 0, binding.key);
|
|
self.bindModel.set_value(iter, 1, binding.name);
|
|
self.bindModel.set_value(iter, 2, binding);
|
|
|
|
bindList.set_model(self.bindModel);
|
|
|
|
# wire up our selection monitor
|
|
selection = bindList.get_selection();
|
|
selection.connect("changed", self.on_bindings_selection_changed);
|
|
|
|
def editProperties (self):
|
|
self.propsPanel.show();
|
|
return;
|
|
|
|
def updated (self, iter, binding):
|
|
# refresh the display for the specified index
|
|
self.bindModel.set_value(iter, 0, binding.key);
|
|
self.bindModel.set_value(iter, 1, binding.name);
|
|
# and make a note that we've updated ourselves
|
|
self.propsPanel.changed();
|
|
|
|
def created (self, binding):
|
|
# add the new binding to our list
|
|
self.bindings.bindings.append(binding);
|
|
# add it to the display
|
|
iter = self.bindModel.append()
|
|
self.bindModel.set_value(iter, 0, binding.key);
|
|
self.bindModel.set_value(iter, 1, binding.name);
|
|
self.bindModel.set_value(iter, 2, binding);
|
|
# and make a note that we've updated ourselves
|
|
self.propsPanel.changed();
|
|
|
|
def on_bindings_selection_changed (self, selection):
|
|
# make a note of the iterator for the selected binding
|
|
model, self.selection = selection.get_selected();
|
|
|
|
# no ?: notation? egads!
|
|
if (self.selection == None):
|
|
sensitive = gtk.FALSE;
|
|
else:
|
|
sensitive = gtk.TRUE;
|
|
|
|
# enable our buttons
|
|
self.editButton.set_sensitive(sensitive);
|
|
self.deleteButton.set_sensitive(sensitive);
|
|
|
|
# make like they pressed the edit button on a double click
|
|
# if (event.type == gtk.gdk._2BUTTON_PRESS):
|
|
# self.on_edit_clicked(None);
|
|
|
|
def on_properties_apply (self, panel, page):
|
|
if (page == 0):
|
|
self.bindings.flush();
|
|
|
|
def on_add_clicked (self, button):
|
|
# show the binding creation dialog
|
|
self.bindEditor.createBinding();
|
|
return;
|
|
|
|
def on_edit_clicked (self, button):
|
|
# tell the binding editor to edit this binding
|
|
binding = self.bindModel.get_value(self.selection, 2);
|
|
self.bindEditor.editBinding(self.selection, binding);
|
|
return;
|
|
|
|
def on_delete_clicked (self, button):
|
|
# remove the binding from the display and our bindings list
|
|
binding = self.bindModel.get_value(self.selection, 2);
|
|
self.bindModel.remove(self.selection)
|
|
self.bindings.bindings.remove(binding);
|
|
self.selection = None;
|
|
self.propsPanel.changed();
|
|
return;
|