Mercurial > pyarq-presupuestos
comparison Gtk/gui.py @ 11:fe9c55f86698
Improvements in navigation buttons
| author | Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es> |
|---|---|
| date | Wed, 24 Nov 2010 22:56:02 +0100 |
| parents | d2cbc0278b30 |
| children | 60bc5117926c |
comparison
equal
deleted
inserted
replaced
| 10:d2cbc0278b30 | 11:fe9c55f86698 |
|---|---|
| 72 if globalVars.desktop["autodetect"]: | 72 if globalVars.desktop["autodetect"]: |
| 73 openwith.autodetect_desktop() | 73 openwith.autodetect_desktop() |
| 74 print utils.mapping(_("pyArq-Presupuestos running on $1"), | 74 print utils.mapping(_("pyArq-Presupuestos running on $1"), |
| 75 (globalVars.desktop["desktop"],)) | 75 (globalVars.desktop["desktop"],)) |
| 76 | 76 |
| 77 # Add MenutoolButton to Uimanager | |
| 78 class MenuToolAction(gtk.Action): | |
| 79 __gtype_name__ = "MenuToolAction" | |
| 80 | |
| 81 gobject.type_register(MenuToolAction) | |
| 82 MenuToolAction.set_tool_item_type(gtk.MenuToolButton) | |
| 83 | |
| 77 | 84 |
| 78 class MainWindow(object): | 85 class MainWindow(object): |
| 79 """gui.MainWindow: | 86 """gui.MainWindow: |
| 80 | 87 |
| 81 Description: | 88 Description: |
| 85 gui.MainWindow() | 92 gui.MainWindow() |
| 86 Ancestry: | 93 Ancestry: |
| 87 +-- object | 94 +-- object |
| 88 +-- MainWindow | 95 +-- MainWindow |
| 89 Atributes: | 96 Atributes: |
| 90 notebook: Read. notebook widget | |
| 91 pageList: Read. page list | |
| 92 budgetList: Read. budget list | |
| 93 Methods: | 97 Methods: |
| 94 removePage | 98 changeHistorySignal |
| 99 changeActiveSignal | |
| 100 appendEmptyPage | |
| 101 updatePage | |
| 102 closePage | |
| 95 """ | 103 """ |
| 96 # TODO:* Can choose open budget in new window | 104 # TODO:* Can choose open budget in new window |
| 97 # TODO:* gtk.Action for menu and toolbar | |
| 98 # TODO:* Can choose show more than one notebook in the same window or | 105 # TODO:* Can choose show more than one notebook in the same window or |
| 99 # TODO: can show basedata notebook in a side pane | 106 # TODO: can show basedata notebook in a side pane |
| 100 __ui = '''<ui> | 107 __ui = '''<ui> |
| 101 <menubar name="MenuBar"> | 108 <menubar name="MenuBar"> |
| 102 <menu action="File"> | 109 <menu action="File"> |
| 104 <menuitem action="Close"/> | 111 <menuitem action="Close"/> |
| 105 </menu> | 112 </menu> |
| 106 <menu action="View"> | 113 <menu action="View"> |
| 107 </menu> | 114 </menu> |
| 108 <menu action="Go"> | 115 <menu action="Go"> |
| 109 <menuitem action="GoUp"/> | |
| 110 <menuitem action="GoDown"/> | |
| 111 <menuitem action="GoPrevious"/> | 116 <menuitem action="GoPrevious"/> |
| 112 <menuitem action="GoPosterior"/> | 117 <menuitem action="GoPosterior"/> |
| 118 <menuitem action="GoUp"/> | |
| 113 <menuitem action="GoToRoot"/> | 119 <menuitem action="GoToRoot"/> |
| 114 </menu> | 120 </menu> |
| 115 <menu action="Test"> | 121 <menu action="Test"> |
| 116 <menuitem action="ImportFiebdcPriceDatabase"/> | 122 <menuitem action="ImportFiebdcPriceDatabase"/> |
| 117 <menuitem action="OpenPriceDatabase"/> | 123 <menuitem action="OpenPriceDatabase"/> |
| 119 </menubar> | 125 </menubar> |
| 120 <toolbar name="ToolBar"> | 126 <toolbar name="ToolBar"> |
| 121 <toolitem action="ImportFiebdc"/> | 127 <toolitem action="ImportFiebdc"/> |
| 122 <toolitem action="Close"/> | 128 <toolitem action="Close"/> |
| 123 <separator name="sep1"/> | 129 <separator name="sep1"/> |
| 130 <toolitem action="GoPrevMenu"/> | |
| 131 <toolitem action="GoPostMenu"/> | |
| 124 <toolitem action="GoUp"/> | 132 <toolitem action="GoUp"/> |
| 125 <toolitem action="GoDown"/> | |
| 126 <toolitem action="GoPrevious"/> | |
| 127 <toolitem action="GoPosterior"/> | |
| 128 <toolitem action="GoToRoot"/> | 133 <toolitem action="GoToRoot"/> |
| 129 </toolbar> | 134 </toolbar> |
| 130 </ui>''' | 135 </ui>''' |
| 131 | 136 |
| 132 def __init__(self): | 137 def __init__(self): |
| 133 """__init__() | 138 """__init__() |
| 134 | 139 |
| 135 Initialize the atributes "__budget_list" and "__page_list" without data. | 140 Initialize the atributes self.__page_list without data. |
| 136 Creates the widgets "window" and "__notebook". | 141 Creates the widgets "window" and "__notebook". |
| 137 | 142 |
| 138 self.__window: gtk.Window object | 143 self.__window: gtk.Window object |
| 139 self.__budget_temp_list: Temporal list of budgets | 144 self.__uimanager: gtk.UIManager object |
| 140 self.__budget_list: List of budgets ("base.Budget" objects) | |
| 141 self.__page_list: List of pages ("Page" object) | 145 self.__page_list: List of pages ("Page" object) |
| 142 self.__notebook: Notebook widget ("gtk.Notebook" object) | 146 self.__notebook: Notebook widget ("gtk.Notebook" object) |
| 143 self.__general_action_group: "General" action group | 147 self.__general_action_group: "General" action group |
| 144 """ | 148 self.__navigation_action_group: "Navigation" action group |
| 145 #TODO: action group for Navigation buttons | 149 """ |
| 146 self.__budget_temp_list = [] | |
| 147 self.__budget_list = [] | |
| 148 self.__page_list = [] | 150 self.__page_list = [] |
| 149 # Main window | 151 # Main window |
| 150 self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL) | 152 self.__window = gtk.Window(gtk.WINDOW_TOPLEVEL) |
| 151 self.__window.set_default_size(771, 570) | 153 self.__window.set_default_size(771, 570) |
| 152 self.__window.set_title("Presupuestos") | 154 self.__window.set_title("Presupuestos") |
| 156 # Vertical box | 158 # Vertical box |
| 157 _vbox1 = gtk.VBox(False, 0) | 159 _vbox1 = gtk.VBox(False, 0) |
| 158 self.__window.add(_vbox1) | 160 self.__window.add(_vbox1) |
| 159 _vbox1.show() | 161 _vbox1.show() |
| 160 #Uimanager | 162 #Uimanager |
| 161 _uimanager = gtk.UIManager() | 163 self.__uimanager = gtk.UIManager() |
| 162 _accelgroup = _uimanager.get_accel_group() | 164 _accelgroup = self.__uimanager.get_accel_group() |
| 163 self.__window.add_accel_group(_accelgroup) | 165 self.__window.add_accel_group(_accelgroup) |
| 164 _general_action_group = gtk.ActionGroup("General") | 166 self.__general_action_group = gtk.ActionGroup("General") |
| 165 self.__general_action_group = _general_action_group | 167 self.__general_action_group.add_actions( |
| 166 _general_action_group.add_actions( | |
| 167 [("File", None, _("_File"), None), | 168 [("File", None, _("_File"), None), |
| 168 ("ImportFiebdc", gtk.STOCK_OPEN, _('_Import Fiebdc'), "", | 169 ("ImportFiebdc", gtk.STOCK_OPEN, _('_Import Fiebdc'), "", |
| 169 _('Import FIEBDC'), self._menuitemImportFiebdc), | 170 _('Import FIEBDC'), self._menuitemImportFiebdc), |
| 170 ("Close", gtk.STOCK_CLOSE, _("_Close"), None, _('Close'), | 171 ("Close", gtk.STOCK_CLOSE, _("_Close"), None, _('Close'), |
| 171 self._menuitemClose), | 172 self._menuitemClose), |
| 172 ("View", None, _("_View")), | 173 ("View", None, _("_View")), |
| 173 ("Go", None, _("_Go")), | 174 ("Go", None, _("_Go")), |
| 174 ("GoUp", gtk.STOCK_GO_UP, _("_Up Record"),"", | |
| 175 _("Go up record"), self._menuitemGoUp), | |
| 176 ("GoDown", gtk.STOCK_GO_DOWN, _("_Down Record"),"", | |
| 177 _("Go down record"), self._menuitemGoDown), | |
| 178 ("GoPrevious", gtk.STOCK_GO_BACK, _("_Previous Record"),"", | |
| 179 _("Go Previous record"), self._menuitemGoPrevious), | |
| 180 ("GoPosterior", gtk.STOCK_GO_FORWARD, _("_Posterior Record"),"", | |
| 181 _("Go posterior record"), self._menuitemGoPosterior), | |
| 182 ("GoToRoot", gtk.STOCK_GOTO_TOP, _("_Root"),"", | |
| 183 _("Go to root"), self._menuitemGoToRoot), | |
| 184 ("Test", None, _("_Test")), | 175 ("Test", None, _("_Test")), |
| 185 ('ImportFiebdcPriceDatabase', gtk.STOCK_OPEN, | 176 ('ImportFiebdcPriceDatabase', gtk.STOCK_OPEN, |
| 186 _("Import Fiebdc _price database"), "", _("Import database"), | 177 _("Import Fiebdc _price database"), "", _("Import database"), |
| 187 self._menuitemImportPriceDatabase ), | 178 self._menuitemImportPriceDatabase ), |
| 188 ("OpenPriceDatabase", gtk.STOCK_OPEN, _('_Open price database'), | 179 ("OpenPriceDatabase", gtk.STOCK_OPEN, _('_Open price database'), |
| 189 "", _('Open Database'), self._menuitemOpenPriceDatabase), | 180 "", _('Open Database'), self._menuitemOpenPriceDatabase), |
| 190 ]) | 181 ]) |
| 191 _uimanager.insert_action_group(_general_action_group, 0) | 182 self.__navigation_action_group = gtk.ActionGroup("Navigation") |
| 192 _uimanager.add_ui_from_string(self.__ui) | 183 self.__navigation_action_group.add_actions( |
| 193 _menu_bar = _uimanager.get_widget("/MenuBar") | 184 [("Go", None, _("_Go")), |
| 185 ("GoPrevious", gtk.STOCK_GO_BACK, _("_Back"),"", | |
| 186 _("Go to the previous visited item"), | |
| 187 self._menuitemGoPrevious), | |
| 188 ("GoPosterior", gtk.STOCK_GO_FORWARD, _("_Forward"),"", | |
| 189 _("Go to the next visited item"), self._menuitemGoPosterior), | |
| 190 ("GoUp", gtk.STOCK_GO_UP, _("_Up Item"),"", | |
| 191 _("Go up item"), self._menuitemGoUp), | |
| 192 ("GoToRoot", gtk.STOCK_GOTO_TOP, _("_Root"),"", | |
| 193 _("Go to root"), self._menuitemGoToRoot), | |
| 194 ]) | |
| 195 self.__navigation_action_group.add_action( | |
| 196 MenuToolAction("GoPrevMenu", None , | |
| 197 _("Go to the previous visited item"), | |
| 198 gtk.STOCK_GO_BACK)) | |
| 199 self.__navigation_action_group.add_action( | |
| 200 MenuToolAction("GoPostMenu", None , | |
| 201 _("Go to the next visited item"), | |
| 202 gtk.STOCK_GO_FORWARD)) | |
| 203 self.__navigation_action_group.set_sensitive(False) | |
| 204 self.__navigation_action_group.get_action("GoPostMenu").set_sensitive( | |
| 205 False) | |
| 206 self.__navigation_action_group.get_action("GoPrevMenu").set_sensitive( | |
| 207 False) | |
| 208 self.__uimanager.insert_action_group(self.__general_action_group, 0) | |
| 209 self.__uimanager.insert_action_group(self.__navigation_action_group, 1) | |
| 210 self.__uimanager.add_ui_from_string(self.__ui) | |
| 211 _menu_bar = self.__uimanager.get_widget("/MenuBar") | |
| 194 _vbox1.pack_start(_menu_bar, False, False, 0) | 212 _vbox1.pack_start(_menu_bar, False, False, 0) |
| 195 _toolbar = _uimanager.get_widget("/ToolBar") | 213 _toolbar = self.__uimanager.get_widget("/ToolBar") |
| 196 _toolbar.get_settings().set_long_property("gtk-toolbar-icon-size", | 214 _toolbar.get_settings().set_long_property("gtk-toolbar-icon-size", |
| 197 gtk.ICON_SIZE_SMALL_TOOLBAR, "pyArq-Presupuestos:toolbar") | 215 gtk.ICON_SIZE_SMALL_TOOLBAR, "pyArq-Presupuestos:toolbar") |
| 198 _vbox1.pack_start(_toolbar, False, False, 0) | 216 _vbox1.pack_start(_toolbar, False, False, 0) |
| 217 # menuToolButton go prev | |
| 218 _go_prev_button = self.__uimanager.get_widget( | |
| 219 "/ToolBar/GoPrevMenu") | |
| 220 _go_prev_button.set_arrow_tooltip_text(_("Back history")) | |
| 221 _go_prev_button.connect('clicked', self._menuitemGoPrevious) | |
| 222 # menuToolButton go pos | |
| 223 _go_post_button = self.__uimanager.get_widget( | |
| 224 "/ToolBar/GoPostMenu") | |
| 225 _go_post_button.set_arrow_tooltip_text(_("Forward history")) | |
| 226 _go_post_button.connect('clicked', self._menuitemGoPosterior) | |
| 199 # Notebook | 227 # Notebook |
| 200 self.__notebook = gtk.Notebook() | 228 self.__notebook = gtk.Notebook() |
| 201 _vbox1.pack_start(self.__notebook, True, True, 0) | 229 _vbox1.pack_start(self.__notebook, True, True, 0) |
| 202 self.__notebook.set_tab_pos(gtk.POS_TOP) | 230 self.__notebook.set_tab_pos(gtk.POS_TOP) |
| 203 self.__notebook.set_show_tabs(True) | 231 self.__notebook.set_show_tabs(True) |
| 204 self.__notebook.set_show_border(True) | 232 self.__notebook.set_show_border(True) |
| 205 self.__notebook.set_scrollable(True) | 233 self.__notebook.set_scrollable(True) |
| 234 self.__notebook.connect("switch-page", self._switch_page) | |
| 206 self.__notebook.show() | 235 self.__notebook.show() |
| 207 self._main() | 236 self._main() |
| 237 #TODO: create budget object in mainwindow? | |
| 238 | |
| 239 def changeHistorySignal(self): | |
| 240 """changeHistorySignal() | |
| 241 | |
| 242 A pane emit the updateHistory signal. | |
| 243 | |
| 244 Nothing to do now | |
| 245 """ | |
| 246 pass | |
| 247 | |
| 248 def changeActiveSignal(self): | |
| 249 """changeActiveSignal() | |
| 250 | |
| 251 A pane emit the change-active signal. | |
| 252 | |
| 253 Chech buttons sensitive | |
| 254 """ | |
| 255 self._checkButtonsSensitive(self.__notebook.get_current_page()) | |
| 256 | |
| 257 def _checkButtonsSensitive(self, page_num): | |
| 258 """_checkButtonsSensitive(page_num) | |
| 259 | |
| 260 page_num: page number in notebook | |
| 261 | |
| 262 Check and if necessary update the sensitive state of the navigation | |
| 263 buttons. | |
| 264 """ | |
| 265 _page = self.__page_list[page_num] | |
| 266 if isinstance(_page, Page) and \ | |
| 267 self.__navigation_action_group.get_sensitive(): | |
| 268 # GoToRoot and GoUp actions | |
| 269 _goto_root = self.__navigation_action_group.get_action("GoToRoot") | |
| 270 _go_up = self.__navigation_action_group.get_action("GoUp") | |
| 271 if len(_page.activePathRecord) == 1 and \ | |
| 272 _goto_root.get_sensitive(): | |
| 273 _goto_root.set_sensitive(False) | |
| 274 _go_up.set_sensitive(False) | |
| 275 elif len(_page.activePathRecord) != 1 and \ | |
| 276 not _goto_root.get_sensitive(): | |
| 277 _goto_root.set_sensitive(True) | |
| 278 _go_up.set_sensitive(True) | |
| 279 # GoPrevMenu action | |
| 280 _go_Previous = self.__navigation_action_group.get_action( | |
| 281 "GoPrevious") | |
| 282 _go_prev = self.__navigation_action_group.get_action("GoPrevMenu") | |
| 283 if _page.previousPathRecord is None: | |
| 284 if _go_prev.get_sensitive(): | |
| 285 _go_prev.set_sensitive(False) | |
| 286 _go_Previous .set_sensitive(False) | |
| 287 else: | |
| 288 if not _go_prev.get_sensitive(): | |
| 289 _go_prev.set_sensitive(True) | |
| 290 _go_Previous.set_sensitive(True) | |
| 291 # GoPostMenu action | |
| 292 _go_Posterior = self.__navigation_action_group.get_action( | |
| 293 "GoPosterior") | |
| 294 _go_post = self.__navigation_action_group.get_action("GoPostMenu") | |
| 295 if _page.posteriorPathRecord is None: | |
| 296 if _go_post.get_sensitive(): | |
| 297 _go_post.set_sensitive(False) | |
| 298 _go_Posterior.set_sensitive(False) | |
| 299 else: | |
| 300 if not _go_post.get_sensitive(): | |
| 301 _go_post.set_sensitive(True) | |
| 302 _go_Posterior.set_sensitive(True) | |
| 303 | |
| 304 def _switch_page(self, notebook, page, page_num,): | |
| 305 """_switch_page(notebook, page, page_num) | |
| 306 | |
| 307 Method connected to the "switch-page" signal of the notebook widget | |
| 308 | |
| 309 It changes the sensitive state of the navigation action group | |
| 310 """ | |
| 311 _page = self.__page_list[page_num] | |
| 312 if isinstance(_page, EmptyPage) and \ | |
| 313 self.__navigation_action_group.get_sensitive(): | |
| 314 self.__navigation_action_group.set_sensitive(False) | |
| 315 elif isinstance(_page, Page): | |
| 316 if not self.__navigation_action_group.get_sensitive(): | |
| 317 self.__navigation_action_group.set_sensitive(True) | |
| 318 self._checkButtonsSensitive(page_num) | |
| 319 _go_prev = self.__uimanager.get_widget("/ToolBar/GoPrevMenu") | |
| 320 _go_prev.set_menu(_page.back_menu) | |
| 321 _go_post = self.__uimanager.get_widget("/ToolBar/GoPostMenu") | |
| 322 _go_post.set_menu(_page.forward_menu) | |
| 208 | 323 |
| 209 def _main(self): | 324 def _main(self): |
| 210 """main() | 325 """main() |
| 211 | 326 |
| 212 Shows window and starts the GTK+ event processing loop. | 327 Shows window and starts the GTK+ event processing loop. |
| 213 """ | 328 """ |
| 214 self.__window.show() | 329 self.__window.show() |
| 215 gtk.main() | 330 gtk.main() |
| 216 | 331 |
| 217 def _addBudget(self, budget): | 332 def appendEmptyPage(self, emptyPage): |
| 218 """_addBudget(budget) | 333 """appendEmptyPage(widget, label) |
| 219 | 334 |
| 220 budget: "base.Budget" object | 335 Append a empty page to the notebook. |
| 221 | 336 """ |
| 222 Appends a budget in the "__budget_list" | 337 self.__page_list.append(emptyPage) |
| 223 """ | 338 self.__notebook.append_page(emptyPage.widget, emptyPage.title) |
| 224 if not budget is None: | 339 # TODO: reordenable and detachable Pages |
| 225 _budget = budget | 340 #self.__notebook.set_tab_reorderable(emptyPage.widget, True) |
| 226 if _budget in self.__budget_temp_list: | 341 #self.__notebook.set_tab_detachable(emptyPage.widget, True) |
| 227 self.__budget_temp_list.remove(_budget) | 342 |
| 228 self.__budget_list.append(_budget) | 343 def updatePage(self, empty_page, page): |
| 229 | 344 """updatePage(page) |
| 230 def _appendPage(self): | 345 |
| 231 """_appendPage() | 346 Update emptyPage to Page. |
| 232 | 347 """ |
| 233 Creates a new page (instance of "Page class") from the last budget in | 348 _page_num = self.__notebook.page_num(empty_page.widget) |
| 234 __budget_list, appends this page in the "__page_list" and shows the | 349 self.__page_list[_page_num] = page |
| 235 page widget in the notebook widget. | 350 if self.__notebook.get_current_page() == _page_num: |
| 236 """ | 351 _go_prev = self.__uimanager.get_widget("/ToolBar/GoPrevMenu") |
| 237 _last_budget = self.__budget_list[-1] | 352 _go_prev.set_menu(page.back_menu) |
| 238 _page = Page(self, _last_budget) | 353 _go_post = self.__uimanager.get_widget("/ToolBar/GoPostMenu") |
| 239 self.__notebook.append_page(_page.widget, _page.title) | 354 _go_post.set_menu(page.forward_menu) |
| 240 self.__page_list.append(_page) | 355 if not self.__navigation_action_group.get_sensitive(): |
| 241 | 356 self.__navigation_action_group.set_sensitive(True) |
| 357 self._checkButtonsSensitive(_page_num) | |
| 242 | 358 |
| 243 def _menuitemImportFiebdc(self, widget): | 359 def _menuitemImportFiebdc(self, widget): |
| 244 """_menuitemImportFiebdc(widget) | 360 """_menuitemImportFiebdc(widget) |
| 245 | 361 |
| 246 widget: the widget where the event is emitted from | 362 widget: the widget where the event is emitted from |
| 247 Callback to open a budget file. | 363 Callback to open a budget file. |
| 248 | 364 |
| 249 Creates and shows a file selection window to open a budget file. | 365 Creates and shows a file selection window to open a budget file. |
| 250 """ | 366 """ |
| 251 _budget = base.Budget() | 367 _budget = base.Budget() |
| 252 self.__budget_temp_list.append(_budget) | |
| 253 _budget_file = fiebdc.Read() | 368 _budget_file = fiebdc.Read() |
| 254 _read_method = _budget_file.readFile | 369 _read_method = _budget_file.readFile |
| 255 _filename = "file" | 370 _filename = "file" |
| 256 _filetype = "budget" | 371 _filetype = "budget" |
| 257 _exit_method = _budget_file.cancel | 372 _exit_method = _budget_file.cancel |
| 262 """_menuitemImportPriceDatabase(widget) | 377 """_menuitemImportPriceDatabase(widget) |
| 263 | 378 |
| 264 widget: the widget where the event is emitted from | 379 widget: the widget where the event is emitted from |
| 265 Callback to open a price database file. | 380 Callback to open a price database file. |
| 266 | 381 |
| 267 Creates and shows a file selection window to open a price database file. | 382 Creates and shows a file selection window to open a price database |
| 383 file. | |
| 268 """ | 384 """ |
| 269 _budget = base.Budget() | 385 _budget = base.Budget() |
| 270 self.__budget_temp_list.append(_budget) | |
| 271 _budget_file = fiebdc.Read() | 386 _budget_file = fiebdc.Read() |
| 272 _read_method = _budget_file.readFile | 387 _read_method = _budget_file.readFile |
| 273 _filename = "file" | 388 _filename = "file" |
| 274 _filetype = "database" | 389 _filetype = "database" |
| 275 _exit_method = _budget_file.cancel | 390 _exit_method = _budget_file.cancel |
| 283 Callback to open a price database from a durus file. | 398 Callback to open a price database from a durus file. |
| 284 | 399 |
| 285 Creates and shows a file selection window to open a durus database | 400 Creates and shows a file selection window to open a durus database |
| 286 """ | 401 """ |
| 287 _budget = None | 402 _budget = None |
| 288 self.__budget_temp_list.append(_budget) | |
| 289 _budget_file = durusdatabase.Read() | 403 _budget_file = durusdatabase.Read() |
| 290 _read_method = _budget_file.readFile | 404 _read_method = _budget_file.readFile |
| 291 _filename = "file" | 405 _filename = "file" |
| 292 _filetype = "durus" | 406 _filetype = "durus" |
| 293 _exit_method = _budget_file.cancel | 407 _exit_method = _budget_file.cancel |
| 303 """ | 417 """ |
| 304 _page_num = self.__notebook.get_current_page() | 418 _page_num = self.__notebook.get_current_page() |
| 305 if _page_num != -1: | 419 if _page_num != -1: |
| 306 _page = self.__page_list[_page_num] | 420 _page = self.__page_list[_page_num] |
| 307 if isinstance(_page, EmptyPage) and _page.filetype == "durus": | 421 if isinstance(_page, EmptyPage) and _page.filetype == "durus": |
| 308 print _("Cancel reading Durus database has not been implemented.") | 422 print _("Cancel reading Durus database has not been " |
| 423 "implemented.") | |
| 309 else: | 424 else: |
| 310 _page.close() | 425 _page.close() |
| 311 | 426 |
| 312 def removePage(self, page_num): | 427 def closePage(self, page): |
| 313 """removePage(page_num) | 428 """closePage(page) |
| 314 | 429 |
| 315 page_num: The number Page to be removed | 430 page: EmptyPage or Page object |
| 316 | 431 |
| 317 Removes a page from notebook and page_list. | 432 Removes a page from notebook and page_list. |
| 318 Removes the budget from the budget_list if necessary. | 433 Hide navigation action group if necessary |
| 319 """ | 434 """ |
| 320 _page = self.__page_list[page_num] | 435 if page in self.__page_list: |
| 321 if isinstance(_page, Page): | 436 _page_num = self.__page_list.index(page) |
| 322 #not loading budget | 437 self.__page_list.pop(_page_num) |
| 323 self.__budget_list.pop(page_num) | 438 page.clear() |
| 324 self.__page_list.pop(page_num) | 439 self.__notebook.remove_page(_page_num) |
| 325 _page.clear() | 440 if len(self.__page_list) == 0: |
| 326 self.__notebook.remove_page(page_num) | 441 self.__navigation_action_group.set_sensitive(False) |
| 442 else: | |
| 443 raise IndexError, _("The page is not in the page list") | |
| 444 | |
| 327 | 445 |
| 328 def _menuitemGoToRoot(self, widget): | 446 def _menuitemGoToRoot(self, widget): |
| 329 """_menuitemGoToRoot(widget) | 447 """_menuitemGoToRoot(widget) |
| 330 | 448 |
| 331 widget: the widget where the event is emitted from | 449 widget: the widget where the event is emitted from |
| 351 if _page_num != -1: | 469 if _page_num != -1: |
| 352 _page = self.__page_list[_page_num] | 470 _page = self.__page_list[_page_num] |
| 353 if isinstance(_page, Page): | 471 if isinstance(_page, Page): |
| 354 #not loading budget | 472 #not loading budget |
| 355 _active_path = _page.activePathRecord | 473 _active_path = _page.activePathRecord |
| 356 if len(_active_path) > 1 and _active_path[-1] > 0: | |
| 357 _budget = self.__budget_list[_page_num] | |
| 358 _up_path = _active_path[:-1] + (_active_path[-1] - 1,) | |
| 359 if _budget.hasPath(_up_path): | |
| 360 _page.propagateMessageFrom("change_active", (-1,), | |
| 361 _up_path) | |
| 362 | |
| 363 def _menuitemGoDown(self, widget): | |
| 364 """_menuitemGoToDown(widget) | |
| 365 | |
| 366 widget: the widget where the event is emitted from | |
| 367 | |
| 368 Callback to go to down record. | |
| 369 """ | |
| 370 _page_num = self.__notebook.get_current_page() | |
| 371 if _page_num != -1: | |
| 372 _page = self.__page_list[_page_num] | |
| 373 if isinstance(_page, Page): | |
| 374 #not loading budget | |
| 375 _active_path = _page.activePathRecord | |
| 376 if len(_active_path) > 1: | 474 if len(_active_path) > 1: |
| 377 _budget = self.__budget_list[_page_num] | 475 _budget = _page.budget |
| 378 _up_path = _active_path[:-1] + (_active_path[-1] + 1,) | 476 _up_path = _active_path[:-1] |
| 379 if _budget.hasPath(_up_path): | 477 if _budget.hasPath(_up_path): |
| 380 _page.propagateMessageFrom("change_active", (-1,), | 478 _page.propagateMessageFrom("change_active", (-1,), |
| 381 _up_path) | 479 _up_path) |
| 382 | 480 |
| 383 def _menuitemGoPrevious(self, widget): | 481 def _menuitemGoPrevious(self, widget): |
| 392 _page = self.__page_list[_page_num] | 490 _page = self.__page_list[_page_num] |
| 393 if isinstance(_page, Page): | 491 if isinstance(_page, Page): |
| 394 #not loading budget | 492 #not loading budget |
| 395 _previous_path = _page.previousPathRecord | 493 _previous_path = _page.previousPathRecord |
| 396 if _previous_path is not None: | 494 if _previous_path is not None: |
| 397 _budget = self.__budget_list[_page_num] | 495 _budget = _page.budget |
| 398 if _budget.hasPath(_previous_path): | 496 if _budget.hasPath(_previous_path): |
| 399 _page.propagateMessageFrom("change_active", (-1,), | 497 _page.propagateMessageFrom("change_active", (-1,), |
| 400 _previous_path) | 498 _previous_path) |
| 401 | 499 |
| 402 def _menuitemGoPosterior(self, widget): | 500 def _menuitemGoPosterior(self, widget): |
| 411 _page = self.__page_list[_page_num] | 509 _page = self.__page_list[_page_num] |
| 412 if isinstance(_page, Page): | 510 if isinstance(_page, Page): |
| 413 #not loading budget | 511 #not loading budget |
| 414 _posterior_path = _page.posteriorPathRecord | 512 _posterior_path = _page.posteriorPathRecord |
| 415 if _posterior_path is not None: | 513 if _posterior_path is not None: |
| 416 _budget = self.__budget_list[_page_num] | 514 _budget = _page.budget |
| 417 if _budget.hasPath(_posterior_path): | 515 if _budget.hasPath(_posterior_path): |
| 418 _page.propagateMessageFrom("change_active", (-1,), | 516 _page.propagateMessageFrom("change_active", (-1,), |
| 419 _posterior_path) | 517 _posterior_path) |
| 420 | 518 |
| 421 def _delete_event(self, widget, event): | 519 def _delete_event(self, widget, event): |
| 442 signal returns True or when the program call the destroy() method of | 540 signal returns True or when the program call the destroy() method of |
| 443 the gtk.Window widget. | 541 the gtk.Window widget. |
| 444 The window is closed and the GTK+ event processing loop is ended. | 542 The window is closed and the GTK+ event processing loop is ended. |
| 445 """ | 543 """ |
| 446 gtk.main_quit() | 544 gtk.main_quit() |
| 447 | |
| 448 def _getNotebook(self): | |
| 449 """_getNotebook() | |
| 450 | |
| 451 Return the notebook widget | |
| 452 """ | |
| 453 return self.__notebook | |
| 454 | |
| 455 def _getPageList(self): | |
| 456 """_getPageList() | |
| 457 | |
| 458 Return the page list | |
| 459 """ | |
| 460 return self.__page_list | |
| 461 | |
| 462 def _getBudgetList(self): | |
| 463 """_getBudgetList() | |
| 464 | |
| 465 Return the budget list | |
| 466 """ | |
| 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 | 545 |
| 476 | 546 |
| 477 class EmptyPage(object): | 547 class EmptyPage(object): |
| 478 """gui.EmptyPage: | 548 """gui.EmptyPage: |
| 479 | 549 |
| 553 self.__throbber.set_from_file(globalVars.getAppPath("THROBBER-ICON")) | 623 self.__throbber.set_from_file(globalVars.getAppPath("THROBBER-ICON")) |
| 554 self.__throbber.show() | 624 self.__throbber.show() |
| 555 self.__animationThobber = gtk.gdk.PixbufAnimation( | 625 self.__animationThobber = gtk.gdk.PixbufAnimation( |
| 556 globalVars.getAppPath("THROBBER-GIF")) | 626 globalVars.getAppPath("THROBBER-GIF")) |
| 557 self.__quietThobber = self.__throbber.get_pixbuf() | 627 self.__quietThobber = self.__throbber.get_pixbuf() |
| 558 self.__budget_icon = gtk.gdk.pixbuf_new_from_file_at_size( | 628 self.__budget_icon = gtk.gdk.pixbuf_new_from_file( |
| 559 globalVars.getAppPath("BUDGET-ICON"), 16, 16) | 629 globalVars.getAppPath("BUDGET-ICON")) |
| 560 _filename = os.path.basename(filename) | 630 _filename = os.path.basename(filename) |
| 561 _rootfilename = os.path.splitext(_filename)[0] | 631 _rootfilename = os.path.splitext(_filename)[0] |
| 562 if not _rootfilename == "": | 632 if not _rootfilename == "": |
| 563 _filename = _rootfilename | 633 _filename = _rootfilename |
| 564 _titleLabel = gtk.Label(_filename) | 634 _titleLabel = gtk.Label(_filename) |
| 705 _page = Page(self.__mainWindow, self.__budget) | 775 _page = Page(self.__mainWindow, self.__budget) |
| 706 _children = self.__widget.get_children() | 776 _children = self.__widget.get_children() |
| 707 for _child in _children: | 777 for _child in _children: |
| 708 self.__widget.remove(_child) | 778 self.__widget.remove(_child) |
| 709 self.__widget.pack_start(_page.widget, True, True, 0) | 779 self.__widget.pack_start(_page.widget, True, True, 0) |
| 710 _noteBook = self.__mainWindow.notebook | 780 self.__mainWindow.updatePage(self, _page) |
| 711 _pageIndex = _noteBook.page_num(self.__widget) | |
| 712 self.__mainWindow.pageList[_pageIndex] = _page | |
| 713 | 781 |
| 714 def threadCanceled(self): | 782 def threadCanceled(self): |
| 715 """threadCanceled() | 783 """threadCanceled() |
| 716 | 784 |
| 717 Sets the __children atribute to None | 785 Sets the __children atribute to None |
| 718 This causes that the timeouts is ended. | 786 This causes that the timeouts is ended. |
| 719 This method is called from thread when is canceled | 787 This method is called from thread when is canceled |
| 720 TODO: it must called threadFinished or somethig | |
| 721 """ | 788 """ |
| 722 self.__children = None | 789 self.__children = None |
| 723 self.stopLoading() | 790 self.stopLoading() |
| 724 _page_num = self.__mainWindow.notebook.page_num(self.widget) | 791 self.__mainWindow.closePage(self) |
| 725 self.__mainWindow.removePage(_page_num) | |
| 726 | 792 |
| 727 def close(self): | 793 def close(self): |
| 728 """close() | 794 """close() |
| 729 | 795 |
| 730 Close page canceling children | 796 Close page canceling children |
| 796 * "CompanyView": its creates a "CompanyView" object | 862 * "CompanyView": its creates a "CompanyView" object |
| 797 title: Read. Notebook page title (gtk.Label object) | 863 title: Read. Notebook page title (gtk.Label object) |
| 798 activePathRecord: Read. The active path record | 864 activePathRecord: Read. The active path record |
| 799 previousPathRecord: Read. The previous path record | 865 previousPathRecord: Read. The previous path record |
| 800 posteriorPathRecord Read. The posterior path record | 866 posteriorPathRecord Read. The posterior path record |
| 867 back_menu: back menu to show in menutoolbutton | |
| 868 forward_menu: forward menu to show in menutoolbutton | |
| 801 Methods: | 869 Methods: |
| 802 propagateMessageFrom | 870 propagateMessageFrom |
| 803 sendMessageTo | 871 sendMessageTo |
| 804 close | 872 close |
| 805 clear | 873 clear |
| 814 """__init__(mainWindow, budget, path_record=(0,)) | 882 """__init__(mainWindow, budget, path_record=(0,)) |
| 815 | 883 |
| 816 mainWindow: MainWindow object | 884 mainWindow: MainWindow object |
| 817 budget: "base.Budget" object | 885 budget: "base.Budget" object |
| 818 path_record: the active path record | 886 path_record: the active path record |
| 887 | |
| 888 self.__mainWindow: MainWindow object | |
| 889 self.__widget: a gtk.VBox | |
| 890 self.__panes_list: | |
| 891 self.__main_item: | |
| 892 self.__active_path_record: | |
| 893 self.__history_back: | |
| 894 self.__history_forward: | |
| 895 self.__back_menu: a gtk.Menu | |
| 896 self.__forward_menu: a gtk.Menu | |
| 819 """ | 897 """ |
| 820 #TODO: __panes_list should come from config file... | 898 #TODO: __panes_list should come from config file... |
| 821 self.__mainWindow = mainWindow | 899 self.__mainWindow = mainWindow |
| 822 self.__widget = gtk.VBox() | 900 self.__widget = gtk.VBox() |
| 823 self.__panes_list = [ "v", "DecompositionList", [ "v", "Measure", | 901 self.__panes_list = [ "v", "DecompositionList", [ "v", "Measure", |
| 824 "RecordDescription" ]] | 902 "RecordDescription" ]] |
| 825 self.__main_item = None | 903 self.__main_item = None |
| 826 self.__active_path_record = () | 904 self.__active_path_record = () |
| 827 self.__history_back = [] | 905 self.__history_back = [] |
| 828 self.__history_forward = [] | 906 self.__history_forward = [] |
| 907 self.__back_menu = gtk.Menu() | |
| 908 self.__back_menu.show() | |
| 909 self.__forward_menu = gtk.Menu() | |
| 910 self.__forward_menu.show() | |
| 829 self.budget = budget | 911 self.budget = budget |
| 830 self._setActivePathRecord(path_record) | 912 self._setActivePathRecord(path_record) |
| 831 self.__widget.show() | 913 self.__widget.show() |
| 914 self.__budget_icon = gtk.gdk.pixbuf_new_from_file( | |
| 915 globalVars.getAppPath("BUDGET-ICON")) | |
| 916 self.__chapter_icon = gtk.gdk.pixbuf_new_from_file( | |
| 917 globalVars.getAppPath("CHAPTER-ICON")) | |
| 918 self.__unit_icon = gtk.gdk.pixbuf_new_from_file( | |
| 919 globalVars.getAppPath("UNIT-ICON") ) | |
| 920 self.__material_icon = gtk.gdk.pixbuf_new_from_file( | |
| 921 globalVars.getAppPath("MATERIAL-ICON") ) | |
| 922 self.__machinery_icon = gtk.gdk.pixbuf_new_from_file( | |
| 923 globalVars.getAppPath("MACHINERY-ICON")) | |
| 924 self.__labourforce_icon = gtk.gdk.pixbuf_new_from_file( | |
| 925 globalVars.getAppPath("LABOURFORCE-ICON")) | |
| 832 | 926 |
| 833 def propagateMessageFrom(self, message, pane_path, arg=None): | 927 def propagateMessageFrom(self, message, pane_path, arg=None): |
| 834 """propagateMessageFrom(message, pane_path, arg=None) | 928 """propagateMessageFrom(message, pane_path, arg=None) |
| 835 | 929 |
| 836 message: string message | 930 message: string message |
| 846 """ | 940 """ |
| 847 _budget = self.__budget | 941 _budget = self.__budget |
| 848 if message == "change_active" and _budget.hasPath(arg): | 942 if message == "change_active" and _budget.hasPath(arg): |
| 849 self.sendMessageTo(self.__main_item, message, pane_path, arg) | 943 self.sendMessageTo(self.__main_item, message, pane_path, arg) |
| 850 self._setActivePathRecord(arg) | 944 self._setActivePathRecord(arg) |
| 945 self.__mainWindow.changeActiveSignal() | |
| 851 elif message == "autoclose": | 946 elif message == "autoclose": |
| 852 self._closeItem(pane_path) | 947 self._closeItem(pane_path) |
| 853 elif message == "split h": | 948 elif message == "split h": |
| 854 self._splitItem(pane_path, "h") | 949 self._splitItem(pane_path, "h") |
| 855 elif message == "split v": | 950 elif message == "split v": |
| 870 def close(self): | 965 def close(self): |
| 871 """close() | 966 """close() |
| 872 | 967 |
| 873 Close Page | 968 Close Page |
| 874 """ | 969 """ |
| 875 _page_list = self.__mainWindow.pageList | 970 self.__mainWindow.closePage(self) |
| 876 if self in _page_list: | |
| 877 _page_num = _page_list.index(self) | |
| 878 self.__mainWindow.removePage(_page_num) | |
| 879 else: | |
| 880 raise IndexError, _("The page is not in the page list") | |
| 881 | 971 |
| 882 def clear(self): | 972 def clear(self): |
| 883 """clear() | 973 """clear() |
| 884 | 974 |
| 885 Clear atributes | 975 Clear atributes |
| 886 """ | 976 """ |
| 887 self.propagateMessageFrom("clear", (0,)) | 977 self.propagateMessageFrom("clear", (0,)) |
| 888 | |
| 889 del self.__budget | 978 del self.__budget |
| 890 del self.__panes_list | 979 del self.__panes_list |
| 891 del self.__widget | 980 del self.__widget |
| 892 del self.__title | 981 del self.__title |
| 893 del self.__active_path_record | 982 del self.__active_path_record |
| 1034 "the path record: $1"), (str(path_record),)) | 1123 "the path record: $1"), (str(path_record),)) |
| 1035 | 1124 |
| 1036 def _appendHistory(self, path): | 1125 def _appendHistory(self, path): |
| 1037 """_appendHistory(path)) | 1126 """_appendHistory(path)) |
| 1038 | 1127 |
| 1039 path: the old active path record | 1128 path: the new active path record |
| 1040 | 1129 |
| 1041 Sets the old active path record | 1130 Append the new active path record to history lists and update menus |
| 1042 """ | 1131 """ |
| 1043 if len(self.__history_back) > 1 and self.__history_back[-2] == path: | 1132 if len(self.__history_back) > 1 and path in self.__history_back[:-1]: |
| 1044 # append forward history and pop back history | 1133 # the new active record is in back history list |
| 1045 _path = self.__history_back.pop() | 1134 # then append forward history and pop back history |
| 1046 self.__history_forward.append(_path) | 1135 _items_num = len(self.__history_back) - \ |
| 1047 if len(self.__history_forward) > 1000: | 1136 self.__history_back.index(path) -1 |
| 1048 self.__history_forward.pop(0) | 1137 for _item in range(_items_num): |
| 1138 _record_path = self.__history_back.pop() | |
| 1139 _first_menuitem = self.__back_menu.get_children()[0] | |
| 1140 self.__back_menu.remove(_first_menuitem) | |
| 1141 self.__history_forward.append(_record_path) | |
| 1142 _menuitem = self._menuItemFactory(_record_path) | |
| 1143 _menuitem.connect_object("activate", self._menuHistoryForward, | |
| 1144 _record_path, _menuitem) | |
| 1145 self.__forward_menu.prepend(_menuitem) | |
| 1146 while len(self.__history_forward) > 100: | |
| 1147 # list too long | |
| 1148 self.__history_forward.pop(0) | |
| 1149 _last_menuitem = self.__forward_menu.get_children()[-1] | |
| 1150 self.__forward_menu.remove(_last_menuitem) | |
| 1049 else: | 1151 else: |
| 1050 # append back history and pop or delete forward history | 1152 # the new active record not is in back history list |
| 1051 if len(self.__history_forward) > 1 and \ | 1153 if len(self.__history_forward) > 1 and \ |
| 1052 self.__history_forward[-1] == path: | 1154 path in self.__history_forward: |
| 1053 self.__history_forward.pop() | 1155 # the new active record is in history forward list |
| 1156 # then append back history and pop forward history | |
| 1157 _items_num = len(self.__history_forward) - \ | |
| 1158 self.__history_forward.index(path) | |
| 1159 for _item in range(_items_num): | |
| 1160 _record_path = self.__history_forward.pop() | |
| 1161 _first_menuitem = self.__forward_menu.get_children()[0] | |
| 1162 self.__forward_menu.remove(_first_menuitem) | |
| 1163 self.__history_back.append(_record_path) | |
| 1164 if len(self.__history_back) > 1: | |
| 1165 _menuitem = self._menuItemFactory( | |
| 1166 self.__history_back[-2]) | |
| 1167 _menuitem.connect_object("activate", | |
| 1168 self._menuHistoryBack, self.__history_back[-2], | |
| 1169 _menuitem) | |
| 1170 self.__back_menu.prepend(_menuitem) | |
| 1054 else: | 1171 else: |
| 1172 # the new active record not is in history forward list | |
| 1173 # then append back history and clear forward history | |
| 1055 self.__history_forward[:] = [] | 1174 self.__history_forward[:] = [] |
| 1056 self.__history_back.append(path) | 1175 for _child in self.__forward_menu.get_children(): |
| 1057 if len(self.__history_back) > 1000: | 1176 self.__forward_menu.remove(_child) |
| 1177 self.__history_back.append(path) | |
| 1178 if len(self.__history_back) > 1: | |
| 1179 _menuitem = self._menuItemFactory(self.__history_back[-2]) | |
| 1180 _menuitem.connect_object("activate", self._menuHistoryBack, | |
| 1181 self.__history_back[-2], _menuitem) | |
| 1182 self.__back_menu.prepend(_menuitem) | |
| 1183 while len(self.__history_back) > 100: | |
| 1184 # list too long | |
| 1058 self.__history_back.pop(0) | 1185 self.__history_back.pop(0) |
| 1186 _last_menuitem = self.__back_menu.get_children()[-1] | |
| 1187 self.__back_menu.remove(_last_menuitem) | |
| 1188 self.__mainWindow.changeHistorySignal() | |
| 1189 | |
| 1190 def _getImage(self, record): | |
| 1191 """_getImage(record) | |
| 1192 | |
| 1193 record: record object | |
| 1194 | |
| 1195 Returns an image depending on the type of record | |
| 1196 """ | |
| 1197 _hierarchy = record.recordType.hierarchy | |
| 1198 _type = record.recordType.type | |
| 1199 _subtype = record.recordType.subtype | |
| 1200 if _hierarchy == 0: | |
| 1201 _icon = self.__budget_icon | |
| 1202 elif _hierarchy == 1: | |
| 1203 _icon = self.__chapter_icon | |
| 1204 else: | |
| 1205 if _type == 0: | |
| 1206 _icon = self.__unit_icon | |
| 1207 elif _type == 1: | |
| 1208 _icon = self.__labourforce_icon | |
| 1209 elif _type == 2: | |
| 1210 _icon = self.__machinery_icon | |
| 1211 else: | |
| 1212 _icon = self.__material_icon | |
| 1213 _image = gtk.Image() | |
| 1214 _image.set_from_pixbuf(_icon) | |
| 1215 return _image | |
| 1216 | |
| 1217 def _menuFactory(self): | |
| 1218 """_menuFactory() | |
| 1219 | |
| 1220 record: record object | |
| 1221 | |
| 1222 Creates menus for history back an history forward tool buttons | |
| 1223 """ | |
| 1224 | |
| 1225 # Back Menu | |
| 1226 # clear menu | |
| 1227 for _child in self.__back_menu.get_children(): | |
| 1228 self.__back_menu.remove(_child) | |
| 1229 # pupulate menu | |
| 1230 if len(self.__history_back) > 1: | |
| 1231 for _record_path in self.__history_back[:-1]: | |
| 1232 _menuitem = self._menuItemFactory(_record_path) | |
| 1233 _menuitem.connect_object("activate", self._menuHistoryBack, | |
| 1234 _record_path, _menuitem) | |
| 1235 self.__back_menu.prepend(_menuitem) | |
| 1236 # Forward Menu | |
| 1237 # clear menu | |
| 1238 for _child in self.__forward_menu.get_children(): | |
| 1239 self.__forward_menu.remove(_child) | |
| 1240 # pupulate menu | |
| 1241 if len(self.__history_forward) > 0: | |
| 1242 for _record_path in self.__history_forward[:]: | |
| 1243 _menuitem = self._menuItemFactory(_record_path) | |
| 1244 _menuitem.connect_object("activate", self._menuHistoryForward, | |
| 1245 _record_path, _menuitem) | |
| 1246 self.__forward_menu.prepend(_menuitem) | |
| 1247 | |
| 1248 def _menuItemFactory(self, record_path): | |
| 1249 """_menuItemFactory(record_path): | |
| 1250 | |
| 1251 record_path: record path | |
| 1252 | |
| 1253 Creates and return a menuItem to go to the record | |
| 1254 """ | |
| 1255 _code = self.budget.getCode(record_path) | |
| 1256 _record = self.budget.getRecord(_code) | |
| 1257 _summary = _record.summary | |
| 1258 _text = _code + " " + _summary | |
| 1259 if len(_text) > 30: | |
| 1260 _text = _text[:27] + "..." | |
| 1261 _image = self._getImage(_record) | |
| 1262 _menuitem = gtk.ImageMenuItem(_text) | |
| 1263 _menuitem.set_image(_image) | |
| 1264 _menuitem.show() | |
| 1265 return _menuitem | |
| 1266 | |
| 1267 def _menuHistoryBack(self, record_path, menu_item): | |
| 1268 """_menuHistoryBack(record_path, menu_item) | |
| 1269 | |
| 1270 Go to the record selected in History Back menu | |
| 1271 """ | |
| 1272 if self.budget.hasPath(record_path): | |
| 1273 self.propagateMessageFrom("change_active", (-1,), record_path) | |
| 1274 | |
| 1275 def _menuHistoryForward(self, record_path, menu_item): | |
| 1276 """_menuHistoryForward(record_path, menu_item) | |
| 1277 | |
| 1278 Go to the record selected in History Forward menu | |
| 1279 """ | |
| 1280 if self.budget.hasPath(record_path): | |
| 1281 self.propagateMessageFrom("change_active", (-1,), record_path) | |
| 1059 | 1282 |
| 1060 def _getActivePathRecord(self): | 1283 def _getActivePathRecord(self): |
| 1061 """_getActivePathRecord() | 1284 """_getActivePathRecord() |
| 1062 | 1285 |
| 1063 Return the Active Path Record | 1286 Return the Active Path Record |
| 1081 """ | 1304 """ |
| 1082 if len(self.__history_forward) > 0: | 1305 if len(self.__history_forward) > 0: |
| 1083 return self.__history_forward[-1] | 1306 return self.__history_forward[-1] |
| 1084 else: | 1307 else: |
| 1085 return None | 1308 return None |
| 1309 | |
| 1310 def _getBackMenu(self): | |
| 1311 """_getBackMenu() | |
| 1312 | |
| 1313 Return the Back Menu | |
| 1314 """ | |
| 1315 return self.__back_menu | |
| 1316 | |
| 1317 def _getForwardMenu(self): | |
| 1318 """_getForwardMenu() | |
| 1319 | |
| 1320 Return the Forward Menu | |
| 1321 """ | |
| 1322 return self.__forward_menu | |
| 1086 | 1323 |
| 1087 def _getTitle(self): | 1324 def _getTitle(self): |
| 1088 """_getTitle() | 1325 """_getTitle() |
| 1089 | 1326 |
| 1090 Return the page title, a gtk.Label objetc | 1327 Return the page title, a gtk.Label objetc |
| 1147 "Active Path Record") | 1384 "Active Path Record") |
| 1148 previousPathRecord = property(_getPreviousPathRecord, None, None, | 1385 previousPathRecord = property(_getPreviousPathRecord, None, None, |
| 1149 "Previous Active Path Record") | 1386 "Previous Active Path Record") |
| 1150 posteriorPathRecord = property(_getPosteriorPathRecord, None, None, | 1387 posteriorPathRecord = property(_getPosteriorPathRecord, None, None, |
| 1151 "Posterior Active Path Record") | 1388 "Posterior Active Path Record") |
| 1152 | 1389 back_menu = property(_getBackMenu, None, None, |
| 1390 "Back Menu") | |
| 1391 forward_menu = property(_getForwardMenu, None, None, | |
| 1392 "Forward Menu") | |
| 1153 | 1393 |
| 1154 class View(object): | 1394 class View(object): |
| 1155 """gui.View: | 1395 """gui.View: |
| 1156 | 1396 |
| 1157 Description: | 1397 Description: |
