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

Source Code for Module wxuniversal

   1  # -*- coding: utf-8 -*- 
   2  # 
   3  # 
   4  #    filename:  wxuniversal.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://www.michaelbellair.de/vf/index.html 
  35  # 
  36  # 
  37  # ---------------------------------------------------------------------------------------- 
  38  # 
  39  import os 
  40   
  41  import wx 
  42  import wx.lib.masked as  wxmsk          # MaskedCtrl 
  43   
  44  from universal import zk                # Zeichenketten bearbeiten 
  45   
  46  import sys                              # Programmende >sys.exit()< 
  47   
  48   
  49   
  50  # 
  51  # 
  52  # 
  53  # ---------------------------------------------------------------------------------------- 
  54  # ---------------------------------------------------------------------------------------- 
  55  # --                                    -------------------------------------------------- 
  56  # --    Offene Punkte / Aufgaben        -------------------------------------------------- 
  57  # --                                    -------------------------------------------------- 
  58  # ---------------------------------------------------------------------------------------- 
  59  # ---------------------------------------------------------------------------------------- 
  60  # 
  61  #  
  62  #       -- siehe TODO 'wxuniversal.py' -- 
  63  # 
  64  # 
  65  # ---------------------------------------------------------------------------------------- 
  66  # 
  67   
  68   
  69   
  70  # 
  71  # 
  72  # 
  73  # ---------------------------------------------------------------------------------------- 
  74  # ---------------------------------------------------------------------------------------- 
  75  # --                            ---------------------------------------------------------- 
  76  # --    Globale Variablen       ---------------------------------------------------------- 
  77  # --                            ---------------------------------------------------------- 
  78  # ---------------------------------------------------------------------------------------- 
  79  # ---------------------------------------------------------------------------------------- 
  80  # 
  81  # 
  82  # 
  83  # ---------------------------------------------------------------------------------------- 
  84  # --    Farben                                                          ------------------ 
  85  # --    Eine Liste der verfügbaren Farben kann dem wxPython-Demo       ------------------ 
  86  # --    Miscellaneous -> ColourDB entnommen werden                      ------------------ 
  87  # ---------------------------------------------------------------------------------------- 
  88  # 
  89  farbeAuswahlListe = "LIGHT STEEL BLUE"  # Farbe der Objekte, die Vorgabewerte enthalten 
  90  farbeBearbeiten = "LIGHT YELLOW"        # Farbe der Objekte, die bearbeitet werden können 
  91   
  92  # 
  93  # --    Notlösung !                                    ---------------------------------- 
  94  # --    Dem Fehler in >comctl32.dll< ausweichen         ---------------------------------- 
  95  # 
  96  if( os.name == 'nt' ) :  
  97      farbeAuswahlListe = "CYAN" 
  98      farbeBearbeiten = "WHITE" 
  99   
 100  # 
 101  # ---------------------------------------------------------------------------------------- 
 102  # --    Konstanten, die hauptsächlich zur Bildung der Hauptknoten in   ------------------ 
 103  # --    TreeCtrlErg() verwendet werden                                  ------------------ 
 104  # ---------------------------------------------------------------------------------------- 
 105  # 
 106  HK_ANM = u'Anmerkungen' 
 107   
 108  HK_DOK = u'Dok' 
 109   
 110  HK_INTERNFIRMA = u'InternFirma' 
 111   
 112  HK_PE = u'Protokolleinträge' 
 113  HK_PETYP = u'Typ der Protokolleinträge' 
 114   
 115  HK_SIANF = u'Sicherheitsanforderungen' 
 116  HK_SIANFTYP = u'Typ der Sicherheitsanforderungen' 
 117   
 118  HK_STR = u'Strukturpunkte' 
 119  HK_STRBEZ = u'Strukturbezeichnungen' 
 120   
 121   
 122   
 123   
 124   
 125   
 126  # 
 127  # 
 128  # 
 129  # ---------------------------------------------------------------------------------------- 
 130  # ---------------------------------------------------------------------------------------- 
 131  # --                                            ------------------------------------------ 
 132  # --    interne Basisklasse der Ergänzungen    ------------------------------------------ 
 133  # --                                            ------------------------------------------ 
 134  # ---------------------------------------------------------------------------------------- 
 135  # ---------------------------------------------------------------------------------------- 
 136  # 
137 -class __Ergaenzung__:
138 """ 139 Basisklasse, die die Ergänzungen bereitstellt. 140 """ 141 142 # 143 # ------------------------------------------------------------------------------------ 144 # -- Initialisierungen -------------------------------------------------- 145 # ------------------------------------------------------------------------------------ 146 #
147 - def __init__( self, Statusleiste ):
148 149 # 150 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 151 # 152 self.SetName( name = "__Ergaenzung__" ) 153 154 155 # 156 # -------------------------------------------------------------------------------- 157 # -- Kontextmenüs einschließlich Ereignisbehandlung -------------------------- 158 # -------------------------------------------------------------------------------- 159 # 160 self.KMenues = MultiMenu() 161 162 # 163 # -- Kontextmenüs unterdrücken (Notlösung) ---------------------------------- 164 # 165 self.KMenues.initMenu() 166 167 168 # 169 # -- Statusleiste -------------------------------------------------- 170 # 171 self.__StatusLeiste__ = Statusleiste 172 self.__statusLeisteDBSpNameErlaeuterung__ = "" 173 self.__statusLeisteDBSpName__ = "" 174 175 176 # 177 # -- wertNichtMod -------------------------------------------------- 178 # 179 self.wertNichtMod = [] 180 self.wertNichtMod.append( None ) 181 """ 182 @cvar: Aktueller, nichtmodifizierter Wert, wie er beim letzten Aufruf von C{nimmWert(...)} eingelesen wurde. 183 @type: Python - Objekt 184 """ 185 186 187 # 188 # -- ClientData -------------------------------------------------- 189 # 190 self.clientData = [] 191 """ 192 @cvar: Zusatzinformationen, die dem aktuellen Objekt zugeordnet werden können. 193 @type: Python - Objekt 194 """ 195 196 197 # 198 # -- >istVomBenutzerGeaendert = True< ---------------------------------- 199 # -- der Wert wurde vom Benutzer verändert ---------------------------------- 200 # 201 self.istVomBenutzerGeaendert = False 202 """ 203 @cvar: Wenn dieser Wert C{True} ist, wurde der Wert des C{wx-Objektes} vom Benutzer verändert. 204 @type: Boolescher Wert 205 """ 206 207 208 # 209 # -- >istBenutzerAenderungJetzt = True< -------------------------- 210 # -- der Wert wurde gerade vom Benutzer verändert -------------------------- 211 # 212 self.istBenutzerAenderungJetzt = False 213 """ 214 @cvar: Wenn dieser Wert C{True} ist, wurde der Wert des C{wx-Objektes} jetzt vom Benutzer verändert. 215 @type: Boolescher Wert 216 """
217 218 219 220 221 222 # 223 # ------------------------------------------------------------------------------------ 224 # -- Änderung erkennen -------------------------------------------------- 225 # ------------------------------------------------------------------------------------ 226 #
227 - def __ereignisAenderung__( self, ereignis = None ):
228 """ 229 Methode die aufgerufen wird, wenn der Inhalt des C{wx-Objektes} geändert wird. 230 231 @param ereignis: Es ist das C{wx-Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 232 @type ereignis: C{wx-Ereignisobjekt} 233 """ 234 235 # 236 # -- Der Wert des wx-Objektes wurde (jetzt) vom Benutzer verändert ---------- 237 # 238 self.istVomBenutzerGeaendert = True 239 self.istBenutzerAenderungJetzt = True 240 241 242 # 243 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 244 # -- ausgewertet werden kann -------------------------- 245 # 246 ereignis.Skip( skip = True )
247 248 249 250 251 # 252 # ------------------------------------------------------------------------------------ 253 # -- Kontextmenü nicht anzeigen ------------------------------------------ 254 # ------------------------------------------------------------------------------------ 255 #
256 - def __ereignisKMenueNicht__( self, ereignis = None ):
257 """ 258 Kontextmenü nicht anzeigen 259 260 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 261 @type ereignis: C{wx - Ereignisobjekt} 262 """ 263 264 # 265 # -- 'Unsichtbares' Kontextmenü aufrufen ---------------------------------- 266 # 267 self.PopupMenu( self.KMenues.gibMenu( lfdNrMenu = 0 ) ) 268 269 270 # 271 # -- Das Ereignis nicht weiterreichen ----------------------------------------- 272 # 273 ereignis.Skip( skip = False )
274 275 276 277 278 # 279 # ------------------------------------------------------------------------------------ 280 # -- Einträge in der Statusleiste vornehmen ---------------------------------- 281 # ------------------------------------------------------------------------------------ 282 #
283 - def __ereignisStatusleiste__( self, ereignis ):
284 """ 285 Methode die aufgerufen wird, um die Einträge in der Statusleiste darzustellen. 286 287 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 288 @type ereignis: C{wx - Ereignisobjekt} 289 """ 290 291 292 # 293 # -- Mauszeiger verläßt >wx.Objekt< ------------------------------------------ 294 # 295 if ereignis.Leaving(): 296 self.__StatusLeiste__.SetStatusText( "", 0 ) 297 self.__StatusLeiste__.SetStatusText( "", 1 ) 298 299 300 # 301 # -- Mauszeiger berührt >wx.Objekt< ------------------------------------------ 302 # 303 if ereignis.Entering(): 304 305 # 306 # -- PostgreSQL-Datenbakspaltennamen ausgeben ------------------ 307 # 308 self.__StatusLeiste__.SetStatusText( self.__statusLeisteDBSpName__, 1 ) 309 310 # 311 # -- Erläuterung zum PostgreSQL-Datenbakspaltennamen ausgeben -- 312 # 313 self.__StatusLeiste__.SetStatusText( self.__statusLeisteDBSpNameErlaeuterung__, 0 ) 314 315 316 # 317 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 318 # -- ausgewertet werden kann -------------------------- 319 # 320 ereignis.Skip( skip = True )
321 322 323 324 # 325 # ------------------------------------------------------------------------------------ 326 # -- Hat der Benutzer eine Änderung durchgeführt ? -------------------------- 327 # ------------------------------------------------------------------------------------ 328 #
329 - def gibIstVomBenutzerGeaendert( self ):
330 """ 331 Hat der Benutzer eine Änderung durchgeführt ? 332 333 @return: Es wird C{True} zurückgegeben, wenn der Benutzer eine Änderung durchgeführt hat; sonst C{False}. 334 @rtype: Boolean 335 """ 336 337 return self.istVomBenutzerGeaendert
338 339 340 341 # 342 # ------------------------------------------------------------------------------------ 343 # -- Den Status der Benutzeränderung explizit setzen -------------------------- 344 # ------------------------------------------------------------------------------------ 345 #
346 - def nimmIstVomBenutzerGeaendert( self, istVomBenutzerGeaendert ):
347 """ 348 Den Status der Benutzeränderung explizit setzen. 349 350 @param istVomBenutzerGeaendert: Es ist der Status der Benutzeränderung zu übergeben. 351 @type istVomBenutzerGeaendert: C{Boolean} 352 """ 353 354 self.istVomBenutzerGeaendert = istVomBenutzerGeaendert
355 356 357 358 # 359 # ------------------------------------------------------------------------------------ 360 # -- Die Werte der Statusleiste übernehmen -------------------------- 361 # ------------------------------------------------------------------------------------ 362 #
363 - def nimmWerteStatusleiste( self, DBSpNameErlaeuterung = "", DBSpName = "" ):
364 """ 365 Die Werte der Statusleiste übernehmen. 366 367 @param DBSpNameErlaeuterung: Es ist der fachliche Gedanke zur Datenbankspalte kurz zu erläutern. 368 @type DBSpNameErlaeuterung: C{Zeichenkette} 369 370 @param DBSpName: Es ist Name der Spalte in der Datenbank anzugeben. 371 @type DBSpName: C{Zeichenkette} 372 """ 373 374 self.__statusLeisteDBSpNameErlaeuterung__ = DBSpNameErlaeuterung 375 self.__statusLeisteDBSpName__ = DBSpName
376 377 378 379 # 380 # 381 # 382 # ---------------------------------------------------------------------------------------- 383 # ---------------------------------------------------------------------------------------- 384 # -- ------------------ 385 # -- interne Basisklasse der Funktionen für Texteingabeobjekte ------------------ 386 # -- ------------------ 387 # ---------------------------------------------------------------------------------------- 388 # ---------------------------------------------------------------------------------------- 389 #
390 -class __TextFunktionen__( __Ergaenzung__ ):
391 """ 392 Basisklasse, die zusätzlichen Funktionen für Texteingabeobjekte bereitstellt. 393 """ 394 395 # 396 # ------------------------------------------------------------------------------------ 397 # -- Initialisierungen -------------------------------------------------- 398 # ------------------------------------------------------------------------------------ 399 #
400 - def __init__( self, Statusleiste ):
401 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste ) 402 403 # 404 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 405 # 406 self.SetName( name = "__TextFunktionen__" ) 407 408 409 # 410 # -- das Texteingabefeld darf leer sein ---------------------------------- 411 # 412 self.darfLeerSein = False
413 414 415 416 417 # 418 # ------------------------------------------------------------------------------------ 419 # -- Leere TxtCtrl vermeiden ------------------------------------------ 420 # ------------------------------------------------------------------------------------ 421 #
422 - def __setzeGueltigeZk__( self, ereignis ):
423 """ 424 Nach der Benutzeränderung muß ein gültiger Text vorliegen (nach Entfernen aller 'whitespaces', Fragezeichen, Aurufezeichen, Punkte, Bindestriche). Sonst wird wieder der alte Wert eingetragen. 425 426 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 427 @type ereignis: C{wx - Ereignisobjekt} 428 """ 429 430 431 # 432 # -- Das Texteingabefeld darf leer sein ------------------ 433 # -- Es wird die Leerzeichenkette hinzugefügt ------------------ 434 # 435 if( self.istLeer() ) : 436 437 # 438 # -- nichtmodifizierten Wert eintragen -------------------------- 439 # 440 if( zk.istLeer( self.wertNichtMod[0] ) ) : 441 self.nimmWert( wert = zk.LeerZk, clientData = self.clientData ) 442 else: 443 self.nimmWert( wert = self.wertNichtMod[0], clientData = self.clientData ) 444 445 446 # 447 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 448 # -- ausgewertet werden kann -------------------------- 449 # 450 ereignis.Skip( skip = True )
451 452 453 454 # 455 # ------------------------------------------------------------------------------------ 456 # -- Virtuelle Funktion zur Rückgabe der Zusatzinformationen ---------- 457 # ------------------------------------------------------------------------------------ 458 #
459 - def gibClientData( self ):
460 """ 461 Virtuelle Funktion zur Rückgabe der Zusatzinformationen C{clientData}. Diese Funktion muß in der abgeleiteten Klasse implementiert werden (overloading). 462 """ 463 464 return u"Muß in der abgeleiteten Klasse implementiert (überschrieben) werden."
465 466 467 468 # 469 # ------------------------------------------------------------------------------------ 470 # -- Virtuelle Funktion zur Rückgabe des Wertes -------------------------- 471 # ------------------------------------------------------------------------------------ 472 #
473 - def gibWert( self ):
474 """ 475 Virtuelle Funktion zur Rückgabe des Wertes. Diese Funktion muß in der abgeleiteten Klasse implementiert werden (overloading). 476 """ 477 478 return u"Muß in der abgeleiteten Klasse implementiert (überschrieben) werden."
479 480 481 482 # 483 # ------------------------------------------------------------------------------------ 484 # -- Der Inhalt des Texteingabefeldes ist leer -------------------------- 485 # ------------------------------------------------------------------------------------ 486 #
487 - def istLeer( self ):
488 """ 489 Der Inhalt des Texteingabeobjektes ist leer 490 """ 491 492 return zk.istLeer( self.gibWert() )
493 494 495 496 # 497 # ------------------------------------------------------------------------------------ 498 # -- aktuellen Wert übernehmen ------------------------------------------ 499 # ------------------------------------------------------------------------------------ 500 #
501 - def nimmWert( self, wert, clientData = None ):
502 """ 503 Virtuelle Funktion zur Rückgabe des Wertes. Diese Funktion muß in der abgeleiteten Klasse implementiert werden (overloading). 504 """ 505 506 return u"Muß in der abgeleiteten Klasse implementiert (überschrieben) werden."
507 508 509 510 511 # 512 # 513 # 514 # ---------------------------------------------------------------------------------------- 515 # ---------------------------------------------------------------------------------------- 516 # -- -------------------------------------------------- 517 # -- Allgemeines wx-Objekt mit Titel -------------------------------------------------- 518 # -- -------------------------------------------------- 519 # ---------------------------------------------------------------------------------------- 520 # ---------------------------------------------------------------------------------------- 521 #
522 -class FlexGridSizerWxObjTitel( wx.FlexGridSizer ):
523 """ 524 Klasse, die einem beliebigen wx-Objekt einen Titel zuordnet. 525 """ 526 527 # 528 # ------------------------------------------------------------------------------------ 529 # -- Initialisierungen -------------------------------------------------- 530 # ------------------------------------------------------------------------------------ 531 #
532 - def __init__( self, parent, wxObj, titel, orient ):
533 534 # 535 # -- Überschrift ---------------------------------------------------------- 536 # 537 self.wxText = wx.StaticText( parent, label = titel ) 538 """ 539 @cvar: Titel des C{wx-Objektes}. 540 @type: wxPython - wxText 541 """ 542 543 # 544 # -- wx-Objekt ---------------------------------------------------------- 545 # 546 self.wxObjekt = wxObj 547 """ 548 @cvar: Beliebiges C{wx-Objekt}, welchem der Titel zugeordnet wird. 549 @type: wxPython - wx-Objekt 550 """ 551 552 553 # 554 # -- Layout festlegen ------------------ 555 # 556 if( orient == wx.VERTICAL ) : 557 wx.FlexGridSizer.__init__( self, rows = 2, cols = 1, vgap = 5, hgap = 5 ) 558 559 self.AddGrowableCol( idx = 0, proportion = 1 ) 560 self.AddGrowableRow( idx = 1, proportion = 1 ) 561 else : 562 wx.FlexGridSizer.__init__( self, rows = 1, cols = 2, vgap = 5, hgap = 5 ) 563 564 self.AddGrowableCol( idx = 1, proportion = 1 ) 565 self.AddGrowableRow( idx = 0, proportion = 1 ) 566 567 # 568 # -- Zeilen/Spalten ---------------------------------------------------------- 569 # 570 self.Add( self.wxText, flag = wx.EXPAND ) 571 self.Add( self.wxObjekt, flag = wx.EXPAND )
572 573 574 575 # 576 # ------------------------------------------------------------------------------------ 577 # -- Titel und wxObjekt (de)aktivieren ---------------------------------- 578 # ------------------------------------------------------------------------------------ 579 #
580 - def Enable( self, enable = True ):
581 """ 582 Diese Methode implementiert die Standardfunktion C{Enable(...)} für diese Klasse. 583 """ 584 585 # 586 # -- Objekte (de)aktivieren -------------------------------------------------- 587 # 588 self.wxText.Enable( enable ) 589 self.wxObjekt.Enable( enable )
590 591 592 593 # 594 # 595 # 596 # ---------------------------------------------------------------------------------------- 597 # ---------------------------------------------------------------------------------------- 598 # -- ------------------------------------------ 599 # -- CheckBox mit einigen Ergänzungen ------------------------------------------ 600 # -- ------------------------------------------ 601 # ---------------------------------------------------------------------------------------- 602 # ---------------------------------------------------------------------------------------- 603 #
604 -class CheckBoxErg( wx.CheckBox, __Ergaenzung__ ):
605 """ 606 Klasse, die eine C{wx.CheckBox} mit weiteren Funktionen versieht. 607 """ 608 609 # 610 # ------------------------------------------------------------------------------------ 611 # -- Initialisierungen -------------------------------------------------- 612 # ------------------------------------------------------------------------------------ 613 #
614 - def __init__( self, parent, Statusleiste ):
615 wx.CheckBox.__init__( self, parent = parent ) 616 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste ) 617 618 # 619 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 620 # 621 self.SetName( name = "CheckBoxErg" ) 622 623 624 # 625 # -- Ereignisse behandeln -------------------------------------------------- 626 # 627 self.Bind( wx.EVT_CHECKBOX, self.__ereignisAenderung__, self ) 628 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ ) 629 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ )
630 631 632 633 # 634 # ------------------------------------------------------------------------------------ 635 # -- aktuellen Wert zurückgeben ------------------------------------------ 636 # ------------------------------------------------------------------------------------ 637 #
638 - def gibWert( self ):
639 """ 640 Mit Aufruf dieser Methode wird der Wert der C{CheckBox} zurückgegeben. 641 """ 642 643 # 644 # -- aktuellen Wert zurückgeben ------------------------------------------ 645 # 646 return self.GetValue()
647 648 649 650 # 651 # ------------------------------------------------------------------------------------ 652 # -- Alle Einträge löschen -------------------------------------------------- 653 # ------------------------------------------------------------------------------------ 654 #
655 - def loescheAlles( self ):
656 """ 657 Mit Aufruf dieser Methode wird C{wx.CheckBox.SetValue( False )} gesetzt, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt. 658 """ 659 660 661 # 662 # -- Alle Einträge löschen -------------------------------------------------- 663 # 664 self.istVomBenutzerGeaendert = False 665 self.istBenutzerAenderungJetzt = False 666 del self.wertNichtMod[:] 667 self.SetValue( False )
668 669 670 671 # 672 # ------------------------------------------------------------------------------------ 673 # -- aktuellen Wert übernehmen ------------------------------------------ 674 # ------------------------------------------------------------------------------------ 675 #
676 - def nimmWert( self, wert, clientData = None ):
677 """ 678 Mit Aufruf dieser Methode wird der Wert der C{CheckBox} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden 679 680 @param wert: Es ist der Wert der C{CheckBox} anzugeben. 681 @type wert: Boolescher Wert 682 683 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben. 684 @type clientData: beliebiges Objekt 685 """ 686 687 # 688 # -- aktuellen Wert übernehmen ------------------------------------------ 689 # 690 self.wertNichtMod.insert( 0, wert ) 691 self.SetValue( wert ) 692 self.clientData = clientData 693 694 695 # 696 # -- Der Wert wurde vom Benutzer nicht verändert -------------------------- 697 # 698 self.istVomBenutzerGeaendert = False 699 self.istBenutzerAenderungJetzt = False
700 701 702 703 # 704 # 705 # 706 # ---------------------------------------------------------------------------------------- 707 # ---------------------------------------------------------------------------------------- 708 # -- ------------------------------------------ 709 # -- ComboBox mit einigen Ergänzungen ------------------------------------------ 710 # -- ------------------------------------------ 711 # ---------------------------------------------------------------------------------------- 712 # ---------------------------------------------------------------------------------------- 713 #
714 -class ComboBoxErg( wx.ComboBox, __Ergaenzung__ ):
715 """ 716 Klasse, die eine C{wx.ComboBox} mit weiteren Funktionen versieht. 717 """ 718 719 # 720 # ------------------------------------------------------------------------------------ 721 # -- Initialisierungen -------------------------------------------------- 722 # ------------------------------------------------------------------------------------ 723 #
724 - def __init__( self, parent, choices, style, Statusleiste ):
725 wx.ComboBox.__init__( self, parent = parent, choices = choices, style = style ) 726 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste ) 727 728 # 729 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 730 # 731 self.SetName( name = "ComboBoxErg" ) 732 733 734 # 735 # -- Proportionalschrift setzen ------------------------------------------ 736 # 737 self.SetFont( font = wx.Font( pointSize = self.GetFont().GetPointSize() 738 , family = wx.FONTFAMILY_TELETYPE 739 , style = wx.FONTSTYLE_NORMAL 740 , weight = wx.FONTWEIGHT_NORMAL ) ) 741 742 743 # 744 # -- Ereignisse behandeln -------------------------------------------------- 745 # 746 self.Bind( wx.EVT_COMBOBOX, self.__ereignisAenderung__, self ) 747 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ ) 748 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ ) 749 750 self.Bind( wx.EVT_CONTEXT_MENU, self.__ereignisKMenueNicht__ )
751 752 753 754 # 755 # ------------------------------------------------------------------------------------ 756 # -- Alle Einträge löschen -------------------------------------------------- 757 # ------------------------------------------------------------------------------------ 758 #
759 - def loescheAlles( self ):
760 """ 761 Mit Aufruf dieser Methode werden alle Einträge aus der C{wx.ComboBox} gelöscht, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt. 762 """ 763 764 765 # 766 # -- Alle Einträge löschen -------------------------------------------------- 767 # 768 del self.clientData[:] 769 self.istVomBenutzerGeaendert = False 770 self.istBenutzerAenderungJetzt = False 771 del self.wertNichtMod[:] 772 self.Clear()
773 774 775 776 777 # 778 # ------------------------------------------------------------------------------------ 779 # -- aktuellen Wert übernehmen ------------------------------------------ 780 # ------------------------------------------------------------------------------------ 781 #
782 - def nimmWert( self, wert, clientData = None ):
783 """ 784 Mit Aufruf dieser Methode wird der Wert der C{ComboBox} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden 785 786 @param wert: Es ist der Wert der C{ComboBox} anzugeben. 787 @type wert: Zeichenkette 788 789 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben. 790 @type clientData: beliebiges Objekt 791 """ 792 793 # 794 # -- aktuellen Wert übernehmen ------------------------------------------ 795 # 796 self.wertNichtMod.append( wert ) 797 self.Append( wert, clientData ) 798 799 800 # 801 # -- Der Wert wurde vom Benutzer nicht verändert -------------------------- 802 # 803 self.istVomBenutzerGeaendert = False 804 self.istBenutzerAenderungJetzt = False
805 806 807 808 # 809 # ------------------------------------------------------------------------------------ 810 # -- Virtuelle Funktion zur Rückgabe der Zusatzinformationen ---------- 811 # ------------------------------------------------------------------------------------ 812 #
813 - def gibClientData( self, selection = None, lfdNr = 0 ):
814 """ 815 Mit Aufruf dieser Methode werden die Zusatzinformationen zum aktuell ausgewählten Eintrag der C{ComboBox} zurückgegeben. 816 817 818 @param selection: Es ist die Identifikationsnummer des Eintrages der C{ComboBox} anzugeben, zu dem die Zusatzinformationen ausgegeben werden sollen. Wird C{None} angegeben oder der Wert weggelassen, wird der aktuell gewählte Eintrag verwendet. 819 @type selection: 820 821 @param lfdNr: Sollten mehrere Werte in C{self.clientData} enthalten sein, ist die laufende Nummer des zurückzugebenden Wertes anzugeben. Wird der Wert weggelassen, wird C{0} verwendet. 822 @type lfdNr: Gazzahl 823 """ 824 825 # 826 # -- Zusatzinformationen zurückgeben ------------------------------------------ 827 # 828 if( selection == None ) : return self.GetClientData( self.GetSelection() )[lfdNr] 829 else : return self.GetClientData( selection )[lfdNr]
830 831 832 833 # 834 # ------------------------------------------------------------------------------------ 835 # -- aktuellen Wert zurückgeben ------------------------------------------ 836 # ------------------------------------------------------------------------------------ 837 #
838 - def gibWert( self ):
839 """ 840 Mit Aufruf dieser Methode wird der Wert der C{ComboBox} zurückgegeben. 841 """ 842 843 # 844 # -- aktuellen Wert zurückgeben ------------------------------------------ 845 # 846 return self.GetValue()
847 848 849 850 # 851 # ------------------------------------------------------------------------------------ 852 # -- Eintrag auswählen anhand des Wertes in clientData[0] ------------------ 853 # ------------------------------------------------------------------------------------ 854 #
855 - def selektiereWert( self, clientDataId ):
856 """ 857 Mit Aufruf dieser Methode wird der Wert der in C{ComboBox} selektiert, dem C{clientDataId} in C{clientData} zugeordnet ist . 858 859 860 @param clientDataId: Es ist die Identifikationsnummer in C{clientData} des Eintrages der C{ComboBox} anzugeben, der ausgewählt werden soll. 861 @type clientDataId: beliebig (meist Ganzzahl) 862 863 @return: C{True} wenn der Wert selektiert werden konnte; sonst C{False}. 864 @rtype: Boolean 865 """ 866 867 # 868 # -- gewünschten Wert markieren ------------------------------------------ 869 # 870 for i in range( self.GetCount() ) : 871 872 self.SetSelection( i ) 873 874 if ( self.gibClientData( selection = i, lfdNr = 0 ) == clientDataId ) : 875 876 return True 877 878 879 # 880 # -- Wert wurde nicht gefunden ------------------------------------------ 881 # 882 self.SetSelection( 0 ) 883 return False
884 885 886 887 888 # 889 # 890 # 891 # ---------------------------------------------------------------------------------------- 892 # ---------------------------------------------------------------------------------------- 893 # -- ------------------------------------------ 894 # -- Dialog mit einigen Ergänzungen ------------------------------------------ 895 # -- ------------------------------------------ 896 # ---------------------------------------------------------------------------------------- 897 # ---------------------------------------------------------------------------------------- 898 #
899 -class DialogErg( wx.Dialog ):
900 """ 901 Klasse, die eine C{wx.Dialog} mit weiteren Funktionen versieht. 902 """ 903 904 # 905 # ------------------------------------------------------------------------------------ 906 # -- Initialisierungen -------------------------------------------------- 907 # ------------------------------------------------------------------------------------ 908 #
909 - def __init__( self, parent, title, dbVerbindung, size = ( -1, -1 ), style = wx.RESIZE_BORDER ):
910 wx.Dialog.__init__( self, parent = parent, title = title, size = size, style = style ) 911 912 # 913 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 914 # 915 self.SetName( name = "DialogErg" ) 916 917 918 # 919 # -- Änderungen erkennen -------------------------------------------------- 920 # 921 self.istAenderung = False 922 923 924 # 925 # -- SAFEPOINT behandeln -------------------------------------------------- 926 # 927 self.dbVerbindung = dbVerbindung 928 self.nameSafepoint = 'DialogErg' + str( self.GetId() ).replace( "-", "_" ) 929 self.__safepointSetzen__() 930 931 # 932 # -- Button 'Änderungen verwerfen' ------------------------------------------ 933 # 934 self.Button__Verwerfen = wx.Button( parent = self, label = u" Änderungen verwerfen " ) 935 self.Button__Verwerfen.SetMinSize( ( 200, 30 ) ) 936 self.Button__Verwerfen.SetMaxSize( ( 200, 30 ) ) 937 self.Button__Verwerfen.Enable( False ) 938 939 # 940 # -- Button 'Änderungen übernehmen' ------------------------------------------ 941 # 942 self.Button__Sichern = wx.Button( parent = self, label = u" Speichere Änderungen" ) 943 self.Button__Sichern.SetMinSize( ( 200, 30 ) ) 944 self.Button__Sichern.SetMaxSize( ( 200, 30 ) ) 945 self.Button__Sichern.Enable( False ) 946 947 # 948 # -- Button 'Fenster schließen' ------------------------------------------ 949 # 950 self.Button__FensterSchliessen = wx.Button( parent = self 951 , label = u" Fenster schließen " ) 952 self.Button__FensterSchliessen.SetMinSize( ( 150, 30 ) ) 953 self.Button__FensterSchliessen.SetMaxSize( ( 150, 30 ) ) 954 self.Button__FensterSchliessen.SetDefault() 955 self.Button__FensterSchliessen.SetFocus() 956 957 # 958 # -- Layout festlegen (1. Teil) ------------------------------------------ 959 # 960 self.FlexGridSizerButton = wx.FlexGridSizer( rows = 1, cols = 4, vgap = 0, hgap = 5 ) 961 self.FlexGridSizerButton.AddGrowableCol( idx = 0, proportion = 1 ) 962 self.FlexGridSizerButton.AddGrowableRow( idx = 0, proportion = 1 ) 963 964 965 self.FlexGridSizerButton.AddStretchSpacer() 966 self.FlexGridSizerButton.Add( self.Button__Verwerfen, flag = wx.EXPAND ) 967 self.FlexGridSizerButton.Add( self.Button__Sichern, flag = wx.EXPAND ) 968 self.FlexGridSizerButton.Add( self.Button__FensterSchliessen, flag = wx.EXPAND ) 969 970 971 self.FlexGridSizer = wx.FlexGridSizer( rows = 2, cols = 1, vgap = 5, hgap = 0 ) 972 973 self.FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 974 self.FlexGridSizer.AddGrowableRow( idx = 0, proportion = 1 ) 975 976 977 # 978 # -- Ereignisse behandeln -------------------------------------------------- 979 # 980 self.Bind( wx.EVT_BUTTON, self.__ereignisVerwerfen__, self.Button__Verwerfen ) 981 self.Bind( wx.EVT_BUTTON, self.__ereignisSpeichern__, self.Button__Sichern ) 982 self.Bind( wx.EVT_BUTTON, self.__ereignisSchliessen__, self.Button__FensterSchliessen ) 983 984 985 # 986 # -- Dialog auf dem Bildschirm zentrieren ---------------------------------- 987 # 988 self.Centre()
989 990 991 992 # 993 # ------------------------------------------------------------------------------------ 994 # -- Änderungen behandeln -------------------------------------------------- 995 # ------------------------------------------------------------------------------------ 996 #
997 - def __ereignisAenderung__( self, ereignis = None ):
998 """ 999 Methode die aufgerufen wird, wenn Werte geändert wurden. 1000 1001 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1002 @type ereignis: C{wx - Ereignisobjekt} 1003 """ 1004 1005 # 1006 # -- Buttton 'Anderungen speichern' aktivieren, -------------------------- 1007 # -- Buttton 'Anderungen verwerfen' aktivieren -------------------------- 1008 # 1009 self.Button__Verwerfen.Enable( True ) 1010 self.Button__Sichern.Enable( True ) 1011 1012 1013 # 1014 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 1015 # -- ausgewertet werden kann -------------------------- 1016 # 1017 ereignis.Skip( skip = True )
1018 1019 1020 1021 # 1022 # ------------------------------------------------------------------------------------ 1023 # -- Eingabeformular schließen; Änderungen verwerfen ---------------------------------- 1024 # ------------------------------------------------------------------------------------ 1025 #
1026 - def __ereignisSchliessen__( self, ereignis ):
1027 """ 1028 Methode die aufgerufen wird, wenn das Meldungsfenster geschlossen werden soll (sie überschreibt die Standardmethode) 1029 1030 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1031 @type ereignis: C{wx - Ereignisobjekt} 1032 """ 1033 1034 # 1035 # -- Es liegen nichtgespeicherte Daten vor ---------------------------------- 1036 # 1037 if( self.Button__Verwerfen.IsEnabled() or self.Button__Sichern.IsEnabled() ) : 1038 1039 # 1040 # -- Meldung ausgeben ------------------------------------------ 1041 # 1042 dlg = wx.MessageDialog( parent = self 1043 , message = u"Die Änderungen wurden nicht gesichert. Soll das Fenster trotzdem geschlossen werden ?\n\nDie Änderungen werden dann verworfen." 1044 , caption = u"Änderungen verwerfen ?" 1045 , style = wx.YES_NO | wx.ICON_QUESTION ) 1046 1047 1048 # 1049 # -- Meldungsfenster nicht schließen ---------------------------------- 1050 # 1051 if ( dlg.ShowModal() != wx.ID_YES ): 1052 1053 # 1054 # -- Das Ereignis weiterreichen, damit es weiter ------------------ 1055 # -- ausgewertet werden kann ------------------ 1056 # 1057 ereignis.Skip( skip = True ) 1058 return 1059 1060 1061 # 1062 # -- Alle Änderungen bis zum letzten SAFEPOINT verwerfen ------------------ 1063 # 1064 self.__safepointVerwerfen__() 1065 1066 1067 # 1068 # -- Meldungsfenster schließen ------------------------------------------ 1069 # 1070 self.EndModal( retCode = 0 ) 1071 1072 1073 # 1074 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 1075 # -- ausgewertet werden kann -------------------------- 1076 # 1077 ereignis.Skip( skip = True )
1078 1079 1080 1081 # 1082 # ------------------------------------------------------------------------------------ 1083 # -- Änderungen Speichern -------------------------------------------------- 1084 # ------------------------------------------------------------------------------------ 1085 #
1086 - def __ereignisSpeichern__( self, ereignisDummy = None ):
1087 """ 1088 Methode die aufgerufen wird, wenn die Änderungen gespeichert werden sollen. 1089 1090 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 1091 @type ereignisDummy: C{wx - Ereignisobjekt} 1092 """ 1093 1094 # 1095 # -- Änderungen werden gespeichert ------------------------------------------ 1096 # 1097 self.istAenderung = True; 1098 1099 1100 # 1101 # -- Spezielle, in der abgeleiteten Klasse implementierte Aktionen ---------- 1102 # -- ausführen ---------- 1103 # 1104 self.__spezAktionenSpeichern__() 1105 1106 1107 # 1108 # -- Änderungen bis zum SAFEPOINT speichern ---------------------------------- 1109 # 1110 self.__safepointSpeichern__() 1111 1112 1113 # 1114 # -- Postgres-SAFEPOINT setzen, damit die nächsten Änderungen in ---------- 1115 # -- 'Anmerkungen' zurückgesetzt werden können ---------- 1116 # 1117 self.__safepointSetzen__() 1118 1119 1120 # 1121 # -- Änderungsstatus der Eingabeobjekte des abgeleiteten Objektes ---------- 1122 # -- zurücksetzen ---------- 1123 # 1124 self.__spezAktionenAenderungsstatusZuruecksetzen__() 1125 1126 1127 # 1128 # -- Button 'Änderungen verwerfen' / 'Änderungen sichern' deaktivieren -- 1129 # 1130 self.Button__Verwerfen.Enable( False ) 1131 self.Button__Sichern.Enable( False )
1132 1133 1134 1135 # 1136 # ------------------------------------------------------------------------------------ 1137 # -- Alle Änderungen verwerfen ------------------------------------------ 1138 # ------------------------------------------------------------------------------------ 1139 #
1140 - def __ereignisVerwerfen__( self, ereignisDummy = None ):
1141 """ 1142 Methode die aufgerufen wird, wenn alle Änderungen verworfen werden sollen.. 1143 1144 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 1145 @type ereignisDummy: C{wx - Ereignisobjekt} 1146 """ 1147 1148 # 1149 # -- Alle Änderungen bis zum letzten SAFEPOINT verwerfen ------------------ 1150 # 1151 self.__safepointVerwerfen__() 1152 1153 1154 # 1155 # -- Postgres-SAFEPOINT setzen, damit die nächsten Änderungen in ---------- 1156 # -- 'Anmerkungen' zurückgesetzt werden können ---------- 1157 # 1158 self.__safepointSetzen__() 1159 1160 1161 # 1162 # -- Spezielle, in der abgeleiteten Klasse implementierte Aktionen ---------- 1163 # -- ausführen ---------- 1164 # 1165 self.__spezAktionenVerwerfen__() 1166 1167 1168 # 1169 # -- Änderungsstatus der Eingabeobjekte des abgeleiteten Objektes ---------- 1170 # -- zurücksetzen ---------- 1171 # 1172 self.__spezAktionenAenderungsstatusZuruecksetzen__() 1173 1174 1175 # 1176 # -- Button 'Änderungen verwerfen' / 'Änderungen sichern' deaktivieren -- 1177 # 1178 self.Button__Verwerfen.Enable( False ) 1179 self.Button__Sichern.Enable( False )
1180 1181 1182 1183 # 1184 # ------------------------------------------------------------------------------------ 1185 # -- Safepoint setzen -------------------------------------------------- 1186 # ------------------------------------------------------------------------------------ 1187 #
1188 - def __safepointSetzen__( self ):
1189 """ 1190 Neuen PostgreSQL-SAFEPOINT setzen. 1191 """ 1192 1193 self.dbVerbindung.setzeSafepoint( self.nameSafepoint )
1194 1195 1196 1197 1198 # 1199 # ------------------------------------------------------------------------------------ 1200 # -- Änderungen bis zum aktuellen Safepoint speichern ------------------ 1201 # ------------------------------------------------------------------------------------ 1202 #
1203 - def __safepointSpeichern__( self ):
1204 """ 1205 Die Änderungen bis zum aktuellen PostgreSQL-SAFEPOINT speichern. 1206 """ 1207 1208 self.dbVerbindung.nimmAenderungenSafepoint( self.nameSafepoint )
1209 1210 1211 1212 # 1213 # ------------------------------------------------------------------------------------ 1214 # -- Änderungen bis zum aktuellen Safepoint verwerfen ------------------ 1215 # ------------------------------------------------------------------------------------ 1216 #
1217 - def __safepointVerwerfen__( self ):
1218 """ 1219 Die Änderungen bis zum aktuellen PostgreSQL-SAFEPOINT verwerfen. 1220 """ 1221 1222 self.dbVerbindung.verwerfeAenderungenSafepoint( self.nameSafepoint )
1223 1224 1225 1226 # 1227 # ------------------------------------------------------------------------------------ 1228 # -- Änderungsstatus der Eingabeobjekte des abgeleiteten Objektes ---------- 1229 # -- zurücksetzen ---------- 1230 # ------------------------------------------------------------------------------------ 1231 #
1233 """ 1234 Methode die von der abgeleiteten Klasse überschrieben werden kann, um den Änderungsstatus der Eingabeobjekte zurückzusetzen. 1235 """ 1236 1237 # 1238 # -- Erstmal keine Aktionen -------------------------------------------------- 1239 # 1240 None
1241 1242 1243 1244 # 1245 # ------------------------------------------------------------------------------------ 1246 # -- Besondere Aktivitäten des abgeleiteten Objektes beim schließen ---------- 1247 # ------------------------------------------------------------------------------------ 1248 #
1249 - def __spezAktionenSpeichern__( self ):
1250 """ 1251 Methode die von der abgeleiteten Klasse überschrieben werden kann, um spezifische Aktionen beim Speichern der Änderungen auszuführen. 1252 """ 1253 1254 # 1255 # -- Erstmal keine Aktionen -------------------------------------------------- 1256 # 1257 None
1258 1259 1260 1261 # 1262 # ------------------------------------------------------------------------------------ 1263 # -- Besondere Aktivitäten des abgeleiteten Objektes beim schließen ---------- 1264 # ------------------------------------------------------------------------------------ 1265 #
1266 - def __spezAktionenVerwerfen__( self ):
1267 """ 1268 Methode die von der abgeleiteten Klasse überschrieben werden kann, um spezifische Aktionen beim Verwerfen der Änderungen auszuführen. 1269 """ 1270 1271 # 1272 # -- Erstmal keine Aktionen -------------------------------------------------- 1273 # 1274 None
1275 1276 1277 1278 1279 # 1280 # ------------------------------------------------------------------------------------ 1281 # -- Änderungen liegen vor -------------------------------------------------- 1282 # ------------------------------------------------------------------------------------ 1283 #
1284 - def gibAenderung( self ):
1285 """ 1286 Es wird der Änderungszustand zurückgegeben. 1287 1288 @return: Es wird C{True} zurückgegeben, wenn Änderungen vorliegen; andernfalls C{False}. 1289 @rtype: Boolean 1290 """ 1291 1292 return self.istAenderung
1293 1294 1295 1296 # 1297 # ------------------------------------------------------------------------------------ 1298 # -- die frei definierbaren Elemente des Dialogs hinzufügen ------------------ 1299 # ------------------------------------------------------------------------------------ 1300 #
1301 - def nimmDialogElemente( self, elemente ):
1302 """ 1303 Diese Methode fügt dem Dialog die frei definierbaren Elemente hinzu. 1304 """ 1305 1306 # 1307 # -- Layout festlegen (2. Teil) ------------------------------------------ 1308 # 1309 self.FlexGridSizer.Add( elemente 1310 , flag = wx.LEFT|wx.TOP|wx.RIGHT|wx.EXPAND 1311 , border = 10 ) 1312 self.FlexGridSizer.Add( self.FlexGridSizerButton 1313 , flag = wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND 1314 , border = 10 ) 1315 1316 self.SetSizerAndFit( self.FlexGridSizer )
1317 1318 1319 1320 1321 1322 1323 # 1324 # ---------------------------------------------------------------------------------------- 1325 # ---------------------------------------------------------------------------------------- 1326 # -- ------------------------------------------ 1327 # -- ListBox mit einigen Ergänzungen ------------------------------------------ 1328 # -- ------------------------------------------ 1329 # ---------------------------------------------------------------------------------------- 1330 # ---------------------------------------------------------------------------------------- 1331 #
1332 -class ListBoxErg( wx.ListBox, __Ergaenzung__ ):
1333 """ 1334 Klasse, die eine C{wx.ListBox} mit weiteren Funktionen versieht. 1335 """ 1336 1337 # 1338 # ------------------------------------------------------------------------------------ 1339 # -- Initialisierungen -------------------------------------------------- 1340 # ------------------------------------------------------------------------------------ 1341 #
1342 - def __init__( self, parent, size, style, Statusleiste ):
1343 wx.ListBox.__init__( self, parent = parent, size = size, style = style ) 1344 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste ) 1345 1346 # 1347 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 1348 # 1349 self.SetName( name = "ListBoxErg" ) 1350 1351 1352 # 1353 # -- Proportionalschrift setzen ------------------------------------------ 1354 # 1355 self.SetFont( font = wx.Font( pointSize = self.GetFont().GetPointSize() 1356 , family = wx.FONTFAMILY_TELETYPE 1357 , style = wx.FONTSTYLE_NORMAL 1358 , weight = wx.FONTWEIGHT_NORMAL ) ) 1359 1360 # 1361 # -- Ereignisse behandeln -------------------------------------------------- 1362 # 1363 self.Bind( wx.EVT_LISTBOX_DCLICK, self.__ereignisAenderung__, self ) 1364 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ ) 1365 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ )
1366 1367 1368 # 1369 # ------------------------------------------------------------------------------------ 1370 # -- ClientData des Eintrages mit der lfdNr zurückgegeben ------------------ 1371 # ------------------------------------------------------------------------------------ 1372 #
1373 - def gibClientData( self, lfdNr = None ):
1374 """ 1375 Mit Aufruf dieser Methode wird C{ClientData} des Eintrages mit der C{lfdNr} zurückgegeben. Wenn C{lfdNr == None} werden alle Einträge zurückgegeben. 1376 1377 @param lfdNr: Es ist die lfd. Nummer des Eintrages anzugeben, dessen C{wx.ClientData} zurückgegeben werden soll. Wird C{None} angegeben, werden alle C{wx.ClientData} zurückgegeben. 1378 @type lfdNr: Ganzzahl 1379 1380 @return: C{wx.ClientData} zur C{lfdNr} 1381 @rtype: Listenobjekt 1382 """ 1383 1384 # 1385 # -- keine Einträge vorhanden ------------------------------------------ 1386 # 1387 if( self.IsEmpty() ) : return None 1388 1389 1390 # 1391 # -- clientData zurückgeben -------------------------------------------------- 1392 # 1393 if( lfdNr == None ) : 1394 clientDataTmp = [] 1395 1396 for i in range( self.GetCount() ): 1397 clientDataTmp.append( self.GetClientData( i )[0] ) 1398 1399 return clientDataTmp 1400 1401 else : 1402 return self.GetClientData( lfdNr )
1403 1404 1405 1406 # 1407 # ------------------------------------------------------------------------------------ 1408 # -- aktuellen Wert zurückgeben ------------------------------------------ 1409 # ------------------------------------------------------------------------------------ 1410 #
1411 - def gibWert( self, lfdNr = None ):
1412 """ 1413 Mit Aufruf dieser Methode wird der Wert des Eintrages mit der C{lfdNr} zurückgegeben. 1414 1415 @param lfdNr: Es ist die lfd. Nummer des Eintrages anzugeben, dessen Wert zurückgegeben werden soll. Wird C{None} angegeben, wird der Wert des aktuell ausgewählten Eintrages zurückgegeben. 1416 @type lfdNr: Ganzzahl 1417 1418 @return: Wert zur C{lfdNr} 1419 @rtype: Zeichenkette 1420 """ 1421 1422 # 1423 # -- aktuellen Wert zurückgeben ------------------------------------------ 1424 # 1425 if( lfdNr != None ) : self.SetSelection( lfdNr ) 1426 return self.GetStringSelection()
1427 1428 1429 1430 # 1431 # ------------------------------------------------------------------------------------ 1432 # -- Alle Einträge löschen -------------------------------------------------- 1433 # ------------------------------------------------------------------------------------ 1434 #
1435 - def loescheAlles( self ):
1436 """ 1437 Mit Aufruf dieser Methode werden alle Einträge aus der C{wx.ListBox} gelöscht, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt. 1438 """ 1439 1440 1441 # 1442 # -- Alle Einträge löschen -------------------------------------------------- 1443 # 1444 del self.clientData[:] 1445 self.istVomBenutzerGeaendert = False 1446 self.istBenutzerAenderungJetzt = False 1447 del self.wertNichtMod[:] 1448 self.Clear()
1449 1450 1451 1452 1453 # 1454 # ------------------------------------------------------------------------------------ 1455 # -- aktuellen Wert übernehmen ------------------------------------------ 1456 # ------------------------------------------------------------------------------------ 1457 #
1458 - def nimmWert( self, wert, clientData = None ):
1459 """ 1460 Mit Aufruf dieser Methode wird der Wert der C{ListBox} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden 1461 1462 @param wert: Es ist der Wert der C{ListBox} anzugeben. 1463 @type wert: Zeichenkette 1464 1465 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben. 1466 @type clientData: beliebiges Objekt 1467 """ 1468 1469 # 1470 # -- aktuellen Wert übernehmen ------------------------------------------ 1471 # 1472 self.wertNichtMod.append( wert.replace( "\n", "\n\t" ) ) 1473 self.Append( wert.replace( "\n", "\n\t" ), clientData ) 1474 1475 1476 # 1477 # -- Der Wert wurde vom Benutzer nicht verändert -------------------------- 1478 # 1479 self.istVomBenutzerGeaendert = False 1480 self.istBenutzerAenderungJetzt = False
1481 1482 1483 1484 # 1485 # ------------------------------------------------------------------------------------ 1486 # -- Eintrag auswählen anhand des Wertes in clienrData[0] ------------------ 1487 # ------------------------------------------------------------------------------------ 1488 #
1489 - def selektiereWert( self, clientDataId ):
1490 """ 1491 Mit Aufruf dieser Methode wird der Wert der in C{ListBoxErg} selektiert, dem C{clientDataId} in C{clientData} zugeordnet ist . 1492 1493 1494 @param clientDataId: Es ist die Identifikationsnummer in C{clientData} des Eintrages der C{ListBoxErg} anzugeben, der ausgewählt werden soll. 1495 @type clientDataId: beliebig (meist Ganzzahl) 1496 1497 @return: C{True} wenn der Wert selektiert werden konnte; sonst C{False}. 1498 @rtype: Boolean 1499 """ 1500 1501 # 1502 # -- gewünschten Wert markieren ------------------------------------------ 1503 # 1504 for i in range( self.GetCount() ) : 1505 1506 self.SetSelection( i ) 1507 1508 if ( self.gibClientData( lfdNr = i )[0] == clientDataId ) : 1509 1510 return True 1511 1512 1513 # 1514 # -- Wert wurde nicht gefunden ------------------------------------------ 1515 # 1516 self.SetSelection( 0 ) 1517 return False
1518 1519 1520 1521 1522 # 1523 # 1524 # 1525 # ---------------------------------------------------------------------------------------- 1526 # ---------------------------------------------------------------------------------------- 1527 # -- ------------------ 1528 # -- >ListBox< im >SplitterWindow< mit Titel, bei der im rechten ------------------ 1529 # -- Fenster eine Werteliste bereitgestellt wird ------------------ 1530 # -- ------------------ 1531 # ---------------------------------------------------------------------------------------- 1532 # ---------------------------------------------------------------------------------------- 1533 #
1534 -class ListBoxSpWTitelAL( wx.Panel ):
1535 1536 """ 1537 Klasse, die zwei C{ListBox} in einem C{SplitterWindow} darstellt, um aus einer Liste von Vorgabewerten auszuwählen. Weiterhin wird ein Titel zugeordnet. 1538 Wird ein Doppelklick auf einem Eintrag in einer der beiden C{ListBox} ausgeführt, so wird er in die andere C{ListBox} verschoben. 1539 """ 1540 1541 # 1542 # ------------------------------------------------------------------------------------ 1543 # -- Initialisierungen -------------------------------------------------- 1544 # ------------------------------------------------------------------------------------ 1545 #
1546 - def __init__( self, parent, titel, minSize, orient, Statusleiste, styleLBli = wx.BORDER_SUNKEN | wx.LB_SORT, styleLBre = wx.BORDER_SUNKEN | wx.LB_SORT ):
1547 wx.Panel.__init__( self, parent ) 1548 1549 # 1550 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 1551 # 1552 self.SetName( name = "ListBoxSpWTitelAL" ) 1553 1554 1555 self.SplitterWindow = wx.SplitterWindow( self, -1, style = wx.SP_LIVE_UPDATE ) 1556 self.SplitterWindow.SetMinimumPaneSize( 20 ) 1557 1558 1559 # 1560 # -- linkes / rechtes Fenster ------------------------------------------ 1561 # 1562 self.ListBox__li = ListBoxErg( self.SplitterWindow 1563 , size = ( -1, -1 ) 1564 , style = styleLBli 1565 , Statusleiste = Statusleiste ) 1566 self.ListBox__re = ListBoxErg( self.SplitterWindow 1567 , size = ( -1, -1 ) 1568 , style = styleLBre 1569 , Statusleiste = Statusleiste ) 1570 1571 1572 # 1573 # -- Fenster anordnen -------------------------------------------------- 1574 # 1575 self.SplitterWindow.SplitVertically( self.ListBox__li 1576 , self.ListBox__re 1577 , -100 ) 1578 1579 self.FlexGridSizerWxObjTitel = FlexGridSizerWxObjTitel( parent = self 1580 , wxObj = self.SplitterWindow 1581 , titel = titel 1582 , orient = orient ) 1583 1584 self.FlexGridSizerWxObjTitel.wxObjekt.SetMinSize( minSize ) 1585 1586 BoxSizer = wx.BoxSizer( wx.VERTICAL ) 1587 BoxSizer.Add( self.FlexGridSizerWxObjTitel 1588 , proportion = 1 1589 , flag = wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL 1590 , border = 0 ) 1591 self.SetSizerAndFit( BoxSizer ) 1592 1593 1594 # 1595 # -- linke Auswahlliste darf nicht leer sein ---------------------------------- 1596 # 1597 self.ListBoxLiDarfLeerSein = True 1598 1599 1600 # 1601 # -- Tooltip li/re setzen -------------------------------------------------- 1602 # 1603 self.ListBox__li.SetToolTip(wx.ToolTip( u"Doppelklick:\nEintrag in das Nachbarfenster schieben" )) 1604 self.ListBox__re.SetToolTip(wx.ToolTip( u"Doppelklick:\nEintrag in das Nachbarfenster schieben" )) 1605 1606 1607 # 1608 # -- Auswahlliste: Projektübergreifend gültigen Wert zeigen ist sinnlos -- 1609 # 1610 self.ListBox__re.markiereWertProjUeb = False 1611 1612 1613 # 1614 # -- Hintergrundfarbe re setzen ------------------------------------------ 1615 # 1616 self.ListBox__re.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 1617 1618 1619 # 1620 # -- Ereignisse behandeln -------------------------------------------------- 1621 # 1622 self.Bind( wx.EVT_LISTBOX_DCLICK, self.__ereignisSchieben__, self.ListBox__li ) 1623 self.Bind( wx.EVT_LISTBOX_DCLICK, self.__ereignisSchieben__, self.ListBox__re )
1624 1625 1626 1627 # 1628 # ------------------------------------------------------------------------------------ 1629 # -- Eintrag verschieben -------------------------------------------------- 1630 # ------------------------------------------------------------------------------------ 1631 #
1632 - def __ereignisSchieben__( self, ereignis = None ):
1633 """ 1634 Methode die aufgerufen wird, wenn der aktuelle Eintrag in das andere Fenster verschoben werden soll. 1635 1636 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1637 @type ereignis: C{wx - Ereignisobjekt} 1638 """ 1639 1640 1641 # 1642 # -- Änderung kennzeichnen -------------------------------------------------- 1643 # 1644 self.ListBox__li.istVomBenutzerGeaendert = True 1645 self.ListBox__re.istVomBenutzerGeaendert = True 1646 1647 1648 # 1649 # -- Eintrag nach links verschieben ------------------------------------------ 1650 # 1651 if ereignis.GetId() == self.ListBox__re.GetId(): 1652 self.schiebeLinks( ereignis.GetClientData()[0] ) 1653 1654 1655 # 1656 # -- Eintrag nach rechts verschieben ------------------------------------------ 1657 # 1658 if( ereignis.GetId() == self.ListBox__li.GetId() ): 1659 if( self.ListBox__li.GetCount() > 1 1660 or ( self.ListBox__li.GetCount() == 1 and self.ListBoxLiDarfLeerSein ) ) : 1661 self.schiebeRechts( ereignis.GetClientData()[0] )
1662 1663 1664 1665 # 1666 # ------------------------------------------------------------------------------------ 1667 # -- Titel und wxObjekt (de)aktivieren ---------------------------------- 1668 # ------------------------------------------------------------------------------------ 1669 #
1670 - def Enable( self, enable = True ):
1671 """ 1672 Diese Methode implementiert die Standardfunktion C{Enable(...)} für diese Klasse. 1673 """ 1674 1675 # 1676 # -- Objekte (de)aktivieren -------------------------------------------------- 1677 # 1678 self.FlexGridSizerWxObjTitel.Enable( enable )
1679 1680 1681 1682 # 1683 # ------------------------------------------------------------------------------------ 1684 # -- Alle Einträge nach links schieben ---------------------------------- 1685 # ------------------------------------------------------------------------------------ 1686 # 1719 1720 1721 1722 # 1723 # ------------------------------------------------------------------------------------ 1724 # -- Alle Einträge nach rechts schieben ---------------------------------- 1725 # ------------------------------------------------------------------------------------ 1726 #
1727 - def schiebeAlleRechts( self ):
1728 """ 1729 Mit Aufruf dieser Methode werden alle Einträge des linken Fensters C{ListBox__li} in das rechte Fenster C{ListBox__re} verschoben und C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt. 1730 """ 1731 1732 1733 # 1734 # -- Historie zurücksetzen -------------------------------------------------- 1735 # 1736 self.ListBox__li.istVomBenutzerGeaendert = False 1737 self.ListBox__re.istVomBenutzerGeaendert = False 1738 1739 1740 # 1741 # -- die Routine verlassen, wenn das rechte Fenster leer ist ------------------ 1742 # 1743 if self.ListBox__li.IsEmpty(): 1744 return 1745 1746 1747 # 1748 # -- alle Einträge nach rechts schieben ---------------------------------- 1749 # 1750 for i in range( self.ListBox__li.GetCount() ) : 1751 self.ListBox__re.Append( self.ListBox__li.GetString( i ) 1752 , self.ListBox__li.GetClientData( i ) ) 1753 1754 1755 # 1756 # -- >ListBox__li< leeren -------------------------------------------------- 1757 # 1758 self.ListBox__li.Clear()
1759 1760 1761 1762 # 1763 # ------------------------------------------------------------------------------------ 1764 # -- Eintrag nach links schieben ------------------------------------------ 1765 # ------------------------------------------------------------------------------------ 1766 # 1814 1815 1816 1817 # 1818 # ------------------------------------------------------------------------------------ 1819 # -- Eintrag nach rechts schieben ------------------------------------------ 1820 # ------------------------------------------------------------------------------------ 1821 #
1822 - def schiebeRechts( self, cdNullId = None ):
1823 """ 1824 Mit Aufruf dieser Methode werden die Einträge des linken C{ListBox__li} anhand der in C{ListBox__li.wxClientData[0]} gespeicherten Identifikationsnummer C{cdNullId} in das rechte Fenster C{ListBox__re} verschoben. 1825 Wird C{cdNullId = None} übergeben, wird der erste Eintrag der Liste verschoben. 1826 1827 @param cdNullId: Es ist die in C{ListBox__re.wxClientData[0]} gespeicherte Identifikationsnummer anzugeben, die nach rechts verschoben werden soll. 1828 @type cdNullId: Ganzzahl 1829 """ 1830 1831 1832 # 1833 # -- die Routine verlassen, wenn das rechte Fenster leer ist ------------------ 1834 # 1835 if self.ListBox__li.IsEmpty(): 1836 return 1837 1838 1839 # 1840 # -- Wenn >cdNullId< nicht spezifiziert ist, den ersten Eintrag ---------- 1841 # -- verschieben ... ---------- 1842 # 1843 nrEintrag = 0 1844 1845 1846 # 1847 # -- ... sonst die lfd. Nr. des Eintrags ermitteln -------------------------- 1848 # 1849 if cdNullId != None: 1850 for nrEintrag in range( self.ListBox__li.GetCount() ) : 1851 if self.ListBox__li.GetClientData( nrEintrag )[0] == cdNullId: 1852 break 1853 1854 1855 # 1856 # -- die Routine verlassen, wenn die übergebene >cdNullId< nicht ---------- 1857 # -- gefunden wurde ---------- 1858 # 1859 if ( nrEintrag == self.ListBox__li.GetCount() - 1 ) and ( self.ListBox__li.GetClientData( nrEintrag )[0] != cdNullId ): 1860 return 1861 1862 1863 # 1864 # -- Eintrag verschieben -------------------------------------------------- 1865 # 1866 self.ListBox__re.Append( self.ListBox__li.GetString( nrEintrag ) 1867 , self.ListBox__li.GetClientData( nrEintrag ) ) 1868 self.ListBox__li.Delete( nrEintrag )
1869 1870 1871 1872 1873 1874 # 1875 # 1876 # 1877 # ---------------------------------------------------------------------------------------- 1878 # ---------------------------------------------------------------------------------------- 1879 # -- ------------------------------------------ 1880 # -- MaskedTextCtrl mit einigen Ergänzungen ------------------------------------------ 1881 # -- ------------------------------------------ 1882 # ---------------------------------------------------------------------------------------- 1883 # ---------------------------------------------------------------------------------------- 1884 #
1885 -class MaskedTextCtrlErg( wxmsk.TextCtrl, __Ergaenzung__ ):
1886 """ 1887 Klasse, die eine C{MaskedTextCtrl} mit weiteren Funktionen versieht. 1888 """ 1889 1890 # 1891 # ------------------------------------------------------------------------------------ 1892 # -- Initialisierungen -------------------------------------------------- 1893 # ------------------------------------------------------------------------------------ 1894 #
1895 - def __init__( self, parent, validRequired, autoformat, Statusleiste ):
1896 wxmsk.TextCtrl.__init__( self, parent = parent 1897 , validRequired = validRequired 1898 , autoformat = autoformat ) 1899 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste ) 1900 1901 # 1902 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 1903 # 1904 self.SetName( name = "MaskedTextCtrlErg" ) 1905 1906 1907 # 1908 # -- Proportionalschrift setzen ------------------------------------------ 1909 # 1910 self.SetFont( font = wx.Font( pointSize = self.GetFont().GetPointSize() 1911 , family = wx.FONTFAMILY_TELETYPE 1912 , style = wx.FONTSTYLE_NORMAL 1913 , weight = wx.FONTWEIGHT_NORMAL ) ) 1914 1915 1916 # 1917 # -- Ereignisse behandeln -------------------------------------------------- 1918 # 1919 self.Bind( wx.EVT_TEXT, self.__ereignisAenderung__, self ) 1920 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ ) 1921 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ )
1922 1923 1924 1925 # 1926 # ------------------------------------------------------------------------------------ 1927 # -- aktuellen Wert zurückgeben ------------------------------------------ 1928 # ------------------------------------------------------------------------------------ 1929 #
1930 - def gibWert( self ):
1931 """ 1932 Mit Aufruf dieser Methode wird der Wert des C{wxmsk.TextCtrl} zurückgegeben. 1933 """ 1934 1935 # 1936 # -- aktuellen Wert zurückgeben ------------------------------------------ 1937 # 1938 return self.GetValue()
1939 1940 1941 1942 # 1943 # ------------------------------------------------------------------------------------ 1944 # -- Alle Einträge löschen -------------------------------------------------- 1945 # ------------------------------------------------------------------------------------ 1946 #
1947 - def loescheAlles( self ):
1948 """ 1949 Mit Aufruf dieser Methode wird der Text aus dem C{MaskedTextCtrl} gelöscht, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt. 1950 """ 1951 1952 1953 # 1954 # -- Alle Einträge löschen -------------------------------------------------- 1955 # 1956 self.istVomBenutzerGeaendert = False 1957 self.istBenutzerAenderungJetzt = False 1958 del self.wertNichtMod[:] 1959 self.Clear()
1960 1961 1962 1963 1964 # 1965 # ------------------------------------------------------------------------------------ 1966 # -- aktuellen Wert übernehmen ------------------------------------------ 1967 # ------------------------------------------------------------------------------------ 1968 #
1969 - def nimmWert( self, wert, clientData = None ):
1970 """ 1971 Mit Aufruf dieser Methode wird der Wert der C{MaskedTextCtrl} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden 1972 1973 @param wert: Es ist der Wert der C{MaskedTextCtrl} anzugeben. 1974 @type wert: Zeichenkette 1975 1976 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben. 1977 @type clientData: beliebiges Objekt 1978 """ 1979 1980 # 1981 # -- Alles löschen ---------------------------------------------------------- 1982 # 1983 self.loescheAlles() 1984 1985 1986 # 1987 # -- aktuellen Wert übernehmen ------------------------------------------ 1988 # 1989 self.wertNichtMod.insert( 0, wert ) 1990 self.ChangeValue( wert ) 1991 self.clientData = clientData 1992 1993 1994 # 1995 # -- Der Wert wurde vom Benutzer nicht verändert -------------------------- 1996 # 1997 self.istVomBenutzerGeaendert = False 1998 self.istBenutzerAenderungJetzt = False
1999 2000 2001 2002 2003 # 2004 # 2005 # 2006 # ---------------------------------------------------------------------------------------- 2007 # ---------------------------------------------------------------------------------------- 2008 # -- ---------- 2009 # -- Mehrere Menüs verwalten ---------- 2010 # -- ---------- 2011 # ---------------------------------------------------------------------------------------- 2012 # ---------------------------------------------------------------------------------------- 2013 #
2014 -class MultiMenu():
2015 """ 2016 Klasse, die mehrere C{wx.Menu} bereitstellt. 2017 """ 2018 2019 # 2020 # ------------------------------------------------------------------------------------ 2021 # -- Initialisierungen -------------------------------------------------- 2022 # ------------------------------------------------------------------------------------ 2023 #
2024 - def __init__( self ):
2025 2026 # 2027 # -- Identifikationsnummern -------------------------------------------------- 2028 # 2029 self.menu = [] 2030 2031 # 2032 # -- Identifikationsnummern -------------------------------------------------- 2033 # 2034 self.basisMenuId = 10
2035 2036 2037 2038 2039 # 2040 # ------------------------------------------------------------------------------------ 2041 # -- aktuellen Menüeintrag übernehmen ---------------------------------- 2042 # ------------------------------------------------------------------------------------ 2043 #
2044 - def aktiviereMenuEintrag( self, aktivieren, lfdNrMenu, lfdNrEintrag ):
2045 """ 2046 Mit Aufruf dieser Methode wird der Menüeintrag mit der laufenden Nummer C{lfdNrEintrag} des Menüs mit der laufenden Nummer C{lfdNrMenu} (de)aktiviert. 2047 2048 @param aktivieren: Menüeintrag aktivieren C{aktivieren = True}. Menüeintrag deaktivieren C{aktivieren = False}. 2049 @type aktivieren: Ganzzahl 2050 2051 @param lfdNrMenu: lfd. Nummer des Menüs (beginnt mit Null) 2052 @type lfdNrMenu: Ganzzahl 2053 2054 @param lfdNrEintrag: lfd. Nummer des Menüeintrages (beginnt mit Null) 2055 @type lfdNrEintrag: Ganzzahl 2056 """ 2057 2058 # 2059 # -- Menüeintrag (de)aktivieren ------------------------------------------ 2060 # 2061 self.menu[lfdNrMenu].Enable( self.gibMenuEintragId( lfdNrMenu, lfdNrEintrag ), aktivieren )
2062 2063 2064 2065 # 2066 # ------------------------------------------------------------------------------------ 2067 # -- aktuellen Menüeintrag übernehmen ---------------------------------- 2068 # ------------------------------------------------------------------------------------ 2069 #
2070 - def gibMenu( self, lfdNrMenu ):
2071 """ 2072 Mit Aufruf dieser Methode wird das Menü mit der laufenden Nummer C{lfdNrMenu} der Menüeintrag C{eintrag} übergebenzurückgegeben. 2073 2074 @param lfdNrMenu: lfd. Nummer des Menüs 2075 @type lfdNrMenu: wx.Menu 2076 """ 2077 2078 # 2079 # -- Menü zurückgeben -------------------------------------------------- 2080 # 2081 return self.menu[lfdNrMenu]
2082 2083 2084 2085 # 2086 # ------------------------------------------------------------------------------------ 2087 # -- Initialisierungen -------------------------------------------------- 2088 # ------------------------------------------------------------------------------------ 2089 #
2090 - def gibMenuEintragId( self, lfdNrMenu, lfdNrEintrag ):
2091 """ 2092 Mit Aufruf dieser Methode wird die Id des Menüeintrages mit der laufenden Nummer C{lfdNrEintrag} des Menüs mit der laufenden Nummer C{lfdNrMenu} zurückgegeben. 2093 2094 @param lfdNrMenu: lfd. Nummer des Menüs (beginnt mit Null) 2095 @type lfdNrMenu: Ganzzahl 2096 2097 @param lfdNrEintrag: lfd. Nummer des Menüeintrages (beginnt mit Null) 2098 @type lfdNrEintrag: Ganzzahl 2099 2100 @return: Id des Menüeintrages 2101 @rtype: Ganzzahl 2102 """ 2103 2104 # 2105 # -- Id berechnen und zurückgeben ------------------------------------------ 2106 # 2107 return self.basisMenuId * ( lfdNrMenu + 1 ) + lfdNrEintrag
2108 2109 2110 2111 # 2112 # ------------------------------------------------------------------------------------ 2113 # -- neues Menü erstellen -------------------------------------------------- 2114 # ------------------------------------------------------------------------------------ 2115 #
2116 - def initMenu( self ):
2117 """ 2118 Mit Aufruf dieser Methode ein neues Menü hinzugefügt. 2119 """ 2120 2121 # 2122 # -- neues Menü erstellen -------------------------------------------------- 2123 # 2124 self.menu.append( wx.Menu() )
2125 2126 2127 # 2128 # ------------------------------------------------------------------------------------ 2129 # -- aktuellen Menüeintrag übernehmen ---------------------------------- 2130 # ------------------------------------------------------------------------------------ 2131 #
2132 - def nimmMenuEintrag( self, eintrag, lfdNrMenu ):
2133 """ 2134 Mit Aufruf dieser Methode wird dem Menü mit der laufenden Nummer C{lfdNrMenu} der Menüeintrag C{eintrag} übergeben 2135 2136 @param eintrag: Es ist der Menüeintrag anzugeben. 2137 @type eintrag: Zeichenkette 2138 2139 @param lfdNrMenu: lfd. Nummer des Menüs 2140 @type lfdNrMenu: Ganzzahl 2141 """ 2142 2143 # 2144 # -- Eintrag hinzufügen -------------------------------------------------- 2145 # 2146 self.menu[lfdNrMenu].Append( self.gibMenuEintragId( lfdNrMenu, self.menu[lfdNrMenu].GetMenuItemCount() ), eintrag )
2147 2148 2149 2150 # 2151 # ------------------------------------------------------------------------------------ 2152 # -- aktuelle Ereignisbehandlung zum Menüeintrag übernehmen ------------------ 2153 # ------------------------------------------------------------------------------------ 2154 #
2155 - def nimmMenuEreignis( self, ereignisMethode, lfdNrMenu, lfdNrEintrag ):
2156 """ 2157 Mit Aufruf dieser Methode wird dem Menü mit der laufenden Nummer C{lfdNrMenu} der Menüeintrag C{eintrag} übergeben 2158 2159 @param ereignisMethode: Es ist die Methode zur Ereignisbehandlung zu übergeben. 2160 @type ereignisMethode: Zeichenkette 2161 2162 @param lfdNrMenu: lfd. Nummer des Menüs 2163 @type lfdNrMenu: Ganzzahl 2164 2165 @param lfdNrEintrag: lfd. Nummer des Menüeintrages (beginnt mit Null) 2166 @type lfdNrEintrag: Ganzzahl 2167 """ 2168 2169 # 2170 # -- Eintrag hinzufügen -------------------------------------------------- 2171 # 2172 self.menu[lfdNrMenu].Bind( wx.EVT_MENU 2173 , ereignisMethode 2174 , id = self.gibMenuEintragId( lfdNrMenu, lfdNrEintrag ) )
2175 2176 2177 2178 2179 # 2180 # ------------------------------------------------------------------------------------ 2181 # -- Trennlinie übernehmen -------------------------------------------------- 2182 # ------------------------------------------------------------------------------------ 2183 #
2184 - def nimmTrennlinie( self, lfdNrMenu ):
2185 """ 2186 Mit Aufruf dieser Methode wird dem Menü mit der laufenden Nummer C{lfdNrMenu} eine Trennlinie hinugefügt 2187 2188 @param lfdNrMenu: lfd. Nummer des Menüs 2189 @type lfdNrMenu: Ganzzahl 2190 """ 2191 2192 # 2193 # -- Trennlinie hinzufügen -------------------------------------------------- 2194 # 2195 self.menu[lfdNrMenu].AppendSeparator()
2196 2197 2198 2199 2200 2201 2202 # 2203 # 2204 # 2205 # ---------------------------------------------------------------------------------------- 2206 # ---------------------------------------------------------------------------------------- 2207 # -- -------------------------- 2208 # -- Spezielles Eingabeformular für Sicherheitsanforderungen -------------------------- 2209 # -- Es werden Strukturpunkte / Dokumente zugeordnet -------------------------- 2210 # -- -------------------------- 2211 # ---------------------------------------------------------------------------------------- 2212 # ---------------------------------------------------------------------------------------- 2213 #
2214 -class SiAnfStrktDok( wx.Panel ):
2215 """ 2216 Klasse zur Abbildung des Teil-Eingabeformulars der Sicherheitsanforderungen für die Strukturpunkte bzw. Dokumente 2217 """ 2218 2219 # 2220 # ------------------------------------------------------------------------------------ 2221 # -- Eingabeformular initialisieren ---------------------------------- 2222 # ------------------------------------------------------------------------------------ 2223 #
2224 - def __init__( self, parent, varId, Statusleiste, dbVerbindung ):
2225 wx.Panel.__init__( self, parent = parent ) 2226 2227 # 2228 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 2229 # 2230 self.SetName( name = "SiAnfStrktDok" ) 2231 2232 # 2233 # fortsetzen 2234 # 2235 # print "SiAnfStrktDok" 2236 2237 2238 # 2239 # -------------------------------------------------------------------------------- 2240 # -- ACHTUNG ! -- 2241 # -- Alle im Konstruktor durchgeführten Datenbankabfragen müssen auf ---------- 2242 # -- einer globalen Variable (innerhalb Datenbank()) operieren ---------- 2243 # -- (Zeitverlust infolge redundanter Datenbankabfragen) -- 2244 # -------------------------------------------------------------------------------- 2245 # 2246 2247 2248 # 2249 # -- Interne Variablen -------------------------------------------------- 2250 # 2251 self.varId = varId 2252 self.titel = '' 2253 self.titelProjekt = '' 2254 2255 2256 # 2257 # -- Verfügbare Sicherheitsanforderungen ---------------------------------- 2258 # 2259 if( self.varId == 1 ): 2260 self.titel = u"Dem Gefahrenszenario zugeordnete, projektübergreifend verfügbare Sicherheitsanforderungen" 2261 self.titelProjekt = u"Im Projekt verfügbare Sicherheitsanforderungen" 2262 2263 ComboBox__Titel = u"Typ der Sicherheitsanforderung:" 2264 ComboBox__Zweck = u"Verfügbare Sicherheitsanforderungen anhand des Typs einschränken." 2265 2266 CheckBox__Text = u"Projektbezogene SiAnf (ignoriere Gefahrenszenario):" 2267 CheckBox__Zweck = u"Es wird die projektübergreifende Einschränkung auf das aktuelle Gefahrenszenario aufgehoben und alle im Projekt verfügbaren Sicherheitsanforderungen angezeigt." 2268 2269 ListBox__Titel = u"SiAnf-Id" 2270 ListBox__Zweck = u"Eineindeutige Identifikationsnummer der verfügbaren Sicherheitsanforderungen zum Gefahrenszenario." 2271 ListBox__ToolTip = u"Doppelklick:\nSicherheitsanforderung(en) der aktuell gewählten Sicherheitsanforderung bzw. dem aktuellen Gefahrenszenario zuordnen.\n\nMittlere Maustaste:\nSicherheitsanforderung (org. Maßnahme) dem aktuellen Gefahrenszenario zuordnen." 2272 2273 # 2274 # -- Zugeordnete Strukturpunkte / Dokumente / Protokolleinträge ---------- 2275 # 2276 elif( self.varId == 2 ): 2277 self.titel = u"Zugeordnete Strukturpunkte / Dokumente / Protokolleinträge" 2278 2279 ComboBox__Titel = u"Nicht verwendet" 2280 ComboBox__Zweck = u"Nicht verwendet" 2281 2282 CheckBox__Text = u"Nicht verwendet" 2283 CheckBox__Zweck = u"Nicht verwendet" 2284 2285 ListBox__Titel = u"Zugeordnete Strukturpunkte / Dokumente / Protokolleinträge" 2286 ListBox__Zweck = u"Eineindeutige Identifikationsnummer der zugeordneten Strukturpunkte/Dokumente/Protokolleinträge." 2287 ListBox__ToolTip = "" 2288 2289 # 2290 # -- Verfügbare Strukturpunkte ------------------------------------------ 2291 # 2292 elif( self.varId == 3 ): 2293 self.titel = u"Dem Gefahrenszenario zugeordnete, projektübergreifend verfügbare Strukturpunkte" 2294 self.titelProjekt = u"Im Projekt verfügbare Strukturpunkte" 2295 2296 ComboBox__Titel = u"Strukturbezeichnung:" 2297 ComboBox__Zweck = u"Verfügbare Strukturpunkte anhand der Bezeichnung einschränken." 2298 2299 CheckBox__Text = u"Projektstrukturpunkte (ignoriere Gefahrenszenario):" 2300 CheckBox__Zweck = u"Es wird die projektübergreifende Einschränkung auf das aktuelle Gefahrenszenario aufgehoben und alle im Projekt verfügbaren Strukturpunkte angezeigt." 2301 2302 ListBox__Titel = u"StrNr/Id" 2303 ListBox__Zweck = u"Eineindeutige Identifikationsnummer der verfügbaren Strukturpunkte zum Gefahrenszenario." 2304 ListBox__ToolTip = u"Doppelklick:\nStrukturpunkt der gewählten Sicherheitsanforderung zuordnen." 2305 2306 # 2307 # -- Verfügbare Dokumente ------------------------------------------ 2308 # 2309 elif( self.varId == 4 ): 2310 self.titel = u"Dem Gefahrenszenario zugeordnete, projektübergreifend verfügbare Dokumente" 2311 self.titelProjekt = u"Im Projekt verfügbare Dokumente" 2312 2313 ComboBox__Titel = u"Ersteller (Firma):" 2314 ComboBox__Zweck = u"Verfügbare Dokumente anhand der Bezeichnung einschränken." 2315 2316 CheckBox__Text = u"Projektdokumente (ignoriere Gefahrenszenario):" 2317 CheckBox__Zweck = u"Es wird die projektübergreifende Einschränkung auf das aktuelle Gefahrenszenario aufgehoben und alle im Projekt verfügbaren Dokumente angezeigt." 2318 2319 ListBox__Titel = u"Dok-Id" 2320 ListBox__Zweck = u"Eineindeutige Identifikationsnummer der verfügbaren Dokumente zum Gefahrenszenario." 2321 ListBox__ToolTip = u"Doppelklick:\nDokument der gewählten Sicherheitsanforderung zuordnen." 2322 2323 2324 # 2325 # -- Verfügbare Protokolleinträge ------------------------------------------ 2326 # 2327 elif( self.varId == 5 ): 2328 self.titel = u"Im Projekt verfügbare Protokolleinträge" 2329 2330 ComboBox__Titel = u"Typ der Protokolleinträge:" 2331 ComboBox__Zweck = u"Verfügbare Protokolleinträge anhand des Typs einschränken." 2332 2333 CheckBox__Text = u"---:" 2334 CheckBox__Zweck = u"Es wird die projektübergreifende Einschränkung auf das aktuelle Gefahrenszenario aufgehoben und alle im Projekt verfügbaren Protokolleinträge angezeigt." 2335 2336 ListBox__Titel = u"Protokolleinträge" 2337 ListBox__Zweck = u"Eineindeutige Identifikationsnummern der verfügbaren Protokolleinträge zum Gefahrenszenario." 2338 ListBox__ToolTip = u"Doppelklick:\nProtokolleintrag dem aktuell gewählten Protokolleintrag bzw. dem aktuellen Gefahrenszenario zuordnen." 2339 2340 2341 # 2342 # -- Protokolleinträge -------------------------------------------------- 2343 # 2344 elif( self.varId == 6 ): 2345 self.titel = u"Protokolleintrag | Interne Notizen" 2346 2347 ComboBox__Titel = u"Nicht verwendet" 2348 ComboBox__Zweck = u"Nicht verwendet" 2349 2350 CheckBox__Text = u"Nicht verwendet" 2351 CheckBox__Zweck = u"Nicht verwendet" 2352 2353 ListBox__Titel = u"Protokolleintrag | Interne Notizen" 2354 ListBox__Zweck = u"Relevante Aufzeichnungen (Notizen, Aufgabenstellungen, Vereinbarungen, ...) zum aktuellen Gefahrenszenario und/oder Sicherheitsanforderung." 2355 ListBox__ToolTip = u"Doppelklick:\nProtokolleintrag bearbeiten\n\nEinfg:\nNeuen Protokolleintrag anlegen, der dem markierten Protokolleintrag untergeordnet ist." 2356 2357 2358 # 2359 # -- Sicherheitsanfordeungen -------------------------------------------------- 2360 # 2361 elif( self.varId == 7 ): 2362 self.titel = u"Sicherheitsanforderungen | Interne Notizen" 2363 2364 ComboBox__Titel = u"Nicht verwendet" 2365 ComboBox__Zweck = u"Nicht verwendet" 2366 2367 CheckBox__Text = u"Nicht verwendet" 2368 CheckBox__Zweck = u"Nicht verwendet" 2369 2370 ListBox__Titel = u"Sicherheitsanforderungen | Interne Notizen" 2371 ListBox__Zweck = u"Technisch/Organisatorische Maßnahmen zur Risikominderung." 2372 ListBox__ToolTip = u"Doppelklick:\tSicherheitsanforderungen bearbeiten" 2373 2374 2375 2376 # 2377 # -------------------------------------------------------------------------------- 2378 # -- Randbedingungen übernehmen ------------------------------------------ 2379 # -------------------------------------------------------------------------------- 2380 # 2381 self.Statusleiste = Statusleiste 2382 self.dbVerbindung = dbVerbindung 2383 2384 2385 2386 2387 # 2388 # -------------------------------------------------------------------------------- 2389 # -- Eingabeobjekte anlegen -------------------------------------------------- 2390 # -------------------------------------------------------------------------------- 2391 # 2392 if( self.varId in [ 1, 3, 4, 5 ] ): 2393 2394 # 2395 # -- Alle Sicherheitsanforderungen / Strukturpunkte ------------------ 2396 # -- / Dokumente / Protokolleinträge ------------------ 2397 # -- im Projekt zeigen ------------------ 2398 # -- Objekt-Id = - -------------------------- 2399 # 2400 self.CheckBox__Alle = FlexGridSizerWxObjTitel( parent = self 2401 , wxObj = CheckBoxErg( self 2402 , Statusleiste = self.Statusleiste ) 2403 , titel = CheckBox__Text 2404 , orient = wx.VERTICAL ) 2405 2406 2407 if( self.varId ==5 ): 2408 2409 self.CheckBox__Alle.wxObjekt.Enable( False ) 2410 2411 2412 self.CheckBox__Alle.wxObjekt.nimmWerteStatusleiste( 2413 DBSpNameErlaeuterung = CheckBox__Zweck 2414 , DBSpName = "..." ) 2415 2416 self.Bind( wx.EVT_CHECKBOX 2417 , self.__ereignisLiesDBVerfSiAnf__ 2418 , self.CheckBox__Alle.wxObjekt ) 2419 2420 self.Bind( wx.EVT_CHECKBOX 2421 , self.__ereignisLiesDBVerfStrkt__ 2422 , self.CheckBox__Alle.wxObjekt ) 2423 2424 self.Bind( wx.EVT_CHECKBOX 2425 , self.__ereignisLiesDBVerfDok__ 2426 , self.CheckBox__Alle.wxObjekt ) 2427 2428 # self.Bind( wx.EVT_CHECKBOX 2429 # , self.__ereignisLiesDBVerfProtokolleintraege__ 2430 # , self.CheckBox__Alle.wxObjekt ) 2431 2432 2433 2434 # 2435 # -- Sicherheitsanforderungen / Strukturpunkte ------------------ 2436 # -- / Dokumente / Protokolleinträge einschränken ------------------ 2437 # -- Objekt-Id = - ------------------ 2438 # 2439 self.ComboBox__Selektion = FlexGridSizerWxObjTitel( parent = self 2440 , wxObj = ComboBoxErg( self 2441 , choices = [] 2442 , style = wx.CB_DROPDOWN|wx.CB_READONLY 2443 , Statusleiste = self.Statusleiste ) 2444 , orient = wx.VERTICAL 2445 , titel = ComboBox__Titel ) 2446 2447 self.ComboBox__Selektion.wxObjekt.SetMaxSize( ( 400, -1 ) ) 2448 2449 self.ComboBox__Selektion.wxObjekt.nimmWerteStatusleiste( 2450 DBSpNameErlaeuterung = ComboBox__Zweck 2451 , DBSpName = "..." ) 2452 2453 self.Bind( wx.EVT_COMBOBOX 2454 , self.__ereignisLiesDBVerfSiAnf__ 2455 , self.ComboBox__Selektion.wxObjekt ) 2456 2457 self.Bind( wx.EVT_COMBOBOX 2458 , self.__ereignisLiesDBVerfStrkt__ 2459 , self.ComboBox__Selektion.wxObjekt ) 2460 2461 self.Bind( wx.EVT_COMBOBOX 2462 , self.__ereignisLiesDBVerfDok__ 2463 , self.ComboBox__Selektion.wxObjekt ) 2464 2465 self.Bind( wx.EVT_COMBOBOX 2466 , self.__ereignisLiesDBVerfProtokolleintraege__ 2467 , self.ComboBox__Selektion.wxObjekt ) 2468 2469 2470 # 2471 # -- ---------------------------------- 2472 # -- Ab hier für alle Varianten gültig ---------------------------------- 2473 # -- ---------------------------------- 2474 # 2475 2476 # 2477 # -- Sicherheitsanforderungen / Strukturpunkte -------------------------- 2478 # -- / Dokumente / Protokolleinträge - Id -------------------------- 2479 # -- Objekt-Id = - -------------------------- 2480 # 2481 self.TreeCtrlErg__Id = FlexGridSizerWxObjTitel( parent = self 2482 , wxObj = TreeCtrlErg( self 2483 , Statusleiste = self.Statusleiste ) 2484 , titel = ListBox__Titel 2485 , orient = wx.VERTICAL ) 2486 2487 if( self.varId in [ 5, 6, 7 ] ) : 2488 2489 self.TreeCtrlErg__Id.wxObjekt.SetMinSize( ( -1, 300 ) ) 2490 2491 2492 2493 self.TreeCtrlErg__Id.wxObjekt.nimmWerteStatusleiste( 2494 DBSpNameErlaeuterung = ListBox__Zweck 2495 , DBSpName = "..." ) 2496 2497 self.TreeCtrlErg__Id.wxObjekt.SetToolTip( wx.ToolTip( ListBox__ToolTip ) ) 2498 2499 if( self.varId == 6, 7 ) : 2500 2501 self.TreeCtrlErg__Id.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeBearbeiten ) ) 2502 2503 else : 2504 2505 self.TreeCtrlErg__Id.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 2506 2507 2508 2509 2510 # 2511 # -------------------------------------------------------------------------------- 2512 # -- Layout setzen ---------------------------------------------------------- 2513 # -------------------------------------------------------------------------------- 2514 # 2515 2516 # 2517 # -- Varianten 1, 3, 4, 5 -------------------------------------------------- 2518 # 2519 if( self.varId in [ 1, 3, 4, 5 ] ): 2520 2521 FlexGridSizerH = wx.FlexGridSizer( rows = 1, cols = 2, vgap = 0, hgap = 10 ) 2522 2523 FlexGridSizerH.AddGrowableCol( idx = 0, proportion = 0 ) 2524 FlexGridSizerH.AddGrowableCol( idx = 1, proportion = 0 ) 2525 FlexGridSizerH.AddGrowableRow( idx = 0, proportion = 1 ) 2526 2527 FlexGridSizerH.Add( self.CheckBox__Alle 2528 , flag = wx.EXPAND ) 2529 2530 FlexGridSizerH.Add( self.ComboBox__Selektion 2531 , flag = wx.EXPAND ) 2532 2533 2534 FlexGridSizer = wx.FlexGridSizer( rows = 4, cols = 1, vgap = 10, hgap = 0 ) 2535 2536 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 2537 FlexGridSizer.AddGrowableRow( idx = 2, proportion = 0 ) 2538 FlexGridSizer.AddGrowableRow( idx = 3, proportion = 0 ) 2539 2540 self.StaticText_Titel = wx.StaticText( parent = self, label = self.titel ) 2541 FlexGridSizer.Add( self.StaticText_Titel 2542 , flag = wx.LEFT|wx.TOP|wx.RIGHT|wx.EXPAND 2543 , border = 10 ) 2544 2545 FlexGridSizer.Add( FlexGridSizerH 2546 , flag = wx.LEFT|wx.RIGHT|wx.EXPAND 2547 , border = 10 ) 2548 2549 FlexGridSizer.Add( self.TreeCtrlErg__Id 2550 , flag = wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND 2551 , border = 10 ) 2552 2553 self.SetSizerAndFit( FlexGridSizer ) 2554 2555 2556 # 2557 # -- Variante 2 ---------------------------------------------------------- 2558 # 2559 elif( self.varId in [ 2, 6, 7 ] ): 2560 2561 FlexGridSizer = wx.FlexGridSizer( rows = 1, cols = 1, vgap = 0, hgap = 0 ) 2562 2563 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 2564 FlexGridSizer.AddGrowableRow( idx = 0, proportion = 1 ) 2565 2566 FlexGridSizer.Add( self.TreeCtrlErg__Id 2567 , flag = wx.EXPAND ) 2568 2569 self.SetSizerAndFit( FlexGridSizer ) 2570 2571 2572 # 2573 # -- Verfügbaren Typ der Sicherheitsanforderung auslesen ------------------ 2574 # 2575 if( self.varId == 1 ): 2576 2577 self.dbVerbindung.selektiere__prtTyp__Sprache( TreeCtrlErg_ComboBoxErg = self.ComboBox__Selektion.wxObjekt 2578 , prtTypAspekt = "SF" 2579 , hatAlle = True ) 2580 self.__ereignisLiesDBVerfSiAnf__() 2581 2582 2583 # 2584 # -- Strukturen auslesen ------------------------------------------ 2585 # -- Verfügbare Strukturen auslesen ------------------------------------------ 2586 # 2587 if( self.varId == 3 ): 2588 2589 self.dbVerbindung.selektiere__strName( TreeCtrlErg_ComboBoxErg = self.ComboBox__Selektion.wxObjekt ) 2590 self.__ereignisLiesDBVerfStrkt__() 2591 2592 2593 # 2594 # -- Firmen auslesen ------------------------------------------ 2595 # -- Verfügbare Dokumente auslesen ------------------------------------------ 2596 # 2597 if( self.varId == 4 ): 2598 2599 self.dbVerbindung.selektiere__internFirma( TreeCtrlErg_ComboBoxErg = self.ComboBox__Selektion.wxObjekt ) 2600 self.__ereignisLiesDBVerfDok__() 2601 2602 2603 2604 # 2605 # -- Typ der Protokolleinträge auselesen ---------------------------------- 2606 # -- Verfügbare Protokolleinträge auselesen ---------------------------------- 2607 # 2608 if( self.varId == 5 ): 2609 2610 self.dbVerbindung.selektiere__prtTyp__Sprache( TreeCtrlErg_ComboBoxErg = self.ComboBox__Selektion.wxObjekt 2611 , prtTypAspekt = "PE" 2612 , hatAlle = True ) 2613 self.__ereignisLiesDBVerfProtokolleintraege__()
2614 2615 2616 2617 2618 # 2619 # ------------------------------------------------------------------------------------ 2620 # -- Datenbank auslesen 'Verfügbare Dokumente' -------------------------- 2621 # ------------------------------------------------------------------------------------ 2622 #
2623 - def __ereignisLiesDBVerfDok__( self, ereignis = None ):
2624 """ 2625 Methode die aufgerufen wird, wenn nach Änderung des Zustandes der C{wx.CheckBox} 'Alle' bzw. der C{wx.ComboBox} 'Firma' die Datenbank ausgelesen werden muß. 2626 2627 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 2628 @type ereignis: C{wx - Ereignisobjekt} 2629 """ 2630 2631 2632 # 2633 # -- Routine verlassen, wenn Karteikarte 'Dokumente' nicht aktiv ist ---------- 2634 # 2635 if( self.varId != 4 ) : 2636 2637 # 2638 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2639 # -- ausgewertet werden kann -------------------------- 2640 # 2641 if( ereignis != None ) : ereignis.Skip( skip = True ) 2642 2643 return 2644 2645 2646 2647 # 2648 # -- Firma berücksichtigen ? ------------------------------------------ 2649 # 2650 firma = None 2651 if( self.ComboBox__Selektion.wxObjekt.gibClientData() > 0 ) : 2652 2653 firma = self.ComboBox__Selektion.wxObjekt.gibClientData() 2654 2655 2656 2657 # 2658 # -- alle zugeordneten Strukturpunkte / Dokumente / -------------------------- 2659 # -- Protokolleinträge löschen -------------------------- 2660 # 2661 self.TreeCtrlErg__Id.wxObjekt.loescheAlles() 2662 2663 2664 2665 # 2666 # -- Verfügbare Dokumente auslesen, dabei ---------- 2667 # -- Gefahrenszenario ignorieren ? ---------- 2668 # -- ---------- 2669 # -- True: Gefahrenszenario ignorieren, Projekt berücksichtigen ---------- 2670 # 2671 if( self.CheckBox__Alle.wxObjekt.gibWert() ) : 2672 2673 self.StaticText_Titel.SetLabel( self.titelProjekt ) 2674 2675 self.dbVerbindung.selektiere__dokDoku__Projekt__Sprache( TreeCtrlErg_ListBoxErg = self.TreeCtrlErg__Id.wxObjekt 2676 , internFirmaId = firma 2677 , dokDokuId = None ) 2678 2679 # 2680 # -- False: Gefahrenszenario berücksichtigen, Projekt ignorieren -- 2681 # 2682 else : 2683 2684 self.StaticText_Titel.SetLabel( self.titel ) 2685 2686 self.dbVerbindung.selektiere__dokDoku( TreeCtrlErg_ListBoxErg = self.TreeCtrlErg__Id.wxObjekt 2687 , internFirmaId = firma ) 2688 2689 2690 2691 # 2692 # -- Baum anzeigen ---------------------------------------------------------- 2693 # 2694 self.TreeCtrlErg__Id.wxObjekt.erzeugeBaum() 2695 self.TreeCtrlErg__Id.wxObjekt.markiereWert() 2696 2697 2698 2699 # 2700 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2701 # -- ausgewertet werden kann -------------------------- 2702 # 2703 if( ereignis != None ) : ereignis.Skip( skip = True )
2704 2705 2706 2707 2708 # 2709 # ------------------------------------------------------------------------------------ 2710 # -- Datenbank auslesen 'Verfügbare Protokolleinträge' ------------------ 2711 # ------------------------------------------------------------------------------------ 2712 #
2713 - def __ereignisLiesDBVerfProtokolleintraege__( self, ereignis = None ):
2714 """ 2715 Methode die aufgerufen wird, wenn nach Änderung des Zustandes der C{wx.CheckBox} 'Alle' bzw. der C{wx.ComboBox} 'Typ des Protkolleintrages' die Datenbank ausgelesen werden muß. 2716 2717 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 2718 @type ereignis: C{wx - Ereignisobjekt} 2719 """ 2720 2721 # 2722 # -- Routine verlassen, wenn Karteikarte 'Protkolleinträge' ------------------ 2723 # -- nicht aktiv ist ------------------ 2724 # 2725 if( self.varId != 5 ) : 2726 2727 # 2728 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2729 # -- ausgewertet werden kann -------------------------- 2730 # 2731 if( ereignis != None ) : ereignis.Skip( skip = True ) 2732 2733 return 2734 2735 2736 # 2737 # -- Auf Typ der Protokolleinträge einschränken ? -------------------------- 2738 # 2739 prtTyp = self.dbVerbindung.konstante__prt_typ_id__gefProt 2740 if( self.ComboBox__Selektion.wxObjekt.gibClientData() > 0 ) : 2741 2742 prtTyp = [ self.ComboBox__Selektion.wxObjekt.gibClientData() ] 2743 2744 2745 2746 # 2747 # -- alle zugeordneten Strukturpunkte / Dokumente / -------------------------- 2748 # -- Protokolleinträge löschen -------------------------- 2749 # 2750 self.TreeCtrlErg__Id.wxObjekt.loescheAlles() 2751 2752 2753 2754 # 2755 # -- Verfügbare Protokolleinträge auslesen ------------------ 2756 # -- (Gefahrenszenario berücksichtigen, Projekt ignorieren) ------------------ 2757 # 2758 self.dbVerbindung.selektiere__prtProtokoll__Projekt__Sprache( TreeCtrlErg = self.TreeCtrlErg__Id.wxObjekt 2759 , istGefProt = True 2760 , prtTypId = prtTyp ) 2761 2762 2763 # 2764 # -- Baum anzeigen ---------------------------------------------------------- 2765 # 2766 self.TreeCtrlErg__Id.wxObjekt.erzeugeBaum() 2767 self.TreeCtrlErg__Id.wxObjekt.markiereWert() 2768 2769 2770 # 2771 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2772 # -- ausgewertet werden kann -------------------------- 2773 # 2774 if( ereignis != None ) : ereignis.Skip( skip = True )
2775 2776 2777 2778 2779 # 2780 # ------------------------------------------------------------------------------------ 2781 # -- Datenbank auslesen 'Verfügbare Sicherheitsanforderungen' ---------- 2782 # ------------------------------------------------------------------------------------ 2783 #
2784 - def __ereignisLiesDBVerfSiAnf__( self, ereignis = None ):
2785 """ 2786 Methode die aufgerufen wird, wenn nach Änderung des Zustandes der C{wx.CheckBox} 'Alle' bzw. der C{wx.ComboBox} 'Typ der Sicherheitsanforderung' die Datenbank ausgelesen werden muß. 2787 2788 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 2789 @type ereignis: C{wx - Ereignisobjekt} 2790 """ 2791 2792 2793 # 2794 # -- Routine verlassen, wenn Karteikarte 'Sicherheitsanforderungen' ---------- 2795 # -- nicht aktiv ist ---------- 2796 # 2797 if( self.varId != 1 ) : 2798 2799 # 2800 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2801 # -- ausgewertet werden kann -------------------------- 2802 # 2803 if( ereignis != None ) : ereignis.Skip( skip = True ) 2804 2805 return 2806 2807 2808 # 2809 # -- Auf Typ der Sicherheitsanforderung einschränken ? ------------------ 2810 # 2811 prtTyp = None 2812 if( self.ComboBox__Selektion.wxObjekt.gibClientData() > 0 ) : 2813 2814 prtTyp = self.ComboBox__Selektion.wxObjekt.gibClientData() 2815 2816 2817 # 2818 # -- Verfügbare Sicherheitsanforderungen auslesen, dabei ---------- 2819 # -- Gefahrenszenario ignorieren ? ---------- 2820 # -- ---------- 2821 # -- True: Gefahrenszenario ignorieren, Projekt berücksichtigen ---------- 2822 # 2823 if( self.CheckBox__Alle.wxObjekt.gibWert() ) : 2824 2825 self.StaticText_Titel.SetLabel( self.titelProjekt ) 2826 2827 self.dbVerbindung.selektiere__prtProtokoll__Projekt__Sprache( TreeCtrlErg = self.TreeCtrlErg__Id.wxObjekt 2828 , istGefProt = False 2829 , prtTypId = prtTyp 2830 , prtProtokollId = None ) 2831 2832 # 2833 # -- False: Gefahrenszenario berücksichtigen, Projekt ignorieren -- 2834 # 2835 else : 2836 2837 self.StaticText_Titel.SetLabel( self.titel ) 2838 2839 self.dbVerbindung.selektiere__prtProtokoll( TreeCtrlErg = self.TreeCtrlErg__Id.wxObjekt 2840 , prtTypId = prtTyp ) 2841 2842 2843 # 2844 # -- Baum anzeigen ---------------------------------------------------------- 2845 # 2846 self.TreeCtrlErg__Id.wxObjekt.erzeugeBaum() 2847 self.TreeCtrlErg__Id.wxObjekt.markiereWert() 2848 2849 2850 2851 # 2852 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2853 # -- ausgewertet werden kann -------------------------- 2854 # 2855 if( ereignis != None ) : ereignis.Skip( skip = True )
2856 2857 2858 2859 2860 # 2861 # ------------------------------------------------------------------------------------ 2862 # -- Datenbank auslesen 'Verfügbare Strukturen' -------------------------- 2863 # ------------------------------------------------------------------------------------ 2864 #
2865 - def __ereignisLiesDBVerfStrkt__( self, ereignis = None ):
2866 """ 2867 Methode die aufgerufen wird, wenn nach Änderung des Zustandes der C{wx.CheckBox} 'Alle' bzw. der C{wx.ComboBox} 'Strukturen' die Datenbank ausgelesen werden muß. 2868 2869 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 2870 @type ereignis: C{wx - Ereignisobjekt} 2871 """ 2872 2873 2874 # 2875 # -- Routine verlassen, wenn Karteikarte 'Strukturen' nicht aktiv ist ---------- 2876 # 2877 if( self.varId != 3 ) : 2878 2879 # 2880 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2881 # -- ausgewertet werden kann -------------------------- 2882 # 2883 if( ereignis != None ) : ereignis.Skip( skip = True ) 2884 2885 return 2886 2887 2888 2889 # 2890 # -- Auf Strukturbezeichnung einschränken ? ---------------------------------- 2891 # 2892 strName = None 2893 if( self.ComboBox__Selektion.wxObjekt.gibClientData() > 0 ) : 2894 2895 strName = [ self.ComboBox__Selektion.wxObjekt.gibClientData() ] 2896 2897 2898 2899 # 2900 # -- alle zugeordneten Strukturpunkte / Dokumente / -------------------------- 2901 # -- Protokolleinträge löschen -------------------------- 2902 # 2903 self.TreeCtrlErg__Id.wxObjekt.loescheAlles() 2904 2905 2906 2907 # 2908 # -- Verfügbare Strukturpunkte auslesen, dabei ---------- 2909 # -- Gefahrenszenario ignorieren ? ---------- 2910 # -- ---------- 2911 # -- True: Gefahrenszenario ignorieren, Projekt berücksichtigen ---------- 2912 # 2913 if( self.CheckBox__Alle.wxObjekt.gibWert() ) : 2914 2915 self.StaticText_Titel.SetLabel( self.titelProjekt ) 2916 2917 self.dbVerbindung.selektiere__strStrkt__Projekt__Sprache( TreeCtrlErg = self.TreeCtrlErg__Id.wxObjekt 2918 , strNameId = strName ) 2919 2920 2921 # 2922 # -- False: Gefahrenszenario berücksichtigen, Projekt ignorieren -- 2923 # 2924 else : 2925 2926 self.StaticText_Titel.SetLabel( self.titel ) 2927 2928 self.dbVerbindung.selektiere__strStrkt( TreeCtrlErg = self.TreeCtrlErg__Id.wxObjekt 2929 , strNameId = strName ) 2930 2931 2932 2933 # 2934 # -- Baum anzeigen ---------------------------------------------------------- 2935 # 2936 self.TreeCtrlErg__Id.wxObjekt.erzeugeBaum() 2937 self.TreeCtrlErg__Id.wxObjekt.markiereWert() 2938 2939 2940 2941 # 2942 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2943 # -- ausgewertet werden kann -------------------------- 2944 # 2945 if( ereignis != None ) : ereignis.Skip( skip = True )
2946 2947 2948 2949 2950 2951 2952 2953 # 2954 # 2955 # 2956 # ---------------------------------------------------------------------------------------- 2957 # ---------------------------------------------------------------------------------------- 2958 # -- -------------------------- 2959 # -- Sicherheitsanforderungen einschliesslich zugeordneter -------------------------- 2960 # -- Strukturpunkte / Dokumente / Protokolleinträge -------------------------- 2961 # -- -------------------------- 2962 # ---------------------------------------------------------------------------------------- 2963 # ---------------------------------------------------------------------------------------- 2964 #
2965 -class SiAnf( wx.Panel ):
2966 """ 2967 Klasse zur Abbildung des Eingabeformulars der Sicherheitsanforderungen einschließlich Darstellung der zugeordneten Strukturpunkte, Dokumente, Protkolleinträge. 2968 """ 2969 2970 # 2971 # ------------------------------------------------------------------------------------ 2972 # -- Eingabeformular initialisieren ---------------------------------- 2973 # ------------------------------------------------------------------------------------ 2974 #
2975 - def __init__( self, parent, Statusleiste, dbVerbindung, varId = 7, dlgBearbeiteSicherheitsanf = None ):
2976 wx.Panel.__init__( self, parent = parent ) 2977 2978 # 2979 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 2980 # 2981 self.SetName( name = "SiAnf" ) 2982 2983 2984 # 2985 # -------------------------------------------------------------------------------- 2986 # -- ACHTUNG ! -- 2987 # -- Alle im Konstruktor durchgeführten Datenbankabfragen müssen auf ---------- 2988 # -- einer globalen Variable (innerhalb Datenbank()) operieren ---------- 2989 # -- (Zeitverlust infolge redundanter Datenbankabfragen) -- 2990 # -------------------------------------------------------------------------------- 2991 # 2992 2993 2994 # 2995 # -------------------------------------------------------------------------------- 2996 # -- Randbedingungen übernehmen ------------------------------------------ 2997 # -------------------------------------------------------------------------------- 2998 # 2999 self.Statusleiste = Statusleiste 3000 self.dbVerbindung = dbVerbindung 3001 self.dlgBearbeiteSicherheitsanf = dlgBearbeiteSicherheitsanf 3002 3003 3004 # 3005 # -- Sicherheitsanforderungen ------------------------------------------ 3006 # -- Objekt-Id = -255 / -256 ------------------ 3007 # 3008 self.SiAnfStrktDok__SiAnf = SiAnfStrktDok( parent = self 3009 , varId = varId 3010 , Statusleiste = self.Statusleiste 3011 , dbVerbindung = self.dbVerbindung ) 3012 3013 self.SiAnfStrktDok__SiAnf.SetMinSize( ( -1, 350 ) ) 3014 3015 3016 self.Bind( wx.EVT_TREE_SEL_CHANGED 3017 , self.__ereignisNavigation__ 3018 , self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt ) 3019 3020 3021 # 3022 # -- Bearbeiten nur bei Dialogen der Klasse ---------------------------------- 3023 # -- >BearbeiteSicherheitsanf()< ausführen ---------------------------------- 3024 # 3025 if( self.dlgBearbeiteSicherheitsanf is not None ) : 3026 3027 self.Bind( wx.EVT_TREE_ITEM_ACTIVATED 3028 , self.__ereignisBearbeiten__ 3029 , self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt ) 3030 3031 3032 # 3033 # -- Zugeordnete Strukturpunkte, Dokumente / ------------------ 3034 # -- Interne Notizen zu den Strukturpunkten, Dokumenten ------------------ 3035 # -- Objekt-Id = - ------------------ 3036 # 3037 self.SiAnfStrktDok__Zugeordnet = SiAnfStrktDok( parent = self 3038 , varId = 2 3039 , Statusleiste = self.Statusleiste 3040 , dbVerbindung = self.dbVerbindung ) 3041 3042 self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt.SetBackgroundColour( self.GetBackgroundColour() ) 3043 3044 self.SiAnfStrktDok__Zugeordnet.SetMinSize( ( -1, 300 ) ) 3045 3046 3047 3048 # 3049 # -------------------------------------------------------------------------------- 3050 # -- Layout setzen ---------------------------------------------------------- 3051 # -------------------------------------------------------------------------------- 3052 # 3053 FlexGridSizer = wx.FlexGridSizer( rows = 2, cols = 1, vgap = 10, hgap = 0 ) 3054 3055 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 3056 FlexGridSizer.AddGrowableRow( idx = 0, proportion = 0 ) 3057 FlexGridSizer.AddGrowableRow( idx = 1, proportion = 0 ) 3058 3059 FlexGridSizer.Add( self.SiAnfStrktDok__SiAnf 3060 , flag = wx.EXPAND ) 3061 3062 FlexGridSizer.Add( self.SiAnfStrktDok__Zugeordnet 3063 , flag = wx.EXPAND ) 3064 3065 self.SetSizerAndFit( FlexGridSizer )
3066 3067 3068 3069 3070 3071 # 3072 # ------------------------------------------------------------------------------------ 3073 # -- Sicherheitsanforderungen bearbeiten ---------------------------------- 3074 # ------------------------------------------------------------------------------------ 3075 #
3076 - def __ereignisBearbeiten__( self, ereignis ):
3077 """ 3078 Sicherheitsaforderungen zum Gefahrenszenario bearbeiten. 3079 3080 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 3081 @type ereignis: C{wx - Ereignisobjekt} 3082 """ 3083 3084 3085 # 3086 # -- Meldung ausgeben -------------------------------------------------- 3087 # 3088 self.dlgBearbeiteSicherheitsanf.SiAnf__SiAnf.liesDB() 3089 self.dlgBearbeiteSicherheitsanf.SetMinSize( ( 800, 700 ) ) 3090 self.dlgBearbeiteSicherheitsanf.ShowModal() 3091 3092 3093 # 3094 # -- Sicherheitsanforderungen aktualisieren ---------------------------------- 3095 # 3096 self.dbVerbindung.selektiere__prtProtokoll__Projekt__Sprache( 3097 TreeCtrlErg = self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt 3098 , istGefProt = False 3099 , prtTypId = None 3100 , prtProtokollId = self.dbVerbindung.daten__GefszenId_ProtId_siAnf__Projekt[self.dbVerbindung.ps_gefszenario_id] ) 3101 3102 3103 3104 3105 3106 3107 3108 # 3109 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 3110 # -- ausgewertet werden kann -------------------------- 3111 # 3112 ereignis.Skip( skip = True )
3113 3114 3115 3116 3117 # 3118 # ------------------------------------------------------------------------------------ 3119 # -- Innerhalb der Sicherheitsanforderungen navigieren ------------------ 3120 # ------------------------------------------------------------------------------------ 3121 #
3122 - def __ereignisNavigation__( self, ereignis = None ):
3123 """ 3124 Innerhalb der Sicherheitsaforderungen die Dokumente / Strukturpunkte anzeigen. 3125 3126 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 3127 @type ereignis: C{wx - Ereignisobjekt} 3128 """ 3129 3130 # 3131 # -- prt_protokoll_id übernehmen ------------------------------------------ 3132 # 3133 prt_protokoll_id = self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt.gibDbId() 3134 3135 3136 # 3137 # -- alle zugeordneten Strukturpunkte / Dokumente / -------------------------- 3138 # -- Protokolleinträge löschen -------------------------- 3139 # 3140 self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt.loescheAlles() 3141 3142 3143 # 3144 # -- Zugeordnete Strukturpunkte / Dokumente / -------------------------- 3145 # -- Protokolleinträge eintragen -------------------------- 3146 # 3147 if( prt_protokoll_id in self.dbVerbindung.daten__ProtId_StruktId__Projekt ) : 3148 3149 self.dbVerbindung.selektiere__strStrkt__Projekt__Sprache( 3150 TreeCtrlErg = self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt 3151 , strNameId = None 3152 , strStrktId = self.dbVerbindung.daten__ProtId_StruktId__Projekt[prt_protokoll_id][0] ) 3153 3154 3155 if( prt_protokoll_id in self.dbVerbindung.daten__ProtId_DokuId__Projekt ) : 3156 3157 self.dbVerbindung.selektiere__dokDoku__Projekt__Sprache( 3158 TreeCtrlErg_ListBoxErg = self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt 3159 , internFirmaId = None 3160 , dokDokuId = self.dbVerbindung.daten__ProtId_DokuId__Projekt[prt_protokoll_id][0] ) 3161 3162 3163 if( prt_protokoll_id in self.dbVerbindung.daten__prtProtokoll_siAnf_gefProt__Projekt__Sprache ) : 3164 3165 self.dbVerbindung.selektiere__prtProtokoll__Projekt__Sprache( 3166 self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt 3167 , istGefProt = True 3168 , prtTypId = None 3169 , prtProtokollId = self.dbVerbindung.daten__prtProtokoll_siAnf_gefProt__Projekt__Sprache[prt_protokoll_id] ) 3170 3171 3172 3173 # 3174 # -- Baum anzeigen ---------------------------------------------------------- 3175 # 3176 self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt.erzeugeBaum() 3177 self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt.markiereWert() 3178 3179 3180 3181 # 3182 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 3183 # -- ausgewertet werden kann -------------------------- 3184 # 3185 if( ereignis != None ) : ereignis.Skip( skip = True )
3186 3187 3188 3189 3190 3191 3192 # 3193 # ------------------------------------------------------------------------------------ 3194 # -- Datenbank auslesen -------------------------------------------------- 3195 # ------------------------------------------------------------------------------------ 3196 #
3197 - def liesDB( self ):
3198 """ 3199 Methode die aufgerufen wird, wenn die Datenbankwerte im Fenster dargestellt werden sollen. 3200 """ 3201 3202 # 3203 # -- Alles löschen ---------------------------------------------------------- 3204 # 3205 self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt.loescheAlles() 3206 self.SiAnfStrktDok__Zugeordnet.TreeCtrlErg__Id.wxObjekt.loescheAlles() 3207 3208 3209 # 3210 # -- Gefahrenszenario-Id ist nicht vorhanden -------------------------- 3211 # -- -> Aktualisierung nicht möglich -------------------------- 3212 # 3213 if( self.dbVerbindung.gib__PsGefszenarioId() is None ) : 3214 3215 return 3216 3217 3218 # 3219 # -- Sicherherheitsanforderungen zum Gefahrenszenario auslesen ---------- 3220 # 3221 self.dbVerbindung.selektiere__prtProtokoll__Projekt__Sprache( 3222 TreeCtrlErg = self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt 3223 , istGefProt = False 3224 , prtTypId = None 3225 , prtProtokollId = self.dbVerbindung.daten__GefszenId_ProtId_siAnf__Projekt[self.dbVerbindung.ps_gefszenario_id] ) 3226 3227 3228 3229 # 3230 # -- Baum anzeigen ---------------------------------------------------------- 3231 # 3232 self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt.erzeugeBaum() 3233 self.SiAnfStrktDok__SiAnf.TreeCtrlErg__Id.wxObjekt.markiereWert()
3234 3235 3236 3237 3238 3239 # 3240 # ---------------------------------------------------------------------------------------- 3241 # ---------------------------------------------------------------------------------------- 3242 # -- ------------------------------------------ 3243 # -- wx.TextCtrl mit einigen Ergänzungen ------------------------------------------ 3244 # -- ------------------------------------------ 3245 # ---------------------------------------------------------------------------------------- 3246 # ---------------------------------------------------------------------------------------- 3247 #
3248 -class TextCtrlAuswStatisch( wx.TextCtrl, __Ergaenzung__ ):
3249 """ 3250 Klasse, die einem C{wx.TextCtrl} eine Auswahlliste zuordnet, aus der die anzuzeigenden Wert entnommen werden. 3251 """ 3252 3253 # 3254 # ------------------------------------------------------------------------------------ 3255 # -- Initialisierungen -------------------------------------------------- 3256 # ------------------------------------------------------------------------------------ 3257 #
3258 - def __init__( self, parent, size, Statusleiste ):
3259 wx.TextCtrl.__init__( self, parent = parent, size = size, style = wx.TE_READONLY ) 3260 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste ) 3261 3262 # 3263 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 3264 # 3265 self.SetName( name = "TextCtrlAuswStatisch" ) 3266 3267 3268 # 3269 # -- Proportionalschrift setzen ------------------------------------------ 3270 # 3271 self.SetFont( font = wx.Font( pointSize = self.GetFont().GetPointSize() 3272 , family = wx.FONTFAMILY_TELETYPE 3273 , style = wx.FONTSTYLE_NORMAL 3274 , weight = wx.FONTWEIGHT_NORMAL ) ) 3275 3276 3277 3278 # 3279 # -- Hintergrundfarbe auf 'Nicht bearbeitbar' setzen -------------------------- 3280 # 3281 self.SetBackgroundColour( self.GetParent().GetBackgroundColour() ) 3282 3283 3284 # 3285 # -- die Auswahlliste -------------------------------------------------- 3286 # 3287 self.__Auswahlliste__ = [] 3288 3289 3290 # 3291 # -- Lfd. Nr. des aktuell gewählten Wertes ---------------------------------- 3292 # 3293 # self.__aktLfdNr__ = 0 3294 3295 3296 # 3297 # -- Ereignisse behandeln -------------------------------------------------- 3298 # 3299 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ ) 3300 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ ) 3301 3302 self.Bind( wx.EVT_CONTEXT_MENU, self.__ereignisKMenueNicht__ )
3303 3304 3305 3306 # 3307 # ------------------------------------------------------------------------------------ 3308 # -- Anzahl der Einträge der Auswahlliste angeben -------------------------- 3309 # ------------------------------------------------------------------------------------ 3310 #
3311 - def gibAnzahl( self ):
3312 """ 3313 Mit Aufruf dieser Methode wird die Gesamtzahl der Einträge der Auswahlliste des C{wx.TextCtrl} zurückgegeben. 3314 3315 @return: Es wird die Gesamtzahl der Einträge der Auswahlliste zurückgegeben. 3316 @rtype: Ganzzahl 3317 """ 3318 3319 # 3320 # -- Anzahl ermitteln -------------------------------------------------- 3321 # 3322 return len( self.__Auswahlliste__ )
3323 3324 3325 # 3326 # ------------------------------------------------------------------------------------ 3327 # -- ClientData des Eintrages mit der lfdNr zurückgegeben ------------------ 3328 # ------------------------------------------------------------------------------------ 3329 #
3330 - def gibClientData( self, lfdNr = None, gibAktWert = True ):
3331 """ 3332 Mit Aufruf dieser Methode wird C{ClientData} des Eintrages mit der C{lfdNr} zurückgegeben. Wenn C{lfdNr == None UND gibAktWert == True} wird C{ClientData} des aktuellen Wertes zurückgegebene. Wenn C{lfdNr == None UND gibAktWert == False} wird C{ClientData} zu allen Einträgen zurückgegeben. 3333 3334 @param gibAktWert : Wird C{True} angegeben (UND C{lfdNr == None}) wird der aktuelle Wert zurückgegeben. Wird C{False} angegeben (UND C{lfdNr == None}) 3335 @type gibAktWert : 3336 3337 @param lfdNr: Es ist die lfd. Nummer des Eintrages anzugeben, dessen C{wx.ClientData} zurückgegeben werden soll. 3338 @type lfdNr: Ganzzahl 3339 3340 @return: C{wx.ClientData} zur C{lfdNr} 3341 @rtype: Listenobjekt 3342 """ 3343 3344 # 3345 # -- keine Einträge vorhanden ------------------------------------------ 3346 # 3347 if( len( self.__Auswahlliste__ ) == 0 ) : return None 3348 3349 3350 # 3351 # -- clientData zurückgeben -------------------------------------------------- 3352 # 3353 if( lfdNr == None ) : 3354 if( gibAktWert ) : return self.clientData[self.__aktLfdNr__] 3355 else : return self.clientData 3356 else : 3357 return self.clientData[lfdNr]
3358 3359 3360 3361 # 3362 # ------------------------------------------------------------------------------------ 3363 # -- aktuellen Wert zurückgeben ------------------------------------------ 3364 # ------------------------------------------------------------------------------------ 3365 #
3366 - def gibWert( self ):
3367 """ 3368 Mit Aufruf dieser Methode wird der Wert der C{TextCtrl} zurückgegeben. 3369 """ 3370 3371 # 3372 # -- aktuellen Wert zurückgeben ------------------------------------------ 3373 # 3374 return self.GetValue()
3375 3376 3377 3378 # 3379 # ------------------------------------------------------------------------------------ 3380 # -- Alle Einträge löschen -------------------------------------------------- 3381 # ------------------------------------------------------------------------------------ 3382 #
3383 - def loescheAlles( self ):
3384 """ 3385 Mit Aufruf dieser Methode werden alle Einträge aus dem C{wx.TextCtrl} gelöscht, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt. 3386 """ 3387 3388 3389 # 3390 # -- Alle Einträge löschen -------------------------------------------------- 3391 # 3392 self.istVomBenutzerGeaendert = False 3393 self.istBenutzerAenderungJetzt = False 3394 self.__Auswahlliste__ = [] 3395 # self.__aktLfdNr__ = 0 3396 del self.wertNichtMod[:] 3397 self.ChangeValue( "" )
3398 3399 3400 3401 # 3402 # ------------------------------------------------------------------------------------ 3403 # -- aktuellen Wert übernehmen ------------------------------------------ 3404 # ------------------------------------------------------------------------------------ 3405 #
3406 - def nimmWert( self, wert, clientData = None ):
3407 """ 3408 Mit Aufruf dieser Methode werden die Werte der C{wx.TextCtrl} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden 3409 3410 @param wert: Es ist ein Wert der Auswahlliste des C{wx.TextCtrl} anzugeben. 3411 @type wert: Zeichenkette 3412 3413 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben. 3414 @type clientData: beliebiges Objekt 3415 """ 3416 3417 # 3418 # -- aktuellen Wert übernehmen ------------------------------------------ 3419 # 3420 self.wertNichtMod.append( wert ) 3421 self.__Auswahlliste__.append( wert ) 3422 self.clientData.append( clientData ) 3423 3424 3425 # 3426 # -- Der Wert wurde vom Benutzer nicht verändert -------------------------- 3427 # 3428 self.istVomBenutzerGeaendert = False 3429 self.istBenutzerAenderungJetzt = False
3430 3431 3432 3433 # 3434 # ------------------------------------------------------------------------------------ 3435 # -- ClientData des Eintrages mit der lfdNr zurückgegeben ------------------ 3436 # ------------------------------------------------------------------------------------ 3437 #
3438 - def selektiereWert( self, clientDataId ):
3439 """ 3440 Mit Aufruf dieser Methode wird der Wert in C{TextCtrlAuswStatisch} selektiert, dem C{clientDataId} in C{clientData} zugeordnet ist . 3441 3442 3443 @param clientDataId: Es ist die Identifikationsnummer in C{clientData} des Eintrages der C{TextCtrlAuswStatisch} anzugeben, der ausgewählt werden soll. 3444 @type clientDataId: beliebig (meist Ganzzahl) 3445 3446 @return: C{True} wenn der Wert selektiert werden konnte; sonst C{False}. 3447 @rtype: Boolean 3448 """ 3449 3450 # 3451 # -- gewünschten Wert markieren ------------------------------------------ 3452 # 3453 for i in range( len( self.__Auswahlliste__ ) ) : 3454 3455 self.ChangeValue( self.__Auswahlliste__[i] ) 3456 3457 if ( self.gibClientData( lfdNr = i )[0] == clientDataId ) : 3458 3459 return True 3460 3461 3462 # 3463 # -- Wert wurde nicht gefunden ------------------------------------------ 3464 # 3465 self.ChangeValue( "" ) 3466 return False
3467 3468 3469 3470 # 3471 # 3472 # 3473 # ---------------------------------------------------------------------------------------- 3474 # ---------------------------------------------------------------------------------------- 3475 # -- ------------------------------------------ 3476 # -- wx.TextCtrl mit einigen Ergänzungen ------------------------------------------ 3477 # -- ------------------------------------------ 3478 # ---------------------------------------------------------------------------------------- 3479 # ---------------------------------------------------------------------------------------- 3480 #
3481 -class TextCtrlErg( wx.TextCtrl, __TextFunktionen__ ):
3482 """ 3483 Klasse, die eine C{wx.TextCtrl} mit weiteren Funktionen versieht. 3484 """ 3485 3486 # 3487 # ------------------------------------------------------------------------------------ 3488 # -- Initialisierungen -------------------------------------------------- 3489 # ------------------------------------------------------------------------------------ 3490 #
3491 - def __init__( self, parent, size, style, Statusleiste ):
3492 wx.TextCtrl.__init__( self, parent = parent, size = size, style = style ) 3493 __TextFunktionen__.__init__( self, Statusleiste = Statusleiste ) 3494 3495 # 3496 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 3497 # 3498 self.SetName( name = "TextCtrlErg" ) 3499 3500 3501 # 3502 # -- Proportionalschrift setzen ------------------------------------------ 3503 # 3504 self.SetFont( font = wx.Font( pointSize = self.GetFont().GetPointSize() 3505 , family = wx.FONTFAMILY_TELETYPE 3506 , style = wx.FONTSTYLE_NORMAL 3507 , weight = wx.FONTWEIGHT_NORMAL ) ) 3508 3509 3510 # 3511 # -- Ereignisse behandeln -------------------------------------------------- 3512 # 3513 self.Bind( wx.EVT_TEXT, self.__ereignisAenderung__, self ) 3514 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ ) 3515 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ ) 3516 self.Bind( wx.EVT_LEAVE_WINDOW, self.__setzeGueltigeZk__ )
3517 3518 3519 # 3520 # ------------------------------------------------------------------------------------ 3521 # -- ClientData zurückgegeben ------------------------------------------ 3522 # ------------------------------------------------------------------------------------ 3523 #
3524 - def gibClientData( self ):
3525 """ 3526 Mit Aufruf dieser Methode wird C{self.clientData} zurückgegeben. 3527 3528 @return: self.clientData 3529 @rtype: Listenobjekt 3530 """ 3531 3532 return self.clientData
3533 3534 3535 3536 # 3537 # ------------------------------------------------------------------------------------ 3538 # -- aktuellen Wert zurückgeben ------------------------------------------ 3539 # ------------------------------------------------------------------------------------ 3540 #
3541 - def gibWert( self ):
3542 """ 3543 Mit Aufruf dieser Methode wird der Wert des C{TextCtrl} zurückgegeben. 3544 """ 3545 3546 # 3547 # -- aktuellen Wert übernehmen ------------------------------------------ 3548 # 3549 return self.GetValue()
3550 3551 3552 3553 # 3554 # ------------------------------------------------------------------------------------ 3555 # -- Alle Einträge löschen -------------------------------------------------- 3556 # ------------------------------------------------------------------------------------ 3557 #
3558 - def loescheAlles( self ):
3559 """ 3560 Mit Aufruf dieser Methode werden alle Einträge aus dem C{wx.TextCtrl} gelöscht, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt. 3561 """ 3562 3563 3564 # 3565 # -- Alle Einträge löschen -------------------------------------------------- 3566 # 3567 self.istVomBenutzerGeaendert = False 3568 self.istBenutzerAenderungJetzt = False 3569 del self.wertNichtMod[:] 3570 self.ChangeValue( "" ) # kein wx.EVENT erzeugen !
3571 3572 3573 3574 3575 # 3576 # ------------------------------------------------------------------------------------ 3577 # -- aktuellen Wert übernehmen ------------------------------------------ 3578 # ------------------------------------------------------------------------------------ 3579 #
3580 - def nimmWert( self, wert, clientData = None ):
3581 """ 3582 Mit Aufruf dieser Methode wird der Wert der C{wx.TextCtrl} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden 3583 3584 @param wert: Es ist der Wert der C{wx.TextCtrl} anzugeben. 3585 @type wert: Zeichenkette 3586 3587 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben. 3588 @type clientData: beliebiges Objekt 3589 """ 3590 3591 # 3592 # -- Alles löschen ---------------------------------------------------------- 3593 # 3594 self.loescheAlles() 3595 3596 # 3597 # -- aktuellen Wert übernehmen ------------------------------------------ 3598 # 3599 self.wertNichtMod.insert( 0, wert ) 3600 self.ChangeValue( wert ) # kein wx.EVENT erzeugen ! 3601 self.clientData = clientData 3602 3603 3604 # 3605 # -- Der Wert wurde vom Benutzer nicht verändert -------------------------- 3606 # 3607 self.istVomBenutzerGeaendert = False 3608 self.istBenutzerAenderungJetzt = False
3609 3610 3611 3612 3613 3614 3615 # 3616 # 3617 # 3618 # ---------------------------------------------------------------------------------------- 3619 # ---------------------------------------------------------------------------------------- 3620 # -- ------------------------------------------ 3621 # -- TreeCtrl mit einigen Ergänzungen ------------------------------------------ 3622 # -- ------------------------------------------ 3623 # ---------------------------------------------------------------------------------------- 3624 # ---------------------------------------------------------------------------------------- 3625 #
3626 -class TreeCtrlErg( wx.TreeCtrl, __Ergaenzung__ ):
3627 """ 3628 Klasse, die ein C{wx.TreeCtrl} mit weiteren Funktionen versieht. 3629 """ 3630 3631 # 3632 # ------------------------------------------------------------------------------------ 3633 # -- Initialisierungen -------------------------------------------------- 3634 # ------------------------------------------------------------------------------------ 3635 #
3636 - def __init__( self, parent, Statusleiste, style = wx.BORDER_SUNKEN|wx.TR_DEFAULT_STYLE|wx.TR_HAS_VARIABLE_ROW_HEIGHT ):
3637 3638 3639 # 3640 # -- Notlösung ! -------------------------- 3641 # -- Dem Fehler in >comctl32.dll< ausweichen -------------------------- 3642 # 3643 if( os.name == 'nt' ) : 3644 wx.TreeCtrl.__init__( self, parent = parent, style = style ) 3645 else : 3646 wx.TreeCtrl.__init__( self, parent = parent, style = style|wx.TR_HIDE_ROOT ) 3647 3648 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste ) 3649 3650 3651 # 3652 # -- Proportionalschrift setzen ------------------------------------------ 3653 # 3654 self.SetFont( font = wx.Font( pointSize = self.GetFont().GetPointSize() 3655 , family = wx.FONTFAMILY_TELETYPE 3656 , style = wx.FONTSTYLE_NORMAL 3657 , weight = wx.FONTWEIGHT_NORMAL ) ) 3658 3659 3660 3661 # 3662 # -- Die (unsichtbare) Wurzel des darzustellenden Baumes ------------------ 3663 # 3664 self.elementListe = [] 3665 self.dbIdListe = [] 3666 self.wertIdListe = [] 3667 3668 self.wertIdIntern = 0 # zur Bildung der internen wertId 3669 self.dictWertIdIntern = dict() # zur Verwaltung der Vorgänger bei Verwendung der internen wertId 3670 self.wertIdInternAktHKnoten = 0 # Startpunkt in >self.wertIdListe< des ersten Strkt.Punktes des akt. Hauptknotens 3671 self.bezAktHKnoten = None # Bezeichnung des aktuellen Hauptknotens 3672 3673 self.dictWertIdHK = dict() # lfd. Nummer der Hauptknoten einschl. Bezeichnung 3674 3675 self.loescheAlles() 3676 3677 3678 3679 # 3680 # -- Ereignisse behandeln -------------------------------------------------- 3681 # 3682 self.Bind( wx.EVT_TREE_SEL_CHANGED, self.__ereignisAenderung__, self ) 3683 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ ) 3684 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ ) 3685 3686 3687 # 3688 # -- Notlösung ! ---------------------------------- 3689 # -- Dem Fehler in >comctl32.dll< ausweichen ---------------------------------- 3690 # 3691 if( os.name == 'nt' ) : 3692 self.Bind( wx.EVT_TREE_SEL_CHANGED, self.__ereignisFehlerWINDOWS__, self ) 3693 self.Bind( wx.EVT_TREE_ITEM_ACTIVATED, self.__ereignisFehlerWINDOWS__, self ) 3694 self.Bind( wx.EVT_TREE_ITEM_RIGHT_CLICK, self.__ereignisFehlerWINDOWS__, self ) 3695 self.Bind( wx.EVT_TREE_ITEM_MIDDLE_CLICK, self.__ereignisFehlerWINDOWS__, self ) 3696 self.Bind( wx.EVT_TREE_KEY_DOWN, self.__ereignisFehlerWINDOWS__, self )
3697 3698 3699 3700 # 3701 # ------------------------------------------------------------------------------------ 3702 # -- Fehler in >comctl32< abfangen ------------------------------------------ 3703 # ------------------------------------------------------------------------------------ 3704 #
3705 - def __ereignisFehlerWINDOWS__( self, ereignis = None ):
3706 """ 3707 Methode die aufgerufen wird, um den Fehler in der >comctl32< abzufangen. 3708 3709 @param ereignis: Es ist das C{wx-Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 3710 @type ereignis: C{wx-Ereignisobjekt} 3711 """ 3712 3713 # 3714 # -- Wenn das root-Element aktiviert wurde, ---------- 3715 # -- - Selektion auf das nächste Element setzen (wenn möglich) ---------- 3716 # -- - das Ereignis nicht weiterreichen ---------- 3717 # 3718 if( ereignis.GetEventObject().GetSelection() == self.GetRootItem() ): 3719 3720 if( self.GetChildrenCount( item = self.GetRootItem(), recursively = True ) > 0 ) : 3721 self.SelectItem( item = self.GetFirstChild( self.GetRootItem() )[0], select = True ) 3722 3723 ereignis.Skip( skip = False ) 3724 3725 return 3726 3727 3728 # 3729 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 3730 # -- ausgewertet werden kann -------------------------- 3731 # 3732 ereignis.Skip( skip = True )
3733 3734 3735 3736 # 3737 # ------------------------------------------------------------------------------------ 3738 # -- Methode zum Ordnen der internen >wertIdVorgaenger< ------------------ 3739 # ------------------------------------------------------------------------------------ 3740 #
3741 - def __ersetzeWertIdVorgaenger__( self ):
3742 """ 3743 Methode die aufgerufen wird, um die C{wertIdVorgaenger} zu ersetzen . 3744 """ 3745 3746 3747 # 3748 # -- interne >wertId< werden nicht verwendet -------------------------- 3749 # 3750 if( len( self.dictWertIdIntern ) == 0 ) : return 3751 3752 3753 # 3754 # -- >wertIdVorgänger< ersetzen ------------------------------------------ 3755 # 3756 for i in range( self.wertIdInternAktHKnoten, len( self.elementListe ) ) : 3757 3758 if( self.elementListe[i][1][1] in self.dictWertIdIntern ) : 3759 3760 self.elementListe[i][1][1] = self.dictWertIdIntern[ self.elementListe[i][1][1] ] 3761 3762 elif( self.elementListe[i][1][0] != self.dictWertIdIntern[0] ) : 3763 3764 self.elementListe[i][1][1] = self.dictWertIdIntern[0] 3765 3766 3767 # 3768 # -- der nächste Hauptknoten kann gebildet werden -------------------------- 3769 # 3770 self.dictWertIdIntern.clear()
3771 3772 3773 3774 # 3775 # ------------------------------------------------------------------------------------ 3776 # -- Methode zum Übernehmen de Einträge ---------------------------------- 3777 # ------------------------------------------------------------------------------------ 3778 #
3779 - def __nimmEintrag__( self, lfdNr, eintragVorg ):
3780 """ 3781 Methode die aufgerufen wird, um die Einträge zu übernehmen. 3782 3783 @param lfdNr: Es ist die lfd. Nummer des zu übernehmenden Eintrages in C{self.elementListe} anzugeben. 3784 @type lfdNr: Gazzahl 3785 3786 @param eintragVorg: Es ist der Vorgänger des zu übernehmenden Eintrages anzugeben. 3787 @type eintragVorg: wx.TreeItemId 3788 3789 @return: Es wird der übernommene Eintrag zurückgegeben. 3790 @rtype: wx.TreeItemId 3791 """ 3792 3793 # 3794 # -- Eintrag übernehmen -------------------------------------------------- 3795 # 3796 eintrag = None 3797 if( self.elementListe[lfdNr][1][5] ) : 3798 3799 eintrag = self.AppendItem( eintragVorg, self.elementListe[lfdNr][0] ) 3800 self.SetPyData( eintrag, self.elementListe[lfdNr][1] ) 3801 3802 3803 # 3804 # -- Eintrag zurückgeben -------------------------------------------------- 3805 # 3806 return eintrag
3807 3808 3809 3810 3811 # 3812 # ------------------------------------------------------------------------------------ 3813 # -- Den Baum erzeugen -------------------------------------------------- 3814 # ------------------------------------------------------------------------------------ 3815 #
3816 - def erzeugeBaum( self ):
3817 """ 3818 Diese Methode erzeugt aus den Einträgen der Ebene 0 (auf Wurzelebene) den Baum 3819 """ 3820 3821 # 3822 # -- Notlösung ! -------------------------- 3823 # -- Dem Fehler in >comctl32.dll< ausweichen -------------------------- 3824 # 3825 if( os.name == 'nt' ) : 3826 3827 if( len( self.elementListe ) < 1 ) : 3828 self.Enable( False ) 3829 return 3830 3831 self.Enable( True ) 3832 3833 else: 3834 3835 if( len( self.elementListe ) < 1 ) : 3836 return 3837 3838 3839 3840 # 3841 # -- Aus der Liste der Strukturelemente die mehrfach vorhandenen ---------- 3842 # -- >dbId< entfernen. ---------- 3843 # -- Es werden alle Einträge entfernt, die keinen Vorgänger ---------- 3844 # -- besitzen. Hauptknoten werden ignoriert. ---------- 3845 # 3846 for i in range( len( self.elementListe ) ) : 3847 3848 if( self.dbIdListe.count( self.elementListe[i][1][3] ) > 1 3849 and self.elementListe[i][1][3] > 0 3850 and self.elementListe[i][1][1] is None ) : 3851 3852 self.elementListe[i][1][5] = False 3853 3854 3855 3856 # 3857 # -- Wenn interne >wertId< verwendet werden ------------------ 3858 # -- >wertIdVorgaenger< mittels interner >wertId< ersetzen ------------------ 3859 # 3860 self.__ersetzeWertIdVorgaenger__() 3861 3862 3863 3864 # 3865 # -- Alle Einträge auf Ebene 0 übernehmen -------------------------- 3866 # -- 1.) die keinen Vorgänger besitzen -------------------------- 3867 # -- 2.) deren >wertIdVorgaenger< nicht mittels -------------------------- 3868 # -- >nimmWert()< übernommen wurde -------------------------- 3869 # 3870 tmpElementListe = [] 3871 for i in range( len( self.elementListe ) ) : 3872 3873 # 3874 # -- >wertIdVorgaenger< ist gültig, deshalb nicht auf ------------------ 3875 # -- Ebene 0 übernehmen ------------------ 3876 # 3877 # 3878 if( self.elementListe[i][1][1] in self.wertIdListe ) : 3879 3880 tmpElementListe.append( self.elementListe[i] ) 3881 continue 3882 3883 # 3884 # -- >wertId< ist in der Liste der gültigen Id nicht enthalten ---------- 3885 # -- bzw. es ist kein Vorgänger vorhanden ---------- 3886 # 3887 if( self.elementListe[i][1][0] not in self.wertIdListe 3888 or self.elementListe[i][1][1] is None ) : 3889 3890 self.__nimmEintrag__( lfdNr = i, eintragVorg = self.wurzel ) 3891 3892 3893 self.elementListe = tmpElementListe 3894 3895 3896 3897 # 3898 # -- Baum spaltenweise aufbauen ---------- 3899 # -- Es wird vorrausgesetzt, dass alle Abhängigkeiten korrekt ---------- 3900 # -- abgebildet sind. ---------- 3901 # -- Es ist nicht notwendig, dass der Vorgänger vor dem ---------- 3902 # -- Nachfolger aufgelistet ist ---------- 3903 # 3904 3905 # 3906 # -- alle Elemente der ersten Ebene unterhalb >root< zusammenstellen ---------- 3907 # 3908 aktElement = None 3909 aktElemente = [] 3910 for i in range( self.GetChildrenCount( item = self.GetRootItem(), recursively = False ) ): 3911 3912 if( i == 0 ) : aktElement = self.GetFirstChild( self.GetRootItem() )[0] 3913 else : aktElement = self.GetNextSibling( item = aktElement ) 3914 3915 aktElemente.append( aktElement ) 3916 3917 3918 3919 # 3920 # -- Baum spaltenweise aufbauen ------------------------------------------ 3921 # 3922 tmpAktElemente = [] 3923 elementListeUebernommen = [] 3924 while( len( elementListeUebernommen ) < len( self.elementListe ) ) : 3925 3926 # 3927 # -- Spalte durchsuchen ------------------ 3928 # -- Mit dem ersten Element unterhalb >root< beginnen ------------------ 3929 # 3930 tmpAktElemente = [] 3931 for i in range( len( aktElemente ) ): 3932 3933 # 3934 # -- Alle direkt zugeordneten Elemente suchen / übernehmen ---------- 3935 # 3936 for j in range( len( self.elementListe ) ) : 3937 3938 if( self.elementListe[j][1][1] == self.GetPyData( aktElemente[i] )[0] ) : 3939 3940 neu = self.__nimmEintrag__( lfdNr = j, eintragVorg = aktElemente[i] ) 3941 3942 if( neu is not None ) : tmpAktElemente.append( neu ) 3943 3944 elementListeUebernommen.append( self.elementListe[j][1][0] ) 3945 3946 3947 # 3948 # -- Mit nächster Spalte fortfahren ---------------------------------- 3949 # 3950 aktElemente = tmpAktElemente
3951 3952 3953 3954 3955 # 3956 # ------------------------------------------------------------------------------------ 3957 # -- Bezeichnung des Hauptknotens zurückgeben -------------------------- 3958 # ------------------------------------------------------------------------------------ 3959 #
3960 - def gibBezeichnungHauptknoten( self, eintrag = None ):
3961 """ 3962 Diese Methode gibt die Bezeichnung des Hauptkontens zurück, dem der aktuell gewählte Eintrag des C{TreeCtrl} zugeordnet ist. 3963 3964 @param eintrag: Es ist der zu prüfende Eintrag anzugeben. Wird C{None} angegeben, wird der aktuell ausgewählte Eintrag verwendet. 3965 @type eintrag: wx.TreeItemId 3966 3967 @return: Es wird die Bezeichnung des Hauptknotens (C{self.HK_ANM, self.HK_DOK, self.HK_PE, self.HK_STR}) zurückgegeben. Wird der mechanismus der internen Vergabe der C{wertId} nicht verwendet, oder ist kein gültiges Element übergeben, wird C{None} zurückgegeben. 3968 @rtype: Boolean 3969 3970 """ 3971 3972 # 3973 # -- Element untersuchen -------------------------------------------------- 3974 # 3975 eintragIntern = eintrag 3976 if( eintragIntern is None ) : 3977 3978 # 3979 # -- keine gültige Auswahl bzw. keine Verwendung der Hauptknoten -- 3980 # 3981 if( not self.GetSelection().IsOk() 3982 or len( self.dictWertIdHK ) == 0 ) : 3983 3984 return None 3985 3986 3987 # 3988 # -- aktuell gewählten Eintrag übernehmen ---------------------------------- 3989 # 3990 eintragIntern = self.GetSelection() 3991 3992 3993 # 3994 # -- Bezeichnung des Hauptknotens zurückgeben -------------------------- 3995 # 3996 return( self.GetPyData( eintragIntern )[4] )
3997 3998 3999 4000 4001 4002 # 4003 # ------------------------------------------------------------------------------------ 4004 # -- ClientData zurückgegeben ------------------------------------------ 4005 # ------------------------------------------------------------------------------------ 4006 #
4007 - def gibClientData( self, eintrag = None ):
4008 """ 4009 Mit Aufruf dieser Methode wird C{ClientData} zum aktuell gewählten Eintrages zurückgegeben. 4010 4011 @param eintrag: Es ist der Eintrag anzugeben, dessen C{ClientData} zurückgegeben werden soll. Wird C{None} angegeben, wird der aktuell ausgewählte Eintrag verwendet. 4012 @type eintrag: wx.TreeItemId 4013 4014 @return: C{wx.ClientData} 4015 @rtype: Listenobjekt 4016 """ 4017 4018 # 4019 # -- keine gültige Auswahl -------------------------------------------------- 4020 # 4021 if( not self.GetSelection().IsOk() ) : 4022 return 4023 4024 4025 # 4026 # -- clientData zurückgeben -------------------------------------------------- 4027 # 4028 if( eintrag is None ) : return self.GetPyData( self.GetSelection() )[2] 4029 4030 return self.GetPyData( eintrag )[2]
4031 4032 4033 4034 # 4035 # ------------------------------------------------------------------------------------ 4036 # -- >dbId< zurückgeben -------------------------------------------------- 4037 # ------------------------------------------------------------------------------------ 4038 #
4039 - def gibDbId( self, eintrag = None ):
4040 """ 4041 Mit Aufruf dieser Methode wird C{dbId} zum aktuell gewählten Eintrages zurückgegeben. 4042 4043 4044 @param eintrag: Es ist der Eintrag anzugeben, dessen C{dbId} zurückgegeben werden soll. Wird C{None} angegeben, wird der aktuell ausgewählte Eintrag verwendet. 4045 @type eintrag: wx.TreeItemId 4046 4047 @return: C{self.dbId} 4048 @rtype: Python-Objekt 4049 """ 4050 4051 4052 # 4053 # -- aktuellen Eintrag verwenden ------------------------------------------ 4054 # 4055 if( eintrag is None ) : 4056 4057 # 4058 # -- keine gültige Auswahl ------------------------------------------ 4059 # 4060 if( not self.GetSelection().IsOk() ) : 4061 return None 4062 4063 4064 # 4065 # -- dbId zurückgeben ------------------------------------------ 4066 # 4067 return self.GetPyData( self.GetSelection() )[3] 4068 4069 4070 4071 # 4072 # -- eintrag verwenden -------------------------------------------------- 4073 # 4074 return self.GetPyData( eintrag )[3]
4075 4076 4077 4078 # 4079 # ------------------------------------------------------------------------------------ 4080 # -- >wert< zurückgeben -------------------------------------------------- 4081 # ------------------------------------------------------------------------------------ 4082 #
4083 - def gibWert( self, eintrag = None ):
4084 """ 4085 Mit Aufruf dieser Methode wird der C{wert} zum aktuell gewählten Eintrages zurückgegeben. 4086 4087 4088 @param eintrag: Es ist der Eintrag anzugeben, dessen C{wert} zurückgegeben werden soll. Wird C{None} angegeben, wird der aktuell ausgewählte Eintrag verwendet. 4089 @type eintrag: wx.TreeItemId 4090 4091 @return: C{self.dbId} 4092 @rtype: Python-Objekt 4093 """ 4094 4095 4096 # 4097 # -- aktuellen Eintrag verwenden ------------------------------------------ 4098 # 4099 if( eintrag is None ) : 4100 4101 # 4102 # -- keine gültige Auswahl ------------------------------------------ 4103 # 4104 if( not self.GetSelection().IsOk() ) : 4105 return None 4106 4107 4108 # 4109 # -- dbId zurückgeben ------------------------------------------ 4110 # 4111 return self.GetPyData( self.GetSelection() )[0] 4112 4113 4114 4115 # 4116 # -- eintrag verwenden -------------------------------------------------- 4117 # 4118 return self.GetPyData( eintrag )[0]
4119 4120 4121 4122 4123 # 4124 # ------------------------------------------------------------------------------------ 4125 # -- >eintrag< und eine Liste von Einträgen zurückgeben, die dem ---------- 4126 # -- aktuell gegebenen >eintrag< zugeordnet sind ---------- 4127 # ------------------------------------------------------------------------------------ 4128 #
4129 - def gibZweig( self ):
4130 """ 4131 Mit Aufruf dieser Methode wird der aktuell selektierte Eintrag, einschließlich der untergeordneten Einträge (d.h. der gesamte Zweig) zurückgegeben. 4132 4133 @return: liste der C{wx.TreeItemId} 4134 @rtype: Python-Liste 4135 """ 4136 4137 # 4138 # -- aktuell selektieren Eintrag ermitteln ---------------------------------- 4139 # 4140 eintrag = self.GetSelection() 4141 if( istRoot ) : eintrag = self.GetRootItem() 4142 4143 4144 # 4145 # -- Liste der Einträge -------------------------------------------------- 4146 # 4147 eintragListe = [] 4148 eintragListe.append( eintrag ) 4149 4150 4151 # 4152 # -- Es sind keine weiteren Einträge zugeordnet -------------------------- 4153 # 4154 if( not self.ItemHasChildren( eintrag ) ) : return eintragListe 4155 4156 4157 # 4158 # -- Ersten Eintrag übernehmen ------------------------------------------ 4159 # 4160 eintragListe.append( self.GetFirstChild( eintrag )[0] ) 4161 cookie = self.GetFirstChild( eintrag )[1] 4162 4163 4164 # 4165 # -- die nächsten Einträge übernehmen ---------------------------------- 4166 # 4167 item = self.GetNextChild( eintrag, cookie )[0] 4168 cookie = self.GetNextChild( eintrag, cookie )[1] 4169 4170 while( item.IsOk() ) : 4171 4172 eintragListe.append( item ) 4173 item = self.GetNextChild( eintrag, cookie )[0] 4174 cookie = self.GetNextChild( eintrag, cookie )[1] 4175 4176 4177 # 4178 # -- Einträge zurückgeben -------------------------------------------------- 4179 # 4180 return eintragListe
4181 4182 4183 4184 4185 # 4186 # ------------------------------------------------------------------------------------ 4187 # -- alle Daten zu >eintrag<, sowie die Daten aller Einträge -- 4188 # -- zurückgeben, die dem aktuell gegebenen >eintrag< zugeordnet sind -- 4189 # ------------------------------------------------------------------------------------ 4190 #
4191 - def gibZweigDaten( self ):
4192 """ 4193 Mit Aufruf dieser Methode werden die Daten zu Eintrag C{eintrag} einschließlich der Daten der untergeordneten Einträge (d.h. die Daten des gesamten Zweiges) zurückgegeben. 4194 4195 @param eintrag: Es ist der Eintrag anzugeben 4196 @type eintrag: wx.TreeItemId 4197 4198 @return: Liste der Daten zu allen Einträgen (Elementen) des Zweiges, welche wie folgt gebildet ist [self.gibDbId(), self.gibClientData()] 4199 @rtype: Python-Liste 4200 """ 4201 4202 # 4203 # -- Zweig auslesen ---------------------------------------------------------- 4204 # 4205 zweig = self.gibZweig() 4206 4207 4208 # 4209 # -- Daten zusammenstellen -------------------------------------------------- 4210 # 4211 erg = [] 4212 for i in range( len( zweig ) ) : 4213 4214 tmp = [self.gibDbId( zweig[i] )] 4215 erg.append( tmp + self.gibClientData( zweig[i] ) ) 4216 4217 4218 # 4219 # -- Werte zurückgeben -------------------------------------------------- 4220 # 4221 return erg
4222 4223 4224 4225 4226 4227 # 4228 # ------------------------------------------------------------------------------------ 4229 # -- >dbId< ist vorhanden -------------------------------------------------- 4230 # ------------------------------------------------------------------------------------ 4231 #
4232 - def istDbIdVorhanden( self, dbId ):
4233 """ 4234 Mit Aufruf dieser Methode wird geprüft, ob C{dbId} im Baum vorhanden ist. 4235 4236 @param dbId: Es wird C{True} zurückgegeben, wenn C{dbId} vorhanden ist. 4237 @type dbId: Ganzzahl 4238 4239 @return: C{wx.ClientData} 4240 @rtype: Listenobjekt 4241 """ 4242 4243 # 4244 # -- Prüfung ausführen -------------------------------------------------- 4245 # 4246 return( dbId in self.dbIdListe )
4247 4248 4249 4250 4251 4252 # 4253 # ------------------------------------------------------------------------------------ 4254 # -- aktuell gewähltes TreeCtrl-Element ist ein Hauptknoten ------------------ 4255 # -- oder root ------------------ 4256 # ------------------------------------------------------------------------------------ 4257 #
4258 - def istHauptknoten( self, eintrag = None ):
4259 """ 4260 Diese Methode prüft, ob das aktuell gewählte Element ein Hauptknoten bzw C{root} ist. 4261 4262 @param eintrag: Es ist der zu prüfende Eintrag anzugeben. Wird C{None} angegeben, wird der aktuell ausgewählte Eintrag verwendet. 4263 @type eintrag: wx.TreeItemId 4264 4265 @return: Es wird C{True} zurückgegeben, wenn der aktuell gewählte Eintrag ein Hauptknoten ist, andernfalls C{False}. Wird der mechanismus der internen Vergabe der C{wertId} nicht verwendet, oder ist kein gültiges Element übergeben, wird C{None} zurückgegeben. 4266 @rtype: Boolean 4267 """ 4268 4269 # 4270 # -- Element untersuchen -------------------------------------------------- 4271 # 4272 eintragIntern = eintrag 4273 if( eintragIntern is None ) : 4274 4275 # 4276 # -- keine gültige Auswahl bzw. keine Verwendung der Hauptknoten -- 4277 # 4278 if( not self.GetSelection().IsOk() 4279 or len( self.dictWertIdHK ) == 0 ) : 4280 4281 return None 4282 4283 4284 # 4285 # -- aktuell gewählten Eintrag übernehmen ---------------------------------- 4286 # 4287 eintragIntern = self.GetSelection() 4288 4289 4290 # 4291 # -- Es liegt ein Hauptknoten vor ? ------------------------------------------ 4292 # 4293 return( eintragIntern == self.GetRootItem() 4294 or self.GetPyData( eintragIntern )[0] in self.dictWertIdHK )
4295 4296 4297 4298 4299 4300 # 4301 # ------------------------------------------------------------------------------------ 4302 # -- Den Baum löschen -------------------------------------------------- 4303 # ------------------------------------------------------------------------------------ 4304 #
4305 - def loescheAlles( self ):
4306 """ 4307 Diese Methode löscht den gesamten Baum und fügt die Wurzel (C{self.wurzel}) ein. 4308 """ 4309 4310 # 4311 # -- Baum löschen und Wurzel einfügen ---------------------------------- 4312 # 4313 self.DeleteAllItems() 4314 4315 # 4316 # -- Notlösung ! ---------------------------------- 4317 # -- Dem Fehler in >comctl32.dll< ausweichen ---------------------------------- 4318 # 4319 if( os.name == 'nt' ) : 4320 self.wurzel = self.AddRoot( u"---" ) 4321 else : 4322 self.wurzel = self.AddRoot( u"Wird nicht angezeigt (style = wx.TR_HIDE_ROOT ) !" ) 4323 4324 4325 self.elementListe = [] 4326 self.dbIdListe = [] 4327 self.wertIdListe = [] 4328 4329 self.wertIdIntern = 0 4330 self.dictWertIdIntern = dict() 4331 self.wertIdInternAktHKnoten = 0 4332 self.bezAktHKnoten = None 4333 4334 self.dictWertIdHK = dict()
4335 4336 4337 4338 4339 # 4340 # ------------------------------------------------------------------------------------ 4341 # -- Eintrag markieren -------------------------------------------------- 4342 # ------------------------------------------------------------------------------------ 4343 #
4344 - def markiereWert( self, eintrag = None ):
4345 """ 4346 Mit Aufruf dieser Methode wird der Eintrag mit der C{lfdNr} markiert. 4347 ACHTUNG ! Noch nicht vollständig implementiert ! 4348 4349 @param eintrag: Es ist der Eintrag anzugeben, der markiert werden soll. 4350 @type eintrag: wx.TreeItemId 4351 """ 4352 4353 # 4354 # -- keine Einträge vorhanden ------------------------------------------ 4355 # 4356 if( self.IsEmpty() ) : return 4357 4358 4359 # 4360 # -- lfd. Nr. ist nicht vorhanden ------------------------------------------ 4361 # 4362 if( eintrag is None ) : 4363 4364 self.ExpandAll() 4365 4366 # 4367 # -- Notlösung ! ------------------ 4368 # -- Dem Fehler in >comctl32.dll< ausweichen ------------------ 4369 # 4370 if( os.name == 'nt' ) : 4371 self.SelectItem( self.GetRootItem() ) 4372 else : 4373 self.SelectItem( self.GetNextVisible( self.GetRootItem() ) ) 4374 4375 return
4376 4377 4378 # 4379 # -- lfd. Nr. markieren -------------------------------------------------- 4380 # -> später korrekt implementieren ! 4381 # 4382 # self.SelectItem( ... ) 4383 4384 4385 # 4386 # ------------------------------------------------------------------------------------ 4387 # -- Eintrag anhand Datenbank-Id markieren ---------------------------------- 4388 # ------------------------------------------------------------------------------------ 4389 #
4390 - def markiereWertDbId( self, dbId ) :
4391 """ 4392 Mit Aufruf dieser Methode wird der Eintrag markiert, der der Bedingung C{self.gibDbId() == dbId} genügt. 4393 4394 @param dbId: Es ist der Eintrag anzugeben, der markiert werden soll. 4395 @type dbId: Ganzzahl 4396 4397 @return: C{True} wenn der Wert selektiert werden konnte; sonst C{False}. 4398 @rtype: Boolean 4399 """ 4400 4401 # 4402 # -- keine Einträge vorhanden ------------------------------------------ 4403 # 4404 if( self.IsEmpty() ) : return 4405 4406 4407 # 4408 # -- Alle Einträge anzeigen -------------------------------------------------- 4409 # 4410 self.ExpandAll() 4411 4412 4413 # 4414 # -- gewünschten Wert markieren ------------------------------------------ 4415 # 4416 for i in range( self.GetCount() ) : 4417 4418 self.SetSelection( i ) 4419 4420 if ( self.GetPyData( i )[3] == dbId ) : 4421 4422 return True 4423 4424 4425 4426 # 4427 # -- Wert wurde nicht gefunden ------------------------------------------ 4428 # 4429 self.SetSelection( 0 ) 4430 return False
4431 4432 4433 4434 # 4435 # ------------------------------------------------------------------------------------ 4436 # -- (den nächsten) Hauptknoten bilden ---------------------------------- 4437 # ------------------------------------------------------------------------------------ 4438 #
4439 - def nimmHauptknoten( self, wert, bezHK, dbId = 0, wertIdVorgaenger = None, clientData = None ):
4440 """ 4441 Mit Aufruf dieser Methode wird ein Hauptknoten im C{self.TreeCtrlErg__Id.wxObjekt} angelegt. 4442 4443 @param wert: Es ist der Name (die Bezeichnung) des Knotens anzugeben. 4444 @type wert: Zeichenkette 4445 4446 @param bezHK : Es ist die Bezeichnung des Hauptknotens anzugeben (C{self.HK_ANM, self.HK_DOK, self.HK_PE, self.HK_STR}) 4447 @type bezHK : Zeichenkette 4448 4449 @param dbId: Eineindeutige Identifikationsnummer des Eintrages welche zum Beispiel in der Datenbank verwendet wird. Einträge mit derselben Identifikationsnummer dürfen mehrfach auftreten. 4450 @type dbId: Ganzzahl 4451 4452 @param wertIdVorgaenger: Eineindeutige Identifikationsnummer des Vorgängers des Wertes 4453 @type wertIdVorgaenger: Ganzzahl 4454 4455 @param clientData: Ein beliebiges C{Python-Objekt}, welches weitere Zusatzinformationen zum Wert enthält 4456 @type clientData: C{Python-Objekt} 4457 """ 4458 4459 # 4460 # -- >wertIdVorgaenger< mittels interner >wertId< ersetzen ------------------ 4461 # 4462 self.__ersetzeWertIdVorgaenger__() 4463 4464 4465 # 4466 # -- Position des ersten Strukturpunktes des aktuellen ------------------ 4467 # -- Hauptknotens speichern ------------------ 4468 # 4469 self.wertIdInternAktHKnoten = len( self.elementListe ) 4470 4471 4472 # 4473 # -- Bezeichnung des Hauptknotens übernehmen -------------------------- 4474 # 4475 self.bezAktHKnoten = bezHK 4476 4477 4478 # 4479 # -- Knoten einfügen -------------------------------------------------- 4480 # 4481 self.nimmWert( wert = wert 4482 , wertId = None 4483 , dbId = dbId 4484 , wertIdVorgaenger = wertIdVorgaenger 4485 , clientData = clientData ) 4486 4487 4488 # 4489 # -- lfd. Nr. (Pos) einschl. Bezeichnung des Hauptknotens speichern ---------- 4490 # 4491 self.dictWertIdHK[self.wertIdIntern] = wert
4492 4493 4494 4495 4496 4497 # 4498 # ------------------------------------------------------------------------------------ 4499 # -- Eintrag auf Wurzelebene hinzufügen ---------------------------------- 4500 # ------------------------------------------------------------------------------------ 4501 #
4502 - def nimmWert( self, wert, wertId, dbId, wertIdVorgaenger = None, clientData = None ):
4503 """ 4504 Diese Methode übernimmt den kompletten Wert, ohne ihn im C{TreeCtrl} darzustellen. Er muß eine eineindeutige Identifikationsnummer (C{wertId}) besitzen. 4505 4506 Sollte er einen Vorgänger besitzen, ist dessen Identifikationsnummer (C{wertIdVorgaenger}) anzugeben. Zur Darstellung aller Einträge im C{TreeCtrl} ist C{TreeCtrlErg.erzeugeBaum(...)} aufzurufen 4507 4508 @param wert: Es ist die Zeichenkette anzugeben, die im Baum sichtbar ist. Zeilenumrüche werden mittels Zeilenumbruch und Tabulator ersetzt. 4509 @type wert: Zeichenkette 4510 4511 @param wertId: Eineindeutige Identifikationsnummer des Wertes (zur internen Organisation). Wenn er C{None} ist, wird C{self.wertIdIntern} verwendet. 4512 @type wertId: Ganzzahl 4513 4514 @param dbId: Eineindeutige Identifikationsnummer des Eintrages welche zum Beispiel in der Datenbank verwendet wird. Einträge mit derselben Identifikationsnummer dürfen mehrfach auftreten. 4515 @type dbId: Ganzzahl 4516 4517 @param wertIdVorgaenger: Eineindeutige Identifikationsnummer des Vorgängers des Wertes 4518 @type wertIdVorgaenger: Ganzzahl 4519 4520 @param clientData: Ein beliebiges C{Python-Objekt}, welches weitere Zusatzinformationen zum Wert enthält 4521 @type clientData: C{Python-Objekt} 4522 """ 4523 4524 4525 4526 # 4527 # -- >wertId< übernehmen -------------------------------------------------- 4528 # 4529 tmpWertId = wertId 4530 4531 if( wertIdVorgaenger == 0 4532 or len( str( wertIdVorgaenger ) ) == 0 ) : tmpWertIdVorgaenger = None 4533 else : 4534 tmpWertIdVorgaenger = wertIdVorgaenger 4535 4536 4537 4538 # 4539 # -- >wertId< soll intern gebildet werden ---------------------------------- 4540 # 4541 if( wertId is None ) : 4542 4543 self.wertIdIntern += 1 4544 tmpWertId = self.wertIdIntern 4545 4546 self.dictWertIdIntern[dbId] = tmpWertId 4547 4548 4549 # 4550 # -- Wert in >self.elementListe< übernehmen ---------------------------------- 4551 # 4552 self.elementListe.append( [ wert.replace( "\n", "\n\t" ), [ tmpWertId, tmpWertIdVorgaenger, clientData, dbId, self.bezAktHKnoten, True ] ] ) 4553 4554 4555 # 4556 # -- >wertId/dbId< übernehmen, damit vorhandene >wertId/dbId< ---------- 4557 # -- schneller gefunden werden können ---------- 4558 # 4559 self.dbIdListe.append( dbId ) 4560 self.wertIdListe.append( tmpWertId )
4561