[go: up one dir, main page]

Menu

[r81]: / editvariable.py  Maximize  Restore  History

Download this file

164 lines (148 with data), 7.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#! /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):
# use parent translator
self._ = parent._
self.parent = parent
self.variable = variable
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title(self._("variable_edit_format").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)
# variable name
hb = gtk.HBox(False)
lbl = gtk.Label(self._('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)
# variable weight
hb = gtk.HBox(False)
lbl = gtk.Label(self._('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)
# levels. treeview is editable
hb = gtk.HBox(False)
lbl = gtk.Label(self._('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,), [self._('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,))
functions.make_scrolling(self.levels_treeview, hb)
# buttons for adding and deleting levels
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 for saving the variables and cancle the changes
button = gtk.Button(None, gtk.STOCK_SAVE)
button.connect('clicked', self.save_clicked)
hb.pack_start(button, False, False)
button = gtk.Button(self._('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):
# reset to the initial value taken from parent
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):
# Save the changes
# variable name can not be empty.
var_name = self.variable_name_entry.get_text()
if len(var_name) == 0:
functions.error_dialog(self.window, self._('statusbar_variable_names_can_not_be_empty').format(var_name), self._('empty_variable_name'))
self.window.set_focus(self.variable_name_entry)
return False
# must be unique
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, self._('statusbar_variable_name_already_in_use').format(var_name), self._('duplicate_variable_name'))
self.window.set_focus(self.variable_name_entry)
return False
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, self._('statusbar_two_variable_levels_required'), self._('insufficient_levels'))
return False
if len(list(set(new_levels))) != len(new_levels):
functions.error_dialog(self.window, self._('duplicate_level_name_msg'), self._('duplicate_level_name'))
return False
self.parent.variable_liststore[self.variable][0] = var_name
self.parent.variable_liststore[self.variable][1] = self.variable_weight_spin.get_value()
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):
# choose a default unique lvel name
n = 0
while True:
level_name = 'Level {0}'.format(n)
for row in range(len(self.levels_liststore)):
if self.levels_liststore[row][0] == level_name:
break
else:
break
n += 1
self.levels_liststore.append((level_name,))
row = len(self.levels_liststore) - 1
self.levels_treeview.scroll_to_cell((row,))
self.levels_treeview.set_cursor((row,),)
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):
if ',' in new_text:
functions.error_dialog(self.window, self._('level_names_not_comma'), self._('level_names_not_comma'))
return False
self.levels_liststore[row][col] = new_text
def close_window(self, widget, data=None):
self.window.destroy()