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   
 41  from gefahrenprotokoll import Gefahrenprotokoll         # Eingabeformular 'Gefahrenprotokoll' 
 42   
 43  from wxuniversal import FlexGridSizerWxObjTitel         # wxObjekt mit Titel 
 44  from wxuniversal import ComboBoxErg                     # wx.ComboBox mit Ergänzungen 
 45  from wxuniversal import ListBoxErg                      # wx.ListBox mit Ergänzungen 
 46  from wxuniversal import PopupTransientWindowFilterSuche # Selektionskriterien Filter/Suche 
 47   
 48  from progstart import ProgStart                         # Dialog 'Datenbankanmeldung' 
 49  from risikoanalyse import Risikoanalyse                 # Eingabeformular 'Risikoanalyse' 
 50  from terminplan import Terminplan                       # Eingabeformular 'Terminplan' 
 51   
 52  from datenbank import Datenbank, Fehler                 # Datenbankzugriff, Datenbankvariablen 
 53   
 54  import sys                                              # Programmende >sys.exit()< 
 55  import getpass                                          # Benutzername >getuser()< 
 56   
 57   
 58   
 59   
 60  # 
 61  # 
 62  # 
 63  # ---------------------------------------------------------------------------------------- 
 64  # ---------------------------------------------------------------------------------------- 
 65  # --                                    -------------------------------------------------- 
 66  # --    Offene Punkte / Aufgaben        -------------------------------------------------- 
 67  # --                                    -------------------------------------------------- 
 68  # ---------------------------------------------------------------------------------------- 
 69  # ---------------------------------------------------------------------------------------- 
 70  # 
 71  #  
 72  #       -- siehe TODO 'vfhauptfenster.py' -- 
 73  # 
 74  # 
 75  # ---------------------------------------------------------------------------------------- 
 76  # 
 77   
 78   
 79  # 
 80  # 
 81  # 
 82  # ---------------------------------------------------------------------------------------- 
 83  # ---------------------------------------------------------------------------------------- 
 84  # --                    ------------------------------------------------------------------ 
 85  # --    Hauptfenster    ------------------------------------------------------------------ 
 86  # --                    ------------------------------------------------------------------ 
 87  # ---------------------------------------------------------------------------------------- 
 88  # ---------------------------------------------------------------------------------------- 
 89  # 
90 -class VFHauptfenster( wx.Frame ):
91 """ 92 Klasse, die das Hauptfenster der Benutzeroberfläche repräsentiert. 93 94 @raise IOError: Fehlermeldung und Programmende, wenn die Konfigurationsdatei '.wxvf' nicht geöffnet werden kann. 95 @raise Fehler: Fehlermeldung und Programmende, wenn die Datenbankverbindung nicht hergestellt werden kann. 96 """ 97 98 # 99 # ------------------------------------------------------------------------------------ 100 # -- Hauptfenster initialisieren ------------------------------------------ 101 # ------------------------------------------------------------------------------------ 102 #
103 - def __init__(self, *args, **kwds):
104 kwds["style"] = wx.DEFAULT_FRAME_STYLE 105 wx.Frame.__init__(self, *args, **kwds) 106 107 108 # 109 # -- Datenbankverbindung herstellen ------------------------------------------ 110 # 111 self.__dbVerbindung__() 112 113 114 # 115 # -- Menüleiste, Statusleiste (Menu Bar, Status Bar) -------------------------- 116 # 117 # 118 # -- Menüeinträge setzen 119 # 120 self.hauptfenster_menubar = wx.MenuBar() 121 menu = wx.Menu() 122 menu.Append(101, "&Neuer Datensatz\tCtrl+N", u"Neuen Datensatz im aktuellen Kontext anlegen", wx.ITEM_NORMAL) 123 menu.Append(102, "&Speichern\tCtrl+S", u"Änderungen in der Datenbank ablegen", wx.ITEM_NORMAL) 124 menu.AppendSeparator() 125 menu.Append(103, "&Beenden\tCtrl+B", u"Die Benutzeroberfläche 'wxvf' beenden.", wx.ITEM_NORMAL) 126 self.hauptfenster_menubar.Append(menu, "&Datei") 127 128 self.SetMenuBar(self.hauptfenster_menubar) 129 130 131 # 132 # -- Menüereignisse behandeln 133 # 134 self.Bind( wx.EVT_MENU, self.__ereignisNeuerDS__, id=101 ) 135 self.Bind( wx.EVT_MENU, self.__ereignisAenderungenSpeichern__, id=102 ) 136 self.Bind( wx.EVT_MENU, self.__ereignisProgrammBeenden__, id=103 ) 137 # self.Bind( wx.EVT_MENU, self.__ereignisBearbeiteStrukturenDialog__, id=201 ) 138 139 140 # 141 # -- Statusleiste setzen 142 # 143 self.Statusleiste = wx.StatusBar( self ) 144 self.Statusleiste.SetFieldsCount( 2 ) 145 self.Statusleiste.SetStatusWidths( [-7, -3] ) 146 self.SetStatusBar( self.Statusleiste ) 147 148 149 # 150 # -- Projekt, Sprache, Filter, ... ------------------------------------------ 151 # 152 self.CollapsiblePane__ProjektSpracheFilter = wx.CollapsiblePane( self 153 , label="Projekt, Sprache, Filter" 154 , style=wx.CP_DEFAULT_STYLE|wx.CP_NO_TLW_RESIZE ) 155 self.__initProjektSpracheFilter__( self.CollapsiblePane__ProjektSpracheFilter.GetPane() ) 156 self.Bind( wx.EVT_COLLAPSIBLEPANE_CHANGED 157 , self.__ereignisLayout__ 158 , self.CollapsiblePane__ProjektSpracheFilter ) 159 160 161 # 162 # -- Suche ------------------------------------------------------------------ 163 # 164 SearchCtrl__Suchen = wx.SearchCtrl( self, size=(200,-1), style=wx.TE_PROCESS_ENTER ) 165 SearchCtrl__Suchen.Disable() 166 167 self.PopupTransientWindow__Suchen = PopupTransientWindowFilterSuche( parent = self, style = wx.BORDER_SIMPLE ) 168 169 self.Button__Suchen = wx.Button( parent = self, label = "v", size = ( 15, -1 ) ) 170 self.Button__Suchen.Disable() 171 self.Bind( wx.EVT_BUTTON, self.__ereignisPopupSuchen__, self.Button__Suchen ) 172 173 Sizer_Suchen = wx.FlexGridSizer( rows = 1, cols = 2, vgap = 0, hgap = 0 ) 174 Sizer_Suchen.Add( SearchCtrl__Suchen, flag = wx.ALL|wx.EXPAND|wx.ALIGN_CENTER, border = 1 ) 175 Sizer_Suchen.Add( self.Button__Suchen, flag = wx.ALL|wx.FIXED_MINSIZE|wx.ALIGN_CENTER, border = 1 ) 176 Sizer_Suchen.AddGrowableCol( 0 ) 177 178 179 # 180 # -- Id und Status -------------------------------------------------- 181 # -- Objekt-Id = -221 -------------------------------------------------- 182 # 183 self.ListBox__GefIdStatus = FlexGridSizerWxObjTitel( parent = self 184 , wxObj = ListBoxErg( self 185 , size = ( -1, -1 ) 186 , style = wx.BORDER_SUNKEN | wx.LB_SORT 187 , Statusleiste = self.Statusleiste 188 , dbVerbindung = self.dbVerbindung ) 189 , titel = "Gef-Id / \nStatus" 190 , orient = wx.VERTICAL ) 191 self.ListBox__GefIdStatus.wxObjekt.statusLeisteDBSpNameErlaeuterung = """Eineindeutige Identifikationsnummer des Gefahrenszenarios.""" 192 193 self.ListBox__GefIdStatus.wxObjekt.SetToolTip(wx.ToolTip( 194 """mittlere Maustaste:\tzugeordnete Strukturpunkte anzeigen""" 195 + """\n""" 196 + """rechte Maustaste:\tStrukturpunkte zuordnen / bearbeiten""" )) 197 198 self.ListBox__GefIdStatus.wxObjekt.markiereWertProjUeb = False 199 200 self.Bind( wx.EVT_LISTBOX 201 , self.__ereignisNavigation__ 202 , self.ListBox__GefIdStatus.wxObjekt ) 203 204 # 205 # -- Alle Gefahrenszenario-id übernehmen ---------------------------------- 206 # 207 self.dbVerbindung.init_psGefszenario( self.ListBox__GefIdStatus.wxObjekt 208 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() ) 209 210 self.psGefszenarioId = self.ListBox__GefIdStatus.wxObjekt.GetStringSelection() 211 212 213 # 214 # -- Tabulatorbereich (Risikoanalyse, Gefahrenprotokoll, ------------------ 215 # -- Terminplan, ...) ------------------ 216 # 217 self.Notebook__zentralerBereich = wx.Notebook( self ) 218 219 self.Notebook__zentralerBereich.AddPage( Risikoanalyse( parent = self.Notebook__zentralerBereich 220 , Statusleiste = self.Statusleiste 221 , dbVerbindung = self.dbVerbindung 222 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 223 , sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 224 , psGefszenarioId = self.psGefszenarioId ) 225 , "Risikoanalyse" ) 226 227 228 self.Notebook__zentralerBereich.AddPage( Gefahrenprotokoll( parent = self.Notebook__zentralerBereich 229 , Statusleiste = self.Statusleiste 230 , dbVerbindung = self.dbVerbindung 231 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 232 , sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 233 , psGefszenarioId = self.psGefszenarioId ) 234 , "Gefahrenprotokoll" ) 235 236 237 self.Notebook__zentralerBereich.AddPage( Terminplan( self.Notebook__zentralerBereich ) 238 , "Terminplan" ) 239 240 241 # 242 # -- Test 243 # 244 self.Notebook__zentralerBereich.ChangeSelection( 1 ) 245 246 247 # 248 # -- Layout festlegen (Sizer - Hierarchie aufbauen) -------------------------- 249 # 250 251 # 252 # -- Teillayout 253 # 254 sizerNavigationSuche = wx.FlexGridSizer( rows = 1, cols = 3, vgap = 0, hgap = 0 ) 255 256 sizerNavigationSuche.Add( self.CollapsiblePane__ProjektSpracheFilter 257 , flag = wx.ALL|wx.EXPAND 258 , border = 1 ) 259 sizerNavigationSuche.Add( Sizer_Suchen 260 , flag = wx.ALL|wx.EXPAND 261 , border = 1 ) 262 263 sizerNavigationSuche.AddGrowableCol( 0 ) 264 265 266 # 267 # -- Hauptlayout 268 # 269 sizerHauptfenster = wx.BoxSizer( wx.VERTICAL ) 270 sizerHauptfenster.Add( sizerNavigationSuche 271 , flag = wx.ALL|wx.EXPAND 272 , border = 1 ) 273 274 BoxSizer = wx.BoxSizer( wx.HORIZONTAL ) 275 BoxSizer.Add( self.ListBox__GefIdStatus, flag = wx.EXPAND ) 276 BoxSizer.Add( self.Notebook__zentralerBereich 277 , proportion = 1 278 , flag = wx.ALL|wx.EXPAND 279 , border = 5 ) 280 281 sizerHauptfenster.Add( BoxSizer 282 , proportion = 1 283 , flag = wx.ALL|wx.EXPAND 284 , border = 5 ) 285 286 self.SetSizerAndFit( sizerHauptfenster ) 287 288 289 # 290 # -- Eigenschaften des Fensters setzen ---------------------------------- 291 # 292 self.SetTitle("wxvf - 'Virtuelles Fahrzeug'") 293 self.Maximize( True ) 294 self.CenterOnScreen() 295 296 297 # 298 # -- CURSOR zum Auslesen der Gefahrenszenarien bereitstellen ------------------ 299 # -- und Navigationsbutton aktivieren/deaktivieren ------------------ 300 # 301 self.__ereignisLiesDB__()
302 303 304 # 305 # ------------------------------------------------------------------------------------ 306 # -- Datenbankverbindung herstellen ---------------------------------- 307 # ------------------------------------------------------------------------------------ 308 #
309 - def __dbVerbindung__( self ):
310 """ 311 Methode die aufgerufen wird, um auf die Datenbankverbindung herzustellen 312 """ 313 314 # 315 # -- Datenbankbenutzername / -kennwort eingeben -------------------------- 316 # 317 # 318 # -- später Aktivieren ! ---------------------------------------------------------- 319 # 320 # dlg = ProgStart( self ) 321 # dlg.CenterOnScreen() 322 # dlg.text_ctrl_dbBenutzerName.ChangeValue( getpass.getuser() ) 323 # if ( dlg.ShowModal() != wx.ID_OK ): 324 # sys.exit() 325 # 326 # dbBenutzerName = dlg.text_ctrl_dbBenutzerName.GetValue() 327 # dbKennwort = dlg.text_ctrl_dbKennwort.GetValue() 328 # dlg.Destroy() 329 dbBenutzerName = "micha" 330 dbKennwort = "micha" 331 332 333 # 334 # -- Konfigurationsdatei auslesen ------------------------------------------ 335 # 336 try: 337 confDatei=open('.wxvf', 'r') 338 except IOError: 339 dlg = wx.MessageDialog(self, 340 "Die von 'wxvf' benötigte Konfigurationsdatei ist nicht vorhanden !\n\n" 341 + "Bitte lege im Programmverzeichnis eine Textdatei mit dem Namen '.wxvf' an.\n" 342 + "Bitte trage im Format 'xxx.xxx.xxx.xxx' die IP-Adresse ein, über die der Datenbankserver (PostgreSQL) angesprochen werden kann (000.000.000.000 entspricht 'localhost').\n\n" 343 + "'wxvf' wird beendet." 344 , 'Fehlermeldung', wx.OK | wx.ICON_ERROR ) 345 dlg.ShowModal() 346 dlg.Destroy() 347 sys.exit() 348 349 350 # 351 # -- IP-Adresse lesen (xxx.xxx.xxx.xxx) 352 # -- Die 15 Zeichen - Begrenzung soll vor 'Buffer Overflow' schützen 353 # 354 hostaddr = confDatei.read( 15 ) 355 confDatei.close() 356 357 358 # 359 # -- Verbindung zu 'vf' herstellen ------------------------------------------ 360 # 361 try: 362 self.dbVerbindung = Datenbank( dbBenutzerName, dbKennwort, hostaddr ) 363 """ 364 @cvar: Datenbankobjekt, welches die Datenbankverbindung enthält. 365 @type: libpq - PgConnection 366 """ 367 368 except Fehler, msg: 369 dlg = wx.MessageDialog( self, str( msg ), 'Fehlermeldung', wx.OK|wx.ICON_ERROR ) 370 dlg.ShowModal() 371 dlg.Destroy() 372 sys.exit()
373 374 375 376 377 378 # 379 # ------------------------------------------------------------------------------------ 380 # -- Dummy, welcher später gelöscht werden kann -------------------------- 381 # ------------------------------------------------------------------------------------ 382 #
383 - def __dummy__( self, ereignisDummy ):
384 """ 385 Methode die aufgerufen wird, um auf die fehlende Funktionalität hizuweisen 386 387 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 388 @type ereignisDummy: C{wx - Ereignisobjekt} 389 """ 390 391 # 392 # -- Meldung ausgeben -------------------------------------------------- 393 # 394 dlg = wx.MessageDialog( self, "Noch nicht implementiert !", "Hinweis", wx.OK | wx.ICON_INFORMATION ) 395 dlg.ShowModal() 396 dlg.Destroy()
397 398 399 # 400 # ------------------------------------------------------------------------------------ 401 # -- Änderungen speichern -------------------------------------------------- 402 # ------------------------------------------------------------------------------------ 403 #
404 - def __ereignisAenderungenSpeichern__( self, ereignisDummy ):
405 """ 406 Methode die aufgerufen wird, um alle Änderungen zu speichern. 407 408 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 409 @type ereignisDummy: C{wx - Ereignisobjekt} 410 """ 411 412 # 413 # -- Änderungen in die Datenbank schreiben ---------------------------------- 414 # 415 self.__schreibDB__() 416 417 # 418 # -- Änderungen in der Datenbank endgültig übernehmen ------------------ 419 # -- (Postgres: COMMIT) ------------------ 420 # 421 self.dbVerbindung.nimmAenderungen()
422 423 424 425 426 # 427 # ------------------------------------------------------------------------------------ 428 # -- Fensterinhalt aktualisieren (Positionen neu berechnen, ------------------ 429 # -- Objekte neu zeichnen) ------------------ 430 # ------------------------------------------------------------------------------------ 431 #
432 - def __ereignisLayout__( self, ereignisDummy = None ):
433 """ 434 Methode die aufgerufen wird, wenn der gesamte Fensterinhalt neu berechnet und gezeichnet werden soll. 435 436 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 437 @type ereignisDummy: C{wx - Ereignisobjekt} 438 """ 439 440 self.Layout()
441 442 443 444 445 446 # 447 # ------------------------------------------------------------------------------------ 448 # -- Datenbank auslesen -------------------------------------------------- 449 # ------------------------------------------------------------------------------------ 450 #
451 - def __ereignisLiesDB__( self, ereignisDummy = None ):
452 """ 453 Methode die aufgerufen wird, wenn die Datenbank neu ausgelesen werden muß (z.B. nach Änderung des Projektes oder der Sprache). 454 455 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 456 @type ereignisDummy: C{wx - Ereignisobjekt} 457 """ 458 459 460 # 461 # -- Wenn Projekt oder Sprache betätigt wurden -------------------------- 462 # 463 if ereignisDummy != None: 464 # 465 # -- die ListBox leeren ------------------------------------------ 466 # 467 self.ListBox__GefIdStatus.wxObjekt.Clear() 468 469 # 470 # -- die Gefahrenszenario-Id auslesen, ------------------ 471 # 472 self.dbVerbindung.init_psGefszenario( self.ListBox__GefIdStatus.wxObjekt 473 , prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() ) 474 475 # 476 # -- Die geänderten Projekt-Id, Sprache-Id und Gefahren-Id ---------- 477 # -- der Risikoanalyse, dem Gefahrenprotokoll, dem Terminplan ---------- 478 # -- übergeben ---------- 479 # 480 self.Notebook__zentralerBereich.GetPage(0).prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 481 self.Notebook__zentralerBereich.GetPage(0).sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 482 483 self.Notebook__zentralerBereich.GetPage(1).prjProjekteId = self.ComboBox__Projekt.wxObjekt.gibClientData() 484 self.Notebook__zentralerBereich.GetPage(1).sprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 485 486 487 488 # 489 # -- Projekt, Sprache, Filter mit den aktuellen Werten füllen ---------- 490 # 491 self.CollapsiblePane__ProjektSpracheFilter.SetLabel( "Projekt: '" 492 + self.ComboBox__Projekt.wxObjekt.GetValue() 493 + "' \t Sprache: '" 494 + self.ComboBox__Sprache.wxObjekt.GetValue() 495 + "' \t Filter: '---'" ) 496 497 # 498 # -- Tabulator 'Risikoanalyse', 'Gefahrenprotokoll', 'Terminplan' ---------- 499 # -- mit den gültigen Werten füllen ---------- 500 # 501 self.__ereignisNavigation__()
502 503 504 # 505 # ------------------------------------------------------------------------------------ 506 # -- Neuen Datensatz anlegen ------------------------------------------ 507 # ------------------------------------------------------------------------------------ 508 #
509 - def __ereignisNeuerDS__( self, ereignisDummy ):
510 """ 511 Methode die aufgerufen wird, wenn ein neuer Datensatz im aktuellen Kontext angelegt werden soll. 512 513 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 514 @type ereignisDummy: C{wx - Ereignisobjekt} 515 """ 516 517 # 518 # -- Änderungen in die Datenbank schreiben ---------------------------------- 519 # 520 self.__schreibDB__() 521 522 523 # 524 # Test 525 # 526 self.__dummy__( ereignisDummy )
527 528 529 # 530 # ------------------------------------------------------------------------------------ 531 # -- Navigationsereignisse behandeln ---------------------------------- 532 # ------------------------------------------------------------------------------------ 533 #
534 - def __ereignisNavigation__( self, ereignisDummy = None ):
535 """ 536 Methode die aufgerufen wird, wenn eine Gefahren-Id ausgewählt wurde. 537 538 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 539 @type ereignisDummy: C{wx - Ereignisobjekt} 540 """ 541 542 # 543 # -- Änderungen in die Datenbank schreiben ---------------------------------- 544 # 545 self.__schreibDB__() 546 547 548 # 549 # -- Ereignis >wx.ListBox.Clear()< abfangen < -------------------------- 550 # 551 if ereignisDummy != None and self.ListBox__GefIdStatus.wxObjekt.GetClientData( self.ListBox__GefIdStatus.wxObjekt.GetSelection() ) == None : 552 return 553 554 555 # 556 # -- Wenn keine Gefahren-Id vorhanden ist, alle Felder ------------------ 557 # -- in allen Tabulatoren leeren ------------------ 558 # 559 if self.ListBox__GefIdStatus.wxObjekt.IsEmpty() : 560 self.Notebook__zentralerBereich.GetPage(0).liesDB() 561 self.Notebook__zentralerBereich.GetPage(1).liesDB() 562 return 563 564 # 565 # -- Gefahrenszenario_Id einlesen ------------------------------------------ 566 # 567 else: 568 self.psGefszenarioId = self.ListBox__GefIdStatus.wxObjekt.GetStringSelection() 569 570 571 572 # 573 # -- Tabulator 'Risikoanalyse' mit den gültigen Werten füllen ---------- 574 # 575 self.Notebook__zentralerBereich.GetPage(0).liesDB( 576 psGefszenarioId = self.psGefszenarioId ) 577 578 579 # 580 # -- Tabulator 'Gefahrenszenario' mit den gültigen Werten füllen ---------- 581 # 582 self.Notebook__zentralerBereich.GetPage(1).liesDB( 583 psGefszenarioId = self.psGefszenarioId )
584 585 586 # 587 # -- Tabulator 'Terminplan' mit den gültigen Werten füllen ---------- 588 # 589 590 591 592 # 593 # ------------------------------------------------------------------------------------ 594 # -- Fenster zur Auswahl der Eingabefelder, die -------------------------- 595 # -- durchsucht / gefiltert werden sollen anzeigen -------------------------- 596 # ------------------------------------------------------------------------------------ 597 #
598 - def __ereignisPopupSuchen__( self, ereignis ):
599 """ 600 Methode die aufgerufen wird, wenn das Fenster zum Einschränken der Suche angezeigt werden soll. 601 602 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 603 @type ereignis: C{wx - Ereignisobjekt} 604 """ 605 606 # 607 # Position festlegen und Fenster anzeigen 608 # 609 btn = ereignis.GetEventObject() 610 pos = btn.ClientToScreen( (0,0) ) 611 sz = btn.GetSize() 612 self.PopupTransientWindow__Suchen.Position(pos, (0, sz[1])) 613 614 self.PopupTransientWindow__Suchen.Popup()
615 616 617 # 618 # ------------------------------------------------------------------------------------ 619 # -- Programm beenden -------------------------------------------------- 620 # ------------------------------------------------------------------------------------ 621 #
622 - def __ereignisProgrammBeenden__( self, ereignisDummy ):
623 """ 624 Methode die aufgerufen wird, um das Programm zu beenden. 625 626 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 627 @type ereignisDummy: C{wx - Ereignisobjekt} 628 """ 629 self.dbVerbindung.verwerfeAenderungen() 630 sys.exit()
631 632 633 634 # 635 # ------------------------------------------------------------------------------------ 636 # -- Projekt, Sprache, Filter erzeugen ---------------------------------- 637 # ------------------------------------------------------------------------------------ 638 #
639 - def __initProjektSpracheFilter__( self, wxCollapsiblePane ):
640 """ 641 Methode die aufgerufen wird, um die Objekte des oberen ausklappbaren Bereiches zu setzen. 642 643 @param wxCollapsiblePane: Es ist das C{wx - CollapsiblePane} - Objekt zu übergeben, welches den oberen ausklappbaren Bereich repräsentiert 644 @type wxCollapsiblePane: C{wx - CollapsiblePane} 645 """ 646 647 648 # 649 # -- Projekt -------------------------------------------------- 650 # -- Objekt-Id = -206 -------------------------------------------------- 651 # 652 self.ComboBox__Projekt = FlexGridSizerWxObjTitel( parent = wxCollapsiblePane 653 , wxObj = ComboBoxErg( wxCollapsiblePane 654 , choices = [] 655 , style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT 656 , Statusleiste = self.Statusleiste 657 , dbVerbindung = self.dbVerbindung ) 658 , orient = wx.VERTICAL 659 , titel = "Projekt:" ) 660 self.ComboBox__Projekt.wxObjekt.statusLeisteDBSpNameErlaeuterung = """Die Datensätze auf das Projekt einschränken.""" 661 662 self.dbVerbindung.init_prjProjekte( self.ComboBox__Projekt.wxObjekt ) 663 664 self.ComboBox__Projekt.wxObjekt.Bind( wx.EVT_COMBOBOX, self.__ereignisLiesDB__ ) 665 666 667 # 668 # -- Sprache ------------------------------------------------------------------ 669 # -- Objekt-Id = -208 -------------------------------------------------- 670 # 671 self.ComboBox__Sprache = FlexGridSizerWxObjTitel( parent = wxCollapsiblePane 672 , wxObj = ComboBoxErg( wxCollapsiblePane 673 , choices = [] 674 , style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT 675 , Statusleiste = self.Statusleiste 676 , dbVerbindung = self.dbVerbindung ) 677 , orient = wx.VERTICAL 678 , titel = "Sprache:" ) 679 self.ComboBox__Sprache.wxObjekt.statusLeisteDBSpNameErlaeuterung = """Die Werte in der gewählten Sprache ausgeben.""" 680 681 self.dbVerbindung.init_sprSprachen( self.ComboBox__Sprache.wxObjekt ) 682 683 self.ComboBox__Sprache.wxObjekt.Bind( wx.EVT_COMBOBOX, self.__ereignisLiesDB__ ) 684 685 686 687 # 688 # -- Filter ------------------------------------------------------------------ 689 # 690 self.ComboBox__Filter = FlexGridSizerWxObjTitel( parent = wxCollapsiblePane 691 , wxObj = wx.ComboBox( wxCollapsiblePane, choices = [], style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT) 692 , orient = wx.VERTICAL 693 , titel = "Filter:" ) 694 self.ComboBox__Filter.Enable( False ) 695 696 697 # 698 # -- Layout festlegen -------------------------------------------------- 699 # 700 BoxSizer = wx.BoxSizer( orient = wx.HORIZONTAL ) 701 BoxSizer.Add( self.ComboBox__Projekt, proportion = 1, flag = wx.EXPAND ) 702 BoxSizer.Add( self.ComboBox__Sprache, proportion = 1, flag = wx.EXPAND ) 703 BoxSizer.Add( self.ComboBox__Filter, proportion = 1, flag = wx.EXPAND ) 704 wxCollapsiblePane.SetSizerAndFit( BoxSizer )
705 706 707 708 709 # 710 # ------------------------------------------------------------------------------------ 711 # -- Datenbank schreiben -------------------------------------------------- 712 # ------------------------------------------------------------------------------------ 713 #
714 - def __schreibDB__( self ):
715 """ 716 Methode die aufgerufen wird, wenn die Eingabefelder ausgelesen und deren Werte in die Datenbank geschrieben werden sollen. 717 """ 718 719 # 720 # -- Werte der Risikoanalyse, des Gefahrenprotokolls, ------------------ 721 # -- des Terminplanes in die DB schreiben ------------------ 722 # 723 self.Notebook__zentralerBereich.GetPage(0).schreibDB( 724 psGefszenarioId = self.psGefszenarioId ) 725 726 self.Notebook__zentralerBereich.GetPage(1).schreibDB()
727