#! /usr/bin/env python
# -*- coding: utf-8 -*-
import functions
try:
import pygtk
pygtk.require("2.0")
except:
print("pygtk Not Availible")
sys.exit(1)
try:
import gtk
except:
print("GTK Not Availible")
sys.exit(1)
class EditVariable(object):
def delete_event(self, widget, event):
self.window.destroy()
def __init__(self, parent, variable):
self.parent = parent
self.variable = variable
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Variable edit [{0}]".format(self.parent.variable_liststore[variable][0]))
self.window.connect("delete_event", self.delete_event)
self.window.set_border_width(10)
self.window.set_transient_for(parent.window)
self.window.set_modal(True)
self.window.set_size_request(300, 240)
vb = gtk.VBox(False, spacing=10)
hb = gtk.HBox(False)
lbl = gtk.Label('Variable Name')
hb.pack_start(lbl, False, False)
self.variable_name_entry = gtk.Entry()
self.variable_name_entry.set_text(self.parent.variable_liststore[variable][0])
hb.pack_start(self.variable_name_entry, True, True)
vb.pack_start(hb, False, False)
hb = gtk.HBox(False)
lbl = gtk.Label('Variable Weight')
hb.pack_start(lbl, False, False)
adj = gtk.Adjustment(value=self.parent.variable_liststore[variable][1], lower=0.0, upper=50.0, step_incr=0.01, page_incr=0.1)
self.variable_weight_spin = gtk.SpinButton(adj, digits=2)
hb.pack_start(self.variable_weight_spin, True, True)
vb.pack_start(hb, False, False)
hb = gtk.HBox(False)
lbl = gtk.Label('Variable Levels')
hb.pack_start(lbl, False, False)
vb.pack_start(hb, False, False)
hb = gtk.HBox(False)
self.levels_liststore, self.levels_treeview = functions.make_treeview(
(str,), ['Level Name'],
editable=True, edit_handler=self.levels_cell_edited)
levels = self.parent.variable_liststore[variable][2].split(',')
for level in levels:
self.levels_liststore.append((level,))
hb.pack_start(self.levels_treeview, True, True)
vbuttonbox = gtk.VButtonBox()
vbuttonbox.set_layout(gtk.BUTTONBOX_START)
button = gtk.Button(None, gtk.STOCK_ADD)
button.connect("clicked", self.level_add_button)
vbuttonbox.pack_start(button, False, False)
button = gtk.Button(None, gtk.STOCK_DELETE)
button.connect("clicked", self.level_delete_button)
vbuttonbox.pack_start(button, False, False)
hb.pack_start(vbuttonbox, False, False)
vb.pack_start(hb, False, False)
hb = gtk.HBox(False)
button = gtk.Button(None, gtk.STOCK_SAVE)
button.connect('clicked', self.save_clicked)
hb.pack_start(button, False, False)
button = gtk.Button('Reset')
button.connect('clicked', self.reset_clicked)
hb.pack_start(button, False, False)
button = gtk.Button(None, gtk.STOCK_CANCEL)
button.connect('clicked', self.cancel_clicked)
hb.pack_start(button, False, False)
vb.pack_start(hb, False, False)
self.window.add(vb)
self.window.show_all()
def reset_clicked(self, widget, data=None):
self.variable_name_entry.set_text(self.parent.variable_liststore[self.variable][0])
self.variable_weight_spin.set_value(self.parent.variable_liststore[self.variable][1])
self.levels_liststore.clear()
levels = self.parent.variable_liststore[self.variable][2].split(',')
for level in levels:
self.levels_liststore.append((level,))
def save_clicked(self, widget, data=None):
var_name = self.variable_name_entry.get_text()
if len(var_name) == 0:
functions.error_dialog(self.window, 'Error: Variable name can not be empty!'.format(var_name), 'Empty variable name!')
self.window.set_focus(self.variable_name_entry)
return False
for r in range(len(self.parent.variable_liststore)):
if r != self.variable and var_name == self.parent.variable_liststore[r][0]:
functions.error_dialog(self.window, 'Error: "{0}" variable name already in use! Choose another name!'.format(var_name), 'Duplicate variable name!')
self.window.set_focus(self.variable_name_entry)
return False
self.parent.variable_liststore[self.variable][0] = var_name
self.parent.variable_liststore[self.variable][1] = self.variable_weight_spin.get_value()
new_levels = []
for row in range(len(self.levels_liststore)):
new_levels.append(self.levels_liststore[row][0].strip())
if len(new_levels) < 2:
functions.error_dialog(self.window, 'Error: At least two variable levels should be entered!', 'Insufficient number of levels!')
return False
if len(list(set(new_levels))) != len(new_levels):
functions.error_dialog(self.window, 'Error: Duplicate level name. At least two levels have the same name!', 'Duplicate level names!')
return False
self.parent.variable_liststore[self.variable][2] = ','.join(new_levels)
self.parent.update_interface()
self.window.destroy()
def cancel_clicked(self, widget, data=None):
self.window.destroy()
def level_add_button(self, widget, data=None):
self.levels_liststore.append(('Level {0}'.format(len(self.levels_liststore)),))
def level_delete_button(self, widget, data=None):
if self.levels_treeview.get_cursor()[0]:
row = self.levels_treeview.get_cursor()[0][0]
self.levels_liststore.remove(self.levels_liststore.get_iter(row))
def levels_cell_edited(self, cell, row, new_text, col):
self.levels_liststore[row][col] = new_text
def close_window(self, widget, data=None):
self.window.destroy()