Module vfhauptfenster
[hide private]
[frames] | no frames]

Source Code for Module vfhauptfenster

  1  # -*- coding: utf-8 -*- 
  2  # 
  3  # 
  4  #    filename:  bearbeiteanmerkung.py 
  5  # 
  6  #    version:   see wxvf.py 
  7  # 
  8  # 
  9  # ---------------------------------------------------------------------------------------- 
 10  # 
 11  # 
 12  #    Copyright (C) 2010  Michael Bellair 
 13  # 
 14  #    This file is part of wxvf. 
 15  #  
 16  #    wxvf is free software: you can redistribute it and/or modify 
 17  #    it under the terms of the GNU General Public License as published by 
 18  #    the Free Software Foundation, either version 3 of the License, or 
 19  #    (at your option) any later version. 
 20  # 
 21  #    wxvf is distributed in the hope that it will be useful, 
 22  #    but WITHOUT ANY WARRANTY; without even the implied warranty of 
 23  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 24  #    GNU General Public License for more details. 
 25  # 
 26  #    You should have received a copy of the GNU General Public License 
 27  #    along with wxvf.  If not, see <http://www.gnu.org/licenses/>. 
 28  # 
 29  #    Michael Bellair 
 30  #    Sportplatzstrasse 11 
 31  #    01259 Dresden 
 32  # 
 33  #    E-Mail:    bellair@freenet.de 
 34  #    homepage:  http://freenet-homepage.de/bellair/vf/index.html 
 35  # 
 36  # 
 37  # ---------------------------------------------------------------------------------------- 
 38  # 
 39  import wx 
 40  from wx.lib.wordwrap import wordwrap 
 41   
 42  from gefahrenprotokoll import Gefahrenprotokoll         # Eingabeformular 'Gefahrenprotokoll' 
 43   
 44  from wxuniversal import FlexGridSizerWxObjTitel         # wxObjekt mit Titel 
 45  from wxuniversal import ComboBoxErg                     # wx.ComboBox mit Ergänzungen 
 46  from wxuniversal import ListBoxErg                      # wx.ListBox mit Ergänzungen 
 47  from wxuniversal import PopupTransientWindowFilterSuche # Selektionskriterien Filter/Suche 
 48   
 49  from progstart import ProgStart                         # Dialog 'Datenbankanmeldung' 
 50  from risikoanalyse import Risikoanalyse                 # Eingabeformular 'Risikoanalyse' 
 51  #from terminplan import Terminplan                      # Eingabeformular 'Terminplan' 
 52   
 53  from datenbank import Datenbank, Fehler                 # Datenbankzugriff, Datenbankvariablen 
 54   
 55  import sys                                              # Programmende >sys.exit()< 
 56  import getpass                                          # Benutzername >getuser()< 
 57   
 58   
 59   
 60   
 61  # 
 62  # 
 63  # 
 64  # ---------------------------------------------------------------------------------------- 
 65  # ---------------------------------------------------------------------------------------- 
 66  # --                                    -------------------------------------------------- 
 67  # --    Offene Punkte / Aufgaben        -------------------------------------------------- 
 68  # --                                    -------------------------------------------------- 
 69  # ---------------------------------------------------------------------------------------- 
 70  # ---------------------------------------------------------------------------------------- 
 71  # 
 72  #  
 73  #       -- siehe TODO 'vfhauptfenster.py' -- 
 74  # 
 75  # 
 76  # ---------------------------------------------------------------------------------------- 
 77  # 
 78   
 79   
 80  # 
 81  # 
 82  # 
 83  # ---------------------------------------------------------------------------------------- 
 84  # ---------------------------------------------------------------------------------------- 
 85  # --                    ------------------------------------------------------------------ 
 86  # --    Hauptfenster    ------------------------------------------------------------------ 
 87  # --                    ------------------------------------------------------------------ 
 88  # ---------------------------------------------------------------------------------------- 
 89  # ---------------------------------------------------------------------------------------- 
 90  # 
91 -class VFHauptfenster( wx.Frame ):
92 """ 93 Klasse, die das Hauptfenster der Benutzeroberfläche repräsentiert. 94 95 @raise IOError: Fehlermeldung und Programmende, wenn die Konfigurationsdatei '.wxvf' nicht geöffnet werden kann. 96 @raise Fehler: Fehlermeldung und Programmende, wenn die Datenbankverbindung nicht hergestellt werden kann. 97 """ 98 99 # 100 # ------------------------------------------------------------------------------------ 101 # -- Hauptfenster initialisieren ------------------------------------------ 102 # ------------------------------------------------------------------------------------ 103 #
104 - def __init__(self, *args, **kwds):
105 kwds["style"] = wx.DEFAULT_FRAME_STYLE 106 wx.Frame.__init__(self, *args, **kwds) 107 108 # 109 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 110 # 111 self.SetName( name = "VFHauptfenster" ) 112 113 114 # 115 # -- Datenbankverbindung herstellen ------------------------------------------ 116 # 117 self.__dbVerbindung__() 118 119 120 # 121 # -- Menüleiste, Statusleiste (Menu Bar, Status Bar) -------------------------- 122 # 123 # 124 # -- Menüeinträge setzen 125 # 126 self.hauptfenster_menubar = wx.MenuBar() 127 menu = wx.Menu() 128 menu.Append(102, u"&Speichern\tCtrl+S", u"Änderungen in der Datenbank ablegen", wx.ITEM_NORMAL) 129 menu.AppendSeparator() 130 menu.Append(103, u"&Beenden\tCtrl+B", u"Die Benutzeroberfläche 'wxvf' beenden.", wx.ITEM_NORMAL) 131 self.hauptfenster_menubar.Append(menu, u"&Datei") 132 133 134 hilfe = wx.Menu() 135 hilfe.Append( 201, u"&Über wxvf", u"Informationen zum Programm", wx.ITEM_NORMAL ) 136 self.hauptfenster_menubar.Append( hilfe, u"&Hilfe" ) 137 138 self.SetMenuBar( self.hauptfenster_menubar ) 139 140 141 # 142 # -- Menüereignisse behandeln 143 # 144 self.Bind( wx.EVT_MENU, self.__ereignisAenderungenSpeichern__, id=102 ) 145 self.Bind( wx.EVT_MENU, self.__ereignisProgrammBeenden__, id=103 ) 146 147 self.Bind( wx.EVT_MENU, self.__ereignisUeberWxvf__, id=201 ) 148 149 150 # 151 # -- Statusleiste setzen 152 # 153 self.Statusleiste = wx.StatusBar( self ) 154 self.Statusleiste.SetFieldsCount( 2 ) 155 self.Statusleiste.SetStatusWidths( [-7, -3] ) 156 self.SetStatusBar( self.Statusleiste ) 157 158 159 160 # 161 # -- Projekt -------------------------------------------------- 162 # -- Objekt-Id = -206 -------------------------------------------------- 163 # 164 self.ComboBox__Projekt = FlexGridSizerWxObjTitel( parent = self 165 , wxObj = ComboBoxErg( self 166 , choices = [] 167 , style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT 168 , Statusleiste = self.Statusleiste 169 , dbVerbindung = self.dbVerbindung ) 170 , orient = wx.VERTICAL 171 , titel = u"Projekt:" ) 172 self.ComboBox__Projekt.wxObjekt.statusLeisteDBSpNameErlaeuterung = u"Die Datensätze auf das Projekt einschränken." 173 174 self.dbVerbindung.init_prjProjekte( self.ComboBox__Projekt.wxObjekt ) 175 176 self.ComboBox__Projekt.wxObjekt.Bind( wx.EVT_COMBOBOX, self.__ereignisLiesDB__ ) 177 178 179 180 # 181 # -- Sprache ------------------------------------------------------------------ 182 # -- Objekt-Id = -208 -------------------------------------------------- 183 # 184 self.ComboBox__Sprache = FlexGridSizerWxObjTitel( parent = self 185 , wxObj = ComboBoxErg( self 186 , choices = [] 187 , style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT 188 , Statusleiste = self.Statusleiste 189 , dbVerbindung = self.dbVerbindung ) 190 , orient = wx.VERTICAL 191 , titel = u"Sprache:" ) 192 self.ComboBox__Sprache.wxObjekt.statusLeisteDBSpNameErlaeuterung = u"Die Werte in der gewählten Sprache ausgeben." 193 194 self.dbVerbindung.init_sprSprachen( self.ComboBox__Sprache.wxObjekt ) 195 196 self.ComboBox__Sprache.wxObjekt.Bind( wx.EVT_COMBOBOX, self.__ereignisLiesDB__ ) 197 198 199 200 # 201 # -- Filter ------------------------------------------------------------------ 202 # 203 204 205 # 206 # fortsetzen 207 # 208 # -> Filter (genutzt bei Sicherheitsüberprüfung): 209 # -> StrPkt 210 # -> (Personen) 211 # -> Typ des ProtEintrages 212 # 213 214 self.Button__Filter = FlexGridSizerWxObjTitel( parent = self 215 , wxObj = wx.Button( parent = self 216 , label = u" Filter aktivieren " ) 217 , orient = wx.VERTICAL 218 , titel = u"Filter:" ) 219 220 221 self.Bind( wx.EVT_BUTTON 222 , self.__dummy__ 223 , self.Button__Filter.wxObjekt ) 224 225 226 227 # 228 # -- Suche ------------------------------------------------------------------ 229 # 230 # SearchCtrl__Suchen = FlexGridSizerWxObjTitel( 231 # parent = self 232 # , wxObj = wx.SearchCtrl( self, size=(200,-1), style=wx.TE_PROCESS_ENTER ) 233 # , orient = wx.VERTICAL 234 # , titel = u"Suchen:" ) 235 # 236 # SearchCtrl__Suchen.wxObjekt.Disable() 237 238 239 240 # 241 # -- Id und Status -------------------------------------------------- 242 # -- Objekt-Id = -221 -------------------------------------------------- 243 # 244 self.ListBox__GefIdStatus = FlexGridSizerWxObjTitel( parent = self 245 , wxObj = ListBoxErg( self 246 , size = ( -1, -1 ) 247 , style = wx.BORDER_SUNKEN | wx.LB_SORT 248 , Statusleiste = self.Statusleiste 249 , dbVerbindung = self.dbVerbindung ) 250 , titel = u"Gef-Id / \nStatus" 251 , orient = wx.VERTICAL ) 252 self.ListBox__GefIdStatus.wxObjekt.statusLeisteDBSpNameErlaeuterung = u"Eineindeutige Identifikationsnummer des Gefahrenszenarios." 253 254 self.ListBox__GefIdStatus.wxObjekt.SetToolTip(wx.ToolTip( u"mittlere Maustaste:\tzugeordnete Strukturpunkte anzeigen\nrechte Maustaste:\tStrukturpunkte zuordnen / bearbeiten" )) 255 256 self.ListBox__GefIdStatus.wxObjekt.markiereWertProjUeb = False 257 258 self.Bind( wx.EVT_LISTBOX 259 , self.__ereignisNavigation__ 260 , self.ListBox__GefIdStatus.wxObjekt ) 261 262 263 # 264 # -- Alle Gefahrenszenario-id übernehmen ---------------------------------- 265 # 266 self.dbVerbindung.init_psGefszenario( self.ListBox__GefIdStatus.wxObjekt 267 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() ) 268 269 self.psGefszenarioId = self.ListBox__GefIdStatus.wxObjekt.GetStringSelection() 270 271 272 273 # 274 # -- Tabulatorbereich (Risikoanalyse, Gefahrenprotokoll, ------------------ 275 # -- Terminplan, ...) ------------------ 276 # 277 self.Notebook__zentralerBereich = wx.Notebook( self ) 278 279 self.Notebook__zentralerBereich.AddPage( Risikoanalyse( parent = self.Notebook__zentralerBereich 280 , Statusleiste = self.Statusleiste 281 , dbVerbindung = self.dbVerbindung 282 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 283 , sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 284 , psGefszenarioId = self.psGefszenarioId ) 285 , u"Risikoanalyse" ) 286 287 288 self.Notebook__zentralerBereich.AddPage( Gefahrenprotokoll( parent = self.Notebook__zentralerBereich 289 , Statusleiste = self.Statusleiste 290 , dbVerbindung = self.dbVerbindung 291 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 292 , sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 293 , psGefszenarioId = self.psGefszenarioId ) 294 , u"Gefahrenprotokoll" ) 295 296 297 # 298 # -- Wechsel der Karteikarten bearbeiten ---------------------------------- 299 # 300 self.Bind( wx.EVT_NOTEBOOK_PAGE_CHANGED 301 , self.__ereignisNavigation__ 302 , self.Notebook__zentralerBereich ) 303 304 305 # 306 # -- Test 307 # 308 # self.Notebook__zentralerBereich.ChangeSelection( 1 ) 309 310 311 # 312 # -- Layout festlegen (Sizer - Hierarchie aufbauen) -------------------------- 313 # 314 315 # 316 # -- Teillayout 317 # 318 sizerNavigationSuche = wx.FlexGridSizer( rows = 1, cols = 3, vgap = 0, hgap = 0 ) 319 320 sizerNavigationSuche.AddGrowableCol( 0, 0 ) 321 sizerNavigationSuche.AddGrowableCol( 1, 0 ) 322 sizerNavigationSuche.AddGrowableCol( 2, 0 ) 323 sizerNavigationSuche.AddGrowableCol( 3, 0 ) 324 325 sizerNavigationSuche.Add( self.ComboBox__Projekt 326 , flag = wx.ALL|wx.EXPAND 327 , border = 1 ) 328 329 330 sizerNavigationSuche.Add( self.ComboBox__Sprache 331 , flag = wx.ALL|wx.EXPAND 332 , border = 1 ) 333 334 335 sizerNavigationSuche.Add( self.Button__Filter 336 , flag = wx.ALL|wx.EXPAND 337 , border = 1 ) 338 339 # sizerNavigationSuche.Add( SearchCtrl__Suchen 340 # , flag = wx.ALL|wx.EXPAND 341 # , border = 1 ) 342 343 344 345 # 346 # -- Hauptlayout 347 # 348 sizerHauptfenster = wx.BoxSizer( wx.VERTICAL ) 349 sizerHauptfenster.Add( sizerNavigationSuche 350 , flag = wx.ALL|wx.EXPAND 351 , border = 5 ) 352 353 BoxSizer = wx.BoxSizer( wx.HORIZONTAL ) 354 BoxSizer.Add( self.ListBox__GefIdStatus, flag = wx.EXPAND ) 355 BoxSizer.Add( self.Notebook__zentralerBereich 356 , proportion = 1 357 , flag = wx.ALL|wx.EXPAND 358 , border = 5 ) 359 360 sizerHauptfenster.Add( BoxSizer 361 , proportion = 1 362 , flag = wx.ALL|wx.EXPAND 363 , border = 5 ) 364 365 self.SetSizerAndFit( sizerHauptfenster ) 366 367 368 # 369 # -- Eigenschaften des Fensters setzen ---------------------------------- 370 # 371 self.SetTitle(u"wxvf - 'Virtuelles Fahrzeug'") 372 self.Maximize( True ) 373 self.CenterOnScreen() 374 375 376 # 377 # -- CURSOR zum Auslesen der Gefahrenszenarien bereitstellen ------------------ 378 # -- und Navigationsbutton aktivieren/deaktivieren ------------------ 379 # 380 self.__ereignisLiesDB__()
381 382 383 # 384 # ------------------------------------------------------------------------------------ 385 # -- Datenbankverbindung herstellen ---------------------------------- 386 # ------------------------------------------------------------------------------------ 387 #
388 - def __dbVerbindung__( self ):
389 """ 390 Methode die aufgerufen wird, um auf die Datenbankverbindung herzustellen 391 """ 392 393 394 # 395 # -- Konfigurationsdatei auslesen ------------------------------------------ 396 # 397 try: 398 confDatei=open('.wxvf', 'r') 399 except IOError: 400 dlg = wx.MessageDialog(self, 401 u"Die von 'wxvf' benötigte Konfigurationsdatei ist nicht vorhanden !\n\nBitte lege im Programmverzeichnis eine Textdatei mit dem Namen '.wxvf' an.\nBitte trage in der ersten Zeile im Format 'xxx.xxx.xxx.xxx' die IP-Adresse ein, über die der Datenbankserver (PostgreSQL) angesprochen werden kann (000.000.000.000 entspricht 'localhost').\nBitte trage in der zweiten Zeile den Datenbanknamen ein (maximal 25 Zeichen).\nIn der dritten Zeile kannst Du den Benutzernamen angeben (maximal 25 Zeichen).\n\n\'wxvf\' wird beendet." 402 , u"Fehlermeldung", wx.OK | wx.ICON_ERROR ) 403 dlg.ShowModal() 404 dlg.Destroy() 405 sys.exit() 406 407 408 # 409 # -- IP-Adresse lesen (xxx.xxx.xxx.xxx) 410 # -- Die Zeichenbegrenzung soll vor 'Buffer Overflow' schützen 411 # 412 hostaddr = confDatei.readline()[0:15].strip() 413 dbName = confDatei.readline()[0:25].strip() 414 dbBenutzerName = confDatei.readline()[0:25].strip() 415 416 confDatei.close() 417 418 419 420 # 421 # -- Datenbankbenutzername / -kennwort eingeben -------------------------- 422 # 423 if( len( dbBenutzerName ) == 0 ) : dbBenutzerName = getpass.getuser() 424 425 426 # 427 # -- später Aktivieren ! ---------------------------------------------------------- 428 # 429 dlg = ProgStart( self ) 430 dlg.CenterOnScreen() 431 dlg.text_ctrl_dbBenutzerName.ChangeValue( dbBenutzerName ) 432 if ( dlg.ShowModal() != wx.ID_OK ): 433 sys.exit() 434 435 dbBenutzerName = dlg.text_ctrl_dbBenutzerName.GetValue() 436 dbKennwort = dlg.text_ctrl_dbKennwort.GetValue() 437 dlg.Destroy() 438 439 # dbKennwort = "micha" 440 441 442 443 # 444 # -- Verbindung zu 'vf' herstellen ------------------------------------------ 445 # 446 try: 447 self.dbVerbindung = Datenbank( dbName, dbBenutzerName, dbKennwort, hostaddr ) 448 """ 449 @cvar: Datenbankobjekt, welches die Datenbankverbindung enthält. 450 @type: libpq - PgConnection 451 """ 452 453 except Fehler, msg: 454 dlg = wx.MessageDialog( self, str( msg ), 'Fehlermeldung', wx.OK|wx.ICON_ERROR ) 455 dlg.ShowModal() 456 dlg.Destroy() 457 sys.exit()
458 459 460 461 # 462 # ------------------------------------------------------------------------------------ 463 # -- Änderungen speichern -------------------------------------------------- 464 # ------------------------------------------------------------------------------------ 465 #
466 - def __ereignisAenderungenSpeichern__( self, ereignisDummy ):
467 """ 468 Methode die aufgerufen wird, um alle Änderungen zu speichern. 469 470 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 471 @type ereignisDummy: C{wx - Ereignisobjekt} 472 """ 473 474 # 475 # -- Änderungen in die Datenbank schreiben ---------------------------------- 476 # 477 self.__schreibDB__() 478 479 # 480 # -- Änderungen in der Datenbank endgültig übernehmen ------------------ 481 # -- (Postgres: COMMIT) ------------------ 482 # 483 self.dbVerbindung.nimmAenderungen()
484 485 486 487 # 488 # ------------------------------------------------------------------------------------ 489 # -- Dummy, welcher später gelöscht werden kann -------------------------- 490 # ------------------------------------------------------------------------------------ 491 #
492 - def __dummy__( self, ereignisDummy ):
493 """ 494 Methode die aufgerufen wird, um auf die fehlende Funktionalität hizuweisen 495 496 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 497 @type ereignisDummy: C{wx - Ereignisobjekt} 498 """ 499 500 # 501 # -- Meldung ausgeben -------------------------------------------------- 502 # 503 dlg = wx.MessageDialog( self, "Noch nicht implementiert !", "Hinweis", wx.OK | wx.ICON_INFORMATION ) 504 dlg.ShowModal() 505 dlg.Destroy()
506 507 508 509 510 # 511 # ------------------------------------------------------------------------------------ 512 # -- Fensterinhalt aktualisieren (Positionen neu berechnen, ------------------ 513 # -- Objekte neu zeichnen) ------------------ 514 # ------------------------------------------------------------------------------------ 515 #
516 - def __ereignisLayout__( self, ereignisDummy = None ):
517 """ 518 Methode die aufgerufen wird, wenn der gesamte Fensterinhalt neu berechnet und gezeichnet werden soll. 519 520 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 521 @type ereignisDummy: C{wx - Ereignisobjekt} 522 """ 523 524 self.Layout()
525 526 527 528 529 530 # 531 # ------------------------------------------------------------------------------------ 532 # -- Datenbank auslesen -------------------------------------------------- 533 # ------------------------------------------------------------------------------------ 534 #
535 - def __ereignisLiesDB__( self, ereignisDummy = None ):
536 """ 537 Methode die aufgerufen wird, wenn die Datenbank neu ausgelesen werden muß (z.B. nach Änderung des Projektes oder der Sprache). 538 539 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 540 @type ereignisDummy: C{wx - Ereignisobjekt} 541 """ 542 543 544 # 545 # -- Wenn Projekt oder Sprache betätigt wurden -------------------------- 546 # 547 if ereignisDummy != None: 548 # 549 # -- die ListBox leeren ------------------------------------------ 550 # 551 self.ListBox__GefIdStatus.wxObjekt.Clear() 552 553 # 554 # -- die Gefahrenszenario-Id auslesen, ------------------ 555 # 556 self.dbVerbindung.init_psGefszenario( self.ListBox__GefIdStatus.wxObjekt 557 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() ) 558 559 # 560 # -- Die geänderten Projekt-Id, Sprache-Id und Gefahren-Id ---------- 561 # -- der Risikoanalyse, dem Gefahrenprotokoll, dem Terminplan ---------- 562 # -- übergeben ---------- 563 # 564 self.Notebook__zentralerBereich.GetPage(0).prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 565 self.Notebook__zentralerBereich.GetPage(0).sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 566 567 self.Notebook__zentralerBereich.GetPage(1).prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 568 self.Notebook__zentralerBereich.GetPage(1).sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 569 570 571 # 572 # -- Tabulator 'Risikoanalyse', 'Gefahrenprotokoll', 'Terminplan' ---------- 573 # -- mit den gültigen Werten füllen ---------- 574 # 575 self.__ereignisNavigation__()
576 577 578 # 579 # ------------------------------------------------------------------------------------ 580 # -- Navigationsereignisse behandeln ---------------------------------- 581 # ------------------------------------------------------------------------------------ 582 #
583 - def __ereignisNavigation__( self, ereignisDummy = None ):
584 """ 585 Methode die aufgerufen wird, wenn eine Gefahren-Id ausgewählt wurde. 586 587 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 588 @type ereignisDummy: C{wx - Ereignisobjekt} 589 """ 590 591 # 592 # -- Änderungen in die Datenbank schreiben ---------------------------------- 593 # 594 self.__schreibDB__() 595 596 597 # 598 # -- Ereignis >wx.ListBox.Clear()< abfangen < -------------------------- 599 # 600 if ereignisDummy != None and self.ListBox__GefIdStatus.wxObjekt.GetClientData( self.ListBox__GefIdStatus.wxObjekt.GetSelection() ) == None : 601 return 602 603 604 # 605 # -- Wenn keine Gefahren-Id vorhanden ist, alle Felder ------------------ 606 # -- in allen Tabulatoren leeren ------------------ 607 # 608 if self.ListBox__GefIdStatus.wxObjekt.IsEmpty() : 609 self.Notebook__zentralerBereich.GetPage(0).liesDB() 610 self.Notebook__zentralerBereich.GetPage(1).liesDB() 611 return 612 613 # 614 # -- Gefahrenszenario_Id einlesen ------------------------------------------ 615 # 616 else: 617 self.psGefszenarioId = self.ListBox__GefIdStatus.wxObjekt.GetStringSelection() 618 619 620 621 # 622 # -- Tabulator 'Risikoanalyse' mit den gültigen Werten füllen ---------- 623 # 624 self.Notebook__zentralerBereich.GetPage(0).liesDB( 625 psGefszenarioId = self.psGefszenarioId ) 626 627 628 # 629 # -- Tabulator 'Gefahrenszenario' mit den gültigen Werten füllen ---------- 630 # 631 self.Notebook__zentralerBereich.GetPage(1).liesDB( 632 psGefszenarioId = self.psGefszenarioId )
633 634 635 # 636 # -- Tabulator 'Terminplan' mit den gültigen Werten füllen ---------- 637 # 638 639 640 # 641 # ------------------------------------------------------------------------------------ 642 # -- Programm beenden -------------------------------------------------- 643 # ------------------------------------------------------------------------------------ 644 #
645 - def __ereignisProgrammBeenden__( self, ereignisDummy ):
646 """ 647 Methode die aufgerufen wird, um das Programm zu beenden. 648 649 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 650 @type ereignisDummy: C{wx - Ereignisobjekt} 651 """ 652 self.dbVerbindung.verwerfeAenderungen() 653 sys.exit()
654 655 656 # 657 # ------------------------------------------------------------------------------------ 658 # -- Infos zum Programm -------------------------------------------------- 659 # ------------------------------------------------------------------------------------ 660 #
661 - def __ereignisUeberWxvf__( self, ereignisDummy ):
662 """ 663 Methode die aufgerufen wird, um Informationen zum Programm auszugeben. 664 665 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 666 @type ereignisDummy: C{wx - Ereignisobjekt} 667 """ 668 669 # First we create and fill the info object 670 info = wx.AboutDialogInfo() 671 info.Name = u"wxvf" 672 info.Version = u"0.93" 673 info.Copyright = u"(C) 2010 Michael Bellair" 674 info.Description = wordwrap( 675 u"\'wxvf\' ist die Benutzeroberfläche zum Datenbankmodell 'Virtuelles Fahrzeug' ab Version 1.1. \nDas Datenbankmodell soll die Aspekte der Produktsicherheit abbilden, die Bestandteil des RAMS-Fachgebietes sind." 676 , 350 677 , wx.ClientDC(self) ) 678 info.WebSite = ("http://freenet-homepage.de/bellair/vf/index.html", u"Die Homepage.") 679 info.Developers = [ u"Michael Bellair" ] 680 681 info.License = wordwrap(u"\'wxvf\' is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\n\'wxvf\' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with \'wxvf\'. If not, see <http://www.gnu.org/licenses/>.", 500, wx.ClientDC(self)) 682 683 # Then we call wx.AboutBox giving it that info object 684 wx.AboutBox(info)
685 686 687 688 689 # 690 # ------------------------------------------------------------------------------------ 691 # -- Datenbank schreiben -------------------------------------------------- 692 # ------------------------------------------------------------------------------------ 693 #
694 - def __schreibDB__( self ):
695 """ 696 Methode die aufgerufen wird, wenn die Eingabefelder ausgelesen und deren Werte in die Datenbank geschrieben werden sollen. 697 """ 698 699 # 700 # -- Werte der Risikoanalyse, des Gefahrenprotokolls, ------------------ 701 # -- des Terminplanes in die DB schreiben ------------------ 702 # 703 self.Notebook__zentralerBereich.GetPage(0).schreibDB( 704 psGefszenarioId = self.psGefszenarioId ) 705 706 self.Notebook__zentralerBereich.GetPage(1).schreibDB()
707