Mercurial > pyarq-presupuestos
comparison Gtk/gui.py @ 8:55df0b15706b
Docstrings and names in GTK/gui.py
author | Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es> |
---|---|
date | Wed, 17 Nov 2010 21:05:56 +0100 |
parents | 0359329a1c26 |
children | 229986217a3d |
comparison
equal
deleted
inserted
replaced
7:0359329a1c26 | 8:55df0b15706b |
---|---|
30 have 2 viewes represented for the View class or other gtk.Paned that have other | 30 have 2 viewes represented for the View class or other gtk.Paned that have other |
31 viewes or more gtk.Paned. | 31 viewes or more gtk.Paned. |
32 The view can have diferente type of widgets to show the budget information. | 32 The view can have diferente type of widgets to show the budget information. |
33 The DecompositionList class show the decompositon list information of a record | 33 The DecompositionList class show the decompositon list information of a record |
34 The Measure class show the measure information of a record | 34 The Measure class show the measure information of a record |
35 The TextWindow class show the long description of a record | |
36 The Sheet class class show the sheet of condition information of a record | 35 The Sheet class class show the sheet of condition information of a record |
37 | 36 |
38 The views can send signal to the others. | 37 The views can send signal to the others. |
39 All the viewes ordered in panes can be or not be connected to the others, | 38 All the viewes ordered in panes can be or not be connected to the others, |
40 if there are connecteded to the others when the user change the active code in | 39 if there are connecteded to the others when the user change the active code in |
72 # Autodetect desktop | 71 # Autodetect desktop |
73 if globalVars.desktop["autodetect"]: | 72 if globalVars.desktop["autodetect"]: |
74 openwith.autodetect_desktop() | 73 openwith.autodetect_desktop() |
75 print utils.mapping(_("pyArq-Presupuestos running on $1"), | 74 print utils.mapping(_("pyArq-Presupuestos running on $1"), |
76 (globalVars.desktop["desktop"],)) | 75 (globalVars.desktop["desktop"],)) |
76 | |
77 | 77 |
78 class MainWindow(object): | 78 class MainWindow(object): |
79 """gui.MainWindow: | 79 """gui.MainWindow: |
80 | 80 |
81 Description: | 81 Description: |
85 gui.MainWindow() | 85 gui.MainWindow() |
86 Ancestry: | 86 Ancestry: |
87 +-- object | 87 +-- object |
88 +-- MainWindow | 88 +-- MainWindow |
89 Atributes: | 89 Atributes: |
90 "window": Main window widget ("gtk.Window" object) | 90 notebook: Read. notebook widget |
91 pageList: Read. page list | |
92 budgetList: Read. budget list | |
91 Methods: | 93 Methods: |
92 removePage | 94 removePage |
93 getNotebook | |
94 getPageList | |
95 getBudgetList | |
96 """ | 95 """ |
97 # TODO:* Can choose open budget in new window | 96 # TODO:* Can choose open budget in new window |
98 # TODO:* gtk.Action for menu and toolbar | 97 # TODO:* gtk.Action for menu and toolbar |
99 # TODO:* Can choose show more than one notebook in the same window or | 98 # TODO:* Can choose show more than one notebook in the same window or |
100 # TODO: can show basedata notebook in a side pane | 99 # TODO: can show basedata notebook in a side pane |
129 <toolitem action="GoToRoot"/> | 128 <toolitem action="GoToRoot"/> |
130 </toolbar> | 129 </toolbar> |
131 </ui>''' | 130 </ui>''' |
132 | 131 |
133 def __init__(self): | 132 def __init__(self): |
134 """def __init__(self) | 133 """__init__() |
135 | 134 |
136 Initialize the atributes "__budget_list" and "__page_list" without data. | 135 Initialize the atributes "__budget_list" and "__page_list" without data. |
137 Creates the widgets "window" and "__notebook". | 136 Creates the widgets "window" and "__notebook". |
138 | 137 |
138 self.__window: gtk.Window object | |
139 self.__budget_temp_list: Temporal list of budgets | 139 self.__budget_temp_list: Temporal list of budgets |
140 self.__budget_list: List of budgets ("base.Budget" objects) | 140 self.__budget_list: List of budgets ("base.Budget" objects) |
141 self.__page_list: List of pages ("Page" object) | 141 self.__page_list: List of pages ("Page" object) |
142 self.__notebook: Notebook widget ("gtk.Notebook" object) | 142 self.__notebook: Notebook widget ("gtk.Notebook" object) |
143 self.__general_action_group: "General" action group | 143 self.__general_action_group: "General" action group |
145 #TODO: action group for Navigation buttons | 145 #TODO: action group for Navigation buttons |
146 self.__budget_temp_list = [] | 146 self.__budget_temp_list = [] |
147 self.__budget_list = [] | 147 self.__budget_list = [] |
148 self.__page_list = [] | 148 self.__page_list = [] |
149 # Main window | 149 # Main window |
150 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) | 150 self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL) |
151 self.window.set_default_size(771, 570) | 151 self.__window.set_default_size(771, 570) |
152 self.window.set_title("Presupuestos") | 152 self.__window.set_title("Presupuestos") |
153 self.window.set_border_width(0) | 153 self.__window.set_border_width(0) |
154 self.window.connect("destroy", self._destroy) | 154 self.__window.connect("destroy", self._destroy) |
155 self.window.connect("delete_event", self._delete_event) | 155 self.__window.connect("delete_event", self._delete_event) |
156 # Vertical box | 156 # Vertical box |
157 _vbox1 = gtk.VBox(False, 0) | 157 _vbox1 = gtk.VBox(False, 0) |
158 self.window.add(_vbox1) | 158 self.__window.add(_vbox1) |
159 _vbox1.show() | 159 _vbox1.show() |
160 #Uimanager | 160 #Uimanager |
161 _uimanager = gtk.UIManager() | 161 _uimanager = gtk.UIManager() |
162 _accelgroup = _uimanager.get_accel_group() | 162 _accelgroup = _uimanager.get_accel_group() |
163 self.window.add_accel_group(_accelgroup) | 163 self.__window.add_accel_group(_accelgroup) |
164 _general_action_group = gtk.ActionGroup("General") | 164 _general_action_group = gtk.ActionGroup("General") |
165 self.__general_action_group = _general_action_group | 165 self.__general_action_group = _general_action_group |
166 _general_action_group.add_actions( | 166 _general_action_group.add_actions( |
167 [("File", None, _("_File"), None), | 167 [("File", None, _("_File"), None), |
168 ("ImportFiebdc", gtk.STOCK_OPEN, _('_Import Fiebdc'), "", | 168 ("ImportFiebdc", gtk.STOCK_OPEN, _('_Import Fiebdc'), "", |
203 self.__notebook.set_show_tabs(True) | 203 self.__notebook.set_show_tabs(True) |
204 self.__notebook.set_show_border(True) | 204 self.__notebook.set_show_border(True) |
205 self.__notebook.set_scrollable(True) | 205 self.__notebook.set_scrollable(True) |
206 self.__notebook.show() | 206 self.__notebook.show() |
207 self._main() | 207 self._main() |
208 | 208 |
209 def _main(self): | 209 def _main(self): |
210 """def main(self) | 210 """main() |
211 | 211 |
212 Shows window and starts the GTK+ event processing loop. | 212 Shows window and starts the GTK+ event processing loop. |
213 """ | 213 """ |
214 self.window.show() | 214 self.__window.show() |
215 gtk.main() | 215 gtk.main() |
216 | 216 |
217 def _addBudget(self, budget): | 217 def _addBudget(self, budget): |
218 """def _addBudget(self, budget) | 218 """_addBudget(budget) |
219 | 219 |
220 budget: "base.Budget" object | 220 budget: "base.Budget" object |
221 | 221 |
222 Appends a budget in the "__budget_list" | 222 Appends a budget in the "__budget_list" |
223 """ | 223 """ |
226 if _budget in self.__budget_temp_list: | 226 if _budget in self.__budget_temp_list: |
227 self.__budget_temp_list.remove(_budget) | 227 self.__budget_temp_list.remove(_budget) |
228 self.__budget_list.append(_budget) | 228 self.__budget_list.append(_budget) |
229 | 229 |
230 def _appendPage(self): | 230 def _appendPage(self): |
231 """def _appendPage(self) | 231 """_appendPage() |
232 | 232 |
233 Creates a new page (instance of "Page class") from the last budget in | 233 Creates a new page (instance of "Page class") from the last budget in |
234 __budget_list, appends this page in the "__page_list" and shows the | 234 __budget_list, appends this page in the "__page_list" and shows the |
235 page widget in the notebook widget. | 235 page widget in the notebook widget. |
236 """ | 236 """ |
239 self.__notebook.append_page(_page.widget, _page.title) | 239 self.__notebook.append_page(_page.widget, _page.title) |
240 self.__page_list.append(_page) | 240 self.__page_list.append(_page) |
241 | 241 |
242 | 242 |
243 def _menuitemImportFiebdc(self, widget): | 243 def _menuitemImportFiebdc(self, widget): |
244 """def _menuitemImportFiebdc(self, widget) | 244 """_menuitemImportFiebdc(widget) |
245 | 245 |
246 widget: the widget where the event is emitted from | 246 widget: the widget where the event is emitted from |
247 Callback to open a budget file. | 247 Callback to open a budget file. |
248 | 248 |
249 Creates and shows a file selection window to open a budget file. | 249 Creates and shows a file selection window to open a budget file. |
257 _exit_method = _budget_file.cancel | 257 _exit_method = _budget_file.cancel |
258 _file_window = importFiebdc.FileSelectionWindow(self, | 258 _file_window = importFiebdc.FileSelectionWindow(self, |
259 _read_method, _budget, _filename, _exit_method, _filetype) | 259 _read_method, _budget, _filename, _exit_method, _filetype) |
260 | 260 |
261 def _menuitemImportPriceDatabase(self, widget): | 261 def _menuitemImportPriceDatabase(self, widget): |
262 """def _menuitemImportPriceDatabase(self, widget) | 262 """_menuitemImportPriceDatabase(widget) |
263 | 263 |
264 widget: the widget where the event is emitted from | 264 widget: the widget where the event is emitted from |
265 Callback to open a price database file. | 265 Callback to open a price database file. |
266 | 266 |
267 Creates and shows a file selection window to open a price database file. | 267 Creates and shows a file selection window to open a price database file. |
275 _exit_method = _budget_file.cancel | 275 _exit_method = _budget_file.cancel |
276 _file_window = importFiebdc.FileSelectionWindow(self, | 276 _file_window = importFiebdc.FileSelectionWindow(self, |
277 _read_method, _budget, _filename, _exit_method, _filetype) | 277 _read_method, _budget, _filename, _exit_method, _filetype) |
278 | 278 |
279 def _menuitemOpenPriceDatabase(self, widget): | 279 def _menuitemOpenPriceDatabase(self, widget): |
280 """def _menuitemOpenPriceDatabase(self, widget) | 280 """_menuitemOpenPriceDatabase(widget) |
281 | 281 |
282 widget: the widget where the event is emitted from | 282 widget: the widget where the event is emitted from |
283 Callback to open a price database from a durus file. | 283 Callback to open a price database from a durus file. |
284 | 284 |
285 Creates and shows a file selection window to open a durus database | 285 Creates and shows a file selection window to open a durus database |
293 _exit_method = _budget_file.cancel | 293 _exit_method = _budget_file.cancel |
294 _file_window = importFiebdc.FileSelectionWindow(self, | 294 _file_window = importFiebdc.FileSelectionWindow(self, |
295 _read_method, _budget, _filename, _exit_method, _filetype) | 295 _read_method, _budget, _filename, _exit_method, _filetype) |
296 | 296 |
297 def _menuitemClose(self, widget): | 297 def _menuitemClose(self, widget): |
298 """def _menuitemClose(self, widget) | 298 """_menuitemClose(widget) |
299 | 299 |
300 widget: the widget where the event is emitted from | 300 widget: the widget where the event is emitted from |
301 | 301 |
302 Callback to close a budget file. | 302 Callback to close a budget file. |
303 """ | 303 """ |
308 print _("Cancel reading Durus database has not been implemented.") | 308 print _("Cancel reading Durus database has not been implemented.") |
309 else: | 309 else: |
310 _page.close() | 310 _page.close() |
311 | 311 |
312 def removePage(self, page_num): | 312 def removePage(self, page_num): |
313 """def removePage(self, page_num) | 313 """removePage(page_num) |
314 | 314 |
315 page_num: The number Page to be removed | 315 page_num: The number Page to be removed |
316 | 316 |
317 Removes a page from notebook and page_list. | 317 Removes a page from notebook and page_list. |
318 Removes the budget from the budget_list if necessary. | 318 Removes the budget from the budget_list if necessary. |
324 self.__page_list.pop(page_num) | 324 self.__page_list.pop(page_num) |
325 _page.clear() | 325 _page.clear() |
326 self.__notebook.remove_page(page_num) | 326 self.__notebook.remove_page(page_num) |
327 | 327 |
328 def _menuitemGoToRoot(self, widget): | 328 def _menuitemGoToRoot(self, widget): |
329 """def _menuitemGoToRoot(self, widget) | 329 """_menuitemGoToRoot(widget) |
330 | 330 |
331 widget: the widget where the event is emitted from | 331 widget: the widget where the event is emitted from |
332 | 332 |
333 Callback to go to root record. | 333 Callback to go to root record. |
334 """ | 334 """ |
339 if isinstance(_page, Page): | 339 if isinstance(_page, Page): |
340 #not loading budget | 340 #not loading budget |
341 _page.propagateMessageFrom("change_active", (-1,), (0,)) | 341 _page.propagateMessageFrom("change_active", (-1,), (0,)) |
342 | 342 |
343 def _menuitemGoUp(self, widget): | 343 def _menuitemGoUp(self, widget): |
344 """def _menuitemGoUp(self, widget) | 344 """_menuitemGoUp(widget) |
345 | 345 |
346 widget: the widget where the event is emitted from | 346 widget: the widget where the event is emitted from |
347 | 347 |
348 Callback to go to up record. | 348 Callback to go to up record. |
349 """ | 349 """ |
359 if _budget.hasPath(_up_path): | 359 if _budget.hasPath(_up_path): |
360 _page.propagateMessageFrom("change_active", (-1,), | 360 _page.propagateMessageFrom("change_active", (-1,), |
361 _up_path) | 361 _up_path) |
362 | 362 |
363 def _menuitemGoDown(self, widget): | 363 def _menuitemGoDown(self, widget): |
364 """def _menuitemGoToDown(self, widget) | 364 """_menuitemGoToDown(widget) |
365 | 365 |
366 widget: the widget where the event is emitted from | 366 widget: the widget where the event is emitted from |
367 | 367 |
368 Callback to go to down record. | 368 Callback to go to down record. |
369 """ | 369 """ |
379 if _budget.hasPath(_up_path): | 379 if _budget.hasPath(_up_path): |
380 _page.propagateMessageFrom("change_active", (-1,), | 380 _page.propagateMessageFrom("change_active", (-1,), |
381 _up_path) | 381 _up_path) |
382 | 382 |
383 def _menuitemGoPrevious(self, widget): | 383 def _menuitemGoPrevious(self, widget): |
384 """def _menuitemGoPrevious(self, widget) | 384 """_menuitemGoPrevious(widget) |
385 | 385 |
386 widget: the widget where the event is emitted from | 386 widget: the widget where the event is emitted from |
387 | 387 |
388 Callback to go to previous record. | 388 Callback to go to previous record. |
389 """ | 389 """ |
398 if _budget.hasPath(_previous_path): | 398 if _budget.hasPath(_previous_path): |
399 _page.propagateMessageFrom("change_active", (-1,), | 399 _page.propagateMessageFrom("change_active", (-1,), |
400 _previous_path) | 400 _previous_path) |
401 | 401 |
402 def _menuitemGoPosterior(self, widget): | 402 def _menuitemGoPosterior(self, widget): |
403 """def _menuitemPosterior(self, widget) | 403 """_menuitemPosterior(widget) |
404 | 404 |
405 widget: the widget where the event is emitted from | 405 widget: the widget where the event is emitted from |
406 | 406 |
407 Callback to go to posterior record. | 407 Callback to go to posterior record. |
408 """ | 408 """ |
417 if _budget.hasPath(_posterior_path): | 417 if _budget.hasPath(_posterior_path): |
418 _page.propagateMessageFrom("change_active", (-1,), | 418 _page.propagateMessageFrom("change_active", (-1,), |
419 _posterior_path) | 419 _posterior_path) |
420 | 420 |
421 def _delete_event(self, widget, event): | 421 def _delete_event(self, widget, event): |
422 """_delete_event(self, widget, event) | 422 """_delete_event(widget, event) |
423 | 423 |
424 widget: the widget where the event is emitted from | 424 widget: the widget where the event is emitted from |
425 event: the "gtk.gdk.Event" | 425 event: the "gtk.gdk.Event" |
426 | 426 |
427 Method connected to "delete_event" signal of main window widget | 427 Method connected to "delete_event" signal of main window widget |
431 for _page in self.__page_list: | 431 for _page in self.__page_list: |
432 _page.clear() | 432 _page.clear() |
433 return False # -> destroy | 433 return False # -> destroy |
434 | 434 |
435 def _destroy(self, widget): | 435 def _destroy(self, widget): |
436 """_destroy(self, widget) | 436 """_destroy(widget) |
437 | 437 |
438 widget: the widget where the event is emitted from | 438 widget: the widget where the event is emitted from |
439 Method connected to "destroy" signal of main window widget | 439 Method connected to "destroy" signal of main window widget |
440 | 440 |
441 This signal is emited when the method connected to "delete_event" | 441 This signal is emited when the method connected to "delete_event" |
443 the gtk.Window widget. | 443 the gtk.Window widget. |
444 The window is closed and the GTK+ event processing loop is ended. | 444 The window is closed and the GTK+ event processing loop is ended. |
445 """ | 445 """ |
446 gtk.main_quit() | 446 gtk.main_quit() |
447 | 447 |
448 def getNotebook(self): | 448 def _getNotebook(self): |
449 """def getNotebook(self) | 449 """_getNotebook() |
450 | 450 |
451 Return the notebook widget | 451 Return the notebook widget |
452 """ | 452 """ |
453 return self.__notebook | 453 return self.__notebook |
454 | 454 |
455 def getPageList(self): | 455 def _getPageList(self): |
456 """def getPageList(self) | 456 """_getPageList() |
457 | 457 |
458 Return the page list | 458 Return the page list |
459 """ | 459 """ |
460 return self.__page_list | 460 return self.__page_list |
461 | 461 |
462 def getBudgetList(self): | 462 def _getBudgetList(self): |
463 """def getBudgetList(self) | 463 """_getBudgetList() |
464 | 464 |
465 Return the budget list | 465 Return the budget list |
466 """ | 466 """ |
467 return self.__budget_list | 467 return self.__budget_list |
468 | |
469 notebook = property(_getNotebook, None, None, | |
470 "notebook object") | |
471 pageList = property(_getPageList, None, None, | |
472 "Page list") | |
473 budgetList = property(_getBudgetList, None, None, | |
474 "Budget list") | |
475 | |
468 | 476 |
469 class EmptyPage(object): | 477 class EmptyPage(object): |
470 """gui.EmptyPage: | 478 """gui.EmptyPage: |
471 | 479 |
472 Description: | 480 Description: |
473 It creates and shows a page in the notebook while a budget is loaded. | 481 It creates and shows a page in the notebook while a budget is loaded. |
474 The page show the pyarq logo, loading time and a progress bar. | 482 The page show the pyarq logo, loading time and a progress bar. |
475 Constructor: | 483 Constructor: |
476 gui.EmptyPage(self, mainWindow, readFileMethod, budget, filename, | 484 gui.EmptyPage(mainWindow, readFileMethod, budget, filename, |
477 cancelMethod, filetype): | 485 cancelMethod, filetype): |
486 mainWindow: gui.Mainwindow object | |
487 readFileMethod: Method to read the selected file | |
488 budget: base.Budget object | |
489 filename: "file" | |
490 cancelMethod: Method to cancel the read method | |
491 filetype: "budget", "database" or "durus" | |
478 Ancestry: | 492 Ancestry: |
479 +-- object | 493 +-- object |
480 +-- EmptyPage | 494 +-- EmptyPage |
481 Atributes: | 495 Atributes: |
482 __mainWindow: gui.Mainwindow object | 496 widget: Read. Main widget showed in the pane |
483 __readFileMethod: Method to read the selected file | 497 title: Read. Page Title |
484 __budget: base.Budget object | 498 filetype: Read. budget, basedata or durus |
485 __filename: "file" | |
486 __cancelMethod: Method to cancel the read method | |
487 __filetype: "budget", "database" or "durus" | |
488 __children: the read thread | |
489 __progress: 0 to 1 progress | |
490 __widget: main widget, a gtk.VBox object | |
491 __main_item: None | |
492 __throbber: a gtk.Image | |
493 __animationThobber: a gtk.gdk.PixbufAnimation | |
494 __quietThobber: a pixbuf | |
495 __budget_icon: a gtk.gdk.pixbuf | |
496 __title: a gtk.HBox | |
497 __statusbar: a gtk.Statusbar | |
498 __statuscontext: the statusbar context | |
499 __progress_bar: a gtk.ProgressBar | |
500 | |
501 Methods: | 499 Methods: |
502 __init__ | |
503 run | 500 run |
504 progress | 501 progress |
505 stopLoading | 502 stopLoading |
506 _launchChildren | |
507 _launchTimeout | |
508 _updateProgressBar | |
509 _updateLabel | |
510 _autoClose | |
511 threadFinishedSignal | 503 threadFinishedSignal |
512 threadCanceled | 504 threadCanceled |
513 close | 505 close |
514 clear | 506 clear |
515 getWidget | |
516 getTitle | |
517 getFiletype | |
518 """ | 507 """ |
508 | |
519 def __init__(self, mainWindow, readFileMethod, budget, filename, | 509 def __init__(self, mainWindow, readFileMethod, budget, filename, |
520 cancelMethod, filetype): | 510 cancelMethod, filetype): |
521 """def __init__(self, mainWindow, readFileMethod, budget, filename, | 511 """__init__(mainWindow, readFileMethod, budget, filename, |
522 cancelMethod, filetype) | 512 cancelMethod, filetype) |
523 | 513 |
524 mainWindow: gui.Mainwindow object | 514 mainWindow: gui.Mainwindow object |
525 readFileMethod: Method to read the selected file | 515 readFileMethod: Method to read the selected file |
526 budget: base.Budget object | 516 budget: base.Budget object |
527 filename: "file" | 517 filename: "file" |
528 cancelMethod: Method to cancel the read method | 518 cancelMethod: Method to cancel the read method |
529 filetype: "budget", "database" or "durus" | 519 filetype: "budget", "database" or "durus" |
520 | |
521 self.__mainWindow: gui.Mainwindow object | |
522 self.__readFileMethod: Method to read the selected file | |
523 self.__budget: base.Budget object | |
524 self.__filename: "file" | |
525 self.__cancelMethod: Method to cancel the read method | |
526 self.__filetype: "budget", "database" or "durus" | |
527 self.__children: the read thread | |
528 self.__progress: 0 to 1 progress | |
529 self.__widget: main widget, a gtk.VBox object | |
530 self.__main_item: None | |
531 self.__throbber: a gtk.Image | |
532 self.__animationThobber: a gtk.gdk.PixbufAnimation | |
533 self.__quietThobber: a pixbuf | |
534 self.__budget_icon: a gtk.gdk.pixbuf | |
535 self.__title: a gtk.HBox | |
536 self.__statusbar: a gtk.Statusbar | |
537 self.__statuscontext: the statusbar context | |
538 self.__progress_bar: a gtk.ProgressBar | |
530 """ | 539 """ |
531 self.__mainWindow = mainWindow | 540 self.__mainWindow = mainWindow |
532 self.__readFileMethod = readFileMethod | 541 self.__readFileMethod = readFileMethod |
533 self.__budget = budget | 542 self.__budget = budget |
534 self.__filename = filename | 543 self.__filename = filename |
584 self.__statusbar.pack_start(_progressframe, False, False, 0) | 593 self.__statusbar.pack_start(_progressframe, False, False, 0) |
585 self.__widget.pack_end(self.__statusbar, False, True, 0) | 594 self.__widget.pack_end(self.__statusbar, False, True, 0) |
586 self.__main_item = None | 595 self.__main_item = None |
587 | 596 |
588 def run(self): | 597 def run(self): |
598 """run() | |
599 | |
600 Launch clildren and timeouts | |
601 """ | |
589 self.__statusbar.push(self.__statuscontext, _("Time: 0s")) | 602 self.__statusbar.push(self.__statuscontext, _("Time: 0s")) |
590 self.__throbber.set_from_animation(self.__animationThobber) | 603 self.__throbber.set_from_animation(self.__animationThobber) |
591 self._launchChildren() | 604 self._launchChildren() |
592 self._launchTimeout() | 605 self._launchTimeout() |
593 | 606 |
594 def progress(self, percent): | 607 def progress(self, percent): |
608 """progress(percent) | |
609 | |
610 percent: Percentage executed. | |
611 | |
612 Sets progress | |
613 """ | |
595 _progress = str(int(round(100 * percent,0))) | 614 _progress = str(int(round(100 * percent,0))) |
596 self.__progress = percent | 615 self.__progress = percent |
597 | 616 |
598 def stopLoading(self): | 617 def stopLoading(self): |
618 """stopLoading() | |
619 | |
620 Stop progressbar | |
621 """ | |
599 self.__throbber.set_from_pixbuf(self.__budget_icon) | 622 self.__throbber.set_from_pixbuf(self.__budget_icon) |
600 self.__progress_bar.hide() | 623 self.__progress_bar.hide() |
601 self.__statusbar.pop(self.__statuscontext) | 624 self.__statusbar.pop(self.__statuscontext) |
602 | 625 |
603 def _launchChildren(self): | 626 def _launchChildren(self): |
604 """_launchChildren(self) | 627 """_launchChildren() |
605 | 628 |
606 Launch the thread to read the file | 629 Launch the thread to read the file |
607 """ | 630 """ |
608 if self.__children is None: | 631 if self.__children is None: |
609 self.__children = importFiebdc.Thread(self, self.__mainWindow, | 632 self.__children = importFiebdc.Thread(self, self.__mainWindow, |
610 self.__readFileMethod, self.__budget, self.__filename, | 633 self.__readFileMethod, self.__budget, self.__filename, |
611 self.__cancelMethod, self.__filetype) | 634 self.__cancelMethod, self.__filetype) |
612 self.__children.start() | 635 self.__children.start() |
613 | 636 |
614 def _launchTimeout(self): | 637 def _launchTimeout(self): |
615 """def _launchTimeout(self) | 638 """_launchTimeout() |
616 | 639 |
617 Launch the timeouts: | 640 Launch the timeouts: |
618 1- update progress bar | 641 1- update progress bar |
619 2- update time label | 642 2- update time label |
620 3- If the other timetouts are stoped the window is closed | 643 3- If the other timetouts are stoped the window is closed |
626 else: | 649 else: |
627 self.__cancel = [True, False] | 650 self.__cancel = [True, False] |
628 gobject.timeout_add(1000, self._autoClose) | 651 gobject.timeout_add(1000, self._autoClose) |
629 | 652 |
630 def _updateProgressBar(self): | 653 def _updateProgressBar(self): |
631 """def _updateProgressBar(self) | 654 """_updateProgressBar() |
632 | 655 |
633 update progress bar in a timeout | 656 update progress bar in a timeout |
634 If the thread end or is canceled the timeout is stoped | 657 If the thread end or is canceled the timeout is stoped |
635 """ | 658 """ |
636 if self.__children is None or self.__children.isCanceled() == True: | 659 if self.__children is None or self.__children.isCanceled() == True: |
641 _text = "%s%%" %str(int(round(100 * self.__progress,0))) | 664 _text = "%s%%" %str(int(round(100 * self.__progress,0))) |
642 self.__progress_bar.set_text(_text) | 665 self.__progress_bar.set_text(_text) |
643 return True | 666 return True |
644 | 667 |
645 def _updateLabel(self, _time): | 668 def _updateLabel(self, _time): |
646 """def _updateProgressBar(self) | 669 """_updateProgressBar(_time) |
647 | 670 |
648 update time label in a timeout | 671 update time label in a timeout |
649 If the thread end or is canceled the timeout is stoped | 672 If the thread end or is canceled the timeout is stoped |
650 """ | 673 """ |
651 if self.__children is None or self.__children.isCanceled() == True: | 674 if self.__children is None or self.__children.isCanceled() == True: |
657 self.__statusbar.pop(self.__statuscontext) | 680 self.__statusbar.pop(self.__statuscontext) |
658 self.__statusbar.push(self.__statuscontext, _text) | 681 self.__statusbar.push(self.__statuscontext, _text) |
659 return True | 682 return True |
660 | 683 |
661 def _autoClose(self): | 684 def _autoClose(self): |
662 """def _updateProgressBar(self) | 685 """_updateProgressBar() |
663 | 686 |
664 If the time label and progress bar timeouts are stoped the window is | 687 If the time label and progress bar timeouts are stoped the window is |
665 closed and ist tiemeout is stoped | 688 closed and ist tiemeout is stoped |
666 """ | 689 """ |
667 if self.__cancel == [ True, True ]: | 690 if self.__cancel == [ True, True ]: |
668 return False | 691 return False |
669 else: | 692 else: |
670 return True | 693 return True |
671 | 694 |
672 def threadFinishedSignal(self, budget): | 695 def threadFinishedSignal(self, budget): |
673 """def closeWindow(self) | 696 """threadFinishedSignal(budget) |
674 | 697 |
675 Sets the __children atribute to None | 698 Sets the self.__children to None |
676 This causes that the timeouts is ended. | 699 This causes that the timeouts is ended. |
677 This method is called from thread when it is finished | 700 This method is called from thread when it finish |
678 """ | 701 """ |
679 self.__budget = budget | 702 self.__budget = budget |
680 self.__children = None | 703 self.__children = None |
681 self.stopLoading() | 704 self.stopLoading() |
682 _page = Page(self.__mainWindow, self.__budget) | 705 _page = Page(self.__mainWindow, self.__budget) |
683 _children = self.__widget.get_children() | 706 _children = self.__widget.get_children() |
684 for _child in _children: | 707 for _child in _children: |
685 self.__widget.remove(_child) | 708 self.__widget.remove(_child) |
686 self.__widget.pack_start(_page.widget, True, True, 0) | 709 self.__widget.pack_start(_page.widget, True, True, 0) |
687 _noteBook = self.__mainWindow.getNotebook() | 710 _noteBook = self.__mainWindow.notebook |
688 _pageIndex = _noteBook.page_num(self.__widget) | 711 _pageIndex = _noteBook.page_num(self.__widget) |
689 self.__mainWindow.getPageList()[_pageIndex] = _page | 712 self.__mainWindow.pageList[_pageIndex] = _page |
713 | |
690 def threadCanceled(self): | 714 def threadCanceled(self): |
691 """def threadCanceled(self) | 715 """threadCanceled() |
692 | 716 |
693 Sets the __children atribute to None | 717 Sets the __children atribute to None |
694 This causes that the timeouts is ended. | 718 This causes that the timeouts is ended. |
695 This method is called from thread when is canceled | 719 This method is called from thread when is canceled |
696 TODO: it must called threadFinished or somethig | 720 TODO: it must called threadFinished or somethig |
697 """ | 721 """ |
698 self.__children = None | 722 self.__children = None |
699 self.stopLoading() | 723 self.stopLoading() |
700 _page_num = self.__mainWindow.getNotebook().page_num(self.widget) | 724 _page_num = self.__mainWindow.notebook.page_num(self.widget) |
701 self.__mainWindow.removePage(_page_num) | 725 self.__mainWindow.removePage(_page_num) |
726 | |
702 def close(self): | 727 def close(self): |
703 """def close(self) | 728 """close() |
704 | 729 |
705 Clos page canceling children | 730 Close page canceling children |
706 """ | 731 """ |
707 self.__children.cancel() | 732 self.__children.cancel() |
733 | |
708 def clear(self): | 734 def clear(self): |
709 """def clear(self) | 735 """clear() |
710 | 736 |
711 clear vars | 737 clear vars |
712 """ | 738 """ |
713 pass | 739 pass |
714 | 740 |
715 def getWidget(self): | 741 def _getWidget(self): |
716 """def getWidget(self) | 742 """_getWidget() |
717 | 743 |
718 Return de main widget to show in the page | 744 Return de main widget to show in the page |
719 """ | 745 """ |
720 return self.__widget | 746 return self.__widget |
721 | 747 |
722 def getTitle(self): | 748 def _getTitle(self): |
723 """def getTitle(self) | 749 """_getTitle() |
724 | 750 |
725 Return the title of the page, a gtk.Label objetc | 751 Return the title of the page, a gtk.Label objetc |
726 """ | 752 """ |
727 return self.__title | 753 return self.__title |
728 def getFiletype(self): | 754 |
729 """def getFiletipe(self) | 755 def _getFiletype(self): |
756 """_getFiletipe() | |
730 | 757 |
731 Return the title of the page, a gtk.Label objetc | 758 Return the title of the page, a gtk.Label objetc |
732 """ | 759 """ |
733 return self.__filetype | 760 return self.__filetype |
734 | 761 |
735 widget = property(getWidget, None, None, | 762 widget = property(_getWidget, None, None, |
736 "Main widget showed in the pane") | 763 "Main widget showed in the pane") |
737 title = property(getTitle, None, None, | 764 title = property(_getTitle, None, None, |
738 "Page Title") | 765 "Page Title") |
739 filetype = property(getFiletype, None, None, | 766 filetype = property(_getFiletype, None, None, |
740 "Filetype: budget, basedata or durus") | 767 "Filetype: budget, basedata or durus") |
768 | |
741 | 769 |
742 class Page(object): | 770 class Page(object): |
743 """gui.Page: | 771 """gui.Page: |
744 | 772 |
745 Description: | 773 Description: |
753 active_code: Active record code | 781 active_code: Active record code |
754 Ancestry: | 782 Ancestry: |
755 +-- object | 783 +-- object |
756 +-- Page | 784 +-- Page |
757 Atributes: | 785 Atributes: |
758 "widget": Read. Notebook page Widget. (a gtk.VBox instance) | 786 widget: Read. Notebook page Widget. (a gtk.VBox instance) |
759 "budget": Read-Write. Budget to show in the page. (base.obra object) | 787 budget: Read-Write. Budget to show in the page. (base.obra object) |
760 "panes_list": Read. info list for create the panes | 788 panes_list: Read. info list for create the panes |
761 ej: [ "v", pane1, pane2 ] , [ "h", pane1, pane2 ] | 789 ej: [ "v", pane1, pane2 ] , [ "h", pane1, pane2 ] |
762 [ "v", [ "h", pane1, pane2 ], [ "h", pane1, pane2 ] ] | 790 [ "v", [ "h", pane1, pane2 ], [ "h", pane1, pane2 ] ] |
763 pane types: | 791 pane types: |
764 * "DecompositionList": its creates a "DecompositionList" object | 792 * "DecompositionList": its creates a "DecompositionList" object |
765 * "RecordDescription" : its creates a "Description" objetc | 793 * "RecordDescription" : its creates a "Description" objetc |
766 * "Measure": its creates a "Measure" objetc | 794 * "Measure": its creates a "Measure" objetc |
767 * "FileView": its creates a "FileView" objet | 795 * "FileView": its creates a "FileView" objet |
768 * "CompanyView": its creates a "CompanyView" object | 796 * "CompanyView": its creates a "CompanyView" object |
769 "title": Read. Notebook page title (gtk.Label object) | 797 title: Read. Notebook page title (gtk.Label object) |
770 "activePathRecord": Read. The active path record | 798 activePathRecord: Read. The active path record |
771 "previousPathRecord": Read. The previous path record | 799 previousPathRecord: Read. The previous path record |
772 "posteriorPathRecord" Read. The posterior path record | 800 posteriorPathRecord Read. The posterior path record |
773 Methods: | 801 Methods: |
774 propagateMessageFrom | 802 propagateMessageFrom |
775 sendMessageTo | 803 sendMessageTo |
776 close | 804 close |
777 clear | 805 clear |
781 # TODO: * Panes in windows | 809 # TODO: * Panes in windows |
782 # TODO: * pane types | 810 # TODO: * pane types |
783 # TODO: * General budget properties (is better a dialog?) | 811 # TODO: * General budget properties (is better a dialog?) |
784 | 812 |
785 def __init__(self, mainWindow, budget, path_record=(0,)): | 813 def __init__(self, mainWindow, budget, path_record=(0,)): |
786 """def __init__(self, budget=None, active_code=None) | 814 """__init__(mainWindow, budget, path_record=(0,)) |
787 | 815 |
788 mainWindow: MainWindow object | 816 mainWindow: MainWindow object |
789 budget: "base.Budget" object | 817 budget: "base.Budget" object |
790 path_record: the active path record | 818 path_record: the active path record |
791 """ | 819 """ |
796 "RecordDescription" ]] | 824 "RecordDescription" ]] |
797 self.__main_item = None | 825 self.__main_item = None |
798 self.__active_path_record = () | 826 self.__active_path_record = () |
799 self.__history_back = [] | 827 self.__history_back = [] |
800 self.__history_forward = [] | 828 self.__history_forward = [] |
801 self.setBudget(budget) | 829 self.budget = budget |
802 self._setActivePathRecord(path_record) | 830 self._setActivePathRecord(path_record) |
803 self.__widget.show() | 831 self.__widget.show() |
804 | 832 |
805 def propagateMessageFrom(self, message, pane_path, arg=None): | 833 def propagateMessageFrom(self, message, pane_path, arg=None): |
806 """def propagateMessageFrom(self, message, pane_path, arg=None) | 834 """propagateMessageFrom(message, pane_path, arg=None) |
807 | 835 |
808 message: string message | 836 message: string message |
809 * "change_active": change active code | 837 * "change_active": change active code |
810 * "autoclose" | 838 * "autoclose" |
811 * "split h" | 839 * "split h" |
824 self._closeItem(pane_path) | 852 self._closeItem(pane_path) |
825 elif message == "split h": | 853 elif message == "split h": |
826 self._splitItem(pane_path, "h") | 854 self._splitItem(pane_path, "h") |
827 elif message == "split v": | 855 elif message == "split v": |
828 self._splitItem(pane_path, "v") | 856 self._splitItem(pane_path, "v") |
829 | 857 |
830 def sendMessageTo(self, pane, message, pane_path, arg=None): | 858 def sendMessageTo(self, pane, message, pane_path, arg=None): |
831 """def sendMessageTo(self, pane, message, pane_path, arg=None) | 859 """sendMessageTo(pane, message, pane_path, arg=None) |
832 pane: the receiver pane | 860 pane: the receiver pane |
833 message: string message | 861 message: string message |
834 pane_path: tuple that represents the pane pane_path which emits the message | 862 pane_path: tuple that represents the pane pane_path which emits the message |
835 arg: arguments for the message | 863 arg: arguments for the message |
836 | 864 |
838 """ | 866 """ |
839 if not pane.path == pane_path: | 867 if not pane.path == pane_path: |
840 pane.runMessage(message, pane_path, arg) | 868 pane.runMessage(message, pane_path, arg) |
841 | 869 |
842 def close(self): | 870 def close(self): |
843 """def close(self) | 871 """close() |
844 | 872 |
845 Close Page | 873 Close Page |
846 """ | 874 """ |
847 _page_list = self.__mainWindow.getPageList() | 875 _page_list = self.__mainWindow.pageList |
848 if self in _page_list: | 876 if self in _page_list: |
849 _page_num = _page_list.index(self) | 877 _page_num = _page_list.index(self) |
850 self.__mainWindow.removePage(_page_num) | 878 self.__mainWindow.removePage(_page_num) |
851 else: | 879 else: |
852 raise IndexError, _("The page is not in the page list") | 880 raise IndexError, _("The page is not in the page list") |
853 | 881 |
854 def clear(self): | 882 def clear(self): |
855 """def clear(self) | 883 """clear() |
856 | 884 |
857 Clear atributes | 885 Clear atributes |
858 """ | 886 """ |
859 self.propagateMessageFrom("clear", (0,)) | 887 self.propagateMessageFrom("clear", (0,)) |
860 | 888 |
863 del self.__widget | 891 del self.__widget |
864 del self.__title | 892 del self.__title |
865 del self.__active_path_record | 893 del self.__active_path_record |
866 del self.__main_item | 894 del self.__main_item |
867 | 895 |
868 def getItem(self,pane_path): | 896 def getItem(self, pane_path): |
869 """def getItem(self, pane_path) | 897 """getItem(pane_path) |
870 | 898 |
871 Return the item whith the path "pane_path", it can return a Paned | 899 Return the item whith the path "pane_path", it can return a Paned |
872 instance or a View instance | 900 instance or a View instance |
873 """ | 901 """ |
874 _item = self.__main_item | 902 _item = self.__main_item |
876 return _item | 904 return _item |
877 else: | 905 else: |
878 return _item.getItem(pane_path[1:]) | 906 return _item.getItem(pane_path[1:]) |
879 | 907 |
880 def _setMainItem(self, item): | 908 def _setMainItem(self, item): |
881 """_setMainItem(self,item) | 909 """_setMainItem(item) |
882 | 910 |
883 Sets a new main item in the page | 911 Sets a new main item in the page |
884 """ | 912 """ |
885 if not self.__main_item is None: | 913 if not self.__main_item is None: |
886 _old_main_widget = self.__main_item.widget | 914 _old_main_widget = self.__main_item.widget |
889 _main_widget = self.__main_item.widget | 917 _main_widget = self.__main_item.widget |
890 _main_widget.show() | 918 _main_widget.show() |
891 self.__widget.pack_start(_main_widget, True, True, 0) | 919 self.__widget.pack_start(_main_widget, True, True, 0) |
892 | 920 |
893 def _splitItem(self, pane_path, orientation): | 921 def _splitItem(self, pane_path, orientation): |
894 """_splitItem(self, pane_path, orientation) | 922 """_splitItem(pane_path, orientation) |
895 | 923 |
896 Splits the item that is identifies by the pane_path and the orientation | 924 Splits the item that is identifies by the pane_path and the orientation |
897 """ | 925 """ |
898 _item = self.getItem(pane_path) | 926 _item = self.getItem(pane_path) |
899 _parent = self.getItem(pane_path[:-1]) | 927 _parent = self.getItem(pane_path[:-1]) |
900 _item.setPath(pane_path+ (0,)) | 928 _item.path = pane_path + (0,) |
901 _item_clone0 = _item.getClone(pane_path + (0,)) | 929 _item_clone0 = _item.getClone(pane_path + (0,)) |
902 _item_clone1 = _item.getClone(pane_path + (1,)) | 930 _item_clone1 = _item.getClone(pane_path + (1,)) |
903 _paned = Paned(orientation, pane_path, _item_clone0, _item_clone1) | 931 _paned = Paned(orientation, pane_path, _item_clone0, _item_clone1) |
904 if len(pane_path) > 1: | 932 if len(pane_path) > 1: |
905 _parent.setItem(pane_path[-1], [_paned]) | 933 _parent.setItem(pane_path[-1], [_paned]) |
906 else: | 934 else: |
907 self._setMainItem(_paned) | 935 self._setMainItem(_paned) |
908 | 936 |
909 def _closeItem(self, pane_path): | 937 def _closeItem(self, pane_path): |
910 """_closeItem(self, pane_path) | 938 """_closeItem(pane_path) |
911 | 939 |
912 Closes the item that is identifies by the pane_path | 940 Closes the item that is identifies by the pane_path |
913 """ | 941 """ |
914 _item = self.getItem(pane_path) | 942 _item = self.getItem(pane_path) |
915 if len(pane_path) > 1: | 943 if len(pane_path) > 1: |
936 else: | 964 else: |
937 # Thre is only one item in the page, it can not be closed | 965 # Thre is only one item in the page, it can not be closed |
938 pass | 966 pass |
939 | 967 |
940 def _itemsFactory(self, list_paned, pane_path=(0,)): | 968 def _itemsFactory(self, list_paned, pane_path=(0,)): |
941 """def _itemsFactory(self, list_paned, pane_path(0,)) | 969 """_itemsFactory(list_paned, pane_path(0,)) |
942 | 970 |
943 list_paned: list in "__panes_list" format | 971 list_paned: list in "__panes_list" format |
944 [ "v" or "h", panel1_type, panel2_type] | 972 [ "v" or "h", panel1_type, panel2_type] |
945 which contains the info for create the widgets. | 973 which contains the info for create the widgets. |
946 panel types: | 974 panel types: |
989 raise ValueError, utils.mapping(_("Incorrect item $1"), | 1017 raise ValueError, utils.mapping(_("Incorrect item $1"), |
990 (str(list_paned[0]),)) | 1018 (str(list_paned[0]),)) |
991 return _item | 1019 return _item |
992 | 1020 |
993 def _setActivePathRecord(self, path_record): | 1021 def _setActivePathRecord(self, path_record): |
994 """def _setActivePathRecord(self, path_record) | 1022 """_setActivePathRecord(path_record) |
995 | 1023 |
996 path_record: the active record path | 1024 path_record: the active record path |
997 | 1025 |
998 Sets the active record path | 1026 Sets the active record path |
999 """ | 1027 """ |
1002 self.__active_path_record = path_record | 1030 self.__active_path_record = path_record |
1003 self._appendHistory(path_record) | 1031 self._appendHistory(path_record) |
1004 else: | 1032 else: |
1005 raise ValueError, utils.mapping(_("The budget does not have "\ | 1033 raise ValueError, utils.mapping(_("The budget does not have "\ |
1006 "the path record: $1"), (str(path_record),)) | 1034 "the path record: $1"), (str(path_record),)) |
1035 | |
1007 def _appendHistory(self, path): | 1036 def _appendHistory(self, path): |
1008 """def _appendHistory(self, path)) | 1037 """_appendHistory(path)) |
1009 | 1038 |
1010 path: the old active path record | 1039 path: the old active path record |
1011 | 1040 |
1012 Sets the old active path record | 1041 Sets the old active path record |
1013 """ | 1042 """ |
1026 self.__history_forward[:] = [] | 1055 self.__history_forward[:] = [] |
1027 self.__history_back.append(path) | 1056 self.__history_back.append(path) |
1028 if len(self.__history_back) > 1000: | 1057 if len(self.__history_back) > 1000: |
1029 self.__history_back.pop(0) | 1058 self.__history_back.pop(0) |
1030 | 1059 |
1031 def getActivePathRecord(self): | 1060 def _getActivePathRecord(self): |
1032 """def getActivePathRecord(self) | 1061 """_getActivePathRecord() |
1033 | 1062 |
1034 Return the Active Path Record | 1063 Return the Active Path Record |
1035 """ | 1064 """ |
1036 return self.__active_path_record | 1065 return self.__active_path_record |
1037 | 1066 |
1038 def getPreviousPathRecord(self): | 1067 def _getPreviousPathRecord(self): |
1039 """def getPreviousPathRecord(self) | 1068 """_getPreviousPathRecord() |
1040 | 1069 |
1041 Return the Previous Path Record | 1070 Return the Previous Path Record |
1042 """ | 1071 """ |
1043 if len(self.__history_back) > 1: | 1072 if len(self.__history_back) > 1: |
1044 return self.__history_back[-2] | 1073 return self.__history_back[-2] |
1045 else: | 1074 else: |
1046 return None | 1075 return None |
1047 | 1076 |
1048 def getPosteriorPathRecord(self): | 1077 def _getPosteriorPathRecord(self): |
1049 """def getPosteriorPathRecord(self) | 1078 """_getPosteriorPathRecord() |
1050 | 1079 |
1051 Return the Posterior Path Record | 1080 Return the Posterior Path Record |
1052 """ | 1081 """ |
1053 if len(self.__history_forward) > 0: | 1082 if len(self.__history_forward) > 0: |
1054 return self.__history_forward[-1] | 1083 return self.__history_forward[-1] |
1055 else: | 1084 else: |
1056 return None | 1085 return None |
1057 | 1086 |
1058 def getTitle(self): | 1087 def _getTitle(self): |
1059 """def getTitle(self) | 1088 """_getTitle() |
1060 | 1089 |
1061 Return the page title, a gtk.Label objetc | 1090 Return the page title, a gtk.Label objetc |
1062 """ | 1091 """ |
1063 return self.__title | 1092 return self.__title |
1064 | 1093 |
1065 def getWidget(self): | 1094 def _getWidget(self): |
1066 """def getWidget(self) | 1095 """_getWidget() |
1067 | 1096 |
1068 Return de main widget to show in the pane | 1097 Return de main widget to show in the pane |
1069 """ | 1098 """ |
1070 return self.__widget | 1099 return self.__widget |
1071 | 1100 |
1072 def setBudget(self, budget): | 1101 def _setBudget(self, budget): |
1073 """def setBudget(self, budget) | 1102 """_setBudget(budget) |
1074 | 1103 |
1075 budget: a base.Budget object | 1104 budget: a base.Budget object |
1076 | 1105 |
1077 Sets the budget and the active code atributes, | 1106 Sets the budget and the active code atributes, |
1078 creates the page title and the widgets in the pane and | 1107 creates the page title and the widgets in the pane and |
1086 # Todo: change page title | 1115 # Todo: change page title |
1087 self.__title = gtk.Label(self.__budget.getCode( | 1116 self.__title = gtk.Label(self.__budget.getCode( |
1088 self.__active_path_record)) | 1117 self.__active_path_record)) |
1089 _panes_list = self.__panes_list | 1118 _panes_list = self.__panes_list |
1090 self.__main_item = self._itemsFactory(_panes_list) | 1119 self.__main_item = self._itemsFactory(_panes_list) |
1091 _main_widget = self.__main_item.getWidget() | 1120 _main_widget = self.__main_item.widget |
1092 _main_widget.show() | 1121 _main_widget.show() |
1093 self.__widget.pack_start(_main_widget, True, True, 0) | 1122 self.__widget.pack_start(_main_widget, True, True, 0) |
1094 | 1123 |
1095 def getBudget(self): | 1124 def _getBudget(self): |
1096 """def getBudget(self) | 1125 """_getBudget() |
1097 | 1126 |
1098 Return de budget, a "base.Budget" object. | 1127 Return de budget, a "base.Budget" object. |
1099 """ | 1128 """ |
1100 return self.__budget | 1129 return self.__budget |
1101 | 1130 |
1102 def getPanesList(self): | 1131 def _getPanesList(self): |
1103 """def getPanesList(self) | 1132 """_getPanesList() |
1104 | 1133 |
1105 Return the panes list, info list for create the panes. | 1134 Return the panes list, info list for create the panes. |
1106 """ | 1135 """ |
1107 return self.__panes_list | 1136 return self.__panes_list |
1108 | 1137 |
1109 budget = property(getBudget, setBudget, None, | 1138 budget = property(_getBudget, _setBudget, None, |
1110 "Budget to show, base.Budget object") | 1139 "Budget to show, base.Budget object") |
1111 widget = property(getWidget, None, None, | 1140 widget = property(_getWidget, None, None, |
1112 "Main widget showed in the pane") | 1141 "Main widget showed in the pane") |
1113 title = property(getTitle, None, None, | 1142 title = property(_getTitle, None, None, |
1114 "Page Title") | 1143 "Page Title") |
1115 panes_list = property(getPanesList, None, None, | 1144 panes_list = property(_getPanesList, None, None, |
1116 "Info list for create the panes") | 1145 "Info list for create the panes") |
1117 activePathRecord = property(getActivePathRecord, None, None, | 1146 activePathRecord = property(_getActivePathRecord, None, None, |
1118 "Active Path Record") | 1147 "Active Path Record") |
1119 previousPathRecord = property(getPreviousPathRecord, None, None, | 1148 previousPathRecord = property(_getPreviousPathRecord, None, None, |
1120 "Previous Active Path Record") | 1149 "Previous Active Path Record") |
1121 posteriorPathRecord = property(getPosteriorPathRecord, None, None, | 1150 posteriorPathRecord = property(_getPosteriorPathRecord, None, None, |
1122 "Posterior Active Path Record") | 1151 "Posterior Active Path Record") |
1152 | |
1123 | 1153 |
1124 class View(object): | 1154 class View(object): |
1125 """gui.View: | 1155 """gui.View: |
1126 | 1156 |
1127 Description: | 1157 Description: |
1128 It creates a view to show the budget info | 1158 It creates a view to show the budget info |
1129 Constructor: | 1159 Constructor: |
1130 View(view_type, budget, wr_page, path, active_path_record) | 1160 View(view_type, budget, wr_page, path, active_path_record) |
1161 view_type: the object type to show | |
1162 * DecompositionList | |
1163 * Description | |
1164 * Measure | |
1165 * Sheet | |
1166 * FileView | |
1167 * CompanyView | |
1168 budget: the budget to show | |
1169 wr_page: weak reference to the page where the view must be showed | |
1170 path: the position or path of the view in the page notebook | |
1171 active_path_record: the record path that must be showed | |
1131 Ancestry: | 1172 Ancestry: |
1132 +-- object | 1173 +-- object |
1133 +-- Paned | 1174 +-- View |
1134 Atributes: | 1175 Atributes: |
1135 "path": the tuple that identifies the view in the main notebook page | 1176 path: Read-Write. The tuple that identifies the view in the main |
1136 "widget": the main gtk widget to show in a view object, | 1177 notebook page |
1178 widget: Read. the main gtk widget to show in a view object, | |
1137 a gtk.VBox object | 1179 a gtk.VBox object |
1138 "__view_type": the object type to show | |
1139 * DecompositionList | |
1140 * Description | |
1141 * Measure | |
1142 * Sheet of conditions | |
1143 * FileView | |
1144 * CompanyView | |
1145 "__wr_page": weak reference to the page where the view must be showed | |
1146 "__budget": the budget to show | |
1147 "__view ": the object to show: | |
1148 * DecompositionList object | |
1149 * Description object | |
1150 * Measure object | |
1151 * Sheet object | |
1152 * FileView object | |
1153 * Comapany View | |
1154 "__connected": boolean value, True means that the View object sends and | |
1155 receives signals from/to others views | |
1156 "__connected_button": a button to switch __connected True or False | |
1157 Methods: | 1180 Methods: |
1158 __init__(self) | 1181 getItem |
1159 getItem(self, path) | 1182 propagateMessgeFrom |
1160 _closeItem(self, close_button) | 1183 runMessage |
1161 _change_combo(self, combobox) | 1184 getClone |
1162 propagateMessgeFrom(self, message, path, arg=None) | 1185 clear |
1163 runMessage(self, message, path, arg=None) | |
1164 getWidget(self) | |
1165 getPath(self) | |
1166 setPath(self) | |
1167 getClone(self, newpath) | |
1168 clear(self) | |
1169 """ | 1186 """ |
1187 | |
1170 def __init__(self, view_type, budget, wr_page, path, active_path_record): | 1188 def __init__(self, view_type, budget, wr_page, path, active_path_record): |
1171 | 1189 """__init__(view_type, budget, wr_page, path, active_path_record) |
1172 """def __init__(self, view_type, budget, wr_page, path, | |
1173 active_path_record) | |
1174 view_type: the object type to show | 1190 view_type: the object type to show |
1175 * DecompositionList | 1191 * DecompositionList |
1176 * Description | 1192 * Description |
1177 * Measure | 1193 * Measure |
1178 * Sheet | 1194 * Sheet |
1180 * CompanyView | 1196 * CompanyView |
1181 budget: the budget to show | 1197 budget: the budget to show |
1182 wr_page: weak reference to the page where the view must be showed | 1198 wr_page: weak reference to the page where the view must be showed |
1183 path: the position or path of the view in the page notebook | 1199 path: the position or path of the view in the page notebook |
1184 active_path_record: the record path that must be showed | 1200 active_path_record: the record path that must be showed |
1201 | |
1202 self.__active_path_record: the record path that must be showed | |
1203 self.__view_type: the object type to show | |
1204 * DecompositionList | |
1205 * Description | |
1206 * Measure | |
1207 * Sheet of conditions | |
1208 * FileView | |
1209 * CompanyView | |
1210 self.__wr_page: weak reference to the page where the view must be | |
1211 showed | |
1212 self.__budget: the budget to show | |
1213 self.__path: the position or path of the view in the page notebook | |
1214 self.__connected: boolean value, True means that the View object sends | |
1215 and receives signals from/to others views | |
1216 self.__widget: main widget. a gtk.Toolbar? | |
1217 self.__view: the object to show: | |
1218 * DecompositionList object | |
1219 * Description object | |
1220 * Measure object | |
1221 * Sheet object | |
1222 * FileView object | |
1223 * Comapany View | |
1224 self.__connected_button: a button to switch self.__connected True or | |
1225 False | |
1185 | 1226 |
1186 Creates and shows a new view | 1227 Creates and shows a new view |
1187 """ | 1228 """ |
1188 self.__active_path_record = active_path_record | 1229 self.__active_path_record = active_path_record |
1189 self.__view_type = view_type | 1230 self.__view_type = view_type |
1215 if view_type == "DecompositionList": | 1256 if view_type == "DecompositionList": |
1216 self.__view = DecompositionList(budget, weakref.ref(self), | 1257 self.__view = DecompositionList(budget, weakref.ref(self), |
1217 path, active_path_record) | 1258 path, active_path_record) |
1218 _combobox.set_active(0) | 1259 _combobox.set_active(0) |
1219 _view_icon = gtk.Image() | 1260 _view_icon = gtk.Image() |
1220 _view_icon.set_from_file(globalVars.getAppPath("DECOMPOSITION-ICON")) | 1261 _view_icon.set_from_file(globalVars.getAppPath( |
1262 "DECOMPOSITION-ICON")) | |
1221 elif view_type == "RecordDescription": | 1263 elif view_type == "RecordDescription": |
1222 self.__view = Description(budget, weakref.ref(self), | 1264 self.__view = Description(budget, weakref.ref(self), |
1223 path, active_path_record) | 1265 path, active_path_record) |
1224 _combobox.set_active(1) | 1266 _combobox.set_active(1) |
1225 _view_icon = gtk.Image() | 1267 _view_icon = gtk.Image() |
1226 _view_icon.set_from_file(globalVars.getAppPath("DESCRIPTION-ICON")) | 1268 _view_icon.set_from_file(globalVars.getAppPath( |
1269 "DESCRIPTION-ICON")) | |
1227 elif view_type == "Measure": | 1270 elif view_type == "Measure": |
1228 self.__view = Measure(budget, weakref.ref(self), | 1271 self.__view = Measure(budget, weakref.ref(self), |
1229 path, active_path_record) | 1272 path, active_path_record) |
1230 _combobox.set_active(2) | 1273 _combobox.set_active(2) |
1231 _view_icon = gtk.Image() | 1274 _view_icon = gtk.Image() |
1246 self.__view = CompanyView(budget, weakref.ref(self), path, | 1289 self.__view = CompanyView(budget, weakref.ref(self), path, |
1247 active_path_record) | 1290 active_path_record) |
1248 _combobox.set_active(5) | 1291 _combobox.set_active(5) |
1249 _view_icon = gtk.Image() | 1292 _view_icon = gtk.Image() |
1250 _view_icon.set_from_file(globalVars.getAppPath("SHEET-ICON")) | 1293 _view_icon.set_from_file(globalVars.getAppPath("SHEET-ICON")) |
1251 | |
1252 else: | 1294 else: |
1253 raise ValueError, _(utils.mapping("Invalid type of View: $1", | 1295 raise ValueError, _(utils.mapping("Invalid type of View: $1", |
1254 view_type)) | 1296 view_type)) |
1255 _view_icon.show() | 1297 _view_icon.show() |
1256 _combobox.connect("changed", self._change_combo) | 1298 _combobox.connect("changed", self._change_combo) |
1288 _hbox.pack_start(_close_button, False, False, 0) | 1330 _hbox.pack_start(_close_button, False, False, 0) |
1289 _hbox.show() | 1331 _hbox.show() |
1290 self.__widget.show() | 1332 self.__widget.show() |
1291 | 1333 |
1292 def getItem(self, path): | 1334 def getItem(self, path): |
1293 """def getItem(self, path) | 1335 """getItem(path) |
1294 | 1336 |
1295 Return itself. | 1337 Return itself. |
1296 """ | 1338 """ |
1297 return self | 1339 return self |
1298 | 1340 |
1299 def _closeItem(self, close_button): | 1341 def _closeItem(self, close_button): |
1300 """_closeItem(self, widget) | 1342 """_closeItem(close_button) |
1301 | 1343 |
1302 Method connected to the "clicked" signal of the _close_button widget | 1344 Method connected to the "clicked" signal of the _close_button widget |
1303 Send the "autoclose" message to the page to close this view | 1345 Send the "autoclose" message to the page to close this view |
1304 """ | 1346 """ |
1305 self.propagateMessageFrom( "autoclose", self.__path) | 1347 self.propagateMessageFrom("autoclose", self.__path) |
1306 | 1348 |
1307 def _change_combo(self, combobox): | 1349 def _change_combo(self, combobox): |
1308 """_change_combo(self, combobox) | 1350 """_change_combo(combobox) |
1309 | 1351 |
1310 Method connected to the "changed" signal of the _combobox widget | 1352 Method connected to the "changed" signal of the _combobox widget |
1311 It changes the view type to the type selected in the combobox | 1353 It changes the view type to the type selected in the combobox |
1312 """ | 1354 """ |
1313 _index = combobox.get_active() | 1355 _index = combobox.get_active() |
1334 _view_icon = gtk.Image() | 1376 _view_icon = gtk.Image() |
1335 if _index == 0: | 1377 if _index == 0: |
1336 self.__view = DecompositionList(_budget, _wr_page, _path, | 1378 self.__view = DecompositionList(_budget, _wr_page, _path, |
1337 _path_record) | 1379 _path_record) |
1338 | 1380 |
1339 _view_icon.set_from_file(globalVars.getAppPath("DECOMPOSITION-ICON")) | 1381 _view_icon.set_from_file(globalVars.getAppPath( |
1382 "DECOMPOSITION-ICON")) | |
1340 self.__view_type = "DecompositionList" | 1383 self.__view_type = "DecompositionList" |
1341 elif _index == 1: | 1384 elif _index == 1: |
1342 self.__view = Description(_budget, _wr_page, _path, | 1385 self.__view = Description(_budget, _wr_page, _path, |
1343 _path_record) | 1386 _path_record) |
1344 _view_icon.set_from_file(globalVars.getAppPath("DESCRIPTION-ICON")) | 1387 _view_icon.set_from_file(globalVars.getAppPath("DESCRIPTION-ICON")) |
1374 _hbox.show() | 1417 _hbox.show() |
1375 _vbox.pack_start(_hbox, False, False, 0) | 1418 _vbox.pack_start(_hbox, False, False, 0) |
1376 _vbox.pack_start(self.__view.widget, True, True, 0) | 1419 _vbox.pack_start(self.__view.widget, True, True, 0) |
1377 | 1420 |
1378 def _menu_view(self, widget): | 1421 def _menu_view(self, widget): |
1379 """_menu_view(self, widget) | 1422 """_menu_view(widget) |
1380 | 1423 |
1381 Method connected to the "clicked" signal of the __connected_button | 1424 Method connected to the "clicked" signal of the __connected_button |
1382 It shows a popup menu with some options | 1425 It shows a popup menu with some options |
1383 """ | 1426 """ |
1384 _menu_view = gtk.Menu() | 1427 _menu_view = gtk.Menu() |
1393 _item_close = gtk.MenuItem(_("Close view")) | 1436 _item_close = gtk.MenuItem(_("Close view")) |
1394 _menu_view.append(_item_close) | 1437 _menu_view.append(_item_close) |
1395 _item_close.connect_object("activate", self._closeItem, None) | 1438 _item_close.connect_object("activate", self._closeItem, None) |
1396 _item_close.show() | 1439 _item_close.show() |
1397 _menu_view.popup(None, None, None, 0, 0) | 1440 _menu_view.popup(None, None, None, 0, 0) |
1398 | 1441 |
1399 def _split_view(self, orientation): | 1442 def _split_view(self, orientation): |
1400 """_menu_view(self, orientation) | 1443 """_menu_view(orientation) |
1401 | 1444 |
1402 orientation: orientation split, "h" or "v" | 1445 orientation: orientation split, "h" or "v" |
1403 | 1446 |
1404 Method connected to the "activate" signal of the _item_leftright and | 1447 Method connected to the "activate" signal of the _item_leftright and |
1405 _item_topbottom menu items. | 1448 _item_topbottom menu items. |
1407 specified orientation | 1450 specified orientation |
1408 """ | 1451 """ |
1409 self.propagateMessageFrom( "split " + orientation, self.__path) | 1452 self.propagateMessageFrom( "split " + orientation, self.__path) |
1410 | 1453 |
1411 def _connected(self, widget): | 1454 def _connected(self, widget): |
1412 """_connected(self, widget) | 1455 """_connected(widget) |
1413 | 1456 |
1414 Method connected to the "clicked" signal of the _menu_button | 1457 Method connected to the "clicked" signal of the _menu_button |
1415 It changes the __connected atribute to True or False, if the | 1458 It changes the __connected atribute to True or False, if the |
1416 _connected atribute is False the view do not send and receive messages | 1459 _connected atribute is False the view do not send and receive messages |
1417 to/from others views | 1460 to/from others views |
1428 _icon.show() | 1471 _icon.show() |
1429 self.__connected_button.set_icon_widget(_icon) | 1472 self.__connected_button.set_icon_widget(_icon) |
1430 self.__connected = True | 1473 self.__connected = True |
1431 | 1474 |
1432 def propagateMessageFrom(self, message, path, arg=None): | 1475 def propagateMessageFrom(self, message, path, arg=None): |
1433 """def propagateMessageFrom(self, message, path, arg=None) | 1476 """propagateMessageFrom(message, path, arg=None) |
1434 | 1477 |
1435 message: string message | 1478 message: string message |
1436 path: tuple that represents the pane path which emits the message | 1479 path: tuple that represents the pane path which emits the message |
1437 arg: arguments for the message | 1480 arg: arguments for the message |
1438 The panes are connectted to this method to send messages to other panes | 1481 The panes are connectted to this method to send messages to other panes |
1440 if self.__connected or message == "autoclose" or \ | 1483 if self.__connected or message == "autoclose" or \ |
1441 message == "split h" or message == "split v": | 1484 message == "split h" or message == "split v": |
1442 self.__wr_page().propagateMessageFrom(message, path, arg) | 1485 self.__wr_page().propagateMessageFrom(message, path, arg) |
1443 | 1486 |
1444 def runMessage(self, message, path, arg=None): | 1487 def runMessage(self, message, path, arg=None): |
1445 """def runMessage(self, message, path, arg=None) | 1488 """runMessage(message, path, arg=None) |
1446 | 1489 |
1447 message: the message type | 1490 message: the message type |
1448 "change_active": change the active record | 1491 "change_active": change the active record |
1449 "clear": clear instance | 1492 "clear": clear instance |
1450 path: tuple that identifies the pane in the notebook page | 1493 path: tuple that identifies the pane in the notebook page |
1458 if message == "change_active": | 1501 if message == "change_active": |
1459 if self.__budget.hasPath(arg): | 1502 if self.__budget.hasPath(arg): |
1460 _path_record = arg | 1503 _path_record = arg |
1461 self.__active_path_record = _path_record | 1504 self.__active_path_record = _path_record |
1462 | 1505 |
1463 def getWidget(self): | 1506 def _getWidget(self): |
1464 """def getWidget(self) | 1507 """_getWidget() |
1465 | 1508 |
1466 Return de pane widget | 1509 Return de pane widget |
1467 """ | 1510 """ |
1468 return self.__widget | 1511 return self.__widget |
1469 | 1512 |
1470 def getPath(self): | 1513 def _getPath(self): |
1471 """def getPath(self) | 1514 """_getPath() |
1472 | 1515 |
1473 return the tuple that identifies the pane in the notebook page | 1516 return the tuple that identifies the pane in the notebook page |
1474 """ | 1517 """ |
1475 return self.__view.path | 1518 return self.__view.path |
1476 | 1519 |
1477 def setPath(self, path): | 1520 def _setPath(self, path): |
1478 """def setPath(self) | 1521 """_setPath() |
1479 | 1522 |
1480 set the tuple that identifies the pane in the notebook page | 1523 set the tuple that identifies the pane in the notebook page |
1481 """ | 1524 """ |
1482 self.__path = path | 1525 self.__path = path |
1483 self.__view.path = path | 1526 self.__view.path = path |
1484 | 1527 |
1485 def getClone(self, new_path): | 1528 def getClone(self, new_path): |
1486 """getClone(self, new_path) | 1529 """getClone(new_path) |
1487 | 1530 |
1488 new_path: the path that identifies the clone view in the page | 1531 new_path: the path that identifies the clone view in the page |
1489 | 1532 |
1490 return a clone of itself | 1533 return a clone of itself |
1491 """ | 1534 """ |
1492 return View(self.__view_type, self.__budget, self.__wr_page, | 1535 return View(self.__view_type, self.__budget, self.__wr_page, |
1493 new_path, self.__active_path_record) | 1536 new_path, self.__active_path_record) |
1494 | 1537 |
1495 def clear(self): | 1538 def clear(self): |
1496 """clear(self) | 1539 """clear() |
1497 | 1540 |
1498 Clear the intance atributes | 1541 Clear the intance atributes |
1499 """ | 1542 """ |
1500 del self.__wr_page | 1543 del self.__wr_page |
1501 del self.__budget | 1544 del self.__budget |
1502 del self.__path | 1545 del self.__path |
1503 del self.__widget | 1546 del self.__widget |
1504 del self.__view | 1547 del self.__view |
1505 del self.__connected | 1548 del self.__connected |
1506 del self.__connected_button | 1549 del self.__connected_button |
1507 | 1550 |
1508 path = property(getPath, setPath, None, | 1551 path = property(_getPath, _setPath, None, |
1509 "path that identifies the item in the notebook page") | 1552 "path that identifies the item in the notebook page") |
1510 widget = property(getWidget, None, None, "View widget") | 1553 widget = property(_getWidget, None, None, "View widget") |
1554 | |
1511 | 1555 |
1512 class Paned(object): | 1556 class Paned(object): |
1513 """gui.Paned: | 1557 """gui.Paned: |
1514 | 1558 |
1515 Description: | 1559 Description: |
1516 It creates and shows gtk.Hpaned or gtk.Vpaned to show in page budget | 1560 It creates and shows gtk.Hpaned or gtk.Vpaned to show in page budget |
1517 Constructor: | 1561 Constructor: |
1518 Paned(orientation, widget1, widget2) | 1562 Paned(orientation, widget1, widget2) |
1519 orientation: The orientation of the pane separator, can be "v" or "h" | 1563 orientation: The orientation of the pane separator, can be "v" or |
1520 widget1: the top or left pane widget | 1564 "h" |
1521 widget2: the botton or right pane widget | 1565 widget1: the top or left pane widget |
1522 Returns the newly created Paned instance | 1566 widget2: the botton or right pane widget |
1523 Ancestry: | 1567 Ancestry: |
1524 +-- object | 1568 +-- object |
1525 +-- Paned | 1569 +-- Paned |
1526 Atributes: | 1570 Atributes: |
1527 "widget": Pane widget("gtk.VPaned" or "gtk.HPaned" object) | 1571 widget: Read. Pane widget("gtk.VPaned" or "gtk.HPaned" object) |
1528 "__orientation": The orientation of de gtk.Paned, can be "v" or "h" | 1572 path: Read-Write. The paned path in the page |
1529 "__items": list of items showed in the paned, its can be View or Paned | |
1530 instances | |
1531 "__path": the paned path in the page | |
1532 Methods: | 1573 Methods: |
1533 __init__(self) | 1574 getClone |
1534 __getitem__(self, item) | 1575 getItem |
1535 getClone(self, new_path) | 1576 setItem |
1536 getItem(self, path) | 1577 runMessage |
1537 runMessage(self, messge, path, arg=None) | |
1538 getWidget(self) | |
1539 {get/set}Path | |
1540 clear(self) | 1578 clear(self) |
1541 """ | 1579 """ |
1542 # TODO: *control the position paned separator. Now is always 200 pixels | 1580 # TODO: *control the position paned separator. Now is always 200 pixels |
1543 # TODO: can be with a float(0.0-1.0) aspect ratio | 1581 # TODO: can be with a float(0.0-1.0) aspect ratio |
1544 # TODO: 0.0 no space for widget1 | 1582 # TODO: 0.0 no space for widget1 |
1545 # TODO: 1.0 all the space for widget1 | 1583 # TODO: 1.0 all the space for widget1 |
1546 # TODO: *control the position pane separator when the size of the window | 1584 # TODO: *control the position pane separator when the size of the window |
1547 # TODO: change with the same ascpect ratio | 1585 # TODO: change with the same ascpect ratio |
1548 | 1586 |
1549 def __init__(self, orientation, path, item1, item2): | 1587 def __init__(self, orientation, path, item1, item2): |
1550 """def __init__(self, oritentation, path, item1, item2) | 1588 """__init__(oritentation, path, item1, item2) |
1551 | 1589 |
1552 orientation: The orientation of de gtk.Paned, can be "v" or "h" | 1590 orientation: The orientation of de gtk.Paned, can be "v" or "h" |
1553 path: the paned path in the page | 1591 path: the paned path in the page |
1554 item1: the top or left pane object | 1592 item1: the top or left pane object |
1555 item2: the bottom or right pane object | 1593 item2: the bottom or right pane object |
1594 | |
1595 self.__orientation: The orientation of de gtk.Paned, can be "v" or "h" | |
1596 self.__widget: Main widget, a gtk.VPaned o gtk.HPaned | |
1597 self.__items: list of items showed in the paned, its can be View or | |
1598 Paned instances | |
1599 self.__path: the paned path in the page | |
1556 | 1600 |
1557 Creates and shows a new gtk.Paned | 1601 Creates and shows a new gtk.Paned |
1558 """ | 1602 """ |
1559 self.__orientation = orientation | 1603 self.__orientation = orientation |
1560 if not isinstance(item1.widget, gtk.Widget) or \ | 1604 if not isinstance(item1.widget, gtk.Widget) or \ |
1572 self.__widget.show() | 1616 self.__widget.show() |
1573 self.__items = [item1, item2] | 1617 self.__items = [item1, item2] |
1574 self.__path = path | 1618 self.__path = path |
1575 | 1619 |
1576 def __getitem__(self, item): | 1620 def __getitem__(self, item): |
1577 """__getitem__(self, item) | 1621 """__getitem__(item) |
1578 | 1622 |
1579 Called to implement evaluation of self[key]. | 1623 Called to implement evaluation of self[key]. |
1580 The accepted keys should be integers 0 or 1. | 1624 The accepted keys should be integers 0 or 1. |
1581 """ | 1625 """ |
1582 return self.__items[item] | 1626 return self.__items[item] |
1583 | 1627 |
1584 def getClone(self, new_path): | 1628 def getClone(self, new_path): |
1585 """getClone(self, new_path) | 1629 """getClone(new_path) |
1586 | 1630 |
1587 Return a clone Paned instance with the path new_path | 1631 Return a clone Paned instance with the path new_path |
1588 """ | 1632 """ |
1589 return Paned(self.__orientation, new_path, | 1633 return Paned(self.__orientation, new_path, |
1590 self.__items[0].getClone(new_path + (0,)), | 1634 self.__items[0].getClone(new_path + (0,)), |
1591 self.__items[1].getClone(new_path + (1,))) | 1635 self.__items[1].getClone(new_path + (1,))) |
1592 | 1636 |
1593 def getItem(self,path): | 1637 def getItem(self,path): |
1594 """def getItem(self, path) | 1638 """getItem(path) |
1595 | 1639 |
1596 Return the item whith the specified path. | 1640 Return the item whith the specified path. |
1597 """ | 1641 """ |
1598 _item = self.__items[path[0]] | 1642 _item = self.__items[path[0]] |
1599 if len(path) == 1: | 1643 if len(path) == 1: |
1600 return _item | 1644 return _item |
1601 else: | 1645 else: |
1602 return _item.getItem(path[1:]) | 1646 return _item.getItem(path[1:]) |
1603 | 1647 |
1604 def setItem(self, path, item_list): | 1648 def setItem(self, path, item_list): |
1605 """def setItem(self, path, item_list) | 1649 """setItem(path, item_list) |
1606 | 1650 |
1607 Sets the first item in the item_list whith the especified path and | 1651 Sets the first item in the item_list whith the especified path and |
1608 remove the old item in this position. | 1652 remove the old item in this position. |
1609 """ | 1653 """ |
1610 item = item_list[0] | 1654 item = item_list[0] |
1618 self.__widget.pack2(item.widget,True,False) | 1662 self.__widget.pack2(item.widget,True,False) |
1619 return True | 1663 return True |
1620 return False | 1664 return False |
1621 | 1665 |
1622 def runMessage(self, message, path, arg=None): | 1666 def runMessage(self, message, path, arg=None): |
1623 """def runMessage(self, message, page_path, arg=None) | 1667 """runMessage(message, page_path, arg=None) |
1624 | 1668 |
1625 message: the message type | 1669 message: the message type |
1626 "change_active": change the active record | 1670 "change_active": change the active record |
1627 "clear": clear instance | 1671 "clear": clear instance |
1628 page_path: tuple that identifies the pane in the notebook page | 1672 page_path: tuple that identifies the pane in the notebook page |
1632 """ | 1676 """ |
1633 for _item in self.__items: | 1677 for _item in self.__items: |
1634 if not _item.path == path: | 1678 if not _item.path == path: |
1635 _item.runMessage(message, path, arg) | 1679 _item.runMessage(message, path, arg) |
1636 | 1680 |
1637 def getWidget(self): | 1681 def _getWidget(self): |
1638 """def getWidget(self) | 1682 """_getWidget() |
1639 | 1683 |
1640 Return de gtk.Paned widget | 1684 Return de gtk.Paned widget |
1641 """ | 1685 """ |
1642 return self.__widget | 1686 return self.__widget |
1643 | 1687 |
1644 def getPath(self): | 1688 def _getPath(self): |
1645 """def getPath(self) | 1689 """_getPath() |
1646 | 1690 |
1647 Return de Paned path in the notebook page | 1691 Return de Paned path in the notebook page |
1648 """ | 1692 """ |
1649 return self.__path | 1693 return self.__path |
1650 | 1694 |
1651 def setPath(self, path): | 1695 def _setPath(self, path): |
1652 """def setPath(self) | 1696 """_setPath() |
1653 | 1697 |
1654 sets the tuple that identifies the pane in the notebook page | 1698 sets the tuple that identifies the pane in the notebook page |
1655 """ | 1699 """ |
1656 self.__path = path | 1700 self.__path = path |
1657 self.__items[0].path = path + (0,) | 1701 self.__items[0].path = path + (0,) |
1658 self.__items[1].path = path + (1,) | 1702 self.__items[1].path = path + (1,) |
1659 | 1703 |
1660 def clear(self): | 1704 def clear(self): |
1705 """clear() | |
1706 | |
1707 Delete atributes | |
1708 """ | |
1661 del self.__widget | 1709 del self.__widget |
1662 del self.__orientation | 1710 del self.__orientation |
1663 del self.__items | 1711 del self.__items |
1664 del self.__path | 1712 del self.__path |
1665 | 1713 |
1666 widget = property(getWidget, None, None, "gtk.Paned widget") | 1714 widget = property(_getWidget, None, None, "gtk.Paned widget") |
1667 path = property(getPath, setPath, None, "Pane path in the notebook page") | 1715 path = property(_getPath, _setPath, None, "Pane path in the notebook page") |
1716 | |
1668 | 1717 |
1669 class TreeView(object): | 1718 class TreeView(object): |
1670 """gui.Treeviev: | 1719 """gui.Treeviev: |
1671 | 1720 |
1672 Description: | 1721 Description: |
1689 5. model column index | 1738 5. model column index |
1690 Ancestry: | 1739 Ancestry: |
1691 +-- object | 1740 +-- object |
1692 +-- TreeView | 1741 +-- TreeView |
1693 Atributes: | 1742 Atributes: |
1694 "columns": list of columns (gtk.TreeViewColumn isntances) | 1743 columns: list of columns (gtk.TreeViewColumn objects) |
1695 Methods: | 1744 Methods: |
1696 __init__(self) | 1745 createColumn |
1697 __getitem__(self, item) | 1746 createTextBaseColumn |
1698 createColumn(self, args) | 1747 createBaseColumn |
1699 createTextBaseColumn(self,args) | |
1700 createBaseColumn(self,args) | |
1701 """ | 1748 """ |
1702 | 1749 |
1703 def __init__(self, args): | 1750 def __init__(self, args): |
1704 """__init__(self, args) | 1751 """__init__(args) |
1705 | 1752 |
1706 args: list of tuples, the tuple items are: | 1753 args: list of tuples, the tuple items are: |
1707 0.type: | 1754 0.type: |
1708 * index column | 1755 * index column |
1709 * float column | 1756 * float column |
1722 """ | 1769 """ |
1723 self.columns = [ self.createColumn(arg) for arg in args ] | 1770 self.columns = [ self.createColumn(arg) for arg in args ] |
1724 self.columns.append(self.createColumn(("END",))) | 1771 self.columns.append(self.createColumn(("END",))) |
1725 | 1772 |
1726 def createColumn(self, args): | 1773 def createColumn(self, args): |
1727 """createColumn(self, args) | 1774 """createColumn(args) |
1728 | 1775 |
1729 args: tuple with the args | 1776 args: tuple with the args |
1730 0.type: | 1777 0.type: |
1731 * index column | 1778 * index column |
1732 * float column | 1779 * float column |
1752 globalVars.getAppPath("ARROW-ICON")) | 1799 globalVars.getAppPath("ARROW-ICON")) |
1753 _pixbuf_index_cell.set_property("pixbuf", _arrow_icon) | 1800 _pixbuf_index_cell.set_property("pixbuf", _arrow_icon) |
1754 _index_column.pack_start(_text_index_cell, True) | 1801 _index_column.pack_start(_text_index_cell, True) |
1755 _index_column.pack_start(_pixbuf_index_cell, True) | 1802 _index_column.pack_start(_pixbuf_index_cell, True) |
1756 _index_column.set_cell_data_func(_text_index_cell, | 1803 _index_column.set_cell_data_func(_text_index_cell, |
1757 self.colorCell, | 1804 self._colorCell, |
1758 [gtk.gdk.color_parse(globalVars.color["INDEX-UNEVEN"]), | 1805 [gtk.gdk.color_parse(globalVars.color["INDEX-UNEVEN"]), |
1759 gtk.gdk.color_parse(globalVars.color["INDEX-EVEN"])]) | 1806 gtk.gdk.color_parse(globalVars.color["INDEX-EVEN"])]) |
1760 return _index_column | 1807 return _index_column |
1761 elif args[0] == "TEXT": | 1808 elif args[0] == "TEXT": |
1762 _column, _cell = self.createTextBaseColumn(args) | 1809 _column, _cell = self.createTextBaseColumn(args) |
1781 _type_cell2.set_property('foreground-gdk', args[3]) | 1828 _type_cell2.set_property('foreground-gdk', args[3]) |
1782 _column.pack_start(_type_cell1, True) | 1829 _column.pack_start(_type_cell1, True) |
1783 _column.pack_start(_type_cell2, True) | 1830 _column.pack_start(_type_cell2, True) |
1784 _column.add_attribute(_type_cell2, 'text', args[5]) | 1831 _column.add_attribute(_type_cell2, 'text', args[5]) |
1785 _column.set_cell_data_func(_type_cell1, | 1832 _column.set_cell_data_func(_type_cell1, |
1786 self.colorCell, args[4]) | 1833 self._colorCell, args[4]) |
1787 _column.set_cell_data_func(_type_cell2, | 1834 _column.set_cell_data_func(_type_cell2, |
1788 self.colorCell, args[4]) | 1835 self._colorCell, args[4]) |
1789 return _column | 1836 return _column |
1790 elif args[0] == "PIXBUF": | 1837 elif args[0] == "PIXBUF": |
1791 _column = self.createBaseColumn(args) | 1838 _column = self.createBaseColumn(args) |
1792 _type_cell1 = gtk.CellRendererPixbuf() | 1839 _type_cell1 = gtk.CellRendererPixbuf() |
1793 _column.pack_start(_type_cell1, True) | 1840 _column.pack_start(_type_cell1, True) |
1794 _column.set_cell_data_func(_type_cell1, | 1841 _column.set_cell_data_func(_type_cell1, |
1795 self.colorCell, args[4]) | 1842 self._colorCell, args[4]) |
1796 return _column | 1843 return _column |
1797 elif args[0] == "END": | 1844 elif args[0] == "END": |
1798 _end_column = gtk.TreeViewColumn() | 1845 _end_column = gtk.TreeViewColumn() |
1799 _end_column.set_clickable(False) | 1846 _end_column.set_clickable(False) |
1800 _end_cell = gtk.CellRendererText() | 1847 _end_cell = gtk.CellRendererText() |
1802 gtk.gdk.color_parse(globalVars.color["UNEVEN"])) | 1849 gtk.gdk.color_parse(globalVars.color["UNEVEN"])) |
1803 _end_column.pack_start(_end_cell, True) | 1850 _end_column.pack_start(_end_cell, True) |
1804 return _end_column | 1851 return _end_column |
1805 return None | 1852 return None |
1806 | 1853 |
1807 def createTextBaseColumn(self,args): | 1854 def createTextBaseColumn(self, args): |
1808 """createTextBaseColumn(self,args) | 1855 """createTextBaseColumn(args) |
1809 | 1856 |
1810 args: tuple with the args | 1857 args: tuple with the args |
1811 0.type: | 1858 0.type: |
1812 * float column | 1859 * float column |
1813 * text column | 1860 * text column |
1823 """ | 1870 """ |
1824 _column = self.createBaseColumn(args) | 1871 _column = self.createBaseColumn(args) |
1825 _cell = gtk.CellRendererText() | 1872 _cell = gtk.CellRendererText() |
1826 _cell.set_property('foreground-gdk', args[3]) | 1873 _cell.set_property('foreground-gdk', args[3]) |
1827 _column.pack_start(_cell, True) | 1874 _column.pack_start(_cell, True) |
1828 _column.set_cell_data_func(_cell, self.colorCell, args[4]) | 1875 _column.set_cell_data_func(_cell, self._colorCell, args[4]) |
1829 return _column, _cell | 1876 return _column, _cell |
1830 | 1877 |
1831 def createBaseColumn(self,args): | 1878 def createBaseColumn(self, args): |
1832 """createBaseColumn(self,args) | 1879 """createBaseColumn(args) |
1833 | 1880 |
1834 args: tuple with the args | 1881 args: tuple with the args |
1835 0.type: | 1882 0.type: |
1836 * index column | 1883 * index column |
1837 * float column | 1884 * float column |
1853 _column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) | 1900 _column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) |
1854 _column.set_fixed_width(args[2]) | 1901 _column.set_fixed_width(args[2]) |
1855 _column.set_resizable(True) | 1902 _column.set_resizable(True) |
1856 return _column | 1903 return _column |
1857 | 1904 |
1905 | |
1858 class DecompositionList(TreeView): | 1906 class DecompositionList(TreeView): |
1859 """gui.DecompositionList: | 1907 """gui.DecompositionList: |
1860 | 1908 |
1861 Description: | 1909 Description: |
1862 Class to show a budget Decomposition List | 1910 Class to show a budget Decomposition List |
1863 Constructor: | 1911 Constructor: |
1864 DecompositionList(budget, page, path) | 1912 DecompositionList(budget, page, path, path_record=(0,)) |
1865 budget: budget showed ("base.Budget" object) | 1913 budget: budget showed ("base.Budget" object) |
1866 page: weak reference from Page instance which creates this class | 1914 page: weak reference from Page instance which creates this class |
1867 path: tuple that represents the view path in the Page | 1915 path: tuple that represents the view path in the Page |
1916 path_record: the record path that must be showed | |
1868 Returns the newly created DecompositionList instance | 1917 Returns the newly created DecompositionList instance |
1869 Ancestry: | 1918 Ancestry: |
1870 +-- object | 1919 +-- object |
1871 +-- TreeView | 1920 +-- TreeView |
1872 +-- DecompositionList | 1921 +-- DecompositionList |
1873 Atributes: | 1922 Atributes: |
1874 "budget": Budget to show, base.obra instance. | 1923 budget: Read. Budget to show, base.obra object. |
1875 "widget or __scrolled_window": Window that contains the table, | 1924 widget: Read. Window that contains the table, gtk.ScrolledWindow |
1876 (gtk.ScrolledWindow) | 1925 path: Read-Write. Pane page identifier |
1877 "path": Pane page identifier | 1926 page: Read-Write. weak ref from Page object which creates this class |
1878 "page": weak reference from Page instance which creates this class | 1927 active_path_record: Read. Active path record |
1879 "__active_color": background color of the active cell, a | |
1880 gtk.gdk.Color object | |
1881 "__chapter_background_colors": background colors of the Code | |
1882 column cells when there is a chapter record, | |
1883 list of gtk.gdk.Color objects [even cell, uneven cell] | |
1884 "__methond_message": Method to send messages to the page | |
1885 "__liststore": list model which store the list data | |
1886 (gtk.ListStore object) | |
1887 "__treeview": widget for displaying decomposition lists (gtk.TreeView) | |
1888 "__index_column": Index column (gtk.TreeViewColumn object) | |
1889 "__code_column": Record code column (gtk.TreeViewColumn) | |
1890 "__unit_column": Unit of measure column (gtk.TreeViewColumn) | |
1891 "__description_column": record's short description column | |
1892 (gtk.TreeViewColumn) | |
1893 "__measure_column": Measure column (gtk.TreeViewColumn) | |
1894 "__price_column": Price column (gtk.TreeViewColumn) | |
1895 "__amount_column": Amount column(gtk.TreeViewColumn) | |
1896 "__end_column": End empty column (gtk.TreeViewColumn) | |
1897 "__treeselection": active selection | |
1898 "__selection_control": state of the selection control (True/False) | |
1899 "__cursor": cursor position in the table | |
1900 Methods: | 1928 Methods: |
1901 __init__(self, budget) | 1929 runMessage |
1902 treeviewCursorChanged(self, treeview) | |
1903 treeviewClickedEvent(self, widget, event) | |
1904 treeviewKeyPressEvent(self, widget, event) | |
1905 moveCursor(self, treeview, step, count) | |
1906 controlSelection(self, selection) | |
1907 selectAll(self, column) | |
1908 setColumnsHeaders(self) | |
1909 setListstoreValues(self, puntero, treeiter=None) | |
1910 colorCell(self, column, cell_renderer, tree_model, iter, lcolor) | |
1911 _claculateAmount(self, row_path, tree_model) | |
1912 showParentRecord(self, column) | |
1913 showMessageRecord(self, camino,_code): | |
1914 showRowRecord(self, treeview, path, column) | |
1915 runMessage(self, messagem path, arg=None) | |
1916 _clear(self) | |
1917 getWidget(self) | |
1918 {get/set}Path | |
1919 {get/seg}Page | |
1920 getBudget(self) | |
1921 getActivePathRecord(self) | |
1922 """ | 1930 """ |
1923 | 1931 |
1924 def __init__(self, budget, page, path, path_record=(0,)): | 1932 def __init__(self, budget, page, path, path_record=(0,)): |
1925 """def __init__(self, budget, page, path) | 1933 """__init__(budget, page, path, path_record=(0,)) |
1926 | 1934 |
1927 budget: budget showed ("base.Budget" object) | 1935 budget: budget showed ("base.Budget" object) |
1928 page: weak reference from Page instance which creates this class | 1936 page: weak reference from Page instance which creates this class |
1929 path: tuple that represents the path of the List in the Page | 1937 path: tuple that represents the path of the List in the Page |
1938 path_record: the record path that must be showed | |
1939 | |
1940 self.__budget: budget showed ("base.Budget" object) | |
1941 self.__page: weak reference from Page instance which creates this class | |
1942 self.__path: tuple that represents the path of the List in the Page | |
1943 self.__liststore: list model which store the list data | |
1944 (gtk.ListStore object) | |
1945 self.__active_path_record: the record path that must be showed | |
1946 self.__treeview: widget for displaying decomposition lists | |
1947 (gtk.TreeView) | |
1948 self.__scrolled_window: widget to contain the treeview object | |
1949 self.__chapter_background_colors: background colors of the Code | |
1950 column cells when there is a chapter record, | |
1951 list of gtk.gdk.Color objects [even cell, uneven cell] | |
1952 self.__chapter_background_colors | |
1953 self.__index_column: Index column (gtk.TreeViewColumn object) | |
1954 self.__code_column: Record code column (gtk.TreeViewColumn) | |
1955 self.__type_column: Record Type column (gtk.TreeViewColumn) | |
1956 self.__unit_column: Unit of measure column (gtk.TreeViewColumn) | |
1957 self.__description_column: record's short description column | |
1958 (gtk.TreeViewColumn) | |
1959 self.__measure_column: Measure column (gtk.TreeViewColumn) | |
1960 self.__price_column: Price column (gtk.TreeViewColumn) | |
1961 self.__amount_column: Amount column(gtk.TreeViewColumn) | |
1962 self.__end_column: End empty column (gtk.TreeViewColumn) | |
1963 self.__chapter_icon: a gtk.gdk.pixbuf | |
1964 self.__unit_icon: a gtk.gdk.pixbuf | |
1965 self.__material_icon: a gtk.gdk.pixbuf | |
1966 self.__machinery_icon: a gtk.gdk.pixbuf | |
1967 self.__labourforce_icon: a gtk.gdk.pixbuf | |
1968 self.__treeselection: active selection | |
1969 self.__selection_control: state of the selection control (True/False) | |
1970 self.__cursor: cursor position in the table | |
1930 | 1971 |
1931 Sets the init atributes | 1972 Sets the init atributes |
1932 Creates the init list values in self.__liststore from the budget | 1973 Creates the init list values in self.__liststore from the budget |
1933 showing the top record descomposition | 1974 showing the top record descomposition |
1934 Creates the list in self.__treeview | 1975 Creates the list in self.__treeview |
1947 # ListStore | 1988 # ListStore |
1948 self.__liststore = gtk.ListStore(object | 1989 self.__liststore = gtk.ListStore(object |
1949 #, int, int, str, str, str, str, str,str | 1990 #, int, int, str, str, str, str, str,str |
1950 ) | 1991 ) |
1951 if path_record is None: | 1992 if path_record is None: |
1952 print _("DecompositionList.__init__: Record path can not be None") | 1993 print _("Record path can not be None") |
1953 path_record = (0,) | 1994 path_record = (0,) |
1954 self.__active_path_record = path_record | 1995 self.__active_path_record = path_record |
1955 self.setListstoreValues(self.__active_path_record) | 1996 self._setListstoreValues(self.__active_path_record) |
1956 # Treeview | 1997 # Treeview |
1957 self.__treeview = gtk.TreeView(self.__liststore) | 1998 self.__treeview = gtk.TreeView(self.__liststore) |
1958 self.__treeview.set_enable_search(False) | 1999 self.__treeview.set_enable_search(False) |
1959 self.__treeview.set_reorderable(False) | 2000 self.__treeview.set_reorderable(False) |
1960 self.__treeview.set_headers_clickable(True) | 2001 self.__treeview.set_headers_clickable(True) |
1971 gtk.gdk.color_parse(globalVars.color["EVEN"])] | 2012 gtk.gdk.color_parse(globalVars.color["EVEN"])] |
1972 self.__chapter_background_colors = [ | 2013 self.__chapter_background_colors = [ |
1973 gtk.gdk.color_parse(globalVars.color["CHAPTER-UNEVEN"]), | 2014 gtk.gdk.color_parse(globalVars.color["CHAPTER-UNEVEN"]), |
1974 gtk.gdk.color_parse(globalVars.color["CHAPTER-EVEN"])] | 2015 gtk.gdk.color_parse(globalVars.color["CHAPTER-EVEN"])] |
1975 super(DecompositionList,self).__init__( | 2016 super(DecompositionList,self).__init__( |
1976 [("INDEX",self.selectAll,42), | 2017 [("INDEX",self._selectAll,42), |
1977 ("CALCULATEDTEXT", self.showParentRecord, | 2018 ("CALCULATEDTEXT", self._showParentRecord, |
1978 gtk.Label("A"*10).size_request()[0] +10, | 2019 gtk.Label("A"*10).size_request()[0] +10, |
1979 _text_color, _background_color), | 2020 _text_color, _background_color), |
1980 ("PIXBUF", self.showParentRecord, 26, _text_color, | 2021 ("PIXBUF", self._showParentRecord, 26, _text_color, |
1981 _background_color), | 2022 _background_color), |
1982 ("CALCULATEDTEXT", self.showParentRecord, | 2023 ("CALCULATEDTEXT", self._showParentRecord, |
1983 gtk.Label(_("a"*4)).size_request()[0] +10, | 2024 gtk.Label(_("a"*4)).size_request()[0] +10, |
1984 _text_color, _background_color), | 2025 _text_color, _background_color), |
1985 ("CALCULATEDTEXT", self.showParentRecord, | 2026 ("CALCULATEDTEXT", self._showParentRecord, |
1986 gtk.Label("a"*30).size_request()[0] +10, | 2027 gtk.Label("a"*30).size_request()[0] +10, |
1987 _text_color, _background_color), | 2028 _text_color, _background_color), |
1988 ("CALCULATED", self.showParentRecord, | 2029 ("CALCULATED", self._showParentRecord, |
1989 gtk.Label("a"*10).size_request()[0] +10, | 2030 gtk.Label("a"*10).size_request()[0] +10, |
1990 _text_color, _background_color), | 2031 _text_color, _background_color), |
1991 ("CALCULATED", self.showParentRecord, | 2032 ("CALCULATED", self._showParentRecord, |
1992 gtk.Label("a"*10).size_request()[0] +10, | 2033 gtk.Label("a"*10).size_request()[0] +10, |
1993 _text_color, _background_color), | 2034 _text_color, _background_color), |
1994 ("CALCULATED", self.showParentRecord, | 2035 ("CALCULATED", self._showParentRecord, |
1995 gtk.Label("a"*10).size_request()[0] +10, | 2036 gtk.Label("a"*10).size_request()[0] +10, |
1996 gtk.gdk.color_parse(globalVars.color["CALCULATED-TEXT"]), | 2037 gtk.gdk.color_parse(globalVars.color["CALCULATED-TEXT"]), |
1997 _background_color), | 2038 _background_color), |
1998 ]) | 2039 ]) |
1999 self.__index_column = self.columns[0] | 2040 self.__index_column = self.columns[0] |
2009 self.__treeview.append_column(self.__index_column) | 2050 self.__treeview.append_column(self.__index_column) |
2010 # Code column | 2051 # Code column |
2011 self.__treeview.append_column(self.__code_column) | 2052 self.__treeview.append_column(self.__code_column) |
2012 # Type column | 2053 # Type column |
2013 self.__treeview.append_column(self.__type_column) | 2054 self.__treeview.append_column(self.__type_column) |
2014 self.chapter_icon = gtk.gdk.pixbuf_new_from_file( | 2055 self.__chapter_icon = gtk.gdk.pixbuf_new_from_file( |
2015 globalVars.getAppPath("CHAPTER-ICON")) | 2056 globalVars.getAppPath("CHAPTER-ICON")) |
2016 self.unit_icon = gtk.gdk.pixbuf_new_from_file( | 2057 self.__unit_icon = gtk.gdk.pixbuf_new_from_file( |
2017 globalVars.getAppPath("UNIT-ICON") ) | 2058 globalVars.getAppPath("UNIT-ICON") ) |
2018 self.material_icon = gtk.gdk.pixbuf_new_from_file( | 2059 self.__material_icon = gtk.gdk.pixbuf_new_from_file( |
2019 globalVars.getAppPath("MATERIAL-ICON") ) | 2060 globalVars.getAppPath("MATERIAL-ICON") ) |
2020 self.machinery_icon = gtk.gdk.pixbuf_new_from_file( | 2061 self.__machinery_icon = gtk.gdk.pixbuf_new_from_file( |
2021 globalVars.getAppPath("MACHINERY-ICON")) | 2062 globalVars.getAppPath("MACHINERY-ICON")) |
2022 self.labourforce_icon = gtk.gdk.pixbuf_new_from_file( | 2063 self.__labourforce_icon = gtk.gdk.pixbuf_new_from_file( |
2023 globalVars.getAppPath("LABOURFORCE-ICON")) | 2064 globalVars.getAppPath("LABOURFORCE-ICON")) |
2024 self.__type_column.get_cell_renderers()[0].set_property("pixbuf", | 2065 self.__type_column.get_cell_renderers()[0].set_property("pixbuf", |
2025 self.labourforce_icon) | 2066 self.__labourforce_icon) |
2026 | 2067 |
2027 # Unit column | 2068 # Unit column |
2028 self.__treeview.append_column(self.__unit_column) | 2069 self.__treeview.append_column(self.__unit_column) |
2029 # Description column | 2070 # Description column |
2030 self.__treeview.append_column(self.__description_column) | 2071 self.__treeview.append_column(self.__description_column) |
2035 # Amount column | 2076 # Amount column |
2036 self.__treeview.append_column(self.__amount_column) | 2077 self.__treeview.append_column(self.__amount_column) |
2037 # End Column | 2078 # End Column |
2038 self.__treeview.append_column(self.__end_column) | 2079 self.__treeview.append_column(self.__end_column) |
2039 # Connect | 2080 # Connect |
2040 self.__treeview.connect("row-activated", self.showRowRecord) | 2081 self.__treeview.connect("row-activated", self._showRowRecord) |
2041 self.__treeview.connect("move-cursor", self.moveCursor) | 2082 self.__treeview.connect("move-cursor", self._moveCursor) |
2042 self.__treeview.connect("key-press-event", self.treeviewKeyPressEvent) | 2083 self.__treeview.connect("key-press-event", self._treeviewKeyPressEvent) |
2043 self.__treeview.connect("button-press-event", self.treeviewClickedEvent) | 2084 self.__treeview.connect("button-press-event", |
2044 self.__treeview.connect("cursor-changed", self.treeviewCursorChanged) | 2085 self._treeviewClickedEvent) |
2086 self.__treeview.connect("cursor-changed", self._treeviewCursorChanged) | |
2045 # control selection | 2087 # control selection |
2046 self.__treeselection = self.__treeview.get_selection() | 2088 self.__treeselection = self.__treeview.get_selection() |
2047 self.__treeselection.set_mode(gtk.SELECTION_MULTIPLE) | 2089 self.__treeselection.set_mode(gtk.SELECTION_MULTIPLE) |
2048 self.__treeselection.set_select_function(self.controlSelection) | 2090 self.__treeselection.set_select_function(self._controlSelection) |
2049 self.__selection_control = True | 2091 self.__selection_control = True |
2050 if len(self.__liststore) > 0: | 2092 if len(self.__liststore) > 0: |
2051 self.__treeview.set_cursor_on_cell((0,),self.__unit_column, | 2093 self.__treeview.set_cursor_on_cell((0,),self.__unit_column, |
2052 self.__unit_column.get_cell_renderers()[0],True) | 2094 self.__unit_column.get_cell_renderers()[0],True) |
2053 self.__treeview.grab_focus() | 2095 self.__treeview.grab_focus() |
2054 self.__cursor = self.__treeview.get_cursor() | 2096 self.__cursor = self.__treeview.get_cursor() |
2055 # Show | 2097 # Show |
2056 self.setColumnsHeaders() | 2098 self._setColumnsHeaders() |
2057 self.__scrolled_window.show() | 2099 self.__scrolled_window.show() |
2058 | 2100 |
2059 def treeviewCursorChanged(self, treeview): | 2101 def _treeviewCursorChanged(self, treeview): |
2060 """def treeviewCursorChanged(self, treeview) | 2102 """_treeviewCursorChanged(treeview) |
2061 | 2103 |
2062 treeview: treewiew widget | 2104 treeview: treewiew widget |
2063 Method connected to "cursor-changed" signal | 2105 Method connected to "cursor-changed" signal |
2064 The "cursor-changed" signal is emitted when the cursor moves or is set | 2106 The "cursor-changed" signal is emitted when the cursor moves or is set |
2065 Sets the new cursor position in self.__cursor, it is used to avoid | 2107 Sets the new cursor position in self.__cursor, it is used to avoid |
2068 event = gtk.get_current_event() | 2110 event = gtk.get_current_event() |
2069 (_cursor_path, _column) = treeview.get_cursor() | 2111 (_cursor_path, _column) = treeview.get_cursor() |
2070 if event is None or event.type != gtk.gdk.BUTTON_RELEASE: | 2112 if event is None or event.type != gtk.gdk.BUTTON_RELEASE: |
2071 if not _column is self.__index_column: | 2113 if not _column is self.__index_column: |
2072 self.__cursor = treeview.get_cursor() | 2114 self.__cursor = treeview.get_cursor() |
2073 | 2115 |
2074 def treeviewClickedEvent(self, widget, event): | 2116 def _treeviewClickedEvent(self, widget, event): |
2075 """def treeviewClickedEvent(self, widget, event) | 2117 """_treeviewClickedEvent(widget, event) |
2076 | 2118 |
2077 widget: treewiew widget | 2119 widget: treewiew widget |
2078 event: clicked event | 2120 event: clicked event |
2079 Method connected to "button-press-event" signal | 2121 Method connected to "button-press-event" signal |
2080 The "button-press-event" signal is emitted when a mouse button is | 2122 The "button-press-event" signal is emitted when a mouse button is |
2095 return True | 2137 return True |
2096 if _column is self.columns[0]: | 2138 if _column is self.columns[0]: |
2097 self.__cursor[0] == _path_cursor | 2139 self.__cursor[0] == _path_cursor |
2098 return False | 2140 return False |
2099 | 2141 |
2100 def treeviewKeyPressEvent(self, widget, event): | 2142 def _treeviewKeyPressEvent(self, widget, event): |
2101 """def treeviewKeyPressEvent(self, widget, event) | 2143 """_treeviewKeyPressEvent(widget, event) |
2102 | 2144 |
2103 widget: treewiew widget | 2145 widget: treewiew widget |
2104 event: Key Press event | 2146 event: Key Press event |
2105 Method connected to "key-press-event" signal | 2147 Method connected to "key-press-event" signal |
2106 The "key-press-event" signal is emitted when the user presses a key | 2148 The "key-press-event" signal is emitted when the user presses a key |
2118 or (event.keyval == gtk.keysyms.Left \ | 2160 or (event.keyval == gtk.keysyms.Left \ |
2119 and _column == self.columns[1]): | 2161 and _column == self.columns[1]): |
2120 return True | 2162 return True |
2121 return False | 2163 return False |
2122 | 2164 |
2123 def moveCursor(self, treeview, step, count): | 2165 def _moveCursor(self, treeview, step, count): |
2124 """def treeviewKeyPressEvent(self, widget, event) | 2166 """_moveCursor(treeview, step, count) |
2125 | 2167 |
2126 treeview: the treeview that received the signal | 2168 treeview: the treeview that received the signal |
2127 step: the movement step size | 2169 step: the movement step size |
2128 count: the number of steps to take | 2170 count: the number of steps to take |
2129 | 2171 |
2134 | 2176 |
2135 Returns :TRUE if the signal was handled. | 2177 Returns :TRUE if the signal was handled. |
2136 """ | 2178 """ |
2137 return False | 2179 return False |
2138 | 2180 |
2139 def controlSelection(self, selection): | 2181 def _controlSelection(self, selection): |
2140 """def controlSelection(self, selection) | 2182 """_controlSelection(selection) |
2141 | 2183 |
2142 selection: treeselection | 2184 selection: treeselection |
2143 | 2185 |
2144 Method connected to set_selection_function() | 2186 Method connected to set_selection_function() |
2145 This method is called before any node is selected or unselected, | 2187 This method is called before any node is selected or unselected, |
2159 self.__selection_control = False | 2201 self.__selection_control = False |
2160 self.__treeselection.unselect_all() | 2202 self.__treeselection.unselect_all() |
2161 self.__selection_control = True | 2203 self.__selection_control = True |
2162 return False | 2204 return False |
2163 | 2205 |
2164 def selectAll(self, column): | 2206 def _selectAll(self, column): |
2165 """def selectAll(self, column) | 2207 """_selectAll(column) |
2166 | 2208 |
2167 column: index column | 2209 column: index column |
2168 Method connected to "clicked" event in the index column | 2210 Method connected to "clicked" event in the index column |
2169 If the user clickes in the index column header selecs or deselects | 2211 If the user clickes in the index column header selecs or deselects |
2170 all rows | 2212 all rows |
2179 else: | 2221 else: |
2180 # unselect all | 2222 # unselect all |
2181 self.__treeselection.unselect_all() | 2223 self.__treeselection.unselect_all() |
2182 self.__selection_control = True | 2224 self.__selection_control = True |
2183 | 2225 |
2184 def setColumnsHeaders(self): | 2226 def _setColumnsHeaders(self): |
2185 """def setColumnsHeaders(self) | 2227 """_setColumnsHeaders() |
2186 | 2228 |
2187 Sets the headers column values | 2229 Sets the headers column values |
2188 """ | 2230 """ |
2189 _path_record = self.__active_path_record | 2231 _path_record = self.__active_path_record |
2190 _number = _path_record[-1] | 2232 _number = _path_record[-1] |
2216 self.__price_column.set_title( | 2258 self.__price_column.set_title( |
2217 _("Price") + chr(10) + "[" + _price + "]") | 2259 _("Price") + chr(10) + "[" + _price + "]") |
2218 self.__amount_column.set_title( | 2260 self.__amount_column.set_title( |
2219 _("Amount") + chr(10) + "[" + str(_amount) + "]") | 2261 _("Amount") + chr(10) + "[" + str(_amount) + "]") |
2220 | 2262 |
2221 | 2263 def _setListstoreValues(self, path_record): |
2222 def setListstoreValues(self, path_record): | 2264 """_setListstoreValues(path_record) |
2223 """def setListstoreValues(self, path_record) | |
2224 | 2265 |
2225 path_record: Record path in the budget | 2266 path_record: Record path in the budget |
2226 Sets the liststore record values from a path record | 2267 Sets the liststore record values from a path record |
2227 """ | 2268 """ |
2228 self.__liststore.clear() | 2269 self.__liststore.clear() |
2246 #_record.prices[_budget.getActiveTitle()].prices] | 2287 #_record.prices[_budget.getActiveTitle()].prices] |
2247 #_record.getPrice(_budget.getActiveTitle()) | 2288 #_record.getPrice(_budget.getActiveTitle()) |
2248 ] | 2289 ] |
2249 _treeiter = self.__liststore.append(_values) | 2290 _treeiter = self.__liststore.append(_values) |
2250 | 2291 |
2251 def colorCell(self, column, cell_renderer, tree_model, iter, lcolor): | 2292 def _colorCell(self, column, cell_renderer, tree_model, iter, lcolor): |
2252 """def colorCell(self, column, cell_renderer, tree_model, iter, lcolor) | 2293 """_colorCell(column, cell_renderer, tree_model, iter, lcolor) |
2253 | 2294 |
2254 column: the gtk.TreeViewColumn in the treeview | 2295 column: the gtk.TreeViewColumn in the treeview |
2255 cell_renderer: a gtk.CellRenderer | 2296 cell_renderer: a gtk.CellRenderer |
2256 tree_model: the gtk.TreeModel | 2297 tree_model: the gtk.TreeModel |
2257 iter: gtk.TreeIter pointing at the row | 2298 iter: gtk.TreeIter pointing at the row |
2311 elif column is self.__type_column: | 2352 elif column is self.__type_column: |
2312 _hierarchy = tree_model[_row_path][0].recordType.hierarchy | 2353 _hierarchy = tree_model[_row_path][0].recordType.hierarchy |
2313 _type = tree_model[_row_path][0].recordType.type | 2354 _type = tree_model[_row_path][0].recordType.type |
2314 _subtype = tree_model[_row_path][0].recordType.subtype | 2355 _subtype = tree_model[_row_path][0].recordType.subtype |
2315 if _hierarchy == 1: | 2356 if _hierarchy == 1: |
2316 cell_renderer.set_property("pixbuf",self.chapter_icon) | 2357 cell_renderer.set_property("pixbuf",self.__chapter_icon) |
2317 else: | 2358 else: |
2318 if _type == 0: | 2359 if _type == 0: |
2319 cell_renderer.set_property("pixbuf",self.unit_icon) | 2360 cell_renderer.set_property("pixbuf",self.__unit_icon) |
2320 elif _type == 1: | 2361 elif _type == 1: |
2321 cell_renderer.set_property("pixbuf", | 2362 cell_renderer.set_property("pixbuf", |
2322 self.labourforce_icon) | 2363 self.__labourforce_icon) |
2323 elif _type == 2: | 2364 elif _type == 2: |
2324 cell_renderer.set_property("pixbuf", | 2365 cell_renderer.set_property("pixbuf", |
2325 self.machinery_icon) | 2366 self.__machinery_icon) |
2326 else: | 2367 else: |
2327 cell_renderer.set_property("pixbuf",self.material_icon) | 2368 cell_renderer.set_property("pixbuf",self.__material_icon) |
2328 if self.__treeview.get_cursor() == (_row_path,column): | 2369 if self.__treeview.get_cursor() == (_row_path,column): |
2329 cell_renderer.set_property('cell-background-gdk', | 2370 cell_renderer.set_property('cell-background-gdk', |
2330 gtk.gdk.color_parse(globalVars.color["ACTIVE"])) | 2371 gtk.gdk.color_parse(globalVars.color["ACTIVE"])) |
2331 else: | 2372 else: |
2332 cell_renderer.set_property('cell-background-gdk', | 2373 cell_renderer.set_property('cell-background-gdk', |
2333 lcolor[_number % 2]) | 2374 lcolor[_number % 2]) |
2334 | 2375 |
2335 def showParentRecord(self, column): | 2376 def _showParentRecord(self, column): |
2336 """def showParentRecord(self, column) | 2377 """_showParentRecord(column) |
2337 | 2378 |
2338 column: the column that is clicked | 2379 column: the column that is clicked |
2339 Method connected to "clicked" event of many columns | 2380 Method connected to "clicked" event of many columns |
2340 Show the parent record | 2381 Show the parent record |
2341 """ | 2382 """ |
2346 self.__treeview.set_cursor(self.__cursor[0], self.__cursor[1]) | 2387 self.__treeview.set_cursor(self.__cursor[0], self.__cursor[1]) |
2347 else: | 2388 else: |
2348 _path_record = self.__active_path_record[:-1] | 2389 _path_record = self.__active_path_record[:-1] |
2349 _parent = self.__active_path_record[-1] | 2390 _parent = self.__active_path_record[-1] |
2350 self.__active_path_record = _path_record | 2391 self.__active_path_record = _path_record |
2351 self.setColumnsHeaders() | 2392 self._setColumnsHeaders() |
2352 self.setListstoreValues(self.__active_path_record) | 2393 self._setListstoreValues(self.__active_path_record) |
2353 arg = ( _path_record ) | 2394 arg = ( _path_record ) |
2354 _page = self.__page() | 2395 _page = self.__page() |
2355 _page.propagateMessageFrom("change_active", self.__path, arg) | 2396 _page.propagateMessageFrom("change_active", self.__path, arg) |
2356 self.__treeview.set_cursor(_parent, self.__cursor[1]) | 2397 self.__treeview.set_cursor(_parent, self.__cursor[1]) |
2357 self.__cursor = self.__treeview.get_cursor() | 2398 self.__cursor = self.__treeview.get_cursor() |
2358 | 2399 |
2359 def showMessageRecord(self, record_path): | 2400 def _showMessageRecord(self, record_path): |
2360 """def showMessageRecord(self, record_path) | 2401 """_showMessageRecord(record_path) |
2361 | 2402 |
2362 record_path: the path of the record to show | 2403 record_path: the path of the record to show |
2363 Method connected to "change_active" message | 2404 Method connected to "change_active" message |
2364 Show the record especified in the "change_active" message | 2405 Show the record especified in the "change_active" message |
2365 """ | 2406 """ |
2366 _budget = self.__budget | 2407 _budget = self.__budget |
2367 self.__active_path_record = record_path | 2408 self.__active_path_record = record_path |
2368 self.setColumnsHeaders() | 2409 self._setColumnsHeaders() |
2369 self.setListstoreValues(self.__active_path_record) | 2410 self._setListstoreValues(self.__active_path_record) |
2370 self.__treeview.set_cursor((0,)) | 2411 self.__treeview.set_cursor((0,)) |
2371 | 2412 |
2372 def showRowRecord(self, treeview, treeview_path, column): | 2413 def _showRowRecord(self, treeview, treeview_path, column): |
2373 """def showRowRecord(self, treeview, treeview_path, column) | 2414 """_showRowRecord(treeview, treeview_path, column) |
2374 | 2415 |
2375 treeview: treview to show | 2416 treeview: treview to show |
2376 treeview_path: the path of the record to show | 2417 treeview_path: the path of the record to show |
2377 code: the code of the record to show | 2418 code: the code of the record to show |
2378 | 2419 |
2392 #_code = _model.get_value(_iter, 4) | 2433 #_code = _model.get_value(_iter, 4) |
2393 _path_record = self.__active_path_record + treeview_path | 2434 _path_record = self.__active_path_record + treeview_path |
2394 if self.__budget.hasPath(_path_record): | 2435 if self.__budget.hasPath(_path_record): |
2395 # if this record path is valid | 2436 # if this record path is valid |
2396 self.__active_path_record = _path_record | 2437 self.__active_path_record = _path_record |
2397 self.setColumnsHeaders() | 2438 self._setColumnsHeaders() |
2398 self.setListstoreValues(self.__active_path_record) | 2439 self._setListstoreValues(self.__active_path_record) |
2399 self.__treeview.set_cursor((0,)) | 2440 self.__treeview.set_cursor((0,)) |
2400 _arg = ( _path_record ) | 2441 _arg = ( _path_record ) |
2401 _page = self.__page() | 2442 _page = self.__page() |
2402 _page.propagateMessageFrom("change_active", self.__path, | 2443 _page.propagateMessageFrom("change_active", self.__path, |
2403 _arg ) | 2444 _arg ) |
2404 | 2445 |
2405 def runMessage(self, message, path, arg=None): | 2446 def runMessage(self, message, path, arg=None): |
2406 """def runMessage(self, message, path, arg=None) | 2447 """runMessage(message, path, arg=None) |
2407 | 2448 |
2408 message: the message type | 2449 message: the message type |
2409 "change_active": change the active record | 2450 "change_active": change the active record |
2410 "clear": clear instance | 2451 "clear": clear instance |
2411 path: tuple that identifies the pane in the notebook page | 2452 path: tuple that identifies the pane in the notebook page |
2416 """ | 2457 """ |
2417 _budget = self.__budget | 2458 _budget = self.__budget |
2418 if message == "change_active": | 2459 if message == "change_active": |
2419 if _budget.hasPath(arg): | 2460 if _budget.hasPath(arg): |
2420 _path_record = arg | 2461 _path_record = arg |
2421 self.showMessageRecord( _path_record) | 2462 self._showMessageRecord( _path_record) |
2422 elif message == "clear": | 2463 elif message == "clear": |
2423 self._clear() | 2464 self._clear() |
2424 | 2465 |
2425 def _clear(self): | 2466 def _clear(self): |
2426 """def _clear(self) | 2467 """_clear() |
2427 | 2468 |
2428 it deletes the __budget value | 2469 it deletes the __budget reference |
2429 this would not be necessary if there were not circular references, | |
2430 which are pending to fix | |
2431 """ | 2470 """ |
2432 del self.__budget | 2471 del self.__budget |
2433 | 2472 |
2434 def getWidget(self): | 2473 def _getWidget(self): |
2435 """def getWidget(self) | 2474 """_getWidget() |
2436 | 2475 |
2437 return the main widget (gtk.ScrolledWindow) | 2476 return the main widget (gtk.ScrolledWindow) |
2438 """ | 2477 """ |
2439 return self.__scrolled_window | 2478 return self.__scrolled_window |
2440 | 2479 |
2441 def getPath(self): | 2480 def _getPath(self): |
2442 """def getPath(self) | 2481 """_getPath() |
2443 | 2482 |
2444 return the tuple that identifies the pane in the notebook page | 2483 return the tuple that identifies the pane in the notebook page |
2445 """ | 2484 """ |
2446 return self.__path | 2485 return self.__path |
2447 | 2486 |
2448 def setPath(self, path): | 2487 def _setPath(self, path): |
2449 """def setPath(self) | 2488 """_setPath() |
2450 | 2489 |
2451 sets the tuple that identifies the pane in the notebook page | 2490 sets the tuple that identifies the pane in the notebook page |
2452 """ | 2491 """ |
2453 self.__path = path | 2492 self.__path = path |
2454 | 2493 |
2455 def getPage(self): | 2494 def _getPage(self): |
2456 """def getPage(self) | 2495 """_getPage() |
2457 | 2496 |
2458 return the Page | 2497 return the Page |
2459 """ | 2498 """ |
2460 return self.__page | 2499 return self.__page |
2461 | 2500 |
2462 def setPage(self,page): | 2501 def _setPage(self,page): |
2463 """def setPage(self) | 2502 """_setPage() |
2464 | 2503 |
2465 set the Page | 2504 set the Page |
2466 """ | 2505 """ |
2467 self.__page = page | 2506 self.__page = page |
2468 | 2507 |
2469 def getBudget(self): | 2508 def _getBudget(self): |
2470 """def getBudget(self) | 2509 """_getBudget() |
2471 | 2510 |
2472 return the Budget objet | 2511 return the Budget objet |
2473 """ | 2512 """ |
2474 return self.__budget | 2513 return self.__budget |
2475 | 2514 |
2476 def getActivePathRecord(self): | 2515 def _getActivePathRecord(self): |
2477 """def getActivePathRecord(self) | 2516 """_getActivePathRecord() |
2478 | 2517 |
2479 return the Active Path Record | 2518 return the Active Path Record |
2480 """ | 2519 """ |
2481 return self.__active_path_record | 2520 return self.__active_path_record |
2482 | 2521 |
2483 widget = property(getWidget, None, None, | 2522 widget = property(_getWidget, None, None, |
2484 "Pane configuration list") | 2523 "Pane configuration list") |
2485 path = property(getPath, setPath, None, | 2524 path = property(_getPath, _setPath, None, |
2486 "path that identifie the item in the page notebook") | 2525 "path that identifie the item in the page notebook") |
2487 page = property(getPage, setPage, None, | 2526 page = property(_getPage, _setPage, None, |
2488 "weak reference from Page instance which creates this class") | 2527 "weak reference from Page instance which creates this class") |
2489 budget = property(getBudget, None, None, | 2528 budget = property(_getBudget, None, None, |
2490 "Budget object") | 2529 "Budget object") |
2491 active_path_record = property(getActivePathRecord, None, None, | 2530 active_path_record = property(_getActivePathRecord, None, None, |
2492 "Active path record") | 2531 "Active path record") |
2532 | |
2493 | 2533 |
2494 class Measure(TreeView): | 2534 class Measure(TreeView): |
2495 """gui.Measure: | 2535 """gui.Measure: |
2496 | 2536 |
2497 Description: | 2537 Description: |
2498 Class to show a Measure List | 2538 Class to show a Measure List |
2499 Constructor: | 2539 Constructor: |
2500 Measure(budget, page, path) | 2540 Measure(budget, page, path, path_record=(0,) |
2501 budget: budget showed ("base.Budget" object) | 2541 budget: budget showed ("base.Budget" object) |
2502 page: weak reference from Page instance which creates this class | 2542 page: weak reference from Page instance which creates this class |
2503 path: tuple that represents the path of the List in the Page | 2543 path: tuple that represents the path of the List in the Page |
2504 Returns the newly created DecompositionList instance | 2544 path_record: path of the active record in the budget |
2505 Ancestry: | 2545 Ancestry: |
2506 +-- object | 2546 +-- object |
2507 +-- TreeView | 2547 +-- TreeView |
2508 +-- DecompositionList | 2548 +-- DecompositionList |
2509 Atributes: | 2549 Atributes: |
2510 "budget": Budget to show, base.obra instance. | 2550 budget: Read. Budget to show, base.obra instance. |
2511 "__active_path_record": path of the active record in the budget | 2551 widget: Read. Window that contains the table, gtk.ScrolledWindow |
2512 "widget or __scrolled_window": Window that contains the table, | 2552 path: Read-Write. Pane page identifier |
2513 (gtk.ScrolledWindow) | 2553 page: Read-Write. weak reference from Page instance which creates |
2514 "path": Pane page identifier | 2554 this class |
2515 "page": weak reference from Page instance which creates this class | 2555 active_path_record: Read. Path of the active record in the budget |
2516 "__active_color": The background color of the active cell as a | |
2517 gtk.gdk.Color object | |
2518 "__chapter_background_colors": The background colors of the Code | |
2519 column cells when there is a chapter record | |
2520 as a list of gtk.gdk.Color objects [even cell, uneven cell] | |
2521 "__methond_message": Method to send messages to the page | |
2522 "__liststore": list model which store the list data | |
2523 (gtk.ListStore object) | |
2524 "__treeview": widget for displaying decomposition lists (gtk.TreeView) | |
2525 "__index_column": Index column (gtk.TreeViewColumn object) | |
2526 "__code_column": Record code column (gtk.TreeViewColumn) | |
2527 "__unit_column": Unit of measure column (gtk.TreeViewColumn) | |
2528 "__description_column": record's short description column | |
2529 (gtk.TreeViewColumn) | |
2530 "__measure_column": Measure column (gtk.TreeViewColumn) | |
2531 "__price_column": Price column (gtk.TreeViewColumn) | |
2532 "__amount_column": Amount column(gtk.TreeViewColumn) | |
2533 "__end_column": End empty column (gtk.TreeViewColumn) | |
2534 "__treeselection": active selection | |
2535 "__selection_control": state of the selection control (True/False) | |
2536 "__cursor": Situation of the cursor in the table | |
2537 Methods: | 2556 Methods: |
2538 __init__(self, budget, page, path, path_record=(0,)) | 2557 runMessage |
2539 setListstoreValues(self, path_record) | |
2540 setColumnsHeaders(self) | |
2541 controlSelection(self, selection) | |
2542 showMessageRecord(self, record_path) | |
2543 treeviewCursorChanged(self, treeview) | |
2544 moveCursor(self, treeview, step, count) | |
2545 treeviewClickedEvent(self, widget, event) | |
2546 treeviewKeyPressEvent(self, widget, event) | |
2547 runMessage(self, message, path, arg=None) | |
2548 selectAll(self, column) | |
2549 colorCell(self, column, cell_renderer, tree_model, iter, lcolor) | |
2550 _clear(self) | |
2551 getWidget(self) | |
2552 {get/set}Path | |
2553 {get/set}Page | |
2554 getBudget(self) | |
2555 getActivePathRecord(self) | |
2556 """ | 2558 """ |
2557 | 2559 |
2558 def __init__(self, budget, page, path, path_record=(0,)): | 2560 def __init__(self, budget, page, path, path_record=(0,)): |
2559 """def __init__(self, budget, page, path, path_record=(0,)) | 2561 """__init__(budget, page, path, path_record=(0,)) |
2560 | 2562 |
2561 budget: budget: budget showed ("base.Budget" object) | 2563 budget: budget: budget showed ("base.Budget" object) |
2562 page: weak reference from Page instance which creates this class | 2564 page: weak reference from Page instance which creates this class |
2563 path: tuple that represents the path of the List in the Page | 2565 path: tuple that represents the path of the List in the Page |
2564 path_record: path of the active record in the budget | 2566 path_record: path of the active record in the budget |
2567 | |
2568 self.__budget: budget showed ("base.Budget" object) | |
2569 self.__page: weak reference from Page instance which creates this class | |
2570 self.__path: tuple that represents the path of the List in the Page | |
2571 self.__active_path_record: path of the active record in the budget | |
2572 self.__liststore: list model which store the list data | |
2573 (gtk.ListStore object) | |
2574 self.__treeview: widget to display decomposition lists | |
2575 (gtk.TreeView) | |
2576 self.__scrolled_window: widget to scroll the treeview | |
2577 gtk.ScrolledWindow() | |
2578 self.__chapter_background_colors: The background colors of the Code | |
2579 column cells when there is a chapter record | |
2580 as a list of gtk.gdk.Color objects [even cell, uneven cell] | |
2581 self.__index_column: Index column (gtk.TreeViewColumn object) | |
2582 self.__linetype_column: Linetype column (gtk.TreeViewColumn object) | |
2583 self.__comment_column: Comment column (gtk.TreeViewColumn) | |
2584 self.__unit_column: Unit column (gtk.TreeViewColumn) | |
2585 self.__length_column: Legth column (gtk.TreeViewColumn) | |
2586 self.__width_column: With column (gtk.TreeViewColumn) | |
2587 self.__height_column: Height column (gtk.TreeViewColumn) | |
2588 self.__formula_column: Formula column (gtk.TreeViewColumn) | |
2589 self.__parcial_column: Parcial column (gtk.TreeViewColumn) | |
2590 self.__subtotal_column: Subtotal column (gtk.TreeViewColumn) | |
2591 self.__end_column: End empty column (gtk.TreeViewColumn | |
2592 self.__calculatedline_icon: gtk.gdk.pixbuf | |
2593 self.__normalline_icon: gtk.gdk.pixbuf | |
2594 self.__parcialline_icon: gtk.gdk.pixbuf | |
2595 self.__acumulatedline_icon: gtk.gdk.pixbuf | |
2596 self.__treeselection: active selection | |
2597 self.__selection_control: state of the selection control (True/False) | |
2598 self.__cursor: Situation of the cursor in the table | |
2565 | 2599 |
2566 Sets the init atributes | 2600 Sets the init atributes |
2567 Creates the init list values in self.__liststore from the budget | 2601 Creates the init list values in self.__liststore from the budget |
2568 showing the top record from the record with path path_record | 2602 showing the top record from the record with path path_record |
2569 Creates the list in self.__treeview | 2603 Creates the list in self.__treeview |
2582 print _("Record path must be a tuple") | 2616 print _("Record path must be a tuple") |
2583 path_record = (0,) | 2617 path_record = (0,) |
2584 self.__active_path_record = path_record | 2618 self.__active_path_record = path_record |
2585 # ListStore | 2619 # ListStore |
2586 self.__liststore = gtk.ListStore(object) | 2620 self.__liststore = gtk.ListStore(object) |
2587 self.setListstoreValues(self.__active_path_record) | 2621 self._setListstoreValues(self.__active_path_record) |
2588 # Treeview | 2622 # Treeview |
2589 self.__treeview = gtk.TreeView(self.__liststore) | 2623 self.__treeview = gtk.TreeView(self.__liststore) |
2590 self.__treeview.set_enable_search(False) | 2624 self.__treeview.set_enable_search(False) |
2591 self.__treeview.set_reorderable(False) | 2625 self.__treeview.set_reorderable(False) |
2592 self.__treeview.set_headers_clickable(True) | 2626 self.__treeview.set_headers_clickable(True) |
2604 gtk.gdk.color_parse(globalVars.color["EVEN"])] | 2638 gtk.gdk.color_parse(globalVars.color["EVEN"])] |
2605 self.__chapter_background_colors = [ | 2639 self.__chapter_background_colors = [ |
2606 gtk.gdk.color_parse(globalVars.color["CHAPTER-UNEVEN"]), | 2640 gtk.gdk.color_parse(globalVars.color["CHAPTER-UNEVEN"]), |
2607 gtk.gdk.color_parse(globalVars.color["CHAPTER-EVEN"])] | 2641 gtk.gdk.color_parse(globalVars.color["CHAPTER-EVEN"])] |
2608 super(Measure,self).__init__( | 2642 super(Measure,self).__init__( |
2609 [("INDEX",self.selectAll,42), | 2643 [("INDEX",self._selectAll,42), |
2610 ("PIXBUF", self.passMethod, | 2644 ("PIXBUF", self._passMethod, |
2611 gtk.Label("A"*4).size_request()[0] +10, | 2645 gtk.Label("A"*4).size_request()[0] +10, |
2612 _text_color, _background_color), | 2646 _text_color, _background_color), |
2613 ("CALCULATEDTEXT", self.passMethod, | 2647 ("CALCULATEDTEXT", self._passMethod, |
2614 gtk.Label("A"*12).size_request()[0] +10, | 2648 gtk.Label("A"*12).size_request()[0] +10, |
2615 _text_color, _background_color), | 2649 _text_color, _background_color), |
2616 ("CALCULATED", self.passMethod, | 2650 ("CALCULATED", self._passMethod, |
2617 gtk.Label("A"*5).size_request()[0] +10, | 2651 gtk.Label("A"*5).size_request()[0] +10, |
2618 _text_color, _background_color), | 2652 _text_color, _background_color), |
2619 ("CALCULATED", self.passMethod, | 2653 ("CALCULATED", self._passMethod, |
2620 gtk.Label("A"*7).size_request()[0] +10, | 2654 gtk.Label("A"*7).size_request()[0] +10, |
2621 _text_color, _background_color), | 2655 _text_color, _background_color), |
2622 ("CALCULATED", self.passMethod, | 2656 ("CALCULATED", self._passMethod, |
2623 gtk.Label("A"*7).size_request()[0] +10, | 2657 gtk.Label("A"*7).size_request()[0] +10, |
2624 _text_color, _background_color), | 2658 _text_color, _background_color), |
2625 ("CALCULATED", self.passMethod, | 2659 ("CALCULATED", self._passMethod, |
2626 gtk.Label("A"*7).size_request()[0] +10, | 2660 gtk.Label("A"*7).size_request()[0] +10, |
2627 _text_color, _background_color), | 2661 _text_color, _background_color), |
2628 ("CALCULATEDTEXT", self.passMethod, | 2662 ("CALCULATEDTEXT", self._passMethod, |
2629 gtk.Label("A"*12).size_request()[0] +10, | 2663 gtk.Label("A"*12).size_request()[0] +10, |
2630 _text_color, _background_color), | 2664 _text_color, _background_color), |
2631 ("CALCULATED", self.passMethod, | 2665 ("CALCULATED", self._passMethod, |
2632 gtk.Label("A"*7).size_request()[0] +10, | 2666 gtk.Label("A"*7).size_request()[0] +10, |
2633 _calculated_text, _background_color), | 2667 _calculated_text, _background_color), |
2634 ("CALCULATED", self.passMethod, | 2668 ("CALCULATED", self._passMethod, |
2635 gtk.Label("A"*7).size_request()[0] +10, | 2669 gtk.Label("A"*7).size_request()[0] +10, |
2636 _calculated_text, _background_color), | 2670 _calculated_text, _background_color), |
2637 ]) | 2671 ]) |
2672 # Colums | |
2638 self.__index_column = self.columns[0] | 2673 self.__index_column = self.columns[0] |
2639 self.__linetype_column = self.columns[1] | 2674 self.__linetype_column = self.columns[1] |
2640 self.__comment_column = self.columns[2] | 2675 self.__comment_column = self.columns[2] |
2641 self.__units_column = self.columns[3] | 2676 self.__units_column = self.columns[3] |
2642 self.__length_column = self.columns[4] | 2677 self.__length_column = self.columns[4] |
2648 self.__end_column = self.columns[10] | 2683 self.__end_column = self.columns[10] |
2649 # Index column | 2684 # Index column |
2650 self.__treeview.append_column(self.__index_column) | 2685 self.__treeview.append_column(self.__index_column) |
2651 # Linetype column | 2686 # Linetype column |
2652 self.__treeview.append_column(self.__linetype_column) | 2687 self.__treeview.append_column(self.__linetype_column) |
2653 self.calculatedline_icon = gtk.gdk.pixbuf_new_from_file( | 2688 self.__calculatedline_icon = gtk.gdk.pixbuf_new_from_file( |
2654 globalVars.getAppPath("CALCULATEDLINE-ICON")) | 2689 globalVars.getAppPath("CALCULATEDLINE-ICON")) |
2655 self.normalline_icon = gtk.gdk.pixbuf_new_from_file( | 2690 self.__normalline_icon = gtk.gdk.pixbuf_new_from_file( |
2656 globalVars.getAppPath("NORMALLINE-ICON") ) | 2691 globalVars.getAppPath("NORMALLINE-ICON") ) |
2657 self.parcialline_icon = gtk.gdk.pixbuf_new_from_file( | 2692 self.__parcialline_icon = gtk.gdk.pixbuf_new_from_file( |
2658 globalVars.getAppPath("PARCIALLINE-ICON") ) | 2693 globalVars.getAppPath("PARCIALLINE-ICON") ) |
2659 self.acumulatedline_icon = gtk.gdk.pixbuf_new_from_file( | 2694 self.__acumulatedline_icon = gtk.gdk.pixbuf_new_from_file( |
2660 globalVars.getAppPath("ACUMULATEDLINE-ICON")) | 2695 globalVars.getAppPath("ACUMULATEDLINE-ICON")) |
2661 # Comment column | 2696 # Comment column |
2662 self.__treeview.append_column(self.__comment_column) | 2697 self.__treeview.append_column(self.__comment_column) |
2663 # Units column | 2698 # Units column |
2664 self.__treeview.append_column(self.__units_column) | 2699 self.__treeview.append_column(self.__units_column) |
2675 # Subtotal column | 2710 # Subtotal column |
2676 self.__treeview.append_column(self.__subtotal_column) | 2711 self.__treeview.append_column(self.__subtotal_column) |
2677 # End Column | 2712 # End Column |
2678 self.__treeview.append_column(self.__end_column) | 2713 self.__treeview.append_column(self.__end_column) |
2679 # Connect | 2714 # Connect |
2680 self.__treeview.connect("move-cursor", self.moveCursor) | 2715 self.__treeview.connect("move-cursor", self._moveCursor) |
2681 self.__treeview.connect("key-press-event", self.treeviewKeyPressEvent) | 2716 self.__treeview.connect("key-press-event", self._treeviewKeyPressEvent) |
2682 self.__treeview.connect("button-press-event", self.treeviewClickedEvent) | 2717 self.__treeview.connect("button-press-event", |
2683 self.__treeview.connect("cursor-changed", self.treeviewCursorChanged) | 2718 self._treeviewClickedEvent) |
2719 self.__treeview.connect("cursor-changed", self._treeviewCursorChanged) | |
2684 # control selection | 2720 # control selection |
2685 self.__treeselection = self.__treeview.get_selection() | 2721 self.__treeselection = self.__treeview.get_selection() |
2686 self.__treeselection.set_mode(gtk.SELECTION_MULTIPLE) | 2722 self.__treeselection.set_mode(gtk.SELECTION_MULTIPLE) |
2687 self.__treeselection.set_select_function(self.controlSelection) | 2723 self.__treeselection.set_select_function(self._controlSelection) |
2688 self.__selection_control = True | 2724 self.__selection_control = True |
2689 self.__treeview.set_cursor_on_cell((1,), self.columns[1], | 2725 self.__treeview.set_cursor_on_cell((1,), self.columns[1], |
2690 self.columns[1].get_cell_renderers()[0],True) | 2726 self.columns[1].get_cell_renderers()[0],True) |
2691 self.__treeview.grab_focus() | 2727 self.__treeview.grab_focus() |
2692 self.__cursor = self.__treeview.get_cursor() | 2728 self.__cursor = self.__treeview.get_cursor() |
2693 # Show | 2729 # Show |
2694 self.setColumnsHeaders() | 2730 self._setColumnsHeaders() |
2695 self.__scrolled_window.show() | 2731 self.__scrolled_window.show() |
2696 | 2732 |
2697 def passMethod(self, args): | 2733 def _passMethod(self, column): |
2734 """_passMethod(column) | |
2735 | |
2736 column: the column that is clicked | |
2737 Method connected to "clicked" event of many columns | |
2738 Do nothing | |
2739 """ | |
2698 pass | 2740 pass |
2699 | 2741 |
2700 def setListstoreValues(self, path_record): | 2742 def _setListstoreValues(self, path_record): |
2701 """def setListstoreValues(self, path_record) | 2743 """_setListstoreValues(path_record) |
2702 | 2744 |
2703 path_record: Record path in the budget | 2745 path_record: Record path in the budget |
2704 Sets the liststore record values from a path record | 2746 Sets the liststore record values from a path record |
2705 """ | 2747 """ |
2706 self.__liststore.clear() | 2748 self.__liststore.clear() |
2710 else: | 2752 else: |
2711 _measure = _budget.getMeasure(path_record) | 2753 _measure = _budget.getMeasure(path_record) |
2712 if isinstance(_measure, base.Measure): | 2754 if isinstance(_measure, base.Measure): |
2713 _lines = _measure.lines | 2755 _lines = _measure.lines |
2714 for _line in _lines: | 2756 for _line in _lines: |
2715 _values = [ | 2757 _values = [ _line ] |
2716 _line, | |
2717 ## _line.type, | |
2718 ## _line.comment, | |
2719 ## _line.units, | |
2720 ## _line.length, | |
2721 ## _line.width, | |
2722 ## _line.height | |
2723 ] | |
2724 _treeiter = self.__liststore.append(_values) | 2758 _treeiter = self.__liststore.append(_values) |
2725 else: | 2759 else: |
2726 raise ValueError, utils.mapping(_("measure must be a Measure "\ | 2760 raise ValueError, utils.mapping(_("measure must be a Measure "\ |
2727 "object. Type: $1"), (type(_measure),)) | 2761 "object. Type: $1"), (type(_measure),)) |
2728 def setColumnsHeaders(self): | 2762 |
2729 """def setColumnsHeaders(self) | 2763 def _setColumnsHeaders(self): |
2764 """_setColumnsHeaders() | |
2730 | 2765 |
2731 Sets the headers column values | 2766 Sets the headers column values |
2732 """ | 2767 """ |
2733 _measure = self.__budget.getMeasure(self.__active_path_record) | 2768 _measure = self.__budget.getMeasure(self.__active_path_record) |
2734 _DS = self.__budget.getDecimals("DS") | 2769 _DS = self.__budget.getDecimals("DS") |
2741 self.columns[5].set_title(_("Width\n(c)")) | 2776 self.columns[5].set_title(_("Width\n(c)")) |
2742 self.columns[6].set_title(_("Height\n(d)")) | 2777 self.columns[6].set_title(_("Height\n(d)")) |
2743 self.columns[7].set_title(_("Formula")) | 2778 self.columns[7].set_title(_("Formula")) |
2744 self.columns[8].set_title(_("Parcial\n[%s]" % _total_str)) | 2779 self.columns[8].set_title(_("Parcial\n[%s]" % _total_str)) |
2745 self.columns[9].set_title(_("Subtotal")) | 2780 self.columns[9].set_title(_("Subtotal")) |
2746 def controlSelection(self, selection): | 2781 |
2747 """def controlSelection(self, selection) | 2782 def _controlSelection(self, selection): |
2783 """_controlSelection(selection) | |
2748 | 2784 |
2749 selection: treeselection | 2785 selection: treeselection |
2750 | 2786 |
2751 Method connected to set_selection_function() | 2787 Method connected to set_selection_function() |
2752 This method is called before any node is selected or unselected, | 2788 This method is called before any node is selected or unselected, |
2766 self.__selection_control = False | 2802 self.__selection_control = False |
2767 self.__treeselection.unselect_all() | 2803 self.__treeselection.unselect_all() |
2768 self.__selection_control = True | 2804 self.__selection_control = True |
2769 return False | 2805 return False |
2770 | 2806 |
2771 def showMessageRecord(self, record_path): | 2807 def _showMessageRecord(self, record_path): |
2772 """def showMessageRecord(self, record_path) | 2808 """_showMessageRecord(record_path) |
2773 | 2809 |
2774 record_path: the path of the record to show | 2810 record_path: the path of the record to show |
2775 Method connected to "change_active" message | 2811 Method connected to "change_active" message |
2776 Show the record especified in the "change_active" message | 2812 Show the record especified in the "change_active" message |
2777 """ | 2813 """ |
2778 _budget = self.__budget | 2814 _budget = self.__budget |
2779 self.__active_path_record = record_path | 2815 self.__active_path_record = record_path |
2780 self.setColumnsHeaders() | 2816 self._setColumnsHeaders() |
2781 self.setListstoreValues(self.__active_path_record) | 2817 self._setListstoreValues(self.__active_path_record) |
2782 self.__treeview.set_cursor((0,)) | 2818 self.__treeview.set_cursor((0,)) |
2783 | 2819 |
2784 def treeviewCursorChanged(self, treeview): | 2820 def _treeviewCursorChanged(self, treeview): |
2785 """def treeviewCursorChanged(self, treeview) | 2821 """_treeviewCursorChanged(treeview) |
2786 | 2822 |
2787 treeview: treewiew widget | 2823 treeview: treewiew widget |
2788 Method connected to "cursor-changed" signal | 2824 Method connected to "cursor-changed" signal |
2789 The "cursor-changed" signal is emitted when the cursor moves or is set | 2825 The "cursor-changed" signal is emitted when the cursor moves or is set |
2790 Sets the new cursor position in self.__cursor, it is used to avoid | 2826 Sets the new cursor position in self.__cursor, it is used to avoid |
2794 (_cursor_path, _column) = treeview.get_cursor() | 2830 (_cursor_path, _column) = treeview.get_cursor() |
2795 if event is None or event.type != gtk.gdk.BUTTON_RELEASE: | 2831 if event is None or event.type != gtk.gdk.BUTTON_RELEASE: |
2796 if not _column is self.__index_column: | 2832 if not _column is self.__index_column: |
2797 self.__cursor = treeview.get_cursor() | 2833 self.__cursor = treeview.get_cursor() |
2798 | 2834 |
2799 def moveCursor(self, treeview, step, count): | 2835 def _moveCursor(self, treeview, step, count): |
2800 """def treeviewKeyPressEvent(self, widget, event) | 2836 """moveCursor(treeview, step, count) |
2801 | 2837 |
2802 treeview: the treeview that received the signal | 2838 treeview: the treeview that received the signal |
2803 step: the movement step size | 2839 step: the movement step size |
2804 count: the number of steps to take | 2840 count: the number of steps to take |
2805 | 2841 |
2810 | 2846 |
2811 Returns :TRUE if the signal was handled. | 2847 Returns :TRUE if the signal was handled. |
2812 """ | 2848 """ |
2813 return False | 2849 return False |
2814 | 2850 |
2815 def treeviewClickedEvent(self, widget, event): | 2851 def _treeviewClickedEvent(self, widget, event): |
2816 """def treeviewClickedEvent(self, widget, event) | 2852 """_treeviewClickedEvent(widget, event) |
2817 | 2853 |
2818 widget: treewiew widget | 2854 widget: treewiew widget |
2819 event: clicked event | 2855 event: clicked event |
2820 Method connected to "button-press-event" signal | 2856 Method connected to "button-press-event" signal |
2821 The "button-press-event" signal is emitted when a mouse button is | 2857 The "button-press-event" signal is emitted when a mouse button is |
2836 return True | 2872 return True |
2837 if _column is self.columns[0]: | 2873 if _column is self.columns[0]: |
2838 self.__cursor[0] == _path_cursor | 2874 self.__cursor[0] == _path_cursor |
2839 return False | 2875 return False |
2840 | 2876 |
2841 def treeviewKeyPressEvent(self, widget, event): | 2877 def _treeviewKeyPressEvent(self, widget, event): |
2842 """def treeviewKeyPressEvent(self, widget, event) | 2878 """_treeviewKeyPressEvent(widget, event) |
2843 | 2879 |
2844 widget: treewiew widget | 2880 widget: treewiew widget |
2845 event: Key Press event | 2881 event: Key Press event |
2846 Method connected to "key-press-event" signal | 2882 Method connected to "key-press-event" signal |
2847 The "key-press-event" signal is emitted when the user presses a key | 2883 The "key-press-event" signal is emitted when the user presses a key |
2860 and _column == self.columns[1]): | 2896 and _column == self.columns[1]): |
2861 return True | 2897 return True |
2862 return False | 2898 return False |
2863 | 2899 |
2864 def runMessage(self, message, path, arg=None): | 2900 def runMessage(self, message, path, arg=None): |
2865 """def runMessage(self, message, path, arg=None) | 2901 """runMessage(message, path, arg=None) |
2866 | 2902 |
2867 message: the message type | 2903 message: the message type |
2868 "change_active": change the active record | 2904 "change_active": change the active record |
2869 "clear": clear instance | 2905 "clear": clear instance |
2870 path: tuple that identifies the pane in the notebook page | 2906 path: tuple that identifies the pane in the notebook page |
2875 """ | 2911 """ |
2876 _budget = self.__budget | 2912 _budget = self.__budget |
2877 if message == "change_active": | 2913 if message == "change_active": |
2878 if _budget.hasPath(arg): | 2914 if _budget.hasPath(arg): |
2879 _path_record = arg | 2915 _path_record = arg |
2880 self.showMessageRecord( _path_record) | 2916 self._showMessageRecord( _path_record) |
2881 elif message == "clear": | 2917 elif message == "clear": |
2882 self._clear() | 2918 self._clear() |
2883 | 2919 |
2884 def selectAll(self, column): | 2920 def _selectAll(self, column): |
2885 """def selectAll(self, column) | 2921 """_selectAll(column) |
2886 | 2922 |
2887 column: index column | 2923 column: index column |
2888 Method connected to "clicked" event in the index column | 2924 Method connected to "clicked" event in the index column |
2889 If the user clickes in the index column header selecs or deselects | 2925 If the user clickes in the index column header selecs or deselects |
2890 all rows | 2926 all rows |
2899 else: | 2935 else: |
2900 # unselect all | 2936 # unselect all |
2901 self.__treeselection.unselect_all() | 2937 self.__treeselection.unselect_all() |
2902 self.__selection_control = True | 2938 self.__selection_control = True |
2903 | 2939 |
2904 def colorCell(self, column, cell_renderer, tree_model, iter, lcolor): | 2940 def _colorCell(self, column, cell_renderer, tree_model, iter, lcolor): |
2905 """def colorCell(self, column, cell_renderer, tree_model, iter, lcolor) | 2941 """_colorCell(column, cell_renderer, tree_model, iter, lcolor) |
2906 | 2942 |
2907 column: the gtk.TreeViewColumn in the treeview | 2943 column: the gtk.TreeViewColumn in the treeview |
2908 cell_renderer: a gtk.CellRenderer | 2944 cell_renderer: a gtk.CellRenderer |
2909 tree_model: the gtk.TreeModel | 2945 tree_model: the gtk.TreeModel |
2910 iter: gtk.TreeIter pointing at the row | 2946 iter: gtk.TreeIter pointing at the row |
2934 'cell-background-gdk', lcolor[_number % 2]) | 2970 'cell-background-gdk', lcolor[_number % 2]) |
2935 elif column is self.__linetype_column: | 2971 elif column is self.__linetype_column: |
2936 _measure = tree_model[_row_path][0] | 2972 _measure = tree_model[_row_path][0] |
2937 _type = _measure.lineType | 2973 _type = _measure.lineType |
2938 if _type == 0: | 2974 if _type == 0: |
2939 cell_renderer.set_property("pixbuf",self.normalline_icon) | 2975 cell_renderer.set_property("pixbuf",self.__normalline_icon) |
2940 elif _type == 1: | 2976 elif _type == 1: |
2941 cell_renderer.set_property("pixbuf",self.parcialline_icon) | 2977 cell_renderer.set_property("pixbuf",self.__parcialline_icon) |
2942 elif _type == 2: | 2978 elif _type == 2: |
2943 cell_renderer.set_property("pixbuf", | 2979 cell_renderer.set_property("pixbuf", |
2944 self.acumulatedline_icon) | 2980 self.__acumulatedline_icon) |
2945 else: #elif _type == 3: | 2981 else: #elif _type == 3: |
2946 cell_renderer.set_property("pixbuf", | 2982 cell_renderer.set_property("pixbuf", |
2947 self.calculatedline_icon) | 2983 self.__calculatedline_icon) |
2948 | 2984 |
2949 elif column is self.__comment_column: | 2985 elif column is self.__comment_column: |
2950 _measure = tree_model[_row_path][0] | 2986 _measure = tree_model[_row_path][0] |
2951 _comment = str(_measure.comment) | 2987 _comment = str(_measure.comment) |
2952 cell_renderer.set_property('text', _comment) | 2988 cell_renderer.set_property('text', _comment) |
3018 else: | 3054 else: |
3019 cell_renderer.set_property('cell-background-gdk', | 3055 cell_renderer.set_property('cell-background-gdk', |
3020 lcolor[_number % 2]) | 3056 lcolor[_number % 2]) |
3021 | 3057 |
3022 def _clear(self): | 3058 def _clear(self): |
3023 """def _clear(self) | 3059 """_clear() |
3024 | 3060 |
3025 it deletes the __budget value | 3061 it deletes the __budget value |
3026 this would not be necessary if there were not circular references, | |
3027 which are pending to fix | |
3028 """ | 3062 """ |
3029 del self.__budget | 3063 del self.__budget |
3030 | 3064 |
3031 def getWidget(self): | 3065 def _getWidget(self): |
3032 """def getWidget(self) | 3066 """_getWidget() |
3033 | 3067 |
3034 return the main widget (gtk.ScrolledWindow) | 3068 return the main widget (gtk.ScrolledWindow) |
3035 """ | 3069 """ |
3036 return self.__scrolled_window | 3070 return self.__scrolled_window |
3037 | 3071 |
3038 def getPath(self): | 3072 def _getPath(self): |
3039 """def getPath(self) | 3073 """_getPath() |
3040 | 3074 |
3041 return the tuple that identifies the pane in the notebook page | 3075 return the tuple that identifies the pane in the notebook page |
3042 """ | 3076 """ |
3043 return self.__path | 3077 return self.__path |
3044 | 3078 |
3045 def setPath(self, path): | 3079 def _setPath(self, path): |
3046 """def setPath(self) | 3080 """_setPath() |
3047 | 3081 |
3048 sets the tuple that identifies the pane in the notebook page | 3082 sets the tuple that identifies the pane in the notebook page |
3049 """ | 3083 """ |
3050 self.__path = path | 3084 self.__path = path |
3051 def getPage(self): | 3085 |
3052 """def getPage(self) | 3086 def _getPage(self): |
3087 """_getPage() | |
3053 | 3088 |
3054 return the Page | 3089 return the Page |
3055 """ | 3090 """ |
3056 return self.__page | 3091 return self.__page |
3057 | 3092 |
3058 def setPage(self,page): | 3093 def _setPage(self,page): |
3059 """def setPage(self) | 3094 """_setPage() |
3060 | 3095 |
3061 set the Page | 3096 set the Page |
3062 """ | 3097 """ |
3063 self.__page = page | 3098 self.__page = page |
3064 | 3099 |
3065 def getBudget(self): | 3100 def _getBudget(self): |
3066 """def getBudget(self) | 3101 """_getBudget() |
3067 | 3102 |
3068 return the Budget objet | 3103 return the Budget objet |
3069 """ | 3104 """ |
3070 return self.__budget | 3105 return self.__budget |
3071 | 3106 |
3072 def getActivePathRecord(self): | 3107 def _getActivePathRecord(self): |
3073 """def getActivePathRecord(self) | 3108 """getActivePathRecord() |
3074 | 3109 |
3075 return the Active Path Record | 3110 return the Active Path Record |
3076 """ | 3111 """ |
3077 return self.__active_path_record | 3112 return self.__active_path_record |
3078 | 3113 |
3079 widget = property(getWidget, None, None, | 3114 widget = property(_getWidget, None, None, |
3080 "Pane configuration list") | 3115 "Pane configuration list") |
3081 path = property(getPath, setPath, None, | 3116 path = property(_getPath, _setPath, None, |
3082 "Path that identifies the item in the page notebook") | 3117 "Path that identifies the item in the page notebook") |
3083 page = property(getPage, setPage, None, | 3118 page = property(_getPage, _setPage, None, |
3084 "Weak reference from Page instance which creates this class") | 3119 "Weak reference from Page instance which creates this class") |
3085 budget = property(getBudget, None, None, | 3120 budget = property(_getBudget, None, None, |
3086 "Budget object") | 3121 "Budget object") |
3087 active_path_record = property(getActivePathRecord, None, None, | 3122 active_path_record = property(_getActivePathRecord, None, None, |
3088 "Active Code") | 3123 "Active Code") |
3124 | |
3089 | 3125 |
3090 class Description(object): | 3126 class Description(object): |
3091 """gui.Description | 3127 """gui.Description |
3092 | 3128 |
3093 Description: | 3129 Description: |
3094 Class to show a description text of a record in a pane | 3130 Class to show a description text of a record in a pane |
3095 Constructor: | 3131 Constructor: |
3096 Description(budget, code) | 3132 Description(budget, code) |
3097 budget: budget | 3133 budget: base.Budget object |
3098 code: code record | 3134 code: record code |
3099 Ancestry: | 3135 Ancestry: |
3100 +-- object | 3136 +-- object |
3101 +-- Description | 3137 +-- Description |
3102 Atributes: | 3138 Atributes: |
3103 "widget": the main widget (gtk.ScrolledWindow object) | 3139 widget: the main widget (gtk.ScrolledWindow object) |
3104 "path": the tuple that identifies the pane in the notebook page | 3140 path: the tuple that identifies the pane in the notebook page |
3105 TODO | 3141 budget: The budget (base.obra objetc) |
3106 "budget": The budget (base.obra objetc) | 3142 active_path_record: The active path record |
3107 "active_code": The active code of the record | |
3108 "__textbuffer": The textbuffer of the textview that contain | |
3109 the record text. | |
3110 "__label": The gtk.label with the title of the pane | |
3111 Methods: | 3143 Methods: |
3112 __init__(self, budget, code) | 3144 runMessage |
3113 setActiveCode(self, code) | |
3114 runMessage(self, message, nt, arg=None) | |
3115 _clear(self) | |
3116 getWidget(self) | |
3117 {get/set}Path | |
3118 {get/seg}Page | |
3119 getBudget(self) | |
3120 getActviCode(self) | |
3121 """ | 3145 """ |
3122 # TODO: make standar: "DecompositonList and Description" | 3146 # TODO: make standar: "DecompositonList and Description" |
3147 | |
3123 def __init__(self, budget, page, path, path_record=(0,)): | 3148 def __init__(self, budget, page, path, path_record=(0,)): |
3124 """def __init__(self, budget, page, path, path_record=(0,)) | 3149 """__init__(budget, page, path, path_record=(0,)) |
3125 | 3150 |
3126 budget: the budget (base.obra object) | 3151 budget: the budget (base.obra object) |
3127 page: weak reference from Page instance which creates this class | 3152 page: weak reference from Page instance which creates this class |
3128 path: the path position of the description in the page | 3153 path: the path position of the description in the page |
3129 path_record: the path of the active record | 3154 path_record: the path of the active record |
3155 | |
3156 self.__budget: the budget (base.obra object) | |
3157 self.__page: weak reference from Page instance which creates this class | |
3158 self.__path: the path position of the description in the page | |
3159 self.__active_path_recordthe path of the active record | |
3160 | |
3161 self.__textbuffer: The textbuffer of the textview that contain | |
3162 the record text. | |
3163 self.__label: The gtk.label with the title of the pane | |
3164 self.__widget: the main pane widget, a gtk.ScrolledWindow() | |
3130 | 3165 |
3131 Creates an shows the scroledwindow that contain the description text | 3166 Creates an shows the scroledwindow that contain the description text |
3132 of the record to be showed in a pane. | 3167 of the record to be showed in a pane. |
3133 """ | 3168 """ |
3134 self.__budget = budget | 3169 self.__budget = budget |
3161 _scrollwindow.add_with_viewport(_vbox) | 3196 _scrollwindow.add_with_viewport(_vbox) |
3162 _scrollwindow.show() | 3197 _scrollwindow.show() |
3163 self.__widget = _scrollwindow | 3198 self.__widget = _scrollwindow |
3164 | 3199 |
3165 | 3200 |
3166 def setActivePathRecord(self, path_record): | 3201 def _setActivePathRecord(self, path_record): |
3167 """def setActivePathRecord(self, path_record)) | 3202 """_setActivePathRecord(path_record)) |
3168 | 3203 |
3169 path_record: active path record | 3204 path_record: active path record |
3170 Set the new path code to show its description text. | 3205 Set the new path code to show its description text. |
3171 """ | 3206 """ |
3172 _budget = self.__budget | 3207 _budget = self.__budget |
3176 "$1"), (_code,))) | 3211 "$1"), (_code,))) |
3177 _text = _budget.getRecord(_code).text | 3212 _text = _budget.getRecord(_code).text |
3178 self.__textbuffer.set_text(_text) | 3213 self.__textbuffer.set_text(_text) |
3179 | 3214 |
3180 def runMessage(self, message, path, arg=None): | 3215 def runMessage(self, message, path, arg=None): |
3181 """def runMessage(self, message, path, arg=None) | 3216 """runMessage(message, path, arg=None) |
3182 | 3217 |
3183 message: the message type | 3218 message: the message type |
3184 "change_active": change the active record | 3219 "change_active": change the active record |
3185 "clear": clear instance | 3220 "clear": clear instance |
3186 path: tuple that identifies the pane in the notebook page | 3221 path: tuple that identifies the pane in the notebook page |
3190 This method receives a message and executes its corresponding action | 3225 This method receives a message and executes its corresponding action |
3191 """ | 3226 """ |
3192 _budget = self.__budget | 3227 _budget = self.__budget |
3193 if message == "change_active": | 3228 if message == "change_active": |
3194 if _budget.hasPath(arg): | 3229 if _budget.hasPath(arg): |
3195 self.setActivePathRecord(arg) | 3230 self._setActivePathRecord(arg) |
3196 elif message == "clear": | 3231 elif message == "clear": |
3197 self._clear() | 3232 self._clear() |
3198 | 3233 |
3199 def _clear(self): | 3234 def _clear(self): |
3200 """def _clear(self) | 3235 """_clear() |
3201 | 3236 |
3202 Delete all instance atributes | 3237 Delete all instance atributes |
3203 """ | 3238 """ |
3204 del self.__widget | 3239 del self.__widget |
3205 del self.__path | 3240 del self.__path |
3206 del self.__budget | 3241 del self.__budget |
3207 del self.__active_code | 3242 del self.__active_code |
3208 del self.__textbuffer | 3243 del self.__textbuffer |
3209 del self.__label | 3244 del self.__label |
3210 | 3245 |
3211 def getWidget(self): | 3246 def _getWidget(self): |
3212 """def getWidget(self) | 3247 """_getWidget() |
3213 | 3248 |
3214 return the main widget (gtk.ScrolledWindow) | 3249 return the main widget (gtk.ScrolledWindow) |
3215 """ | 3250 """ |
3216 return self.__widget | 3251 return self.__widget |
3217 | 3252 |
3218 def getPath(self): | 3253 def _getPath(self): |
3219 """def getPath(self) | 3254 """_getPath() |
3220 | 3255 |
3221 return the tuple that identifies the pane in the notebook page | 3256 return the tuple that identifies the pane in the notebook page |
3222 """ | 3257 """ |
3223 return self.__path | 3258 return self.__path |
3224 | 3259 |
3225 def setPath(self, path): | 3260 def _setPath(self, path): |
3226 """def setPath(self) | 3261 """_setPath() |
3227 | 3262 |
3228 sets the tuple that identifies the pane in the notebook page | 3263 sets the tuple that identifies the pane in the notebook page |
3229 """ | 3264 """ |
3230 self.__path = path | 3265 self.__path = path |
3231 | 3266 |
3232 def getPage(self): | 3267 def _getPage(self): |
3233 """def getPage(self) | 3268 """_getPage() |
3234 | 3269 |
3235 return the weak reference from Page instance | 3270 return the weak reference from Page instance |
3236 """ | 3271 """ |
3237 return self.__page | 3272 return self.__page |
3238 | 3273 |
3239 def setPage(self, page): | 3274 def _setPage(self, page): |
3240 """def setPage(self) | 3275 """_setPage() |
3241 | 3276 |
3242 set the weak reference from Page instance | 3277 set the weak reference from Page instance |
3243 """ | 3278 """ |
3244 self.__page = page | 3279 self.__page = page |
3245 | 3280 |
3246 def getBudget(self): | 3281 def _getBudget(self): |
3247 """def getBudget(self) | 3282 """_getBudget() |
3248 | 3283 |
3249 return the budget object | 3284 return the budget object |
3250 """ | 3285 """ |
3251 return self.__budget | 3286 return self.__budget |
3252 | 3287 |
3253 def getActivePathRecord(self): | 3288 def _getActivePathRecord(self): |
3254 """def getActivePathRecord(self) | 3289 """_getActivePathRecord() |
3255 | 3290 |
3256 return the Active Path Record | 3291 return the Active Path Record |
3257 """ | 3292 """ |
3258 return self.__active_path_record | 3293 return self.__active_path_record |
3259 | 3294 |
3260 path = property(getPath, setPath, None, | 3295 path = property(_getPath, _setPath, None, |
3261 "Path that identifie the item in the page notebook") | 3296 "Path that identifie the item in the page notebook") |
3262 widget = property(getWidget, None, None, | 3297 widget = property(_getWidget, None, None, |
3263 "The main widget (gtk.ScrolledWindow)") | 3298 "The main widget (gtk.ScrolledWindow)") |
3264 page = property(getPage, setPage, None, | 3299 page = property(_getPage, _setPage, None, |
3265 "Weak reference from Page instance which creates this class") | 3300 "Weak reference from Page instance which creates this class") |
3266 budget = property(getBudget, None, None, | 3301 budget = property(_getBudget, None, None, |
3267 "Budget object") | 3302 "Budget object") |
3268 active_path_record = property(getActivePathRecord, None, None, | 3303 active_path_record = property(_getActivePathRecord, None, None, |
3269 "Active Path Record") | 3304 "Active Path Record") |
3305 | |
3270 | 3306 |
3271 class Sheet(object): | 3307 class Sheet(object): |
3272 """gui.Sheet | 3308 """gui.Sheet |
3273 | 3309 |
3274 Description: | 3310 Description: |
3279 code: code record | 3315 code: code record |
3280 Ancestry: | 3316 Ancestry: |
3281 +-- object | 3317 +-- object |
3282 +-- Sheet | 3318 +-- Sheet |
3283 Atributes: | 3319 Atributes: |
3284 "widget": the main widget (gtk.ScrolledWindow object) | 3320 widget: the main widget (gtk.VBox() object) |
3285 "path": the tuple that identifies the pane in the notebook page | 3321 path: the tuple that identifies the pane in the notebook page |
3286 "budget": The budget (base.obra objetc) | 3322 page: weak reference from Page instance which creates this class |
3287 "active_path_record": The active path record | 3323 budget: The budget (base.obra objetc) |
3288 "page": weak reference from Page instance which creates this class | 3324 active_path_record: The active path record |
3289 | |
3290 "__textbuffer": The textbuffer of the textview that contain | |
3291 the record text. | |
3292 "__label": The gtk.label with the title of the pane | |
3293 "__field_liststore": the field liststore | |
3294 "__field_treeview": the field treeview | |
3295 "__field_selection": the field selected in field treview | |
3296 "__section_liststore": the section liststore | |
3297 "__section_treeview": the section treeview | |
3298 "__section_selection": the section selected in the section treeview | |
3299 Methods: | 3325 Methods: |
3300 __init__(self, budget, code) | 3326 runMessage |
3301 setFields(self) | |
3302 setSection(self) | |
3303 setText(self) | |
3304 field_controlSelection(self, selection) | |
3305 section_controlSelection(self, selection) | |
3306 runMessage(self, message, nt, arg=None) | |
3307 _clear(self) | |
3308 getWidget(self) | |
3309 {get/set}Path | |
3310 {get/set}Page | |
3311 getBudget(self) | |
3312 getActviPathRecord(self) | |
3313 """ | 3327 """ |
3328 | |
3314 def __init__(self, budget, page, path, path_record=(0,)): | 3329 def __init__(self, budget, page, path, path_record=(0,)): |
3315 """def __init__(self, budget, page, path, path_record=(0,)) | 3330 """__init__(budget, page, path, path_record=(0,)) |
3316 | 3331 |
3317 budget: the budget (base.obra object) | 3332 budget: the budget (base.obra object) |
3318 page: weak reference from Page instance which creates this class | 3333 page: weak reference from Page instance which creates this class |
3319 path: the path position of the description in the page | 3334 path: the path position of the description in the page |
3320 path_record: the path of the active record | 3335 path_record: the path of the active record |
3336 | |
3337 self.__budget: the budget (base.obra object) | |
3338 self.__page: weak reference from Page instance which creates this class | |
3339 self.__path: the path position of the description in the page | |
3340 self.__active_path_record: the path of the active record | |
3341 self.__label: The gtk.label with the title of the pane | |
3342 self.__field_liststore: the field liststore | |
3343 self.__field_treeview: the field treeview | |
3344 self.__field_selection: the field selected in field treview | |
3345 self.__section_liststore: the section liststore | |
3346 self.__section_treeview: the section treeview | |
3347 self.__section_selection: the section selected in the section treeview | |
3348 self.__textbuffer: The textbuffer of the textview that contain | |
3349 the record text. | |
3350 self.__widget: main widget, a gtk.VBox() | |
3351 | |
3321 Creates an shows the scroledwindow that contain the description text | 3352 Creates an shows the scroledwindow that contain the description text |
3322 of the record to be showed in a pane. | 3353 of the record to be showed in a pane. |
3323 """ | 3354 """ |
3324 self.__budget = budget | 3355 self.__budget = budget |
3325 self.__page = page | 3356 self.__page = page |
3326 self.__path = path | 3357 self.__path = path |
3327 self.__active_path_record = path_record | 3358 self.__active_path_record = path_record |
3328 _budget = budget | 3359 _budget = budget |
3329 | |
3330 _main_box = gtk.VBox() | 3360 _main_box = gtk.VBox() |
3331 | |
3332 self.__label = gtk.Label(utils.mapping(_("Sheet of Conditions of the "\ | 3361 self.__label = gtk.Label(utils.mapping(_("Sheet of Conditions of the "\ |
3333 "record $1"), (self.__budget.getCode( | 3362 "record $1"), (self.__budget.getCode( |
3334 self.__active_path_record),))) | 3363 self.__active_path_record),))) |
3335 self.__label.set_alignment(0, 0) | 3364 self.__label.set_alignment(0, 0) |
3336 self.__label.show() | 3365 self.__label.show() |
3337 | |
3338 _frame = gtk.Frame() | 3366 _frame = gtk.Frame() |
3339 _frame.set_shadow_type(gtk.SHADOW_IN) | 3367 _frame.set_shadow_type(gtk.SHADOW_IN) |
3340 _frame_box = gtk.VBox() | 3368 _frame_box = gtk.VBox() |
3341 _list_box = gtk.HBox() | 3369 _list_box = gtk.HBox() |
3342 | |
3343 self.__field_liststore = gtk.ListStore(str, str) | 3370 self.__field_liststore = gtk.ListStore(str, str) |
3344 self.__field_treeview = gtk.TreeView(self.__field_liststore) | 3371 self.__field_treeview = gtk.TreeView(self.__field_liststore) |
3345 _field_treeselection = self.__field_treeview.get_selection() | 3372 _field_treeselection = self.__field_treeview.get_selection() |
3346 _field_treeselection.set_mode(gtk.SELECTION_SINGLE) | 3373 _field_treeselection.set_mode(gtk.SELECTION_SINGLE) |
3347 self.__field_selection = None | 3374 self.__field_selection = None |
3348 _field_treeselection.set_select_function( | 3375 _field_treeselection.set_select_function( |
3349 self.field_controlSelection) | 3376 self._field_controlSelection) |
3350 self.__field_treeview.show() | 3377 self.__field_treeview.show() |
3351 _fieldcode_cell = gtk.CellRendererText() | 3378 _fieldcode_cell = gtk.CellRendererText() |
3352 _field_column = gtk.TreeViewColumn(_("Field")) | 3379 _field_column = gtk.TreeViewColumn(_("Field")) |
3353 _field_column.pack_start(_fieldcode_cell, False) | 3380 _field_column.pack_start(_fieldcode_cell, False) |
3354 _field_cell = gtk.CellRendererText() | 3381 _field_cell = gtk.CellRendererText() |
3359 _field_scrollwindow = gtk.ScrolledWindow() | 3386 _field_scrollwindow = gtk.ScrolledWindow() |
3360 _field_scrollwindow.set_policy(gtk.POLICY_AUTOMATIC, | 3387 _field_scrollwindow.set_policy(gtk.POLICY_AUTOMATIC, |
3361 gtk.POLICY_AUTOMATIC) | 3388 gtk.POLICY_AUTOMATIC) |
3362 _field_scrollwindow.add(self.__field_treeview) | 3389 _field_scrollwindow.add(self.__field_treeview) |
3363 _field_scrollwindow.show() | 3390 _field_scrollwindow.show() |
3364 | |
3365 self.__section_liststore = gtk.ListStore(str, str) | 3391 self.__section_liststore = gtk.ListStore(str, str) |
3366 self.__section_treeview = gtk.TreeView(self.__section_liststore) | 3392 self.__section_treeview = gtk.TreeView(self.__section_liststore) |
3367 _section_treeselection = self.__section_treeview.get_selection() | 3393 _section_treeselection = self.__section_treeview.get_selection() |
3368 _section_treeselection.set_mode(gtk.SELECTION_SINGLE) | 3394 _section_treeselection.set_mode(gtk.SELECTION_SINGLE) |
3369 self.__section_selection = None | 3395 self.__section_selection = None |
3370 _section_treeselection.set_select_function( | 3396 _section_treeselection.set_select_function( |
3371 self.section_controlSelection) | 3397 self._section_controlSelection) |
3372 self.__section_treeview.show() | 3398 self.__section_treeview.show() |
3373 _sectioncode_cell = gtk.CellRendererText() | 3399 _sectioncode_cell = gtk.CellRendererText() |
3374 _section_column = gtk.TreeViewColumn(_("Section")) | 3400 _section_column = gtk.TreeViewColumn(_("Section")) |
3375 _section_column.pack_start(_sectioncode_cell, False) | 3401 _section_column.pack_start(_sectioncode_cell, False) |
3376 _section_column.add_attribute(_sectioncode_cell, "text", 0) | 3402 _section_column.add_attribute(_sectioncode_cell, "text", 0) |
3396 self.__textbuffer = _textview.get_buffer() | 3422 self.__textbuffer = _textview.get_buffer() |
3397 _textview.show() | 3423 _textview.show() |
3398 _hbox = gtk.HBox() | 3424 _hbox = gtk.HBox() |
3399 _hbox.pack_start(_textview, True, True, 5) | 3425 _hbox.pack_start(_textview, True, True, 5) |
3400 _hbox.show() | 3426 _hbox.show() |
3401 | |
3402 _frame_box.pack_start(self.__label, False, False, 5) | 3427 _frame_box.pack_start(self.__label, False, False, 5) |
3403 _frame_box.pack_start(_list_box, False, False, 5) | 3428 _frame_box.pack_start(_list_box, False, False, 5) |
3404 _frame_box.show() | 3429 _frame_box.show() |
3405 _frame.add(_frame_box) | 3430 _frame.add(_frame_box) |
3406 _frame.show() | 3431 _frame.show() |
3407 _main_box.pack_start(_frame, False) | 3432 _main_box.pack_start(_frame, False) |
3408 | |
3409 | |
3410 _vbox = gtk.VBox() | 3433 _vbox = gtk.VBox() |
3411 _vbox.pack_start(_hbox, True, True, 5) | 3434 _vbox.pack_start(_hbox, True, True, 5) |
3412 _vbox.show() | 3435 _vbox.show() |
3413 _main_box.pack_start(_scrollwindow, True, True, 5) | 3436 _main_box.pack_start(_scrollwindow, True, True, 5) |
3414 _main_box.show() | 3437 _main_box.show() |
3415 | |
3416 _scrollwindow.add_with_viewport(_vbox) | 3438 _scrollwindow.add_with_viewport(_vbox) |
3417 _scrollwindow.show() | 3439 _scrollwindow.show() |
3418 self.__widget = _main_box | 3440 self.__widget = _main_box |
3419 | 3441 self._setFields() |
3420 self.setFields() | 3442 |
3421 | 3443 def _setFields(self): |
3422 def setFields(self): | 3444 """_setFields() |
3423 """setFields(self) | |
3424 | 3445 |
3425 Set the fields items in the field treeview | 3446 Set the fields items in the field treeview |
3426 """ | 3447 """ |
3427 _record = self.__budget.getRecord(self.__budget.getCode( | 3448 _record = self.__budget.getRecord(self.__budget.getCode( |
3428 self.__active_path_record)) | 3449 self.__active_path_record)) |
3433 _field_text = self.__budget.getSheetField(_field) | 3454 _field_text = self.__budget.getSheetField(_field) |
3434 _iter = self.__field_liststore.append([_field, _field_text]) | 3455 _iter = self.__field_liststore.append([_field, _field_text]) |
3435 _treeselection = self.__field_treeview.get_selection() | 3456 _treeselection = self.__field_treeview.get_selection() |
3436 _treeselection.select_path(0) | 3457 _treeselection.select_path(0) |
3437 | 3458 |
3438 def setSection(self): | 3459 def _setSection(self): |
3439 """setSection(self) | 3460 """_setSection() |
3440 | 3461 |
3441 Set the section items in the section treeview | 3462 Set the section items in the section treeview |
3442 """ | 3463 """ |
3443 self.__section_liststore.clear() | 3464 self.__section_liststore.clear() |
3444 if not self.__field_selection is None: | 3465 if not self.__field_selection is None: |
3450 _section_text = self.__budget.getSheetSection(_section) | 3471 _section_text = self.__budget.getSheetSection(_section) |
3451 _iter = self.__section_liststore.append([_section, _section_text]) | 3472 _iter = self.__section_liststore.append([_section, _section_text]) |
3452 _treeselection = self.__section_treeview.get_selection() | 3473 _treeselection = self.__section_treeview.get_selection() |
3453 _treeselection.select_path(0) | 3474 _treeselection.select_path(0) |
3454 | 3475 |
3455 def setText(self): | 3476 def _setText(self): |
3456 """setText(self) | 3477 """_setText() |
3457 | 3478 |
3458 Set the text in the textview | 3479 Set the text in the textview |
3459 """ | 3480 """ |
3460 if not self.__section_selection is None and\ | 3481 if not self.__section_selection is None and\ |
3461 not self.__field_selection is None: | 3482 not self.__field_selection is None: |
3467 _paragraph = self.__budget.getSheetParagraph(_paragraph_code) | 3488 _paragraph = self.__budget.getSheetParagraph(_paragraph_code) |
3468 self.__textbuffer.set_text(_paragraph) | 3489 self.__textbuffer.set_text(_paragraph) |
3469 else: | 3490 else: |
3470 self.__textbuffer.set_text("") | 3491 self.__textbuffer.set_text("") |
3471 | 3492 |
3472 def field_controlSelection(self, selection): | 3493 def _field_controlSelection(self, selection): |
3473 """def controlSelection(self, selection) | 3494 """_controlSelection(selection) |
3474 | 3495 |
3475 selection: treeselection | 3496 selection: treeselection |
3476 | 3497 |
3477 Method connected to set_selection_function() in field treeview | 3498 Method connected to set_selection_function() in field treeview |
3478 This method is called before any node is selected or unselected, | 3499 This method is called before any node is selected or unselected, |
3484 When a user select a row in the field treeview the section treeview is | 3505 When a user select a row in the field treeview the section treeview is |
3485 reloaded to show the sections of this field and already the text sheet. | 3506 reloaded to show the sections of this field and already the text sheet. |
3486 """ | 3507 """ |
3487 _treeiter = self.__field_liststore.get_iter(selection) | 3508 _treeiter = self.__field_liststore.get_iter(selection) |
3488 self.__field_selection = self.__field_liststore.get_value(_treeiter, 0) | 3509 self.__field_selection = self.__field_liststore.get_value(_treeiter, 0) |
3489 self.setSection() | 3510 self._setSection() |
3490 return True | 3511 return True |
3491 | 3512 |
3492 def section_controlSelection(self, selection): | 3513 def _section_controlSelection(self, selection): |
3493 """def controlSelection(self, selection) | 3514 """_section_controlSelection(selection) |
3494 | 3515 |
3495 selection: treeselection | 3516 selection: treeselection |
3496 | 3517 |
3497 Method connected to set_selection_function() in sector treeview | 3518 Method connected to set_selection_function() in sector treeview |
3498 This method is called before any node is selected or unselected, | 3519 This method is called before any node is selected or unselected, |
3504 When a user select a row in the field treeview the text sheet for this | 3525 When a user select a row in the field treeview the text sheet for this |
3505 section in showed | 3526 section in showed |
3506 """ | 3527 """ |
3507 _treeiter = self.__section_liststore.get_iter(selection) | 3528 _treeiter = self.__section_liststore.get_iter(selection) |
3508 self.__section_selection = self.__section_liststore.get_value(_treeiter, 0) | 3529 self.__section_selection = self.__section_liststore.get_value(_treeiter, 0) |
3509 self.setText() | 3530 self._setText() |
3510 return True | 3531 return True |
3511 | 3532 |
3512 def setActivePathRecord(self, path_record): | 3533 def _setActivePathRecord(self, path_record): |
3513 """def setActivePathRecord(self, path_record)) | 3534 """_setActivePathRecord(path_record)) |
3514 | 3535 |
3515 path_record: active path record | 3536 path_record: active path record |
3516 | 3537 |
3517 Set the new path code to show its sheet of condition text. | 3538 Set the new path code to show its sheet of condition text. |
3518 """ | 3539 """ |
3524 _budget = self.__budget | 3545 _budget = self.__budget |
3525 self.__active_path_record = path_record | 3546 self.__active_path_record = path_record |
3526 _code = _budget.getCode(self.__active_path_record) | 3547 _code = _budget.getCode(self.__active_path_record) |
3527 self.__label.set_text(utils.mapping(_("Sheet2 of Conditions of the "\ | 3548 self.__label.set_text(utils.mapping(_("Sheet2 of Conditions of the "\ |
3528 "record $1"), (_code,))) | 3549 "record $1"), (_code,))) |
3529 self.setFields() | 3550 self._setFields() |
3530 | 3551 |
3531 def runMessage(self, message, path, arg=None): | 3552 def runMessage(self, message, path, arg=None): |
3532 """def runMessage(self, message, path, arg=None) | 3553 """runMessage(message, path, arg=None) |
3533 | 3554 |
3534 message: the message type | 3555 message: the message type |
3535 "change_active": change the active record | 3556 "change_active": change the active record |
3536 "clear": clear instance | 3557 "clear": clear instance |
3537 path: tuple that identifies the pane in the notebook page | 3558 path: tuple that identifies the pane in the notebook page |
3541 This method receives a message and executes its corresponding action | 3562 This method receives a message and executes its corresponding action |
3542 """ | 3563 """ |
3543 _budget = self.__budget | 3564 _budget = self.__budget |
3544 if message == "change_active": | 3565 if message == "change_active": |
3545 if _budget.hasPath(arg): | 3566 if _budget.hasPath(arg): |
3546 self.setActivePathRecord(arg) | 3567 self._setActivePathRecord(arg) |
3547 elif message == "clear": | 3568 elif message == "clear": |
3548 self._clear() | 3569 self._clear() |
3549 | 3570 |
3550 def _clear(self): | 3571 def _clear(self): |
3551 """def _clear(self) | 3572 """_clear() |
3552 | 3573 |
3553 Deletes all the instance atributes | 3574 Deletes all the instance atributes |
3554 """ | 3575 """ |
3555 del self.__page | 3576 del self.__page |
3556 del self.__widget | 3577 del self.__widget |
3566 del self.__field_selection | 3587 del self.__field_selection |
3567 del self.__section_liststore | 3588 del self.__section_liststore |
3568 del self.__section_treeview | 3589 del self.__section_treeview |
3569 del self.__section_selection | 3590 del self.__section_selection |
3570 | 3591 |
3571 def getWidget(self): | 3592 def _getWidget(self): |
3572 """def getWidget(self) | 3593 """_getWidget() |
3573 | 3594 |
3574 return the main widget (gtk.ScrolledWindow) | 3595 return the main widget (gtk.ScrolledWindow) |
3575 """ | 3596 """ |
3576 return self.__widget | 3597 return self.__widget |
3577 | 3598 |
3578 def getPath(self): | 3599 def _getPath(self): |
3579 """def getPath(self) | 3600 """_getPath() |
3580 | 3601 |
3581 return the tuple that identifies the pane in the notebook page | 3602 return the tuple that identifies the pane in the notebook page |
3582 """ | 3603 """ |
3583 return self.__page | 3604 return self.__page |
3584 | 3605 |
3585 def setPath(self, path): | 3606 def _setPath(self, path): |
3586 """def setPath(self) | 3607 """_setPath() |
3587 | 3608 |
3588 sets the tuple that identifies the pane in the notebook page | 3609 sets the tuple that identifies the pane in the notebook page |
3589 """ | 3610 """ |
3590 self.__path = path | 3611 self.__path = path |
3591 | 3612 |
3592 def getPage(self): | 3613 def _getPage(self): |
3593 """def getPage(self) | 3614 """_getPage() |
3594 | 3615 |
3595 return the weak reference from Page instance | 3616 return the weak reference from Page instance |
3596 """ | 3617 """ |
3597 return self.__page | 3618 return self.__page |
3598 | 3619 |
3599 def setPage(self, page): | 3620 def _setPage(self, page): |
3600 """def setPage(self) | 3621 """_setPage() |
3601 | 3622 |
3602 set the weak reference from Page instance | 3623 set the weak reference from Page instance |
3603 """ | 3624 """ |
3604 self.__page = page | 3625 self.__page = page |
3605 | 3626 |
3606 def getBudget(self): | 3627 def _getBudget(self): |
3607 """def getBudget(self) | 3628 """_getBudget() |
3608 | 3629 |
3609 return the budget object | 3630 return the budget object |
3610 """ | 3631 """ |
3611 return self.__budget | 3632 return self.__budget |
3612 | 3633 |
3613 def getActivePathRecord(self): | 3634 def _getActivePathRecord(self): |
3614 """def getActivePathRecord(self) | 3635 """_getActivePathRecord() |
3615 | 3636 |
3616 return the Active Path Record | 3637 return the Active Path Record |
3617 """ | 3638 """ |
3618 return self.__active_path_record | 3639 return self.__active_path_record |
3619 | 3640 |
3620 path = property(getPath, setPath, None, | 3641 path = property(_getPath, _setPath, None, |
3621 "Path that identifie the item in the page notebook") | 3642 "Path that identifie the item in the page notebook") |
3622 widget = property(getWidget, None, None, | 3643 widget = property(_getWidget, None, None, |
3623 "Lista de configuracion de vistas") | 3644 "Lista de configuracion de vistas") |
3624 page = property(getPage, setPage, None, | 3645 page = property(_getPage, _setPage, None, |
3625 "Weak reference from Page instance which creates this class") | 3646 "Weak reference from Page instance which creates this class") |
3626 budget = property(getBudget, None, None, | 3647 budget = property(_getBudget, None, None, |
3627 "Budget object") | 3648 "Budget object") |
3628 active_path_record = property(getActivePathRecord, None, None, | 3649 active_path_record = property(_getActivePathRecord, None, None, |
3629 "Active Path Record") | 3650 "Active Path Record") |
3651 | |
3630 | 3652 |
3631 class FileView(object): | 3653 class FileView(object): |
3632 """gui.FileView | 3654 """gui.FileView |
3633 | 3655 |
3634 Description: | 3656 Description: |
3635 Class to show the file icons of a record in a pane | 3657 Class to show the file icons of a record in a pane |
3636 Constructor: | 3658 Constructor: |
3637 Description(budget, code) | 3659 Description(budget, page, path, path_record=(0,)) |
3638 budget: budget | 3660 budget: the budget (base.obra object) |
3639 code: code record | 3661 page: weak reference from Page instance which creates this class |
3662 path: the path position of the description in the page | |
3663 path_record: the path of the active record | |
3640 Ancestry: | 3664 Ancestry: |
3641 +-- object | 3665 +-- object |
3642 +-- Description | 3666 +-- FileView |
3643 Atributes: | 3667 Atributes: |
3644 "widget": the main widget (gtk.ScrolledWindow object) | 3668 widget: the main widget (gtk.ScrolledWindow object) |
3645 "__icon_box": the box that contains the icon | |
3646 "path": the tuple that identifies the pane in the notebook page | 3669 "path": the tuple that identifies the pane in the notebook page |
3647 "budget": The budget (base.obra objetc) | 3670 "budget": The budget (base.obra objetc) |
3648 "active_code": The active code of the record | 3671 "active_code": The active code of the record |
3649 Methods: | 3672 Methods: |
3650 __init__(self, budget, code) | 3673 runMessage |
3651 setActiveCode(self, code) | |
3652 runMessage(self, message, nt, arg=None) | |
3653 _clear(self) | |
3654 getWidget(self) | |
3655 {get/set}Path | |
3656 {get/seg}Page | |
3657 getBudget(self) | |
3658 getActviCode(self) | |
3659 """ | 3674 """ |
3660 | 3675 |
3661 def __init__(self, budget, page, path, path_record=(0,)): | 3676 def __init__(self, budget, page, path, path_record=(0,)): |
3662 """def __init__(self, budget, page, path, path_record=(0,)) | 3677 """__init__(budget, page, path, path_record=(0,)) |
3663 | 3678 |
3664 budget: the budget (base.obra object) | 3679 budget: the budget (base.obra object) |
3665 page: weak reference from Page instance which creates this class | 3680 page: weak reference from Page instance which creates this class |
3666 path: the path position of the description in the page | 3681 path: the path position of the description in the page |
3667 path_record: the path of the active record | 3682 path_record: the path of the active record |
3683 | |
3684 self.__budget: the budget (base.obra object) | |
3685 self.__page: weak reference from Page instance which creates this class | |
3686 self.__path: the path position of the description in the page | |
3687 self.__active_path_record: the path of the active record | |
3688 self.__active_code: the code of the active record | |
3689 self.__icon_box: the box that contains the icon | |
3690 self.__widget: main widget, a gtk.ScrolledWindow | |
3668 | 3691 |
3669 Creates an shows the scroledwindow that contain icon files | 3692 Creates an shows the scroledwindow that contain icon files |
3670 of the record to be showed in a pane. | 3693 of the record to be showed in a pane. |
3671 """ | 3694 """ |
3672 self.__budget = budget | 3695 self.__budget = budget |
3676 self.__active_code = budget.getCode(self.__active_path_record) | 3699 self.__active_code = budget.getCode(self.__active_path_record) |
3677 _budget = budget | 3700 _budget = budget |
3678 _record = self.__budget.getRecord(self.__budget.getCode( | 3701 _record = self.__budget.getRecord(self.__budget.getCode( |
3679 self.__active_path_record)) | 3702 self.__active_path_record)) |
3680 | 3703 |
3681 self.__icon_box = self.getIconBox(_record) | 3704 self.__icon_box = self._getIconBox(_record) |
3682 _scrollwindow = gtk.ScrolledWindow() | 3705 _scrollwindow = gtk.ScrolledWindow() |
3683 _scrollwindow.set_policy(gtk.POLICY_ALWAYS, | 3706 _scrollwindow.set_policy(gtk.POLICY_ALWAYS, |
3684 gtk.POLICY_NEVER) | 3707 gtk.POLICY_NEVER) |
3685 | |
3686 self.__icon_box.show() | 3708 self.__icon_box.show() |
3687 _scrollwindow.add_with_viewport(self.__icon_box) | 3709 _scrollwindow.add_with_viewport(self.__icon_box) |
3688 _scrollwindow.show() | 3710 _scrollwindow.show() |
3689 self.__widget = _scrollwindow | 3711 self.__widget = _scrollwindow |
3690 | 3712 |
3691 def getIconBox(self, record): | 3713 def _getIconBox(self, record): |
3692 """getIconBox(self, record) | 3714 """_getIconBox(record) |
3693 | 3715 |
3694 record: the active record object | 3716 record: the active record object |
3695 | 3717 |
3696 Creates and returns the box whith te icon files of the active record. | 3718 Creates and returns the box whith te icon files of the active record. |
3697 """ | 3719 """ |
3719 _image_icon = gtk.Image() | 3741 _image_icon = gtk.Image() |
3720 _image_icon.set_from_pixbuf(_image_pixbuf) | 3742 _image_icon.set_from_pixbuf(_image_pixbuf) |
3721 _image_icon.show() | 3743 _image_icon.show() |
3722 _event_box.add(_image_icon) | 3744 _event_box.add(_image_icon) |
3723 _box.pack_start(_event_box, False, False, 5) | 3745 _box.pack_start(_event_box, False, False, 5) |
3724 _event_box.connect("button-press-event", self.launchFile, | 3746 _event_box.connect("button-press-event", self._launchFile, |
3725 "image", _file_path) | 3747 "image", _file_path) |
3726 _event_box.show() | 3748 _event_box.show() |
3727 | 3749 |
3728 elif _filetype == "dxf": | 3750 elif _filetype == "dxf": |
3729 _event_box = gtk.EventBox() | 3751 _event_box = gtk.EventBox() |
3734 gtk.gdk.INTERP_BILINEAR) | 3756 gtk.gdk.INTERP_BILINEAR) |
3735 _dxf_icon.set_from_pixbuf(_dxf_pixbuf) | 3757 _dxf_icon.set_from_pixbuf(_dxf_pixbuf) |
3736 _dxf_icon.show() | 3758 _dxf_icon.show() |
3737 _event_box.add(_dxf_icon) | 3759 _event_box.add(_dxf_icon) |
3738 _box.pack_start(_event_box, False, False, 5) | 3760 _box.pack_start(_event_box, False, False, 5) |
3739 _event_box.connect("button-press-event", self.launchFile, | 3761 _event_box.connect("button-press-event", self._launchFile, |
3740 "dxf", _file_path) | 3762 "dxf", _file_path) |
3741 _event_box.show() | 3763 _event_box.show() |
3742 _label_event_box = gtk.EventBox() | 3764 _label_event_box = gtk.EventBox() |
3743 _label = gtk.Label(_file.name) | 3765 _label = gtk.Label(_file.name) |
3744 _label_event_box.add(_label) | 3766 _label_event_box.add(_label) |
3749 _hbox.pack_start(_box, False, False, 5) | 3771 _hbox.pack_start(_box, False, False, 5) |
3750 _hbox.show() | 3772 _hbox.show() |
3751 _frame.add(_hbox) | 3773 _frame.add(_hbox) |
3752 return _frame | 3774 return _frame |
3753 | 3775 |
3754 def launchFile(self, widget, event, kind, file_path): | 3776 def _launchFile(self, widget, event, kind, file_path): |
3755 """launchFile(self, widget, event, kind, file_path) | 3777 """_launchFile(widget, event, kind, file_path) |
3756 | 3778 |
3757 widget: the widget that emit the signal | 3779 widget: the widget that emit the signal |
3758 event: the event that emit the signal | 3780 event: the event that emit the signal |
3759 king: kind of file | 3781 king: kind of file |
3760 file_path: the path file to be launch | 3782 file_path: the path file to be launch |
3763 Method connected to "button-press-event" signal in images event box | 3785 Method connected to "button-press-event" signal in images event box |
3764 """ | 3786 """ |
3765 if event.type is gtk.gdk._2BUTTON_PRESS: | 3787 if event.type is gtk.gdk._2BUTTON_PRESS: |
3766 openwith.launch_file(kind, file_path) | 3788 openwith.launch_file(kind, file_path) |
3767 | 3789 |
3768 def setActivePathRecord(self, path_record): | 3790 def _setActivePathRecord(self, path_record): |
3769 """def setActivePathRecord(self, path_record)) | 3791 """_setActivePathRecord(path_record)) |
3770 | 3792 |
3771 path_record: active path record | 3793 path_record: active path record |
3772 Set the new path code to show its description text. | 3794 Set the new path code to show its description text. |
3773 """ | 3795 """ |
3774 _budget = self.__budget | 3796 _budget = self.__budget |
3775 self.__active_path_record = path_record | 3797 self.__active_path_record = path_record |
3776 _code = _budget.getCode(self.__active_path_record) | 3798 _code = _budget.getCode(self.__active_path_record) |
3777 _record = self.__budget.getRecord(_code) | 3799 _record = self.__budget.getRecord(_code) |
3778 self.__icon_box.destroy() | 3800 self.__icon_box.destroy() |
3779 self.__icon_box = self.getIconBox(_record) | 3801 self.__icon_box = self._getIconBox(_record) |
3780 self.__icon_box.show() | 3802 self.__icon_box.show() |
3781 self.__widget.add_with_viewport(self.__icon_box) | 3803 self.__widget.add_with_viewport(self.__icon_box) |
3782 | 3804 |
3783 def runMessage(self, message, path, arg=None): | 3805 def runMessage(self, message, path, arg=None): |
3784 """def runMessage(self, message, path, arg=None) | 3806 """runMessage(message, path, arg=None) |
3785 | 3807 |
3786 message: the message type | 3808 message: the message type |
3787 "change_active": change the active record | 3809 "change_active": change the active record |
3788 "clear": clear instance | 3810 "clear": clear instance |
3789 path: tuple that identifies the pane in the notebook page | 3811 path: tuple that identifies the pane in the notebook page |
3793 This method receives a message and executes its corresponding action | 3815 This method receives a message and executes its corresponding action |
3794 """ | 3816 """ |
3795 _budget = self.__budget | 3817 _budget = self.__budget |
3796 if message == "change_active": | 3818 if message == "change_active": |
3797 if _budget.hasPath(arg): | 3819 if _budget.hasPath(arg): |
3798 self.setActivePathRecord(arg) | 3820 self._setActivePathRecord(arg) |
3799 elif message == "clear": | 3821 elif message == "clear": |
3800 self._clear() | 3822 self._clear() |
3801 | 3823 |
3802 def _clear(self): | 3824 def _clear(self): |
3803 """def _clear(self) | 3825 """_clear() |
3804 | 3826 |
3805 Delete all instance atributes | 3827 Delete all instance atributes |
3806 """ | 3828 """ |
3807 del self.__hbox | |
3808 del self.__widget | 3829 del self.__widget |
3809 del self.__path | 3830 del self.__path |
3810 del self.__budget | 3831 del self.__budget |
3811 del self.__active_code | 3832 del self.__active_code |
3812 | 3833 |
3813 def getWidget(self): | 3834 def _getWidget(self): |
3814 """def getWidget(self) | 3835 """_getWidget() |
3815 | 3836 |
3816 return the main widget (gtk.ScrolledWindow) | 3837 return the main widget (gtk.ScrolledWindow) |
3817 """ | 3838 """ |
3818 return self.__widget | 3839 return self.__widget |
3819 | 3840 |
3820 def getPath(self): | 3841 def _getPath(self): |
3821 """def getPath(self) | 3842 """_getPath() |
3822 | 3843 |
3823 return the tuple that identifies the pane in the notebook page | 3844 return the tuple that identifies the pane in the notebook page |
3824 """ | 3845 """ |
3825 return self.__path | 3846 return self.__path |
3826 | 3847 |
3827 def setPath(self, path): | 3848 def _setPath(self, path): |
3828 """def setPath(self) | 3849 """_setPath() |
3829 | 3850 |
3830 sets the tuple that identifies the pane in the notebook page | 3851 sets the tuple that identifies the pane in the notebook page |
3831 """ | 3852 """ |
3832 self.__path = path | 3853 self.__path = path |
3833 | 3854 |
3834 def getPage(self): | 3855 def _getPage(self): |
3835 """def getPage(self) | 3856 """_getPage() |
3836 | 3857 |
3837 return the weak reference from Page instance | 3858 return the weak reference from Page instance |
3838 """ | 3859 """ |
3839 return self.__page | 3860 return self.__page |
3840 | 3861 |
3841 def setPage(self, page): | 3862 def _setPage(self, page): |
3842 """def setPage(self) | 3863 """setPage() |
3843 | 3864 |
3844 set the weak reference from Page instance | 3865 set the weak reference from Page instance |
3845 """ | 3866 """ |
3846 self.__page = page | 3867 self.__page = page |
3847 | 3868 |
3848 def getBudget(self): | 3869 def _getBudget(self): |
3849 """def getBudget(self) | 3870 """getBudget() |
3850 | 3871 |
3851 return the budget object | 3872 return the budget object |
3852 """ | 3873 """ |
3853 return self.__budget | 3874 return self.__budget |
3854 | 3875 |
3855 def getActivePathRecord(self): | 3876 def _getActivePathRecord(self): |
3856 """def getActivePathRecord(self) | 3877 """_getActivePathRecord() |
3857 | 3878 |
3858 return the Active Path Record | 3879 return the Active Path Record |
3859 """ | 3880 """ |
3860 return self.__active_path_record | 3881 return self.__active_path_record |
3861 | 3882 |
3862 path = property(getPath, setPath, None, | 3883 path = property(_getPath, _setPath, None, |
3863 "Path that identifie the item in the page notebook") | 3884 "Path that identifie the item in the page notebook") |
3864 widget = property(getWidget, None, None, | 3885 widget = property(_getWidget, None, None, |
3865 "The main widget (gtk.ScrolledWindow)") | 3886 "The main widget (gtk.ScrolledWindow)") |
3866 page = property(getPage, setPage, None, | 3887 page = property(_getPage, _setPage, None, |
3867 "Weak reference from Page instance which creates this class") | 3888 "Weak reference from Page instance which creates this class") |
3868 budget = property(getBudget, None, None, | 3889 budget = property(_getBudget, None, None, |
3869 "Budget object") | 3890 "Budget object") |
3870 active_path_record = property(getActivePathRecord, None, None, | 3891 active_path_record = property(_getActivePathRecord, None, None, |
3871 "Active Path Record") | 3892 "Active Path Record") |
3872 | 3893 |
3873 | |
3874 class TextWindow(object): | |
3875 """gui.TextWindow | |
3876 | |
3877 Description: | |
3878 Class to show a description text of a record in a new gtk window | |
3879 Constructor: | |
3880 TextWindow(code, text) | |
3881 code: code of the record | |
3882 text: description text of the record | |
3883 Ancestry: | |
3884 +-- object | |
3885 +-- TextWindow | |
3886 Atributes: | |
3887 Methods: | |
3888 __init__(self, code, text) | |
3889 main(self) | |
3890 destroy(self, widget) | |
3891 """ | |
3892 | |
3893 def __init__(self, code, text): | |
3894 """def __init__(self, code, text) | |
3895 | |
3896 code: code of the record | |
3897 text: description text of the record | |
3898 Creates an shows the window. | |
3899 """ | |
3900 _window = gtk.Window(gtk.WINDOW_TOPLEVEL) | |
3901 _window.set_resizable(True) | |
3902 _window.set_default_size(700, 300) | |
3903 _window.set_title(utils.mapping(_("$1 text"), (code,))) | |
3904 _window.set_border_width(0) | |
3905 _box1 = gtk.VBox(False, 0) | |
3906 _window.add(_box1) | |
3907 _box1.show() | |
3908 _sw = gtk.ScrolledWindow() | |
3909 _sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) | |
3910 _textview = gtk.TextView() | |
3911 _textview.set_wrap_mode(gtk.WRAP_WORD) | |
3912 _textbuffer = _textview.get_buffer() | |
3913 _sw.add(_textview) | |
3914 _sw.show() | |
3915 _textview.show() | |
3916 _box1.pack_start(_sw) | |
3917 _textbuffer.set_text(text) | |
3918 _window.connect("destroy", self.destroy) | |
3919 _window.show() | |
3920 | |
3921 def main(self): | |
3922 """def main(self) | |
3923 | |
3924 Starts the GTK+ event processing loop. | |
3925 """ | |
3926 gtk.main() | |
3927 | |
3928 def destroy(self, widget): | |
3929 """destroy(self, widget) | |
3930 widget: the widget where the event is emitted from | |
3931 Method connected to "destroy" signal of window widget | |
3932 This signal is emited when the method connected to "delete_event" | |
3933 signal returns True or when the program call the destroy() method of | |
3934 the gtk.Window widget. | |
3935 The window is closed and the GTK+ event processing loop is ended. | |
3936 """ | |
3937 gtk.main_quit() | |
3938 | 3894 |
3939 class CompanyView(object): | 3895 class CompanyView(object): |
3940 """gui.CompanyView: | 3896 """gui.CompanyView: |
3941 | 3897 |
3942 Description: | 3898 Description: |
3943 Class to show the company records of a budget | 3899 Class to show the company records of a budget |
3944 Constructor: | 3900 Constructor: |
3945 CompanyView(budget, page, path) | 3901 CompanyView(budget, page, path, path_record=(0,)) |
3946 budget: budget showed ("base.Budget" object) | 3902 budget: budget showed ("base.Budget" object) |
3947 page: weak reference from Page instance which creates this class | 3903 page: weak reference from Page instance which creates this class |
3948 path: tuple that represents the path of the List in the Page | 3904 path: tuple that represents the path of the List in the Page |
3949 Returns the newly created CompanyView instance | 3905 path_record: path of the active record in the budget |
3950 Ancestry: | 3906 Ancestry: |
3951 +-- object | 3907 +-- object |
3952 +-- CompanyView | 3908 +-- CompanyView |
3953 Atributes: | 3909 Atributes: |
3954 "budget": Budget to show, base.obra instance. | 3910 active_path_record: Read. Path of the active record in the budget |
3955 "active_path_record" | 3911 widget: Read. Window that contains the main widget, a gtk.HPaned |
3956 "widget": Window that contains the main widget, | 3912 path: Read-Write. Pane page identifier |
3957 (gtk.ScrolledWindow) | 3913 page: Read-Write. weak reference from Page instance which creates this class |
3958 "path": Pane page identifier | 3914 budget: Read. Budget to show, base.budget instance. |
3959 "page": weak reference from Page instance which creates this class | |
3960 "__methond_message": Method to send messages to the page | |
3961 Methods: | 3915 Methods: |
3962 __init__(self, budget, page, path, path_record=(0,)) | 3916 runMessage |
3963 runMessage(self, message, path, arg=None) | |
3964 _clear(self) | |
3965 getWidget(self) | |
3966 {get/set}Path | |
3967 {get/set}Page | |
3968 getBudget(self) | |
3969 getActivePathRecord(self) | |
3970 """ | 3917 """ |
3971 | 3918 |
3972 def __init__(self, budget, page, path, path_record=(0,)): | 3919 def __init__(self, budget, page, path, path_record=(0,)): |
3973 """def __init__(self, budget, page, path, path_record=(0,)) | 3920 """__init__(budget, page, path, path_record=(0,)) |
3974 | 3921 |
3975 budget: budget: budget showed ("base.Budget" object) | 3922 budget: budget: budget showed ("base.Budget" object) |
3976 page: weak reference from Page instance which creates this class | 3923 page: weak reference from Page instance which creates this class |
3977 path: tuple that represents the path of the List in the Page | 3924 path: tuple that represents the path of the List in the Page |
3978 path_record: path of the active record in the budget | 3925 path_record: path of the active record in the budget |
3979 | 3926 |
3980 Sets the init atributes | 3927 self.__selection: |
3981 Creates the | 3928 self.__budget: budget: budget showed ("base.Budget" object) |
3982 | 3929 self.__page: weak reference from Page instance which creates this class |
3930 self.__path: tuple that represents the path of the List in the Page | |
3931 self.__active_path_record: path of the active record in the budget | |
3932 self.__widget: main widget, a gtk.HPaned | |
3933 self.__treestore: to store companys data | |
3934 self.__option_View: OptionView object | |
3935 | |
3936 Creates an shows the scroledwindow that contain the company data. | |
3983 """ | 3937 """ |
3984 self.__selection = None | 3938 self.__selection = None |
3985 # Seting init args | 3939 # Seting init args |
3986 if not isinstance(budget, base.Budget): | 3940 if not isinstance(budget, base.Budget): |
3987 raise ValueError, _("Argument must be a Budget object") | 3941 raise ValueError, _("Argument must be a Budget object") |
3988 self.__budget = budget | 3942 self.__budget = budget |
3989 self.__page = page | 3943 self.__page = page |
3990 self.__path = path | 3944 self.__path = path |
3991 self.__active_path_record = path_record | 3945 self.__active_path_record = path_record |
3992 # HVox | 3946 # main widget |
3993 self.__hbox = gtk.HPaned() | 3947 self.__widget = gtk.HPaned() |
3994 self.__hbox.set_position(230) | 3948 self.__widget.set_position(230) |
3995 # TreeStore | 3949 # TreeStore |
3996 self.__treestore = gtk.TreeStore(str, str) | 3950 self.__treestore = gtk.TreeStore(str, str) |
3997 self.setTreeStoreValues() | 3951 self._setTreeStoreValues() |
3998 # Select Treeview | 3952 # Select Treeview |
3999 self.__select_treeview = gtk.TreeView(self.__treestore) | 3953 _select_treeview = gtk.TreeView(self.__treestore) |
4000 self.__select_treeview.set_enable_search(False) | 3954 _select_treeview.set_enable_search(False) |
4001 self.__select_treeview.set_reorderable(False) | 3955 _select_treeview.set_reorderable(False) |
4002 self.__select_treeview.set_headers_visible(False) | 3956 _select_treeview.set_headers_visible(False) |
4003 self.__select_treeview.show() | 3957 _select_treeview.show() |
4004 # Scrolled_window | 3958 # Scrolled_window |
4005 self.__scrolled_window = gtk.ScrolledWindow() | 3959 _scrolled_window = gtk.ScrolledWindow() |
4006 self.__scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, | 3960 _scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, |
4007 gtk.POLICY_AUTOMATIC) | 3961 gtk.POLICY_AUTOMATIC) |
4008 self.__scrolled_window.add(self.__select_treeview) | 3962 _scrolled_window.add(_select_treeview) |
4009 # colors | 3963 # colors |
4010 _text_color = gtk.gdk.color_parse(globalVars.color["TEXT"]) | 3964 _text_color = gtk.gdk.color_parse(globalVars.color["TEXT"]) |
4011 _background_color = [ | 3965 _background_color = [ |
4012 gtk.gdk.color_parse(globalVars.color["UNEVEN"]), | 3966 gtk.gdk.color_parse(globalVars.color["UNEVEN"]), |
4013 gtk.gdk.color_parse(globalVars.color["EVEN"])] | 3967 gtk.gdk.color_parse(globalVars.color["EVEN"])] |
4014 self.__code_column = gtk.TreeViewColumn() | 3968 _code_column = gtk.TreeViewColumn() |
4015 self.__code_column.set_clickable(True) | 3969 _code_column.set_clickable(True) |
4016 self.__code_column.set_fixed_width(200) | 3970 _code_column.set_fixed_width(200) |
4017 _code_cell = gtk.CellRendererText() | 3971 _code_cell = gtk.CellRendererText() |
4018 _code_cell.set_property('foreground-gdk', _text_color) | 3972 _code_cell.set_property('foreground-gdk', _text_color) |
4019 self.__code_column.pack_start(_code_cell, True) | 3973 _code_column.pack_start(_code_cell, True) |
4020 self.__code_column.add_attribute(_code_cell, 'text', 0) | 3974 _code_column.add_attribute(_code_cell, 'text', 0) |
4021 _summary_cell = gtk.CellRendererText() | 3975 _summary_cell = gtk.CellRendererText() |
4022 _summary_cell.set_property('foreground-gdk', _text_color) | 3976 _summary_cell.set_property('foreground-gdk', _text_color) |
4023 self.__code_column.pack_start(_summary_cell, True) | 3977 _code_column.pack_start(_summary_cell, True) |
4024 self.__code_column.add_attribute(_summary_cell, 'text', 1) | 3978 _code_column.add_attribute(_summary_cell, 'text', 1) |
4025 # Index column | 3979 # Index column |
4026 self.__select_treeview.append_column(self.__code_column) | 3980 _select_treeview.append_column(_code_column) |
4027 # control selection | 3981 # control selection |
4028 self.__treeselection = self.__select_treeview.get_selection() | 3982 _treeselection = _select_treeview.get_selection() |
4029 self.__treeselection.set_mode(gtk.SELECTION_SINGLE) | 3983 _treeselection.set_mode(gtk.SELECTION_SINGLE) |
4030 self.__treeselection.set_select_function(self.controlSelection) | 3984 _treeselection.set_select_function(self._controlSelection) |
4031 # Show | 3985 # Show |
4032 self.setColumnsHeaders() | 3986 _scrolled_window.show() |
4033 self.__scrolled_window.show() | |
4034 # Option View | 3987 # Option View |
4035 self.__option_View = OptionView("") | 3988 self.__option_View = OptionView("") |
4036 # Selection | 3989 # Selection |
4037 self.__select_treeview.set_cursor((0,), None, False) | 3990 _select_treeview.set_cursor((0,), None, False) |
4038 self.__select_treeview.grab_focus() | 3991 _select_treeview.grab_focus() |
4039 # | 3992 # |
4040 self.__hbox.add1(self.__scrolled_window) | 3993 self.__widget.add1(_scrolled_window) |
4041 self.__hbox.add2(self.__option_View.widget) | 3994 self.__widget.add2(self.__option_View.widget) |
4042 self.__hbox.show() | 3995 self.__widget.show() |
4043 self.__widget = self.__hbox | 3996 |
4044 | 3997 def _setOptions(self, type): |
4045 def setOptions(self, type): | 3998 """_setOptions(type) |
3999 | |
4000 type: "company" or "office" | |
4001 Sets the Options in the OptionView | |
4002 """ | |
4046 if type == "company": | 4003 if type == "company": |
4047 _options = [("code", _("Code"), "string", | 4004 _options = [("code", _("Code"), "string", |
4048 _("""Code that define the company""")), | 4005 _("""Code that define the company""")), |
4049 ("summary", _("Summary"), "string", | 4006 ("summary", _("Summary"), "string", |
4050 _("""Summary of the company name""")), | 4007 _("""Summary of the company name""")), |
4055 ("web", _("Web"), "string", | 4012 ("web", _("Web"), "string", |
4056 _("""Company web page""")), | 4013 _("""Company web page""")), |
4057 ("email", _("Email"), "string", | 4014 ("email", _("Email"), "string", |
4058 _("""Company email""")), | 4015 _("""Company email""")), |
4059 ] | 4016 ] |
4060 self.__option_View.setOptions(_options) | 4017 self.__option_View.options = _options |
4061 elif type == "office": | 4018 elif type == "office": |
4062 _options = [("type", _("Type"), "string", | 4019 _options = [("type", _("Type"), "string", |
4063 _("""Type of Office: | 4020 _("""Type of Office: |
4064 C: Central office | 4021 C: Central office |
4065 D: Local office | 4022 D: Local office |
4076 ("fax", _("Fax"), "list", | 4033 ("fax", _("Fax"), "list", |
4077 _("Fax numbers of the office")), | 4034 _("Fax numbers of the office")), |
4078 ("contact person", _("Contact person"), "string", | 4035 ("contact person", _("Contact person"), "string", |
4079 _("Contact persons in the office")), | 4036 _("Contact persons in the office")), |
4080 ] | 4037 ] |
4081 self.__option_View.setOptions(_options) | 4038 self.__option_View.options = _options |
4082 else: | 4039 else: |
4083 print _("Unknow Option Type") | 4040 print _("Unknow Option Type") |
4084 def setOptionValues(self, company_key): | 4041 |
4085 self.__option_View.setValues(_values) | 4042 def _setTreeStoreValues(self): |
4086 | 4043 """_setTreeStoreValues() |
4087 def setTreeStoreValues(self): | 4044 |
4088 """def setListstoreValues(self) | 4045 Sets the treestore values from the budget |
4089 | |
4090 Sets the treestore values from the budget | |
4091 """ | 4046 """ |
4092 _budget = self.__budget | 4047 _budget = self.__budget |
4093 _company_keys = _budget.getCompanyKeys() | 4048 _company_keys = _budget.getCompanyKeys() |
4094 for _company_key in _company_keys: | 4049 for _company_key in _company_keys: |
4095 _company = _budget.getCompany(_company_key) | 4050 _company = _budget.getCompany(_company_key) |
4099 for _office in _offices: | 4054 for _office in _offices: |
4100 # TODO: Test offices | 4055 # TODO: Test offices |
4101 _values = [_office.officeType, _office.subname] | 4056 _values = [_office.officeType, _office.subname] |
4102 self.__treestore.append(_treeiter, _values) | 4057 self.__treestore.append(_treeiter, _values) |
4103 | 4058 |
4104 def setColumnsHeaders(self): | 4059 |
4105 """def setColumnsHeaders(self) | 4060 def _controlSelection(self, selection): |
4106 | 4061 """_controlSelection(selection) |
4107 Sets the headers column values | |
4108 """ | |
4109 #self.columns[1].set_title(_("Type")) # Σ parcial Σ total | |
4110 #self.columns[2].set_title(_("Comment")) | |
4111 #self.columns[3].set_title(_("N")) | |
4112 #self.columns[4].set_title(_("Length")) | |
4113 #self.columns[5].set_title(_("Width")) | |
4114 #self.columns[6].set_title(_("Height")) | |
4115 pass | |
4116 | |
4117 def controlSelection(self, selection): | |
4118 """def controlSelection(self, selection) | |
4119 | 4062 |
4120 selection: selection | 4063 selection: selection |
4121 | 4064 |
4122 Method connected to set_selection_function() | 4065 Method connected to set_selection_function() |
4123 This method is called before any node is selected or unselected, | 4066 This method is called before any node is selected or unselected, |
4141 _selection = "office" | 4084 _selection = "office" |
4142 _office = _company.offices[selection[1]] | 4085 _office = _company.offices[selection[1]] |
4143 _values = _office.values | 4086 _values = _office.values |
4144 if not self.__selection == _selection: | 4087 if not self.__selection == _selection: |
4145 self.__selection = _selection | 4088 self.__selection = _selection |
4146 self.setOptions(_selection) | 4089 self.options = _selection |
4147 self.__option_View.setValues(_values) | 4090 self.__option_View.values = _values |
4148 | 4091 |
4149 return True | 4092 return True |
4150 | 4093 |
4151 def showMessageRecord(self, record_path): | 4094 def _showMessageRecord(self, record_path): |
4152 """def showMessageRecord(self, record_path) | 4095 """_showMessageRecord(record_path) |
4153 | 4096 |
4154 record_path: the path of the record to show | 4097 record_path: the path of the record to show |
4155 Method connected to "change_active" message | 4098 Method connected to "change_active" message |
4156 Show the record especified in the "change_active" message | 4099 Show the record especified in the "change_active" message |
4157 """ | 4100 """ |
4158 self.__active_path_record = record_path | 4101 self.__active_path_record = record_path |
4159 | 4102 |
4160 def runMessage(self, message, path, arg=None): | 4103 def runMessage(self, message, path, arg=None): |
4161 """def runMessage(self, message, path, arg=None) | 4104 """runMessage(message, path, arg=None) |
4162 | 4105 |
4163 message: the message type | 4106 message: the message type |
4164 "change_active": change the active record | 4107 "change_active": change the active record |
4165 "clear": clear instance | 4108 "clear": clear instance |
4166 path: tuple that identifies the pane in the notebook page | 4109 path: tuple that identifies the pane in the notebook page |
4171 """ | 4114 """ |
4172 _budget = self.__budget | 4115 _budget = self.__budget |
4173 if message == "change_active": | 4116 if message == "change_active": |
4174 if _budget.hasPath(arg): | 4117 if _budget.hasPath(arg): |
4175 _path_record = arg | 4118 _path_record = arg |
4176 self.showMessageRecord( _path_record) | 4119 self._showMessageRecord( _path_record) |
4177 pass | 4120 pass |
4178 elif message == "clear": | 4121 elif message == "clear": |
4179 self._clear() | 4122 self._clear() |
4180 | 4123 |
4181 def colorCell(self, column, cell_renderer, tree_model, iter, lcolor): | 4124 def _colorCell(self, column, cell_renderer, tree_model, iter, lcolor): |
4182 """def colorCell(self, column, cell_renderer, tree_model, iter, lcolor) | 4125 """_colorCell(column, cell_renderer, tree_model, iter, lcolor) |
4183 | 4126 |
4184 column: the gtk.TreeViewColumn in the treeview | 4127 column: the gtk.TreeViewColumn in the treeview |
4185 cell_renderer: a gtk.CellRenderer | 4128 cell_renderer: a gtk.CellRenderer |
4186 tree_model: the gtk.TreeModel | 4129 tree_model: the gtk.TreeModel |
4187 iter: gtk.TreeIter pointing at the row | 4130 iter: gtk.TreeIter pointing at the row |
4215 else: | 4158 else: |
4216 cell_renderer.set_property('cell-background-gdk', | 4159 cell_renderer.set_property('cell-background-gdk', |
4217 lcolor[_number % 2]) | 4160 lcolor[_number % 2]) |
4218 | 4161 |
4219 def _clear(self): | 4162 def _clear(self): |
4220 """def _clear(self) | 4163 """_clear() |
4221 | 4164 |
4222 it deletes the __budget value | 4165 it deletes the self.__budget value |
4223 this would not be necessary if there were not circular references, | |
4224 which are pending to fix | |
4225 """ | 4166 """ |
4226 del self.__budget | 4167 del self.__budget |
4227 | 4168 |
4228 def getWidget(self): | 4169 def _getWidget(self): |
4229 """def getWidget(self) | 4170 """_getWidget() |
4230 | 4171 |
4231 return the main widget (gtk.ScrolledWindow) | 4172 return the main widget (gtk.ScrolledWindow) |
4232 """ | 4173 """ |
4233 return self.__widget | 4174 return self.__widget |
4234 | 4175 |
4235 def getPath(self): | 4176 def _getPath(self): |
4236 """def getPath(self) | 4177 """_getPath() |
4237 | 4178 |
4238 return the tuple that identifies the pane in the notebook page | 4179 return the tuple that identifies the pane in the notebook page |
4239 """ | 4180 """ |
4240 return self.__path | 4181 return self.__path |
4241 | 4182 |
4242 def setPath(self, path): | 4183 def _setPath(self, path): |
4243 """def setPath(self) | 4184 """_setPath() |
4244 | 4185 |
4245 sets the tuple that identifies the pane in the notebook page | 4186 sets the tuple that identifies the pane in the notebook page |
4246 """ | 4187 """ |
4247 self.__path = path | 4188 self.__path = path |
4248 def getPage(self): | 4189 |
4249 """def getPage(self) | 4190 def _getPage(self): |
4191 """_getPage() | |
4250 | 4192 |
4251 return the Page | 4193 return the Page |
4252 """ | 4194 """ |
4253 return self.__page | 4195 return self.__page |
4254 | 4196 |
4255 def setPage(self,page): | 4197 def _setPage(self,page): |
4256 """def setPage(self) | 4198 """_setPage() |
4257 | 4199 |
4258 set the Page | 4200 set the Page |
4259 """ | 4201 """ |
4260 self.__page = page | 4202 self.__page = page |
4261 | 4203 |
4262 def getBudget(self): | 4204 def _getBudget(self): |
4263 """def getBudget(self) | 4205 """_getBudget() |
4264 | 4206 |
4265 return the Budget objet | 4207 return the Budget objet |
4266 """ | 4208 """ |
4267 return self.__budget | 4209 return self.__budget |
4268 | 4210 |
4269 def getActivePathRecord(self): | 4211 def _getActivePathRecord(self): |
4270 """def getActivePathRecord(self) | 4212 """_getActivePathRecord() |
4271 | 4213 |
4272 return the Active Path Record | 4214 return the Active Path Record |
4273 """ | 4215 """ |
4274 return self.__active_path_record | 4216 return self.__active_path_record |
4275 | 4217 |
4276 active_path_record = property(getActivePathRecord, None, None, | 4218 active_path_record = property(_getActivePathRecord, None, None, |
4277 "Active path record") | 4219 "Active path record") |
4278 widget = property(getWidget, None, None, | 4220 widget = property(_getWidget, None, None, |
4279 "main widget") | 4221 "main widget") |
4280 path = property(getPath, setPath, None, | 4222 path = property(_getPath, _setPath, None, |
4281 "Path that identifies the item in the page notebook") | 4223 "Path that identifies the item in the page notebook") |
4282 page = property(getPage, setPage, None, | 4224 page = property(_getPage, _setPage, None, |
4283 "Weak reference from Page instance which creates this class") | 4225 "Weak reference from Page instance which creates this class") |
4284 budget = property(getBudget, None, None, | 4226 budget = property(_getBudget, None, None, |
4285 "Budget object") | 4227 "Budget object") |
4286 | 4228 |
4287 | 4229 |
4288 class OptionView(object): | 4230 class OptionView(object): |
4289 """gui.OptionView: | 4231 """gui.OptionView: |
4297 (option_name, type) | 4239 (option_name, type) |
4298 Ancestry: | 4240 Ancestry: |
4299 +-- object | 4241 +-- object |
4300 +-- OptionView | 4242 +-- OptionView |
4301 Atributes: | 4243 Atributes: |
4302 "__liststore" | 4244 widget: Read. Main widget |
4303 "__treeview" | 4245 options: Write |
4304 "__option_column" | 4246 values: Write |
4305 "__value_column" | |
4306 "__type_column" | |
4307 "__treeselection" | |
4308 "__widget": Main windget | |
4309 "__option_list" | |
4310 "__option_dict" | |
4311 "__description_label" | |
4312 "option_types" | |
4313 "widget": __widget | |
4314 Methods: | 4247 Methods: |
4315 __init__(self, option_list) | |
4316 createColumn(self, args) | |
4317 createTextBaseColumn(self,args) | |
4318 createBaseColumn(self,args) | |
4319 """ | 4248 """ |
4320 | 4249 |
4321 def __init__(self, option_list): | 4250 def __init__(self, option_list): |
4322 """__init__(self, option_list) | 4251 """__init__(option_list) |
4323 | 4252 |
4253 self.__option_dict: | |
4254 {"option key" : ["option name", "value", "option type", | |
4255 "option_description"]} | |
4256 self.__option_list: option keys list | |
4257 self.__option_types: valid option types list | |
4258 self.__liststore: gtk.ListStore | |
4259 self.__treeview: gtk.TreeView | |
4260 self.__option_column: option column | |
4261 self.__value_column: value column | |
4262 self.__type_column: type column | |
4263 self.__description_label: gtk.Label | |
4264 self.__widget: Main widget | |
4265 | |
4266 Creates an shows the widget that contain the option data. | |
4324 """ | 4267 """ |
4325 self.__option_dict = {} | 4268 self.__option_dict = {} |
4326 self.__option_list = [] | 4269 self.__option_list = [] |
4327 self.option_types = {"boolean" : _("Boolean"), | 4270 self.__option_types = {"boolean" : _("Boolean"), |
4328 "integer": _("Integer"), | 4271 "integer": _("Integer"), |
4329 "string": _("Text"), | 4272 "string": _("Text"), |
4330 "color" : _("Color"), | 4273 "color" : _("Color"), |
4331 "list" : _("List")} | 4274 "list" : _("List")} |
4332 # ListStore | 4275 # ListStore |
4356 self.__option_column.set_fixed_width(150) | 4299 self.__option_column.set_fixed_width(150) |
4357 self.__option_column.set_resizable(True) | 4300 self.__option_column.set_resizable(True) |
4358 _option_cell = gtk.CellRendererText() | 4301 _option_cell = gtk.CellRendererText() |
4359 _option_cell.set_property('foreground-gdk', _text_color) | 4302 _option_cell.set_property('foreground-gdk', _text_color) |
4360 self.__option_column.pack_start(_option_cell, True) | 4303 self.__option_column.pack_start(_option_cell, True) |
4361 self.__option_column.set_cell_data_func(_option_cell, self.colorCell, | 4304 self.__option_column.set_cell_data_func(_option_cell, self._colorCell, |
4362 _background_color) | 4305 _background_color) |
4363 self.__option_column.set_title(_("Option name")) | 4306 self.__option_column.set_title(_("Option name")) |
4364 self.__option_column.add_attribute(_option_cell, 'text', 1) | 4307 self.__option_column.add_attribute(_option_cell, 'text', 1) |
4365 self.__treeview.append_column(self.__option_column) | 4308 self.__treeview.append_column(self.__option_column) |
4366 # Value Column | 4309 # Value Column |
4369 self.__value_column.set_fixed_width(275) | 4312 self.__value_column.set_fixed_width(275) |
4370 self.__value_column.set_resizable(True) | 4313 self.__value_column.set_resizable(True) |
4371 _value_cell = gtk.CellRendererText() | 4314 _value_cell = gtk.CellRendererText() |
4372 _value_cell.set_property('foreground-gdk', _text_color) | 4315 _value_cell.set_property('foreground-gdk', _text_color) |
4373 self.__value_column.pack_start(_value_cell, True) | 4316 self.__value_column.pack_start(_value_cell, True) |
4374 self.__value_column.set_cell_data_func(_value_cell, self.colorCell, | 4317 self.__value_column.set_cell_data_func(_value_cell, self._colorCell, |
4375 _background_color) | 4318 _background_color) |
4376 self.__value_column.set_title(_("Value")) | 4319 self.__value_column.set_title(_("Value")) |
4377 self.__value_column.add_attribute(_value_cell, 'text', 2) | 4320 self.__value_column.add_attribute(_value_cell, 'text', 2) |
4378 self.__treeview.append_column(self.__value_column) | 4321 self.__treeview.append_column(self.__value_column) |
4379 # Type Column | 4322 # Type Column |
4382 self.__type_column.set_fixed_width(70) | 4325 self.__type_column.set_fixed_width(70) |
4383 self.__type_column.set_resizable(True) | 4326 self.__type_column.set_resizable(True) |
4384 _type_cell = gtk.CellRendererText() | 4327 _type_cell = gtk.CellRendererText() |
4385 _type_cell.set_property('foreground-gdk', _text_color) | 4328 _type_cell.set_property('foreground-gdk', _text_color) |
4386 self.__type_column.pack_start(_type_cell, True) | 4329 self.__type_column.pack_start(_type_cell, True) |
4387 self.__type_column.set_cell_data_func(_type_cell, self.colorCell, | 4330 self.__type_column.set_cell_data_func(_type_cell, self._colorCell, |
4388 _background_color) | 4331 _background_color) |
4389 self.__type_column.set_title(_("Type")) | 4332 self.__type_column.set_title(_("Type")) |
4390 self.__treeview.append_column(self.__type_column) | 4333 self.__treeview.append_column(self.__type_column) |
4391 # End Column | 4334 # End Column |
4392 _end_column = gtk.TreeViewColumn() | 4335 _end_column = gtk.TreeViewColumn() |
4395 _end_cell.set_property('cell-background-gdk', | 4338 _end_cell.set_property('cell-background-gdk', |
4396 gtk.gdk.color_parse(globalVars.color["UNEVEN"])) | 4339 gtk.gdk.color_parse(globalVars.color["UNEVEN"])) |
4397 _end_column.pack_start(_end_cell, True) | 4340 _end_column.pack_start(_end_cell, True) |
4398 self.__treeview.append_column(_end_column) | 4341 self.__treeview.append_column(_end_column) |
4399 # Connect | 4342 # Connect |
4400 self.__treeview.connect("key-press-event", self.treeviewKeyPressEvent) | 4343 self.__treeview.connect("key-press-event", self._treeviewKeyPressEvent) |
4401 self.__treeview.connect("button-press-event", self.treeviewClickedEvent) | 4344 self.__treeview.connect("button-press-event", |
4345 self._treeviewClickedEvent) | |
4402 # control selection | 4346 # control selection |
4403 self.__treeselection = self.__treeview.get_selection() | 4347 _treeselection = self.__treeview.get_selection() |
4404 self.__treeselection.set_mode(gtk.SELECTION_MULTIPLE) | 4348 _treeselection.set_mode(gtk.SELECTION_MULTIPLE) |
4405 self.__treeselection.set_select_function(self.controlSelection) | 4349 _treeselection.set_select_function(self._controlSelection) |
4406 # labels | 4350 # labels |
4407 _frame = gtk.Frame() | 4351 _frame = gtk.Frame() |
4408 _frame.set_shadow_type(gtk.SHADOW_OUT) | 4352 _frame.set_shadow_type(gtk.SHADOW_OUT) |
4409 _vbox2 = gtk.VBox() | 4353 _vbox2 = gtk.VBox() |
4410 _frame.add(_vbox2) | 4354 _frame.add(_vbox2) |
4429 # Show | 4373 # Show |
4430 self.__treeview.show() | 4374 self.__treeview.show() |
4431 _vbox.show() | 4375 _vbox.show() |
4432 self.__widget = _vbox | 4376 self.__widget = _vbox |
4433 | 4377 |
4434 def treeviewKeyPressEvent(self, widget, event): | 4378 def _treeviewKeyPressEvent(self, widget, event): |
4435 """def treeviewKeyPressEvent(self, widget, event) | 4379 """_treeviewKeyPressEvent(widget, event) |
4436 | 4380 |
4437 widget: treewiew widget | 4381 widget: treewiew widget |
4438 event: Key Press event | 4382 event: Key Press event |
4439 Method connected to "key-press-event" signal | 4383 Method connected to "key-press-event" signal |
4440 The "key-press-event" signal is emitted when the user presses a key | 4384 The "key-press-event" signal is emitted when the user presses a key |
4455 else: | 4399 else: |
4456 _description = self.__liststore[_cursor_path][4] | 4400 _description = self.__liststore[_cursor_path][4] |
4457 self.__description_label.set_text(_description) | 4401 self.__description_label.set_text(_description) |
4458 return False | 4402 return False |
4459 | 4403 |
4460 def treeviewClickedEvent(self, widget, event): | 4404 def _treeviewClickedEvent(self, widget, event): |
4461 """def treeviewClickedEvent(self, widget, event) | 4405 """_treeviewClickedEvent(widget, event) |
4462 | 4406 |
4463 widget: treewiew widget | 4407 widget: treewiew widget |
4464 event: clicked event | 4408 event: clicked event |
4465 Method connected to "button-press-event" signal | 4409 Method connected to "button-press-event" signal |
4466 The "button-press-event" signal is emitted when a mouse button is | 4410 The "button-press-event" signal is emitted when a mouse button is |
4482 self.__treeview.set_cursor(_path_cursor,self.__value_column, | 4426 self.__treeview.set_cursor(_path_cursor,self.__value_column, |
4483 True) | 4427 True) |
4484 self.__treeview.grab_focus() | 4428 self.__treeview.grab_focus() |
4485 return True | 4429 return True |
4486 return True | 4430 return True |
4487 | 4431 |
4488 def controlSelection(self, selection): | 4432 def _controlSelection(self, selection): |
4489 """def controlSelection(self, selection) | 4433 """_controlSelection(selection) |
4490 | 4434 |
4491 selection: treeselection | 4435 selection: treeselection |
4492 | 4436 |
4493 Method connected to set_selection_function() | 4437 Method connected to set_selection_function() |
4494 This method is called before any node is selected or unselected, | 4438 This method is called before any node is selected or unselected, |
4499 | 4443 |
4500 Return False so none row is selected | 4444 Return False so none row is selected |
4501 """ | 4445 """ |
4502 return False | 4446 return False |
4503 | 4447 |
4504 | 4448 def _colorCell(self, column, cell_renderer, tree_model, iter, lcolor): |
4505 def colorCell(self, column, cell_renderer, tree_model, iter, lcolor): | 4449 """_colorCell(column, cell_renderer, tree_model, iter, lcolor) |
4506 """def colorCell(self, column, cell_renderer, tree_model, iter, lcolor) | |
4507 | 4450 |
4508 column: the gtk.TreeViewColumn in the treeview | 4451 column: the gtk.TreeViewColumn in the treeview |
4509 cell_renderer: a gtk.CellRenderer | 4452 cell_renderer: a gtk.CellRenderer |
4510 tree_model: the gtk.TreeModel | 4453 tree_model: the gtk.TreeModel |
4511 iter: gtk.TreeIter pointing at the row | 4454 iter: gtk.TreeIter pointing at the row |
4534 gtk.gdk.color_parse(globalVars.color["ACTIVE"])) | 4477 gtk.gdk.color_parse(globalVars.color["ACTIVE"])) |
4535 else: | 4478 else: |
4536 cell_renderer.set_property('cell-background-gdk', | 4479 cell_renderer.set_property('cell-background-gdk', |
4537 lcolor[_number % 2]) | 4480 lcolor[_number % 2]) |
4538 if column is self.__type_column: | 4481 if column is self.__type_column: |
4539 _type = self.option_types[tree_model[_row_path][3]] | 4482 _type = self.__option_types[tree_model[_row_path][3]] |
4540 cell_renderer.set_property('text', _type) | 4483 cell_renderer.set_property('text', _type) |
4541 | 4484 |
4542 def setOptions(self, option_list): | 4485 def _setOptions(self, option_list): |
4543 """setOptions(self, option_list) | 4486 """_setOptions(option_list) |
4544 | 4487 |
4545 option_list: list of tuples | 4488 option_list: list of tuples |
4546 (option, option name, type) | 4489 (option, option name, type) |
4547 option: option identifier | 4490 option: option identifier |
4548 option name: a string with the option name | 4491 option name: a string with the option name |
4564 _option_type = _option[2] | 4507 _option_type = _option[2] |
4565 _option_description = _option[3] | 4508 _option_description = _option[3] |
4566 if isinstance(_option_key, str) and \ | 4509 if isinstance(_option_key, str) and \ |
4567 (isinstance(_option_name, str) or\ | 4510 (isinstance(_option_name, str) or\ |
4568 isinstance(_option_name, unicode))and \ | 4511 isinstance(_option_name, unicode))and \ |
4569 _option_type in self.option_types.keys(): | 4512 _option_type in self.__option_types.keys(): |
4570 self.__liststore.append([_option_key, _option_name, "", | 4513 self.__liststore.append([_option_key, _option_name, "", |
4571 _option_type, _option_description]) | 4514 _option_type, _option_description]) |
4572 self.__option_dict[_option_key] = [_option_name, "", | 4515 self.__option_dict[_option_key] = [_option_name, "", |
4573 _option_type, _option_description] | 4516 _option_type, _option_description] |
4574 self.__option_list.append(_option_key) | 4517 self.__option_list.append(_option_key) |
4576 print _("Option values must be strings") | 4519 print _("Option values must be strings") |
4577 else: | 4520 else: |
4578 print _("Option must be a tuple with 4 items") | 4521 print _("Option must be a tuple with 4 items") |
4579 else: | 4522 else: |
4580 print _("Option list must be a list") | 4523 print _("Option list must be a list") |
4581 return | 4524 |
4582 def setValues(self, values): | 4525 def _setValues(self, values): |
4583 """setValues(self, values) | 4526 """_setValues(values) |
4584 | 4527 |
4585 values: dictionary {option : value} | 4528 values: dictionary {option : value} |
4586 | 4529 |
4587 Sets the Options values | 4530 Sets the Options values |
4588 """ | 4531 """ |
4652 self.__treeview.grab_focus() | 4595 self.__treeview.grab_focus() |
4653 (_cursor_path, _column) = self.__treeview.get_cursor() | 4596 (_cursor_path, _column) = self.__treeview.get_cursor() |
4654 _description = self.__liststore[_cursor_path][4] | 4597 _description = self.__liststore[_cursor_path][4] |
4655 self.__description_label.set_text(_description) | 4598 self.__description_label.set_text(_description) |
4656 | 4599 |
4657 def getWidget(self): | 4600 def _getWidget(self): |
4658 """def getWidget(self) | 4601 """_getWidget() |
4659 | 4602 |
4660 return the main widget (gtk.ScrolledWindow) | 4603 return the main widget (gtk.ScrolledWindow) |
4661 """ | 4604 """ |
4662 return self.__widget | 4605 return self.__widget |
4663 widget = property(getWidget, None, None, | 4606 |
4607 widget = property(_getWidget, None, None, | |
4664 "main widget") | 4608 "main widget") |
4609 values = property(None, _setValues, None, | |
4610 "values") | |
4611 options = property(None, _setOptions, None, | |
4612 "options") |