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

Source Code for Module risikominderung

   1  # -*- coding: utf-8 -*- 
   2  # 
   3  # 
   4  #    filename:  risikominderung.py 
   5  # 
   6  #    version:   see wxvf.py 
   7  # 
   8  # 
   9  # ---------------------------------------------------------------------------------------- 
  10  # 
  11  # 
  12  #    Copyright (C) 2010, 2011  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://vf.michaelbellair.de/index.html 
  35  # 
  36  # 
  37  # ---------------------------------------------------------------------------------------- 
  38  # 
  39  import wx 
  40   
  41  from bearbeiteuebersetzung import BearbeiteUebersetzung # Eingabeformular für Übersetzungen 
  42   
  43  from universal import allg                                      # Allgemeine Funktionen 
  44  from universal import zk                                # Zeichenketten bearbeiten 
  45   
  46  from wxuniversal import HK_ANM 
  47  from wxuniversal import HK_DOK 
  48  from wxuniversal import HK_DOKTYP 
  49  from wxuniversal import HK_PE 
  50  from wxuniversal import HK_PETYP 
  51  from wxuniversal import HK_SIANF 
  52  from wxuniversal import HK_SIANFTYP 
  53  from wxuniversal import HK_STR 
  54  from wxuniversal import HK_STRBEZ 
  55   
  56  from wxuniversal import CheckBoxErg                     # wx.CheckBox mit Ergänzungen 
  57  from wxuniversal import ComboBoxErg                     # wx.ComboBox mit Ergänzungen 
  58  from wxuniversal import farbeBearbeiten                 # Farbe der Objekte, die  bearbeitet werden können 
  59  from wxuniversal import farbeAuswahlListe               # Farbe der Objekte, die  zur Auswahl stehen 
  60  from wxuniversal import FlexGridSizerWxObjTitel         # wxObjekt mit Titel 
  61  from wxuniversal import SiAnf                           # SiAnf einschl. zugeordneter Strkt, Dok, PE, ... 
  62  from wxuniversal import TreeCtrlErg                     # TreeCtrl mit Ergänzungen 
  63  from wxuniversal import VerfuegbareProtokolleintraege   # eigene Klasse für verf. Protokolleinträge 
  64   
  65   
  66  # 
  67  # 
  68  # 
  69  # ---------------------------------------------------------------------------------------- 
  70  # ---------------------------------------------------------------------------------------- 
  71  # --                                    -------------------------------------------------- 
  72  # --    Offene Punkte / Aufgaben        -------------------------------------------------- 
  73  # --                                    -------------------------------------------------- 
  74  # ---------------------------------------------------------------------------------------- 
  75  # ---------------------------------------------------------------------------------------- 
  76  # 
  77  #  
  78  #       -- siehe TODO 'sicherheitsanforderungen.py' -- 
  79  # 
  80  # 
  81  # ---------------------------------------------------------------------------------------- 
  82  # 
  83   
  84   
  85   
  86  # 
  87  # ---------------------------------------------------------------------------------------- 
  88  # ---------------------------------------------------------------------------------------- 
  89  # --                                                    ---------------------------------- 
  90  # --    Layout 'Verfügbare Sicherheitsanforderungen'   ---------------------------------- 
  91  # --                                                    ---------------------------------- 
  92  # ---------------------------------------------------------------------------------------- 
  93  # ---------------------------------------------------------------------------------------- 
  94  # 
95 -class LayoutVerfuegbareSicherheitsanforderungen( wx.Panel ):
96 """ 97 Klasse zur Abbildung des Teil-Eingabeformulars der verfügbaren Sicherheitsanforderungen 98 """ 99 100 # 101 # ------------------------------------------------------------------------------------ 102 # -- Eingabeformular initialisieren ---------------------------------- 103 # ------------------------------------------------------------------------------------ 104 #
105 - def __init__( self, parent, Notizen, Fortschritt, dbVerbindung ):
106 wx.Panel.__init__( self, parent = parent ) 107 108 # 109 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 110 # 111 self.SetName( name = "LayoutVerfuegbareSicherheitsanforderungen" ) 112 113 114 115 # 116 # -------------------------------------------------------------------------------- 117 # -- Randbedingungen übernehmen ------------------------------------------ 118 # -------------------------------------------------------------------------------- 119 # 120 self.__Notizen__ = Notizen 121 self.__Fortschritt__ = Fortschritt 122 self.__dbVerbindung__ = dbVerbindung 123 self.__aktPrjProjekteId__ = self.__dbVerbindung__.filter__prj_projekte_id 124 self.__letztesPrjProjekteId__ = self.__aktPrjProjekteId__ 125 126 127 128 # 129 # -------------------------------------------------------------------------------- 130 # -- Eingabeobjekte anlegen -------------------------------------------------- 131 # -------------------------------------------------------------------------------- 132 # 133 134 # 135 # -- Die Sicherheitsanforderungen auf das Gefahrenszenario ------------------ 136 # -- einschränken ------------------ 137 # 138 self.CheckBoxErg__NurGefszen = FlexGridSizerWxObjTitel( parent = self 139 , wxObj = CheckBoxErg( self 140 , Notizen = self.__Notizen__ ) 141 , titel = "Gefahrenszenario" 142 , orient = wx.VERTICAL ) 143 144 self.CheckBoxErg__NurGefszen.wxObjekt.nimmWerteStatusleiste( 145 DBSpNameErlaeuterung = u"Verfügbare Sicherheitsanforderungen auf das aktuelle Gefahrenszenario einschränken." 146 , DBSpName = "prj.pl_prtpsgefszenario" ) 147 148 self.CheckBoxErg__NurGefszen.wxObjekt.Bind( wx.EVT_CHECKBOX 149 , self.__ereignisLiesDBVerfSiAnf__ ) 150 151 152 # 153 # -- Die Sicherheitsanforderungen auf das Projekt einschränken ---------- 154 # 155 self.ComboBoxErg__Projekt = FlexGridSizerWxObjTitel( 156 parent = self 157 , wxObj = ComboBoxErg( self 158 , choices = [] 159 , style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT 160 , Notizen = self.__Notizen__ ) 161 , orient = wx.VERTICAL 162 , titel = u"Projekt" ) 163 164 self.ComboBoxErg__Projekt.wxObjekt.nimmWerteStatusleiste( 165 DBSpNameErlaeuterung = u"Verfügbare Sicherheitsanforderungen auf das Projekt einschränken." 166 , DBSpName = "prj.projekte / prj.pl_prtpsgefszenario" ) 167 168 self.ComboBoxErg__Projekt.wxObjekt.Bind( wx.EVT_COMBOBOX 169 , self.__ereignisLiesDBVerfSiAnf__ ) 170 171 172 173 # 174 # -- Die Sicherheitsanforderungen auf den Typ einschränken ------------------ 175 # 176 self.ComboBoxErg__Typ = FlexGridSizerWxObjTitel( parent = self 177 , wxObj = ComboBoxErg( self 178 , choices = [] 179 , style = wx.CB_DROPDOWN|wx.CB_READONLY 180 , Notizen = self.__Notizen__ ) 181 , orient = wx.VERTICAL 182 , titel = "Typ der SiAnf" ) 183 184 self.ComboBoxErg__Typ.wxObjekt.nimmWerteStatusleiste( 185 DBSpNameErlaeuterung = "Verfügbare Sicherheitsanforderungen anhand des Typs einschränken." 186 , DBSpName = "prt.typ / prt.protokoll / prj.pl_prtpsgefszenario" ) 187 188 self.ComboBoxErg__Typ.wxObjekt.Bind( wx.EVT_COMBOBOX 189 , self.__ereignisLiesDBVerfSiAnf__ ) 190 191 192 # 193 # -- Verfügbare Sicherheitsanforderungen ------------------------------------------ 194 # 195 self.SiAnf__VerfSiAnf = SiAnf( parent = self 196 , Notizen = self.__Notizen__ 197 , dbVerbindung = self.__dbVerbindung__ ) 198 199 self.SiAnf__VerfSiAnf.Titel.SetLabel( label = "Sicherheitsanforderungen (SiAnf)" ) 200 201 self.SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 202 203 self.SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.nimmWerteStatusleiste( 204 DBSpNameErlaeuterung = u"Die verfügbaren Sicherheitsanforderungen." 205 , DBSpName = "prt.protokoll / prj.pp_prtprotokoll / prj.p_prtverbindung" ) 206 207 208 209 # 210 # -------------------------------------------------------------------------------- 211 # -- Layout setzen ---------------------------------------------------------- 212 # -------------------------------------------------------------------------------- 213 # 214 215 # 216 # -- Selektionskriterien -------------------------------------------------- 217 # 218 FlexGridSizer_Selektionskrit = wx.FlexGridSizer( rows = 1, cols = 3, vgap = 0, hgap = 10 ) 219 220 FlexGridSizer_Selektionskrit.AddGrowableCol( idx = 1, proportion = 1 ) 221 FlexGridSizer_Selektionskrit.AddGrowableCol( idx = 2, proportion = 1 ) 222 223 FlexGridSizer_Selektionskrit.Add( self.CheckBoxErg__NurGefszen 224 , flag = wx.EXPAND ) 225 226 FlexGridSizer_Selektionskrit.Add( self.ComboBoxErg__Projekt 227 , flag = wx.EXPAND ) 228 229 FlexGridSizer_Selektionskrit.Add( self.ComboBoxErg__Typ 230 , flag = wx.EXPAND ) 231 232 233 # 234 # -- Hauptlayout ---------------------------------------------------------- 235 # 236 FlexGridSizer = wx.FlexGridSizer( rows = 2, cols = 1, vgap = 10, hgap = 0 ) 237 238 FlexGridSizer.AddGrowableRow( idx = 1, proportion = 1 ) 239 240 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 241 242 FlexGridSizer.Add( FlexGridSizer_Selektionskrit 243 , flag = wx.EXPAND|wx.LEFT|wx.TOP|wx.RIGHT 244 , border = 10 ) 245 246 FlexGridSizer.Add( self.SiAnf__VerfSiAnf 247 , flag = wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT 248 , border = 10 ) 249 250 self.SetSizerAndFit( FlexGridSizer )
251 252 253 254 255 256 # 257 # ------------------------------------------------------------------------------------ 258 # -- Datenbank auslesen 'Verfügbare Sicherheitsanforderungen' ---------- 259 # ------------------------------------------------------------------------------------ 260 #
261 - def __ereignisLiesDBVerfSiAnf__( self, ereignis = None ):
262 """ 263 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ß. 264 265 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 266 @type ereignis: C{wx - Ereignisobjekt} 267 """ 268 269 # 270 # -- Alles löschen ---------------------------------------------------------- 271 # 272 self.SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.loescheAlles() 273 274 275 276 # 277 # -- Auf das gewählte Projekt einschränken ---------------------------------- 278 # 279 istFlex = False 280 self.__aktPrjProjekteId__ = self.ComboBoxErg__Projekt.wxObjekt.gibDbId() 281 self.SiAnf__VerfSiAnf.istPermDaten_Flex = istFlex 282 daten__GefszenId_ProtId_siAnf__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt 283 284 if( self.__aktPrjProjekteId__ != self.__dbVerbindung__.filter__prj_projekte_id ) : 285 286 # 287 # -- perm. Datenstrukturen zum gewählten Projekt dann --------- 288 # -- einlesen, wenn Unterschied zum globalen Projekt --------- 289 # -- und zum letzten Projekt --------- 290 # 291 if( self.__aktPrjProjekteId__ != self.__letztesPrjProjekteId__ ) : 292 293 self.__letztesPrjProjekteId__ = self.__aktPrjProjekteId__ 294 295 # 296 # -- Fortschrittsdialog ------------------------------------------ 297 # -- Delta = 100 / ( 10 ) ------------------ 298 # 299 self.__Fortschritt__.nimmDelta( delta = 100 / 10 ) 300 301 self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt_Flex.clear() 302 self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt_Flex.clear() 303 self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt_Flex.clear() 304 self.__dbVerbindung__.daten__ProtId_StruktId__Projekt_Flex.clear() 305 self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex = [] 306 self.__dbVerbindung__.daten__ProtId_DokuId__Projekt_Flex.clear() 307 self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt_Flex = [] 308 self.__dbVerbindung__.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt_Flex.clear() 309 self.__dbVerbindung__.daten__prtProtokoll_gefProt__Sprache__Projekt_Flex.clear() 310 self.__dbVerbindung__.daten__prtProtokoll_gefProt_vorg__Sprache__Projekt_Flex.clear() 311 312 self.__dbVerbindung__.init__GefszenId_ProtId__Projekt( Fortschritt = self.__Fortschritt__, 313 prjProjekteId = self.__aktPrjProjekteId__ ) 314 self.__dbVerbindung__.init__prtProtokoll__Sprache__Projekt( Fortschritt = self.__Fortschritt__ 315 , prjProjekteId = self.__aktPrjProjekteId__ ) 316 self.__dbVerbindung__.init__ProtId_StruktId__Projekt( Fortschritt = self.__Fortschritt__ 317 , prjProjekteId = self.__aktPrjProjekteId__ ) 318 self.__dbVerbindung__.init__strStrkt__Sprache__Projekt( Fortschritt = self.__Fortschritt__ 319 , prjProjekteId = self.__aktPrjProjekteId__ ) 320 self.__dbVerbindung__.init__ProtId_DokuId__Projekt( Fortschritt = self.__Fortschritt__ 321 , prjProjekteId = self.__aktPrjProjekteId__ ) 322 self.__dbVerbindung__.init__dokDoku__Sprache__Projekt( Fortschritt = self.__Fortschritt__ 323 , prjProjekteId = self.__aktPrjProjekteId__ ) 324 325 # 326 # -- Fortschrittsdialog schließen ---------------------------------- 327 # 328 self.__Fortschritt__.loescheFortschritt() 329 330 331 332 # 333 # -- Flex setzen -------------------------------------------------- 334 # 335 istFlex = True 336 self.SiAnf__VerfSiAnf.istPermDaten_Flex = istFlex 337 daten__GefszenId_ProtId_siAnf__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt_Flex 338 339 340 341 # 342 # -- Auf Gefahrenszenario einschränken ---------------------------------- 343 # 344 prtProtokollId = None 345 if( self.CheckBoxErg__NurGefszen.wxObjekt.gibWert() ) : 346 347 prtProtokollId = daten__GefszenId_ProtId_siAnf__Projekt[self.__dbVerbindung__.ps_gefszenario_id] 348 349 350 351 # 352 # -- Auf Typ der Sicherheitsanforderung einschränken ------------------ 353 # 354 prtTyp = None 355 if( self.ComboBoxErg__Typ.wxObjekt.gibDbId() > 0 ) : 356 357 prtTyp = [ self.ComboBoxErg__Typ.wxObjekt.gibDbId() ] 358 359 360 361 # 362 # -- Verfügbare Sicherheitsanforderungen anzeigen / auslesen ---------- 363 # 364 self.__dbVerbindung__.selektiere__prtProtokoll__Sprache__Projekt( 365 TreeCtrlErg = self.SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf 366 , istGefProt = False 367 , prtTypId = prtTyp 368 , prtProtokollId = prtProtokollId 369 , istFlex = istFlex ) 370 371 372 373 # 374 # -- Baum anzeigen ---------------------------------------------------------- 375 # 376 self.SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.erzeugeBaum() 377 self.SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.markiereWert() 378 if( ereignis != None ) : self.SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.ExpandAll() 379 380 381 # 382 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 383 # -- ausgewertet werden kann -------------------------- 384 # 385 if( ereignis != None ) : ereignis.Skip( skip = True )
386 387 388 389 390 # 391 # ------------------------------------------------------------------------------------ 392 # -- Verfügbare Sicherheitsanforderungen initialisieren ------------------ 393 # ------------------------------------------------------------------------------------ 394 #
395 - def init_VerfSiAnf( self ):
396 """ 397 Initialisierung. 398 """ 399 400 # 401 # -- Datenbank auslesen -------------------------------------------------- 402 # 403 self.__dbVerbindung__.selektiere__prjProjekte( ComboBoxErg = self.ComboBoxErg__Projekt.wxObjekt ) 404 405 self.ComboBoxErg__Projekt.wxObjekt.selektiereWert( dbId = self.__aktPrjProjekteId__ ) 406 407 self.__dbVerbindung__.selektiere__prtTyp__Sprache( TreeCtrlErg_ComboBoxErg = self.ComboBoxErg__Typ.wxObjekt 408 , prtTypAspekt = "SF" 409 , hatAlle = True ) 410 411 self.__ereignisLiesDBVerfSiAnf__()
412 413 414 415 416 417 418 # 419 # ---------------------------------------------------------------------------------------- 420 # ---------------------------------------------------------------------------------------- 421 # ---------------------------------------------------------------------------------------- 422 # 423 424 425 426 427 # 428 # ---------------------------------------------------------------------------------------- 429 # ---------------------------------------------------------------------------------------- 430 # -- ------------------------------------------ 431 # -- Layout 'Verfügbare Strukturpunkte' ------------------------------------------ 432 # -- ------------------------------------------ 433 # ---------------------------------------------------------------------------------------- 434 # ---------------------------------------------------------------------------------------- 435 #
436 -class LayoutVerfuegbareStrukturpunkte( wx.Panel ):
437 """ 438 Klasse zur Abbildung des Teil-Eingabeformulars der verfügbaren Strukturpunkte 439 """ 440 441 # 442 # ------------------------------------------------------------------------------------ 443 # -- Eingabeformular initialisieren ---------------------------------- 444 # ------------------------------------------------------------------------------------ 445 #
446 - def __init__( self, parent, Notizen, Fortschritt, dbVerbindung ):
447 wx.Panel.__init__( self, parent = parent ) 448 449 # 450 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 451 # 452 self.SetName( name = "LayoutVerfuegbareStrukturpunkte" ) 453 454 455 456 # 457 # -------------------------------------------------------------------------------- 458 # -- Randbedingungen übernehmen ------------------------------------------ 459 # -------------------------------------------------------------------------------- 460 # 461 self.__Notizen__ = Notizen 462 self.__Fortschritt__ = Fortschritt 463 self.__dbVerbindung__ = dbVerbindung 464 self.__aktPrjProjekteId__ = self.__dbVerbindung__.filter__prj_projekte_id 465 self.__letztesPrjProjekteId__ = self.__aktPrjProjekteId__ 466 self.__istFlex__ = False 467 468 469 470 # 471 # -------------------------------------------------------------------------------- 472 # -- Eingabeobjekte anlegen -------------------------------------------------- 473 # -------------------------------------------------------------------------------- 474 # 475 476 # 477 # -- Die Strukturpunkte auf das Gefahrenszenario einschränken ---------- 478 # 479 self.CheckBoxErg__NurGefszen = FlexGridSizerWxObjTitel( parent = self 480 , wxObj = CheckBoxErg( self 481 , Notizen = self.__Notizen__ ) 482 , titel = "Gefahrenszenario" 483 , orient = wx.VERTICAL ) 484 485 self.CheckBoxErg__NurGefszen.wxObjekt.nimmWerteStatusleiste( 486 DBSpNameErlaeuterung = u"Verfügbare Strukturpunkte auf das aktuelle Gefahrenszenario einschränken." 487 , DBSpName = "prj.pl_prtpsgefszenario / prj.p_prtstrstrkt" ) 488 489 self.CheckBoxErg__NurGefszen.wxObjekt.Bind( wx.EVT_CHECKBOX 490 , self.__ereignisLiesDBVerfStrkt__ ) 491 492 493 # 494 # -- Die Strukturpunkte auf das Projekt einschränken ------------------ 495 # 496 self.ComboBoxErg__Projekt = FlexGridSizerWxObjTitel( 497 parent = self 498 , wxObj = ComboBoxErg( self 499 , choices = [] 500 , style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT 501 , Notizen = self.__Notizen__ ) 502 , orient = wx.VERTICAL 503 , titel = u"Projekt" ) 504 505 self.ComboBoxErg__Projekt.wxObjekt.nimmWerteStatusleiste( 506 DBSpNameErlaeuterung = u"Verfügbare Strukturpunkte auf das Projekt einschränken." 507 , DBSpName = "prj.projekte / prj.pp_strstrkt" ) 508 509 self.ComboBoxErg__Projekt.wxObjekt.Bind( wx.EVT_COMBOBOX 510 , self.__ereignisLiesDBVerfStrkt__ ) 511 512 513 # 514 # -- Die Strukturpunkte auf die Strukturbezeichnung einschränken ---------- 515 # 516 self.ComboBoxErg__Typ = FlexGridSizerWxObjTitel( parent = self 517 , wxObj = ComboBoxErg( self 518 , choices = [] 519 , style = wx.CB_DROPDOWN|wx.CB_READONLY 520 , Notizen = self.__Notizen__ ) 521 , orient = wx.VERTICAL 522 , titel = "Strukturbezeichnung" ) 523 524 self.ComboBoxErg__Typ.wxObjekt.nimmWerteStatusleiste( 525 DBSpNameErlaeuterung = "Verfügbare Strukturpunkte anhand der Strukturbezeichnung einschränken." 526 , DBSpName = "str.name / str.strkt / prj.pp_strstrkt" ) 527 528 self.ComboBoxErg__Typ.wxObjekt.Bind( wx.EVT_COMBOBOX 529 , self.__ereignisLiesDBVerfStrkt__ ) 530 531 532 # 533 # -- Verfügbare Strukturpunkte ------------------------------------------ 534 # 535 self.TreeCtrlErg__VerfStrPkt = FlexGridSizerWxObjTitel( parent = self 536 , wxObj = TreeCtrlErg( self 537 , Notizen = self.__Notizen__ ) 538 , titel = "Strukturpunkte" 539 , orient = wx.VERTICAL ) 540 541 self.TreeCtrlErg__VerfStrPkt.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 542 543 self.TreeCtrlErg__VerfStrPkt.wxObjekt.nimmWerteStatusleiste( 544 DBSpNameErlaeuterung = "Die verfügbaren Strukturpunkte." 545 , DBSpName = "str.strkt / prj.pp_strstrkt / prj.p_strverbindung" ) 546 547 self.TreeCtrlErg__VerfStrPkt.wxObjekt.Bind( wx.EVT_TREE_SEL_CHANGED 548 , self.__ereignisNotizenAnzeigen__ ) 549 550 551 552 # 553 # -------------------------------------------------------------------------------- 554 # -- Layout setzen ---------------------------------------------------------- 555 # -------------------------------------------------------------------------------- 556 # 557 558 # 559 # -- Selektionskriterien -------------------------------------------------- 560 # 561 FlexGridSizer_Selektionskrit = wx.FlexGridSizer( rows = 1, cols = 3, vgap = 0, hgap = 10 ) 562 563 FlexGridSizer_Selektionskrit.AddGrowableCol( idx = 1, proportion = 1 ) 564 FlexGridSizer_Selektionskrit.AddGrowableCol( idx = 2, proportion = 1 ) 565 566 FlexGridSizer_Selektionskrit.Add( self.CheckBoxErg__NurGefszen 567 , flag = wx.EXPAND ) 568 569 FlexGridSizer_Selektionskrit.Add( self.ComboBoxErg__Projekt 570 , flag = wx.EXPAND ) 571 572 FlexGridSizer_Selektionskrit.Add( self.ComboBoxErg__Typ 573 , flag = wx.EXPAND ) 574 575 576 # 577 # -- Hauptlayout ---------------------------------------------------------- 578 # 579 FlexGridSizer = wx.FlexGridSizer( rows = 2, cols = 1, vgap = 10, hgap = 0 ) 580 581 FlexGridSizer.AddGrowableRow( idx = 1, proportion = 1 ) 582 583 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 584 585 FlexGridSizer.Add( FlexGridSizer_Selektionskrit 586 , flag = wx.EXPAND|wx.LEFT|wx.TOP|wx.RIGHT 587 , border = 10 ) 588 589 FlexGridSizer.Add( self.TreeCtrlErg__VerfStrPkt 590 , flag = wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT 591 , border = 10 ) 592 593 self.SetSizerAndFit( FlexGridSizer )
594 595 596 597 598 599 600 # 601 # ------------------------------------------------------------------------------------ 602 # -- Datenbank auslesen 'Verfügbare Strukturen' -------------------------- 603 # ------------------------------------------------------------------------------------ 604 #
605 - def __ereignisLiesDBVerfStrkt__( self, ereignis = None ):
606 """ 607 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ß. 608 609 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 610 @type ereignis: C{wx - Ereignisobjekt} 611 """ 612 613 # 614 # -- Alles löschen ---------------------------------------------------------- 615 # 616 self.TreeCtrlErg__VerfStrPkt.wxObjekt.loescheAlles() 617 618 619 # 620 # -- Auf das gewählte Projekt einschränken ---------------------------------- 621 # 622 self.__istFlex__ = False 623 self.__aktPrjProjekteId__ = self.ComboBoxErg__Projekt.wxObjekt.gibDbId() 624 daten__GefszenId_ProtId_siAnf__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt 625 daten__ProtId_StruktId__Projekt = self.__dbVerbindung__.daten__ProtId_StruktId__Projekt 626 627 if( self.__aktPrjProjekteId__ != self.__dbVerbindung__.filter__prj_projekte_id ) : 628 629 # 630 # -- perm. Datenstrukturen zum gewählten Projekt dann --------- 631 # -- einlesen, wenn Unterschied zum globalen Projekt --------- 632 # -- und zum letzten Projekt --------- 633 # 634 if( self.__aktPrjProjekteId__ != self.__letztesPrjProjekteId__ ) : 635 636 self.__letztesPrjProjekteId__ = self.__aktPrjProjekteId__ 637 638 # 639 # -- Fortschrittsdialog ------------------------------------------ 640 # -- Delta = 100 / ( 1 + 1 + 1 ) ------------------------------------------ 641 # 642 self.__Fortschritt__.nimmDelta( delta = 100 / 3 ) 643 644 self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt_Flex.clear() 645 self.__dbVerbindung__.daten__ProtId_StruktId__Projekt_Flex.clear() 646 self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex = [] 647 648 self.__dbVerbindung__.init__GefszenId_StruktId__Projekt( Fortschritt = self.__Fortschritt__ 649 , prjProjekteId = self.__aktPrjProjekteId__ ) 650 self.__dbVerbindung__.init__strStrkt__Sprache__Projekt( Fortschritt = self.__Fortschritt__ 651 , prjProjekteId = self.__aktPrjProjekteId__ ) 652 653 # 654 # -- Fortschrittsdialog schließen ---------------------------------- 655 # 656 self.__Fortschritt__.loescheFortschritt() 657 658 # 659 # -- Flex setzen -------------------------------------------------- 660 # 661 self.__istFlex__ = True 662 daten__GefszenId_ProtId_siAnf__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt_Flex 663 daten__ProtId_StruktId__Projekt = self.__dbVerbindung__.daten__ProtId_StruktId__Projekt_Flex 664 665 666 667 # 668 # -- Auf Gefahrenszenario einschränken ---------------------------------- 669 # 670 strStrktId = None 671 if( self.CheckBoxErg__NurGefszen.wxObjekt.gibWert() ) : 672 673 prtProtokollId = zk.gibListeTeilmenge( liste = daten__GefszenId_ProtId_siAnf__Projekt[self.__dbVerbindung__.ps_gefszenario_id] ) 674 675 strStrktId = [] 676 677 for strkt in daten__ProtId_StruktId__Projekt.iteritems(): 678 679 if( strkt[0] not in prtProtokollId ) : 680 681 continue 682 683 strStrktId += zk.gibListeTeilmenge( liste = strkt[1] ) 684 685 686 687 # 688 # -- Auf Strukturbezeichnung einschränken ---------------------------------- 689 # 690 strName = None 691 if( self.ComboBoxErg__Typ.wxObjekt.gibDbId() > 0 ) : 692 693 strName = [ self.ComboBoxErg__Typ.wxObjekt.gibDbId() ] 694 695 696 697 # 698 # -- Verfügbare Strukturpunkte anzeigen / auslesen -------------------------- 699 # 700 self.__dbVerbindung__.selektiere__strStrkt__Sprache__Projekt( TreeCtrlErg = self.TreeCtrlErg__VerfStrPkt.wxObjekt 701 , strNameId = strName 702 , strStrktId = strStrktId 703 , istFlex = self.__istFlex__ ) 704 705 706 707 # 708 # -- Baum anzeigen ---------------------------------------------------------- 709 # 710 self.TreeCtrlErg__VerfStrPkt.wxObjekt.erzeugeBaum() 711 self.TreeCtrlErg__VerfStrPkt.wxObjekt.markiereWert() 712 self.TreeCtrlErg__VerfStrPkt.wxObjekt.ExpandAll() 713 714 715 716 # 717 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 718 # -- ausgewertet werden kann -------------------------- 719 # 720 if( ereignis != None ) : ereignis.Skip( skip = True )
721 722 723 724 725 # 726 # ------------------------------------------------------------------------------------ 727 # -- Notizen in der Statusleiste anzeigen ---------------------------------- 728 # ------------------------------------------------------------------------------------ 729 #
730 - def __ereignisNotizenAnzeigen__( self, ereignis ):
731 """ 732 Notizen in der Statusleiste anzeigen 733 734 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 735 @type ereignis: C{wx - Ereignisobjekt} 736 """ 737 738 # 739 # -- Notizen löschen -------------------------------------------------- 740 # 741 self.__Notizen__.TextCtrlErg__li.nimmWert( "" ) 742 743 744 745 # 746 # -- Hauptknoten wurde gewählt ------------------------------------------ 747 # 748 if( ereignis.GetEventObject().istHauptknoten() ) : 749 750 if( ereignis != None ) : ereignis.Skip( skip = True ) 751 752 753 754 # 755 # -- permanente Datenstruktur auswählen ---------------------------------- 756 # 757 daten__strStrkt__Sprache__Projekt = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt 758 if( self.__istFlex__ ) : 759 760 daten__strStrkt__Sprache__Projekt = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex 761 762 763 764 # 765 # -- linker Bereich der Statusleiste -------------------------- 766 # 767 for notizen in daten__strStrkt__Sprache__Projekt : 768 769 if( notizen[1] == ereignis.GetEventObject().gibDbId() ) : 770 771 self.__Notizen__.TextCtrlErg__li.nimmWert( notizen[6] ) 772 773 774 775 # 776 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 777 # -- ausgewertet werden kann -------------------------- 778 # 779 if( ereignis != None ) : ereignis.Skip( skip = True )
780 781 782 783 784 # 785 # ------------------------------------------------------------------------------------ 786 # -- Verfügbare Strukturpunkte initialisieren -------------------------- 787 # ------------------------------------------------------------------------------------ 788 #
789 - def init_VerfStrkt( self ):
790 """ 791 Initialisierung. 792 """ 793 794 # 795 # -- Datenbank auslesen -------------------------------------------------- 796 # 797 self.__dbVerbindung__.selektiere__prjProjekte( ComboBoxErg = self.ComboBoxErg__Projekt.wxObjekt ) 798 self.ComboBoxErg__Projekt.wxObjekt.selektiereWert( dbId = self.__aktPrjProjekteId__ ) 799 800 self.__dbVerbindung__.selektiere__strName( TreeCtrlErg_ComboBoxErg = self.ComboBoxErg__Typ.wxObjekt ) 801 self.__ereignisLiesDBVerfStrkt__()
802 803 804 805 806 807 # 808 # ---------------------------------------------------------------------------------------- 809 # ---------------------------------------------------------------------------------------- 810 # ---------------------------------------------------------------------------------------- 811 # 812 813 814 815 816 # 817 # ---------------------------------------------------------------------------------------- 818 # ---------------------------------------------------------------------------------------- 819 # -- -------------------------------------------------- 820 # -- Layout 'Verfügbare Dokumente' -------------------------------------------------- 821 # -- -------------------------------------------------- 822 # ---------------------------------------------------------------------------------------- 823 # ---------------------------------------------------------------------------------------- 824 #
825 -class LayoutVerfuegbareDokumente( wx.Panel ):
826 """ 827 Klasse zur Abbildung des Teil-Eingabeformulars der verfügbaren Dokumente 828 """ 829 830 # 831 # ------------------------------------------------------------------------------------ 832 # -- Eingabeformular initialisieren ---------------------------------- 833 # ------------------------------------------------------------------------------------ 834 #
835 - def __init__( self, parent, Notizen, Fortschritt, dbVerbindung ):
836 wx.Panel.__init__( self, parent = parent ) 837 838 # 839 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 840 # 841 self.SetName( name = "LayoutVerfuegbareDokumente" ) 842 843 844 845 # 846 # -------------------------------------------------------------------------------- 847 # -- Randbedingungen übernehmen ------------------------------------------ 848 # -------------------------------------------------------------------------------- 849 # 850 self.__Notizen__ = Notizen 851 self.__Fortschritt__ = Fortschritt 852 self.__dbVerbindung__ = dbVerbindung 853 self.__aktPrjProjekteId__ = self.__dbVerbindung__.filter__prj_projekte_id 854 self.__letztesPrjProjekteId__ = self.__aktPrjProjekteId__ 855 self.__istFlex__ = False 856 857 858 859 # 860 # -------------------------------------------------------------------------------- 861 # -- Eingabeobjekte anlegen -------------------------------------------------- 862 # -------------------------------------------------------------------------------- 863 # 864 865 # 866 # -- Die Dokumente auf das Gefahrenszenario einschränken ---------- 867 # 868 self.CheckBoxErg__NurGefszen = FlexGridSizerWxObjTitel( parent = self 869 , wxObj = CheckBoxErg( self 870 , Notizen = self.__Notizen__ ) 871 , titel = "Gefahrenszenario" 872 , orient = wx.VERTICAL ) 873 874 self.CheckBoxErg__NurGefszen.wxObjekt.nimmWerteStatusleiste( 875 DBSpNameErlaeuterung = u"Verfügbare Dokumente auf das aktuelle Gefahrenszenario einschränken." 876 , DBSpName = "prj.pl_prtpsgefszenario / prj.pl_prtdokdoku" ) 877 878 self.CheckBoxErg__NurGefszen.wxObjekt.Bind( wx.EVT_CHECKBOX 879 , self.__ereignisLiesDBVerfDok__ ) 880 881 882 # 883 # -- Die Dokumente auf das Projekt einschränken ------------------ 884 # 885 self.ComboBoxErg__Projekt = FlexGridSizerWxObjTitel( 886 parent = self 887 , wxObj = ComboBoxErg( self 888 , choices = [] 889 , style = wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT 890 , Notizen = self.__Notizen__ ) 891 , orient = wx.VERTICAL 892 , titel = u"Projekt" ) 893 894 self.ComboBoxErg__Projekt.wxObjekt.nimmWerteStatusleiste( 895 DBSpNameErlaeuterung = u"Verfügbare Dokumente auf das Projekt einschränken." 896 , DBSpName = "prj.projekte / prj.pl_prtdokdoku" ) 897 898 self.ComboBoxErg__Projekt.wxObjekt.Bind( wx.EVT_COMBOBOX 899 , self.__ereignisLiesDBVerfDok__ ) 900 901 902 # 903 # -- Die Dokumente auf den Typ einschränken ---------------------------------- 904 # 905 self.ComboBoxErg__Typ = FlexGridSizerWxObjTitel( parent = self 906 , wxObj = ComboBoxErg( self 907 , choices = [] 908 , style = wx.CB_DROPDOWN|wx.CB_READONLY 909 , Notizen = self.__Notizen__ ) 910 , orient = wx.VERTICAL 911 , titel = "Dokumenttypen" ) 912 913 self.ComboBoxErg__Typ.wxObjekt.nimmWerteStatusleiste( 914 DBSpNameErlaeuterung = "Verfügbare Dokumente anhand des Typs einschränken." 915 , DBSpName = "dok.typ / dok.doku / prj.pl_prtdokdoku" ) 916 917 self.ComboBoxErg__Typ.wxObjekt.Bind( wx.EVT_COMBOBOX 918 , self.__ereignisLiesDBVerfDok__ ) 919 920 921 # 922 # -- Verfügbare Dokumente ------------------------------------------ 923 # 924 self.TreeCtrlErg__VerfDok = FlexGridSizerWxObjTitel( parent = self 925 , wxObj = TreeCtrlErg( self 926 , Notizen = self.__Notizen__ ) 927 , titel = "Dokumente" 928 , orient = wx.VERTICAL ) 929 930 self.TreeCtrlErg__VerfDok.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 931 932 self.TreeCtrlErg__VerfDok.wxObjekt.nimmWerteStatusleiste( 933 DBSpNameErlaeuterung = "Die verfügbaren Dokumente." 934 , DBSpName = "dok.doku / prj.pl_dokausgabe" ) 935 936 self.TreeCtrlErg__VerfDok.wxObjekt.Bind( wx.EVT_TREE_SEL_CHANGED 937 , self.__ereignisNotizenAnzeigen__ ) 938 939 940 941 # 942 # -------------------------------------------------------------------------------- 943 # -- Layout setzen ---------------------------------------------------------- 944 # -------------------------------------------------------------------------------- 945 # 946 947 # 948 # -- Selektionskriterien -------------------------------------------------- 949 # 950 FlexGridSizer_Selektionskrit = wx.FlexGridSizer( rows = 1, cols = 3, vgap = 0, hgap = 10 ) 951 952 FlexGridSizer_Selektionskrit.AddGrowableCol( idx = 1, proportion = 1 ) 953 FlexGridSizer_Selektionskrit.AddGrowableCol( idx = 2, proportion = 1 ) 954 955 FlexGridSizer_Selektionskrit.Add( self.CheckBoxErg__NurGefszen 956 , flag = wx.EXPAND ) 957 958 FlexGridSizer_Selektionskrit.Add( self.ComboBoxErg__Projekt 959 , flag = wx.EXPAND ) 960 961 FlexGridSizer_Selektionskrit.Add( self.ComboBoxErg__Typ 962 , flag = wx.EXPAND ) 963 964 965 # 966 # -- Hauptlayout ---------------------------------------------------------- 967 # 968 FlexGridSizer = wx.FlexGridSizer( rows = 2, cols = 1, vgap = 10, hgap = 0 ) 969 970 FlexGridSizer.AddGrowableRow( idx = 1, proportion = 1 ) 971 972 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 973 974 FlexGridSizer.Add( FlexGridSizer_Selektionskrit 975 , flag = wx.EXPAND|wx.LEFT|wx.TOP|wx.RIGHT 976 , border = 10 ) 977 978 FlexGridSizer.Add( self.TreeCtrlErg__VerfDok 979 , flag = wx.EXPAND|wx.LEFT|wx.BOTTOM|wx.RIGHT 980 , border = 10 ) 981 982 self.SetSizerAndFit( FlexGridSizer )
983 984 985 986 987 988 989 # 990 # ------------------------------------------------------------------------------------ 991 # -- Datenbank auslesen 'Verfügbare Dokumente' -------------------------- 992 # ------------------------------------------------------------------------------------ 993 #
994 - def __ereignisLiesDBVerfDok__( self, ereignis = None ):
995 """ 996 Methode die aufgerufen wird, wenn nach Änderung des Zustandes der C{wx.CheckBox} 'Alle' bzw. der C{wx.ComboBox} 'Typ der Dokumente' die Datenbank ausgelesen werden muß. 997 998 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 999 @type ereignis: C{wx - Ereignisobjekt} 1000 """ 1001 1002 # 1003 # -- Alles löschen ---------------------------------------------------------- 1004 # 1005 self.TreeCtrlErg__VerfDok.wxObjekt.loescheAlles() 1006 1007 1008 1009 # 1010 # -- Auf das gewählte Projekt einschränken ---------------------------------- 1011 # 1012 self.__istFlex__ = False 1013 self.__aktPrjProjekteId__ = self.ComboBoxErg__Projekt.wxObjekt.gibDbId() 1014 daten__GefszenId_ProtId_gefProt__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_gefProt__Projekt 1015 daten__GefszenId_ProtId_siAnf__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt 1016 daten__ProtId_DokuId__Projekt = self.__dbVerbindung__.daten__ProtId_DokuId__Projekt 1017 1018 if( self.__aktPrjProjekteId__ != self.__dbVerbindung__.filter__prj_projekte_id ) : 1019 1020 # 1021 # -- perm. Datenstrukturen zum gewählten Projekt dann --------- 1022 # -- einlesen, wenn Unterschied zum globalen Projekt --------- 1023 # -- und zum letzten Projekt --------- 1024 # 1025 if( self.__aktPrjProjekteId__ != self.__letztesPrjProjekteId__ ) : 1026 1027 self.__letztesPrjProjekteId__ = self.__aktPrjProjekteId__ 1028 1029 # 1030 # -- Fortschrittsdialog ------------------------------------------ 1031 # -- Delta = 100 / ( 4 ) ---------------------------------- 1032 # 1033 self.__Fortschritt__.nimmDelta( delta = 100 / 4 ) 1034 1035 self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt_Flex = [] 1036 self.__dbVerbindung__.daten__GefszenId_ProtId_gefProt__Projekt_Flex.clear() 1037 self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt_Flex.clear() 1038 self.__dbVerbindung__.daten__ProtId_DokuId__Projekt_Flex.clear() 1039 1040 self.__dbVerbindung__.init__dokDoku__Sprache__Projekt( Fortschritt = self.__Fortschritt__ 1041 , prjProjekteId = self.__aktPrjProjekteId__ ) 1042 self.__dbVerbindung__.init__GefszenId_ProtId__Projekt( Fortschritt = self.__Fortschritt__ 1043 , prjProjekteId = self.__aktPrjProjekteId__ ) 1044 self.__dbVerbindung__.init__ProtId_DokuId__Projekt( Fortschritt = self.__Fortschritt__ 1045 , prjProjekteId = self.__aktPrjProjekteId__ ) 1046 1047 # 1048 # -- Fortschrittsdialog schließen ---------------------------------- 1049 # 1050 self.__Fortschritt__.loescheFortschritt() 1051 1052 # 1053 # -- Flex setzen -------------------------------------------------- 1054 # 1055 self.__istFlex__ = True 1056 daten__GefszenId_ProtId_gefProt__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_gefProt__Projekt_Flex 1057 daten__GefszenId_ProtId_siAnf__Projekt = self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt_Flex 1058 daten__ProtId_DokuId__Projekt = self.__dbVerbindung__.daten__ProtId_DokuId__Projekt_Flex 1059 1060 1061 1062 # 1063 # -- Auf Gefahrenszenario einschränken ---------------------------------- 1064 # 1065 dokDokuId = None 1066 if( self.CheckBoxErg__NurGefszen.wxObjekt.gibWert() ) : 1067 1068 1069 # 1070 # -- alle dem Gefahrenszenario zugeordneten SiAnf-Id ---------- 1071 # -- und GefProt-Id ermitteln ---------- 1072 # 1073 listePrtProtkollId = daten__GefszenId_ProtId_gefProt__Projekt[self.__dbVerbindung__.ps_gefszenario_id] + daten__GefszenId_ProtId_siAnf__Projekt[self.__dbVerbindung__.ps_gefszenario_id] 1074 1075 1076 # 1077 # -- dem Gefahrenszenario zugeordnete Dokumente anhand ---------- 1078 # -- SiAnf-Id / GefProt-Id ermitteln ---------- 1079 # 1080 dokDokuId = [] 1081 for i in daten__ProtId_DokuId__Projekt.keys() : 1082 1083 if( allg.hatWert__List( liste = listePrtProtkollId, pos = 0, wert = i ) ) : 1084 1085 dokDokuId += zk.gibListeTeilmenge( liste = daten__ProtId_DokuId__Projekt[i] ) 1086 1087 1088 1089 # 1090 # -- Typ berücksichtigen -------------------------------------------------- 1091 # 1092 typ = None 1093 if( self.ComboBoxErg__Typ.wxObjekt.gibDbId() > 0 ) : 1094 1095 typ = [self.ComboBoxErg__Typ.wxObjekt.gibDbId()] 1096 1097 1098 1099 # 1100 # -- Verfügbare Dokumente anzeigen / auslesen -------------------------- 1101 # 1102 self.__dbVerbindung__.selektiere__dokDoku__Sprache__Projekt( 1103 TreeCtrlErg_ListBoxErg = self.TreeCtrlErg__VerfDok.wxObjekt 1104 , dokTypId = typ 1105 , dokDokuId = dokDokuId 1106 , istFlex = self.__istFlex__ ) 1107 1108 1109 1110 1111 # 1112 # -- Baum anzeigen ---------------------------------------------------------- 1113 # 1114 self.TreeCtrlErg__VerfDok.wxObjekt.erzeugeBaum() 1115 self.TreeCtrlErg__VerfDok.wxObjekt.markiereWert() 1116 self.TreeCtrlErg__VerfDok.wxObjekt.ExpandAll() 1117 1118 1119 1120 # 1121 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 1122 # -- ausgewertet werden kann -------------------------- 1123 # 1124 if( ereignis != None ) : ereignis.Skip( skip = True )
1125 1126 1127 1128 1129 # 1130 # ------------------------------------------------------------------------------------ 1131 # -- Notizen in der Statusleiste anzeigen ---------------------------------- 1132 # ------------------------------------------------------------------------------------ 1133 #
1134 - def __ereignisNotizenAnzeigen__( self, ereignis ):
1135 """ 1136 Notizen in der Statusleiste anzeigen 1137 1138 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1139 @type ereignis: C{wx - Ereignisobjekt} 1140 """ 1141 1142 # 1143 # -- Notizen löschen -------------------------------------------------- 1144 # 1145 self.__Notizen__.TextCtrlErg__li.nimmWert( "" ) 1146 1147 1148 1149 # 1150 # -- Hauptknoten wurde gewählt ------------------------------------------ 1151 # 1152 if( ereignis.GetEventObject().istHauptknoten() ) : 1153 1154 if( ereignis != None ) : ereignis.Skip( skip = True ) 1155 1156 1157 1158 # 1159 # -- permanente Datenstruktur auswählen ---------------------------------- 1160 # 1161 daten__dokDoku__Sprache__Projekt = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt 1162 if( self.__istFlex__ ) : 1163 1164 daten__dokDoku__Sprache__Projekt = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt_Flex 1165 1166 1167 1168 # 1169 # -- linker Bereich der Statusleiste -------------------------- 1170 # 1171 for notizen in daten__dokDoku__Sprache__Projekt : 1172 1173 if( notizen[0] == ereignis.GetEventObject().gibDbId() ) : 1174 1175 self.__Notizen__.TextCtrlErg__li.nimmWert( notizen[5] ) 1176 1177 1178 1179 # 1180 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 1181 # -- ausgewertet werden kann -------------------------- 1182 # 1183 if( ereignis != None ) : ereignis.Skip( skip = True )
1184 1185 1186 1187 1188 # 1189 # ------------------------------------------------------------------------------------ 1190 # -- Verfügbare Dokumente initialisieren ---------------------------------- 1191 # ------------------------------------------------------------------------------------ 1192 #
1193 - def init_VerfDok( self ):
1194 """ 1195 Initialisierung. 1196 """ 1197 1198 # 1199 # -- Datenbank auslesen -------------------------------------------------- 1200 # 1201 self.__dbVerbindung__.selektiere__prjProjekte( ComboBoxErg = self.ComboBoxErg__Projekt.wxObjekt ) 1202 self.ComboBoxErg__Projekt.wxObjekt.selektiereWert( dbId = self.__aktPrjProjekteId__ ) 1203 1204 self.__dbVerbindung__.selektiere__dokTyp( TreeCtrlErg_ComboBoxErg = self.ComboBoxErg__Typ.wxObjekt ) 1205 self.__ereignisLiesDBVerfDok__()
1206 1207 1208 1209 1210 1211 1212 # 1213 # ---------------------------------------------------------------------------------------- 1214 # ---------------------------------------------------------------------------------------- 1215 # ---------------------------------------------------------------------------------------- 1216 # 1217 1218 1219 1220 1221 # 1222 # ---------------------------------------------------------------------------------------- 1223 # ---------------------------------------------------------------------------------------- 1224 # -- -------------------------- 1225 # -- Eingabeformular 'Sicherheitsanforderungen bearbeiten' -------------------------- 1226 # -- -------------------------- 1227 # ---------------------------------------------------------------------------------------- 1228 # ---------------------------------------------------------------------------------------- 1229 #
1230 -class Sicherheitsanforderungen( wx.Panel ):
1231 1232 """ 1233 Klasse zur Abbildung des Eingabeformulars 'Sicherheitsanforderungen bearbeiten'. 1234 """ 1235 1236 # 1237 # ------------------------------------------------------------------------------------ 1238 # -- Eingabeformular initialisieren ---------------------------------- 1239 # ------------------------------------------------------------------------------------ 1240 #
1241 - def __init__( self, parent, Notizen, Fortschritt, dbVerbindung ):
1242 wx.Panel.__init__( self, parent = parent ) 1243 1244 1245 # 1246 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 1247 # 1248 self.SetName( name = "Sicherheitsanforderungen" ) 1249 1250 1251 # 1252 # -- Randbedingungen übernehmen ------------------------------------------ 1253 # 1254 self.__Notizen__ = Notizen 1255 self.__Fortschritt__ = Fortschritt 1256 self.__dbVerbindung__ = dbVerbindung 1257 1258 1259 # 1260 # -- objektweit gültige Variablen definieren -------------------------- 1261 # 1262 self.__anderesProjektHinweisZeigen__ = True 1263 1264 self.istGeaendert__daten__ProtId_DokuId__Projekt = False 1265 self.istGeaendert__daten__dokDoku__Sprache__Projekt = False 1266 self.istGeaendert__daten__GefszenId_ProtId_siAnf__Projekt = False 1267 self.istGeaendert__daten__prtProtokoll_siAnf__Sprache__Projekt = False 1268 self.istGeaendert__daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt = False 1269 self.istGeaendert__daten__prtProtokoll_siAnf_vorg__Sprache__Projekt = False 1270 self.istGeaendert__daten__strStrkt__Sprache__Projekt = False 1271 self.istGeaendert__daten__ProtId_StruktId__Projekt = False 1272 1273 1274 1275 1276 # 1277 # -------------------------------------------------------------------------------- 1278 # -- Eingabeobjekte anlegen -------------------------------------------------- 1279 # -------------------------------------------------------------------------------- 1280 # 1281 1282 # 1283 # -- linkes / rechtes Fenster (Splitter) ------------------------------------------ 1284 # 1285 self.SplitterWindow = wx.SplitterWindow( parent = self, id = -1, style = wx.SP_LIVE_UPDATE ) 1286 1287 1288 1289 # 1290 # -- Sicherheitsanforderungen ------------------------------------------ 1291 # 1292 self.SiAnf__SiAnf = SiAnf( parent = self.SplitterWindow 1293 , Notizen = self.__Notizen__ 1294 , dbVerbindung = self.__dbVerbindung__ ) 1295 1296 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.nimmWerteStatusleiste( 1297 DBSpNameErlaeuterung = u"Dem aktuellen Gefahrenszenario zugeordnete Sicherheitsanforderungen." 1298 , DBSpName = "prt.protokoll/prj.pp_prtprotokoll/prj.p_prtverbindung/prj.pl_prtpsgefszenario" ) 1299 1300 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.Bind( wx.EVT_KEY_DOWN 1301 , self.__ereignisBearbeiten__ ) 1302 1303 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.Bind( wx.EVT_TREE_ITEM_ACTIVATED 1304 , self.__ereignisSiAnfLoesen__ ) 1305 1306 self.SiAnf__SiAnf.TreeCtrlErg__Zugeordnet.Bind( wx.EVT_TREE_ITEM_ACTIVATED 1307 , self.__ereignisStrukturPunktLoesen__ ) 1308 1309 self.SiAnf__SiAnf.TreeCtrlErg__Zugeordnet.Bind( wx.EVT_TREE_ITEM_ACTIVATED 1310 , self.__ereignisDokumentLoesen__ ) 1311 1312 self.SiAnf__SiAnf.TreeCtrlErg__Zugeordnet.Bind( wx.EVT_TREE_ITEM_ACTIVATED 1313 , self.__ereignisGefProtLoesen__ ) 1314 1315 1316 # 1317 # -- Tabulatorbereich ---------- 1318 # -- Verfügbare Sicherheitsanforderungen, Strukturpunke, Dokumente ---------- 1319 # -- Protokolleinträge ---------- 1320 # 1321 self.Notebook__Verfuegbar = wx.Notebook( self.SplitterWindow ) 1322 1323 self.Notebook__Verfuegbar.AddPage( LayoutVerfuegbareSicherheitsanforderungen( 1324 parent = self.Notebook__Verfuegbar 1325 , Notizen = self.__Notizen__ 1326 , Fortschritt = self.__Fortschritt__ 1327 , dbVerbindung = self.__dbVerbindung__ ) 1328 , u"Verfügbare\nSicherheitsanforderungen" ) 1329 1330 self.Notebook__Verfuegbar.GetPage( 0 ).SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.nimmTooltip( tooltip = "Doppelklick:\nSicherheitsanforderung(en) der aktuell gewählten Sicherheitsanforderung bzw. dem aktuellen Gefahrenszenario zuordnen." ) 1331 1332 self.Notebook__Verfuegbar.GetPage( 0 ).SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.Bind( 1333 wx.EVT_TREE_ITEM_ACTIVATED 1334 , self.__ereignisSiAnfZuordnen__ ) 1335 1336 1337 self.Notebook__Verfuegbar.AddPage( LayoutVerfuegbareStrukturpunkte( parent = self.Notebook__Verfuegbar 1338 , Notizen = self.__Notizen__ 1339 , Fortschritt = self.__Fortschritt__ 1340 , dbVerbindung = self.__dbVerbindung__ ) 1341 , u"Verfügbare\nStrukturpunkte" ) 1342 1343 self.Notebook__Verfuegbar.GetPage( 1 ).TreeCtrlErg__VerfStrPkt.wxObjekt.nimmTooltip( "Doppelklick:\nStrukturpunkt der gewählten Sicherheitsanforderung zuordnen." ) 1344 1345 self.Notebook__Verfuegbar.GetPage( 1 ).TreeCtrlErg__VerfStrPkt.wxObjekt.Bind( 1346 wx.EVT_TREE_ITEM_ACTIVATED 1347 , self.__ereignisStrukturPunktZuordnen__ ) 1348 1349 1350 self.Notebook__Verfuegbar.AddPage( LayoutVerfuegbareDokumente( parent = self.Notebook__Verfuegbar 1351 , Notizen = self.__Notizen__ 1352 , Fortschritt = self.__Fortschritt__ 1353 , dbVerbindung = self.__dbVerbindung__ ) 1354 , u"Verfügbare\nDokumente" ) 1355 1356 self.Notebook__Verfuegbar.GetPage( 2 ).TreeCtrlErg__VerfDok.wxObjekt.nimmTooltip( "Doppelklick:\nDokument der gewählten Sicherheitsanforderung zuordnen." ) 1357 1358 self.Notebook__Verfuegbar.GetPage( 2 ).TreeCtrlErg__VerfDok.wxObjekt.Bind( wx.EVT_TREE_ITEM_ACTIVATED 1359 , self.__ereignisDokumentZuordnen__ ) 1360 1361 1362 1363 self.Notebook__Verfuegbar.AddPage( VerfuegbareProtokolleintraege( parent = self.Notebook__Verfuegbar 1364 , Notizen = self.__Notizen__ 1365 , dbVerbindung = self.__dbVerbindung__ ) 1366 , u"Verfügbare\nProtokolleinträge" ) 1367 1368 self.Notebook__Verfuegbar.GetPage( 3 ).TreeCtrlErg__VerfProtokolleintraege.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 1369 1370 self.Notebook__Verfuegbar.GetPage( 3 ).TreeCtrlErg__VerfProtokolleintraege.wxObjekt.nimmTooltip( u"Doppelklick:\nProtokolleintrag der gewählten Sicherheitsanforderung zuordnen." ) 1371 1372 self.Notebook__Verfuegbar.GetPage( 3 ).TreeCtrlErg__VerfProtokolleintraege.wxObjekt.Bind( 1373 wx.EVT_TREE_ITEM_ACTIVATED 1374 , self.__ereignisGefProtZuordnen__ ) 1375 1376 1377 # 1378 # -- Wechsel der Karteikarten bearbeiten ---------------------------------- 1379 # 1380 self.Notebook__Verfuegbar.Bind( wx.EVT_NOTEBOOK_PAGE_CHANGED 1381 , self.__ereignisKKGewechselt__ ) 1382 1383 1384 1385 # 1386 # -- Layout festlegen -------------------------------------------------- 1387 # 1388 self.SplitterWindow.SplitVertically( self.SiAnf__SiAnf 1389 , self.Notebook__Verfuegbar ) 1390 1391 BoxSizer = wx.BoxSizer( wx.VERTICAL ) 1392 BoxSizer.Add( self.SplitterWindow 1393 , proportion = 1 1394 , flag = wx.EXPAND|wx.ALL|wx.ALIGN_CENTER_VERTICAL 1395 , border = 10 ) 1396 1397 # 1398 # -- In das Eingabeformular übernehmen ---------------------------------- 1399 # 1400 self.SetSizerAndFit( BoxSizer ) 1401 1402 1403 1404 # 1405 # -- Tooltips / Hintergrundfarben setzen ---------------------------------- 1406 # 1407 self.__ereignisKKGewechselt__()
1408 1409 1410 1411 1412 # 1413 # ------------------------------------------------------------------------------------ 1414 # -- Sicherheitsanforderung bearbeiten ---------------------------------- 1415 # ------------------------------------------------------------------------------------ 1416 #
1417 - def __ereignisBearbeiten__( self, ereignis = None ):
1418 """ 1419 Methode die aufgerufen wird, wenn der Text der Sicherheitsanforderung bearbeitet werden soll. 1420 1421 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1422 @type ereignis: C{wx - Ereignisobjekt} 1423 """ 1424 1425 # 1426 # -- KK 'Sicherheitsanforderungen' muß gewählt sein -------------------------- 1427 # 1428 if( self.Notebook__Verfuegbar.GetCurrentPage() != self.Notebook__Verfuegbar.GetPage( 0 ) ) : 1429 1430 if( ereignis != None ) : 1431 1432 ereignis.Skip( skip = True ) 1433 return 1434 1435 1436 1437 # 1438 # -- Ungültige Tastaturereignisse abfangen ---------------------------------- 1439 # 1440 if( not( ereignis.GetKeyCode() == wx.WXK_F3 ) ) : 1441 1442 if( ereignis != None ) : 1443 1444 ereignis.Skip( skip = True ) 1445 return 1446 1447 1448 1449 # 1450 # -- Element 'Sicherheitsanforderungen' (root) nicht auswerten ---------- 1451 # 1452 if( ereignis.GetEventObject().istHauptknoten() ) : 1453 1454 if( ereignis != None ) : 1455 1456 ereignis.Skip( skip = True ) 1457 return 1458 1459 1460 1461 # 1462 # -- aktuelle Werte übernehmen ------------------------------------------ 1463 # 1464 listePrtProtokollId_SiAnf = zk.gibListeTeilmenge( liste = ereignis.GetEventObject().gibZweigDaten() ) 1465 prtProtokollId_SiAnf = ereignis.GetEventObject().gibDbId() 1466 1467 1468 1469 # 1470 # -- Formular zur Bearbeitung der Übersetzungsvariante aufrufen ---------- 1471 # 1472 dlg = BearbeiteUebersetzung( parent = self 1473 , Notizen = self.__Notizen__ 1474 , Fortschritt = self.__Fortschritt__ 1475 , dbVerbindung = self.__dbVerbindung__ 1476 , sprUebvarId = self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_SiAnf][0][3] 1477 , notizen_db = None 1478 , notizenKontext_db = self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_SiAnf][0][1] ) 1479 1480 1481 dlg.ShowModal() 1482 dlg.Destroy() 1483 1484 1485 1486 # 1487 # -- geänderte >spr.uebvar.id< bzw. >notizen< in -------------------------- 1488 # -- >prj.pp_prtprotokoll< übernehmen -------------------------- 1489 # 1490 if( dlg.gibWerte()[0] 1491 and ( dlg.gibWerte()[1] != self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_SiAnf][0][3] 1492 or dlg.gibWerte()[2] != self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_SiAnf][0][1] ) ) : 1493 1494 # 1495 # -- Fortschrittsdialog ------------------------------------------ 1496 # -- Delta = 100 / ( 1 ) ------------------------------------------ 1497 # 1498 self.__Fortschritt__.nimmDelta( delta = 100 / 1 ) 1499 1500 self.__dbVerbindung__.schreibe__prjPPPrtProtokoll( Fortschritt = self.__Fortschritt__ 1501 , listeWerte = [[ # 1502 # -- 0) id 1503 # 1504 self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_SiAnf][0][4] 1505 # 1506 # -- 1) notizen 1507 # 1508 , dlg.gibWerte()[2] 1509 # 1510 # -- 2) datuhrz 1511 # 1512 , None 1513 # 1514 # -- 3) duanfrage 1515 # 1516 , None 1517 # 1518 # -- 4) erledigt 1519 # 1520 , None 1521 # 1522 # -- 5) intern 1523 # 1524 , None 1525 # 1526 # -- 6) prj_personen_id 1527 # 1528 , 0 1529 # 1530 # -- 7) prt_protokoll_id 1531 # 1532 , prtProtokollId_SiAnf 1533 # 1534 # -- 8) spr_uebvar_id 1535 # 1536 , dlg.gibWerte()[1] 1537 # 1538 # -- 9) teilnehmer 1539 # 1540 , None 1541 # 1542 # -- 10) termin 1543 # 1544 , None ]] ) 1545 1546 1547 1548 # 1549 # -- permanente Datenstrukturen aktualisieren -------------------------- 1550 # 1551 self.istGeaendert__daten__prtProtokoll_siAnf__Sprache__Projekt = True 1552 self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt.clear() 1553 self.__dbVerbindung__.init__prtProtokoll__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 1554 1555 # 1556 # -- Fortschrittsdialog schließen ------------------------------------------ 1557 # 1558 self.__Fortschritt__.loescheFortschritt() 1559 1560 1561 1562 # 1563 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 1564 # -- SiAnfId - 'Verfügbare Sicherheitsanforderungen' neu auslesen -- 1565 # 1566 self.SiAnf__SiAnf.liesDB() 1567 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 1568 1569 self.Notebook__Verfuegbar.GetPage( 0 ).__ereignisLiesDBVerfSiAnf__() 1570 self.Notebook__Verfuegbar.GetPage( 0 ).SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.ExpandAll() 1571 1572 1573 1574 # 1575 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 1576 # -- ausgewertet werden kann -------------------------- 1577 # 1578 if( ereignis != None ) : ereignis.Skip( skip = True )
1579 1580 1581 1582 1583 1584 1585 # 1586 # ------------------------------------------------------------------------------------ 1587 # -- Dokument von Sicherheitsanforderung lösen -------------------------- 1588 # ------------------------------------------------------------------------------------ 1589 #
1590 - def __ereignisDokumentLoesen__( self, ereignis = None ):
1591 """ 1592 Das aktuelle Dokument von der gewählten Sicherheitsanforderung lösen. 1593 1594 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1595 @type ereignis: C{wx - Ereignisobjekt} 1596 """ 1597 1598 # 1599 # -- KK 'Sicherheitsanforderungen' darf nicht gewählt sein ------------------ 1600 # -- Es muß ein Strukturpunkt gewählt sein ------------------ 1601 # -- Dokumentknoten (root) nicht auswerten ------------------ 1602 # 1603 if( self.Notebook__Verfuegbar.GetCurrentPage() == self.Notebook__Verfuegbar.GetPage( 0 ) 1604 or ereignis.GetEventObject().gibBezeichnungHauptknoten( ereignis.GetItem() ) != HK_DOK 1605 or ereignis.GetEventObject().istHauptknoten() ) : 1606 1607 if( ereignis != None ) : 1608 1609 ereignis.Skip( skip = True ) 1610 return 1611 1612 1613 1614 # 1615 # -- aktuelle Werte übernehmen ------------------------------------------ 1616 # 1617 dokDokuId = ereignis.GetEventObject().gibDbId() 1618 prtProtokollId_SiAnf = self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.gibDbId() 1619 lfdNr = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt ).index( dokDokuId ) 1620 1621 1622 # 1623 # -- Fortschrittsdialog -------------------------------------------------- 1624 # -- Delta = 100 / ( 1 ) -------------------------------------------------- 1625 # 1626 self.__Fortschritt__.nimmDelta( delta = 100 / 1 ) 1627 1628 1629 # 1630 # -- Dokument von Sicherheitsanforderung trennen -------------------------- 1631 # 1632 self.__dbVerbindung__.schreibe__prjPlPrtDokDoku( Fortschritt = self.__Fortschritt__ 1633 , listeWerte = [ # 1634 # -- notizen --------- 1635 # 1636 self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt[lfdNr][5] 1637 # 1638 # -- logentfernt ----- 1639 # 1640 , 'true' 1641 # 1642 # -- dok_doku_id ----- 1643 # 1644 , dokDokuId 1645 # 1646 # -- prj_projekte_id - 1647 # 1648 , self.__dbVerbindung__.filter__prj_projekte_id 1649 # 1650 # -- prt_protokoll_id 1651 # 1652 , prtProtokollId_SiAnf ] ) 1653 1654 1655 1656 # 1657 # -- permanente Datenstrukturen aktualisieren -------------------------- 1658 # 1659 self.istGeaendert__daten__ProtId_DokuId__Projekt = True 1660 self.__dbVerbindung__.daten__ProtId_DokuId__Projekt.clear() 1661 self.__dbVerbindung__.init__ProtId_DokuId__Projekt( Fortschritt = self.__Fortschritt__ ) 1662 1663 # 1664 # -- Fortschrittsdialog schließen ------------------------------------------ 1665 # 1666 self.__Fortschritt__.loescheFortschritt() 1667 1668 1669 1670 1671 # 1672 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 1673 # 1674 self.SiAnf__SiAnf.liesDB() 1675 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 1676 1677 1678 1679 # 1680 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 1681 # -- ausgewertet werden kann -------------------------- 1682 # 1683 if( ereignis != None ) : ereignis.Skip( skip = True )
1684 1685 1686 1687 1688 # 1689 # ------------------------------------------------------------------------------------ 1690 # -- Sicherheitsanforderung zuordnen ---------------------------------- 1691 # ------------------------------------------------------------------------------------ 1692 #
1693 - def __ereignisDokumentZuordnen__( self, ereignis = None ):
1694 """ 1695 Das aktuelle Dokument der gewählten Sicherheitsanforderung zuordnen. 1696 1697 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1698 @type ereignis: C{wx - Ereignisobjekt} 1699 """ 1700 1701 # 1702 # -- Strukturbezeichnung (root) nicht auswerten -------------------------- 1703 # -- Eine Sicherheitsanforderung muß selektiert sein ------------------ 1704 # 1705 if( ereignis.GetEventObject().istHauptknoten() 1706 or self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.istHauptknoten() 1707 or self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetSelection() == self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetRootItem() ) : 1708 1709 if( ereignis != None ) : ereignis.Skip( skip = True ) 1710 return 1711 1712 1713 # 1714 # -- aktuelle Werte übernehmen ------------------------------------------ 1715 # 1716 dokDokuId = ereignis.GetEventObject().gibDbId() 1717 prtProtokollId_SiAnf = self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.gibDbId() 1718 1719 bereitsZugeordnet = [] 1720 if( prtProtokollId_SiAnf in self.__dbVerbindung__.daten__ProtId_DokuId__Projekt ) : 1721 bereitsZugeordnet = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_DokuId__Projekt[prtProtokollId_SiAnf] ) 1722 1723 1724 1725 # 1726 # -- Fehlermeldung -------------------------- 1727 # -- -------------------------- 1728 # -- Dokument ist bereits zugeordnet -------------------------- 1729 # 1730 if( dokDokuId in bereitsZugeordnet ) : 1731 1732 dlg = wx.MessageDialog( self 1733 , "Das Dokument ist bereits zugeordnet !\n\nDas Verschieben wird abgebrochen." 1734 , "Dokument wird nicht zugeordnet !" 1735 , wx.OK | wx.ICON_ERROR ) 1736 dlg.CenterOnScreen() 1737 dlg.ShowModal() 1738 dlg.Destroy() 1739 1740 if( ereignis != None ) : 1741 1742 ereignis.Skip( skip = True ) 1743 return 1744 1745 1746 1747 # 1748 # -- Dokumentinformationen auslesen ------------------------------------------ 1749 # 1750 lfdNr = None 1751 notizen = None 1752 nr = None 1753 spr_uebvar_id = None 1754 spr_uebvar_id_zus = None 1755 aspekt = None 1756 if( self.Notebook__Verfuegbar.GetPage( 2 ).__istFlex__ ) : 1757 1758 lfdNr = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt_Flex ).index( dokDokuId ) 1759 1760 notizen = self.__dbVerbindung__.daten__dokDoku__Sprache[dokDokuId][0][0] 1761 aspekt = self.__dbVerbindung__.daten__dokDoku__Sprache[dokDokuId][0][2] 1762 1763 1764 else : 1765 1766 lfdNr = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt ).index( dokDokuId ) 1767 1768 notizen = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt[lfdNr][5] 1769 aspekt = self.__dbVerbindung__.daten__dokDoku__Sprache[dokDokuId][0][2] 1770 1771 1772 1773 # 1774 # -- Fehlermeldung ---------- 1775 # -- ---------- 1776 # -- Quelldokumente dürfen jeder Sicherheitsanf. zugeordnet werden ---------- 1777 # -- Beweisdokumente dürfen nur der Dokumentationsanforderung [D] ---------- 1778 # -- oder Prüfung [P] zugeordnet werden ---------- 1779 # -- ---------- 1780 # -- [0] ... BEWEIS ---------------------------------------------------------- 1781 # 1782 if( ( aspekt == self.__dbVerbindung__.konstante__dok_doku_aspekt[0] ) 1783 and not ( self.__dbVerbindung__.ist__prtTypId( typ = 'D', id = self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_SiAnf][0][2] ) 1784 or self.__dbVerbindung__.ist__prtTypId( typ = 'P', id = self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_SiAnf][0][2] ) ) ) : 1785 1786 1787 dlg = wx.MessageDialog( self 1788 , "Quelldokumente (Id Q:) dürfen jeder Sicherheitsanforderung zugeordnet werden.\n\nBeweisdokumente (Id B:), dürfen nur der Dokumentationsanforderung (Id [D]) oder Prüfung (Id [P]) zugeordnet werden !\n\nDas Verschieben wird abgebrochen." 1789 , "Dokument wird nicht zugeordnet !" 1790 , wx.OK | wx.ICON_ERROR ) 1791 dlg.CenterOnScreen() 1792 dlg.ShowModal() 1793 dlg.Destroy() 1794 1795 if( ereignis != None ) : 1796 1797 ereignis.Skip( skip = True ) 1798 return 1799 1800 1801 1802 # 1803 # -- Fortschrittsdialog -------------------------------------------------- 1804 # -- Delta = 100 / ( 2 ) -------------------------------------------------- 1805 # 1806 self.__Fortschritt__.nimmDelta( delta = 100 / 2 ) 1807 1808 1809 # 1810 # -- ---------- 1811 # -- Alternatives Projekt gewählt. ---------- 1812 # -- ---------- 1813 # -- Dokumente in das aktuelle Projekt übernehmen ---------- 1814 # -- ---------- 1815 # 1816 if( self.Notebook__Verfuegbar.GetPage( 2 ).__istFlex__ ) : 1817 1818 # 1819 # -- Hinweis ---------- 1820 # -- ---------- 1821 # -- Auf Besonderheiten bei Übernahme projektfremder Dok ---------- 1822 # -- hinweisen ---------- 1823 # -- Der Hinweis erscheint nur bei der ersten Übernahme ---------- 1824 # 1825 if( self.__anderesProjektHinweisZeigen__ ) : 1826 1827 dlg = wx.MessageDialog( self 1828 , "Das Dokument befindet sich in einem anderen Projekt.\n\nEs wird nur die Dokument-Id und Dokumentbezeichnung übernommen.\n\nBehalte diesen Hinweis im Kopf. Er wird nicht mehr angezeigt, solange Du dieses Fenster geöffnet hast.\n\nSoll das Dokument in das aktuelle Projekt übernommen werden ?" 1829 , "Dokument in das aktuelle Projekt übernehmen ?" 1830 , style = wx.YES_NO | wx.ICON_QUESTION ) 1831 1832 dlg.CenterOnScreen() 1833 1834 if ( dlg.ShowModal() == wx.ID_NO ): 1835 1836 dlg.Destroy() 1837 1838 if( ereignis != None ) : 1839 1840 ereignis.Skip( skip = True ) 1841 return 1842 1843 dlg.Destroy() 1844 self.__anderesProjektHinweisZeigen__ = False 1845 1846 # 1847 # -- Dokument in das Projekt übernehmen -------------------------- 1848 # 1849 self.__dbVerbindung__.schreibe__prjPlDokAusgabe( Fortschritt = self.__Fortschritt__ 1850 , listeWerte = [ # 1851 # -- dok_doku_id 1852 # 1853 dokDokuId 1854 # 1855 # -- nr -------------- 1856 # 1857 , '????' 1858 # 1859 # -- spr_uebvar_id --- 1860 # 1861 , self.__dbVerbindung__.daten__dokDoku__Sprache[dokDokuId][0][3] ] ) 1862 1863 1864 1865 # 1866 # -- permanente Datenstrukturen aktualisieren ------------------ 1867 # 1868 # unten ausführen, sonst klappt >init__dokDoku__Sprache__Projekt()< nicht 1869 1870 1871 1872 # 1873 # -- Dokumente und Sicherheitsanforderungen verbinden ------------------ 1874 # 1875 self.__dbVerbindung__.schreibe__prjPlPrtDokDoku( Fortschritt = self.__Fortschritt__ 1876 , listeWerte = [ # 1877 # -- notizen --------- 1878 # 1879 notizen 1880 # 1881 # -- logentfernt ----- 1882 # 1883 , 'false' 1884 # 1885 # -- dok_doku_id ----- 1886 # 1887 , dokDokuId 1888 # 1889 # -- prj_projekte_id - 1890 # 1891 , self.__dbVerbindung__.filter__prj_projekte_id 1892 # 1893 # -- prt_protokoll_id 1894 # 1895 , prtProtokollId_SiAnf ] ) 1896 1897 1898 1899 # 1900 # -- permanente Datenstrukturen aktualisieren -------------------------- 1901 # 1902 self.istGeaendert__daten__ProtId_DokuId__Projekt = True 1903 self.__dbVerbindung__.daten__ProtId_DokuId__Projekt.clear() 1904 self.__dbVerbindung__.init__ProtId_DokuId__Projekt( Fortschritt = self.__Fortschritt__ ) 1905 1906 # -- erst muß >init__ProtId_DokuId__Projekt()< ausgeführt werden ! ---------- 1907 if( self.Notebook__Verfuegbar.GetPage( 2 ).__istFlex__ ) : 1908 1909 self.istGeaendert__daten__dokDoku__Sprache__Projekt = True 1910 self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt = [] 1911 self.__dbVerbindung__.init__dokDoku__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 1912 1913 # 1914 # -- Fortschrittsdialog schließen ------------------------------------------ 1915 # 1916 self.__Fortschritt__.loescheFortschritt() 1917 1918 1919 1920 # 1921 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 1922 # 1923 self.SiAnf__SiAnf.liesDB() 1924 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 1925 1926 1927 1928 # 1929 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 1930 # -- ausgewertet werden kann -------------------------- 1931 # 1932 if( ereignis != None ) : ereignis.Skip( skip = True )
1933 1934 1935 1936 # 1937 # ------------------------------------------------------------------------------------ 1938 # -- Gefahrenprotokolleintrag von Sicherheitsanforderung trennen ---------- 1939 # ------------------------------------------------------------------------------------ 1940 #
1941 - def __ereignisGefProtLoesen__( self, ereignis = None ):
1942 """ 1943 Den aktuellen Gefahrenprotokolleintrag von der gewählten Sicherheitsanforderung lösen. 1944 1945 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 1946 @type ereignis: C{wx - Ereignisobjekt} 1947 """ 1948 1949 # 1950 # -- KK 'Sicherheitsanforderungen' darf nicht gewählt sein ------------------ 1951 # -- Es muß ein Gefahrenprotokolleintrag gewählt sein ------------------ 1952 # -- Strukturbezeichnung (root) nicht auswerten ------------------ 1953 # 1954 if( self.Notebook__Verfuegbar.GetCurrentPage() == self.Notebook__Verfuegbar.GetPage( 0 ) 1955 or ereignis.GetEventObject().gibBezeichnungHauptknoten( ereignis.GetItem() ) != HK_PE 1956 or ereignis.GetEventObject().istHauptknoten() ) : 1957 1958 if( ereignis != None ) : 1959 1960 ereignis.Skip( skip = True ) 1961 return 1962 1963 1964 1965 # 1966 # -- aktuelle Werte übernehmen ------------------------------------------ 1967 # 1968 listePrtProtokollId = zk.gibListeTeilmenge( liste = ereignis.GetEventObject().gibZweigDaten() ) 1969 prtProtokollId_SiAnf = self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.gibDbId() 1970 1971 1972 # 1973 # -- Fortschrittsdialog -------------------------------------------------- 1974 # -- Delta = 100 / ( 1 ) -------------------------------------------------- 1975 # 1976 self.__Fortschritt__.nimmDelta( delta = 100 / 1 ) 1977 1978 1979 # 1980 # -- Sicherheitsanforderung von Gefahrenprotokolleintrag trennen ---------- 1981 # 1982 for protId in listePrtProtokollId : 1983 1984 self.__dbVerbindung__.schreibe__prjPPrtVerbindung( 1985 Fortschritt = self.__Fortschritt__ 1986 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 1987 # -- Sicherheitsanforderung --- 1988 , prtProtokollIdVorg = prtProtokollId_SiAnf 1989 # -- Gefahrenprotokolleintrag - 1990 , prtProtokollIdNachf = protId 1991 # -- Trennen ------------------ 1992 , trennen = True ) 1993 1994 1995 1996 # 1997 # -- permanente Datenstrukturen aktualisieren ------------------ 1998 # 1999 self.istGeaendert__daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt = True 2000 self.__dbVerbindung__.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt.clear() 2001 self.__dbVerbindung__.init__prtProtokoll__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 2002 2003 2004 # 2005 # -- Fortschrittsdialog schließen ------------------------------------------ 2006 # 2007 self.__Fortschritt__.loescheFortschritt() 2008 2009 2010 2011 2012 # 2013 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 2014 # 2015 self.SiAnf__SiAnf.liesDB() 2016 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 2017 2018 2019 2020 # 2021 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2022 # -- ausgewertet werden kann -------------------------- 2023 # 2024 if( ereignis != None ) : ereignis.Skip( skip = True )
2025 2026 2027 2028 2029 2030 2031 2032 # 2033 # ------------------------------------------------------------------------------------ 2034 # -- Gefahrenprtokolleintrag zur Sicherheitsanforderung zuordnen ---------- 2035 # ------------------------------------------------------------------------------------ 2036 #
2037 - def __ereignisGefProtZuordnen__( self, ereignis = None ):
2038 """ 2039 Den aktuellen Gefahrenprotokolleintrag / die -einträge der gewählten Sicherheitsanforderung zuordnen. 2040 2041 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 2042 @type ereignis: C{wx - Ereignisobjekt} 2043 """ 2044 2045 # 2046 # -- 'Protokolleinträge' (root) nicht auswerten -------------------------- 2047 # -- Eine Sicherheitsanforderung muß selektiert sein ------------------ 2048 # 2049 if( ereignis.GetEventObject().istHauptknoten() 2050 or self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.istHauptknoten() 2051 or self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetSelection() == self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetRootItem() ) : 2052 2053 if( ereignis != None ) : ereignis.Skip( skip = True ) 2054 return 2055 2056 2057 2058 # 2059 # -- aktuelle Werte übernehmen ------------------------------------------ 2060 # 2061 listePrtProtokollId = zk.gibListeTeilmenge( liste = ereignis.GetEventObject().gibZweigDaten() ) 2062 prtProtokollId = ereignis.GetEventObject().gibDbId() 2063 prtProtokollId_SiAnf = self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.gibDbId() 2064 2065 bereitsZugeordnet = [] 2066 if( prtProtokollId_SiAnf in self.__dbVerbindung__.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt ) : 2067 bereitsZugeordnet = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt[prtProtokollId_SiAnf] ) 2068 2069 2070 2071 # 2072 # -- Fehlermeldung -------------------------- 2073 # -- -------------------------- 2074 # -- Gefahrenprotokolleintrag ist bereits zugeordnet -------------------------- 2075 # 2076 if( prtProtokollId in bereitsZugeordnet ) : 2077 2078 dlg = wx.MessageDialog( self 2079 , "Der Gefahrenprotokolleintrag ist bereits zugeordnet !\n\nDas Verschieben wird abgebrochen." 2080 , "Gefahrenprotokolleintrag wird nicht zugeordnet !" 2081 , wx.OK | wx.ICON_ERROR ) 2082 dlg.CenterOnScreen() 2083 dlg.ShowModal() 2084 dlg.Destroy() 2085 2086 if( ereignis != None ) : 2087 2088 ereignis.Skip( skip = True ) 2089 return 2090 2091 2092 # 2093 # -- Fortschrittsdialog -------------------------------------------------- 2094 # -- Delta = 100 / ( 1 ) -------------------------------------------------- 2095 # 2096 self.__Fortschritt__.nimmDelta( delta = 100 / 1 ) 2097 2098 2099 # 2100 # -- Sicherheitsanforderung und Gefahrenprotokolleintrag verbinden ---------- 2101 # 2102 for protId in listePrtProtokollId : 2103 2104 self.__dbVerbindung__.schreibe__prjPPrtVerbindung( 2105 Fortschritt = self.__Fortschritt__ 2106 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 2107 # -- Sicherheitsanforderung -- 2108 , prtProtokollIdVorg = prtProtokollId_SiAnf 2109 # -- Gefahrenprotokolleintrag 2110 , prtProtokollIdNachf = protId ) 2111 2112 2113 2114 # 2115 # -- permanente Datenstrukturen aktualisieren ------------------ 2116 # 2117 self.istGeaendert__daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt = True 2118 self.__dbVerbindung__.daten__prtProtokoll_siAnf_gefProt__Sprache__Projekt.clear() 2119 self.__dbVerbindung__.init__prtProtokoll__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 2120 2121 2122 2123 # 2124 # -- Fortschrittsdialog schließen ------------------------------------------ 2125 # 2126 self.__Fortschritt__.loescheFortschritt() 2127 2128 2129 2130 2131 # 2132 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 2133 # 2134 self.SiAnf__SiAnf.liesDB() 2135 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 2136 2137 2138 2139 # 2140 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2141 # -- ausgewertet werden kann -------------------------- 2142 # 2143 if( ereignis != None ) : ereignis.Skip( skip = True )
2144 2145 2146 2147 2148 2149 # 2150 # ------------------------------------------------------------------------------------ 2151 # -- Karteikarten gewechselt -------------------------------------------------- 2152 # ------------------------------------------------------------------------------------ 2153 #
2154 - def __ereignisKKGewechselt__( self, ereignis = None ):
2155 """ 2156 Es wurde zwischen den Karteikarten gewechselt. 2157 2158 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet. 2159 @type ereignis: C{wx - Ereignisobjekt} 2160 """ 2161 2162 # 2163 # -- KK 'Sicherheitsanforderungen' gewählt ---------------------------------- 2164 # 2165 if( self.Notebook__Verfuegbar.GetCurrentPage() == self.Notebook__Verfuegbar.GetPage( 0 ) ) : 2166 2167 # 2168 # -- SiAnf-Id (links) ------------------------------------------ 2169 # 2170 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.SetBackgroundColour( farbeBearbeiten ) 2171 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.nimmTooltip( u"Doppelklick:\nVerbindung zwischen Sicherheitsanforderung und Gefahrenszenario aufheben.\n\nF3:\nÜbersetzung der Sicherheitsanforderung bearbeiten." ) 2172 2173 2174 # 2175 # -- Zugeordnete Strukturpunkte / Dokumente / ------------------ 2176 # -- Protokolleinträge (links) ------------------ 2177 # 2178 self.SiAnf__SiAnf.TreeCtrlErg__Zugeordnet.SetBackgroundColour( self.GetBackgroundColour() ) 2179 self.SiAnf__SiAnf.TreeCtrlErg__Zugeordnet.nimmTooltip( "" ) 2180 2181 2182 # 2183 # -- KK 'Strukturpunkte' / 'Dokumente' / 'Protokolleinträge' gewählt ---------- 2184 # 2185 else : 2186 2187 # 2188 # -- SiAnf-Id (links) ------------------------------------------ 2189 # 2190 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.SetBackgroundColour( 'WHITE' ) 2191 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.nimmTooltip( "" ) 2192 2193 # 2194 # -- Zugeordnete Strukturpunkte / Dokumente / ------------------ 2195 # -- Protokolleinträge (links) ------------------ 2196 # 2197 self.SiAnf__SiAnf.TreeCtrlErg__Zugeordnet.SetBackgroundColour( farbeBearbeiten ) 2198 2199 if( self.Notebook__Verfuegbar.GetCurrentPage() == self.Notebook__Verfuegbar.GetPage( 1 ) 2200 or self.Notebook__Verfuegbar.GetCurrentPage() == self.Notebook__Verfuegbar.GetPage( 2 ) 2201 or self.Notebook__Verfuegbar.GetCurrentPage() == self.Notebook__Verfuegbar.GetPage( 3 ) ) : 2202 2203 self.SiAnf__SiAnf.TreeCtrlErg__Zugeordnet.nimmTooltip( u"Doppelklick:\nVerbindung zwischen Sicherheitsanforderung und Strukturpunkt, Dokument oder Protokolleintrag aufheben." ) 2204 2205 2206 2207 # 2208 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2209 # -- ausgewertet werden kann -------------------------- 2210 # 2211 if( ereignis != None ) : ereignis.Skip( skip = True )
2212 2213 2214 2215 2216 # 2217 # ------------------------------------------------------------------------------------ 2218 # -- Sicherheitsanforderung vom Gefahrenszenario lösen ------------------ 2219 # ------------------------------------------------------------------------------------ 2220 #
2221 - def __ereignisSiAnfLoesen__( self, ereignis = None ):
2222 """ 2223 Die aktuelle(n) Sicherheitsanforderungen von der Sicherheitsanforderung (Technische Maßnahme) bzw. dem Gefahrenszenario lösen. 2224 2225 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 2226 @type ereignis: C{wx - Ereignisobjekt} 2227 """ 2228 2229 # 2230 # -- KK 'Sicherheitsanforderungen' muß gewählt sein -------------------------- 2231 # -- Element 'Sicherheitsanforderungen' (root) nicht auswerten ---------- 2232 # 2233 if( self.Notebook__Verfuegbar.GetCurrentPage() != self.Notebook__Verfuegbar.GetPage( 0 ) 2234 or ereignis.GetEventObject().istHauptknoten() ) : 2235 2236 if( ereignis != None ) : 2237 2238 ereignis.Skip( skip = True ) 2239 return 2240 2241 2242 # 2243 # -- Fortschrittsdialog -------------------------------------------------- 2244 # -- Delta = 100 / ( 1 ) -------------------------------------------------- 2245 # 2246 self.__Fortschritt__.nimmDelta( delta = 100 / 1 ) 2247 2248 2249 # 2250 # -- ------------------ 2251 # -- Sicherheitsanforderung vom Gefahrenszenario lösen ------------------ 2252 # -- ------------------ 2253 # 2254 self.__dbVerbindung__.schreibe__prjPlPrtPsGefszenario( 2255 Fortschritt = self.__Fortschritt__ 2256 , listePrtProtokollId = zk.gibListeTeilmenge( liste = ereignis.GetEventObject().gibZweigDaten() ) 2257 , psGefszenarioId = self.__dbVerbindung__.ps_gefszenario_id 2258 , logentfernt = 'true' ) 2259 2260 2261 2262 # 2263 # -- permanente Datenstruktur aktualisieren ---------------------------------- 2264 # 2265 self.istGeaendert__daten__GefszenId_ProtId_siAnf__Projekt = True 2266 self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt.clear() 2267 self.__dbVerbindung__.init__GefszenId_ProtId__Projekt( Fortschritt = self.__Fortschritt__ ) 2268 2269 2270 # 2271 # -- Fortschrittsdialog schließen ------------------------------------------ 2272 # 2273 self.__Fortschritt__.loescheFortschritt() 2274 2275 2276 2277 2278 # 2279 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 2280 # -- SiAnfId - 'Verfügbare Sicherheitsanforderungen' neu auslesen -- 2281 # 2282 self.SiAnf__SiAnf.liesDB() 2283 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 2284 2285 self.Notebook__Verfuegbar.GetPage( 0 ).__ereignisLiesDBVerfSiAnf__() 2286 self.Notebook__Verfuegbar.GetPage( 0 ).SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.ExpandAll() 2287 2288 2289 2290 # 2291 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2292 # -- ausgewertet werden kann -------------------------- 2293 # 2294 if( ereignis != None ) : ereignis.Skip( skip = True )
2295 2296 2297 2298 2299 # 2300 # ------------------------------------------------------------------------------------ 2301 # -- Sicherheitsanforderung zuordnen ---------------------------------- 2302 # ------------------------------------------------------------------------------------ 2303 #
2304 - def __ereignisSiAnfZuordnen__( self, ereignis = None ):
2305 """ 2306 Die aktuelle(n) Sicherheitsanforderungen der gewählten Sicherheitsanforderung (dem Gefahrenszenario) zuordnen. 2307 2308 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 2309 @type ereignis: C{wx - Ereignisobjekt} 2310 """ 2311 2312 # 2313 # -- Element 'Sicherheitsanforderungen' (root) nicht auswerten ---------- 2314 # 2315 if( ereignis.GetEventObject().istHauptknoten() ) : 2316 2317 if( ereignis != None ) : ereignis.Skip( skip = True ) 2318 return 2319 2320 2321 2322 # 2323 # -- aktuelle Werte übernehmen ------------------------------------------ 2324 # 2325 listePrtProtokollId = zk.gibListeTeilmenge( liste = ereignis.GetEventObject().gibZweigDaten() ) 2326 prtProtokollId = ereignis.GetEventObject().gibDbId() 2327 prtProtokollId_Vorg = None 2328 2329 if( not ( self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.istHauptknoten() 2330 or self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetSelection() == self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetRootItem() ) ) : 2331 2332 prtProtokollId_Vorg = self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.gibDbId() 2333 2334 2335 2336 # 2337 # -- Fehlermeldung -------------------------- 2338 # -- -------------------------- 2339 # -- Sicherheitsanforderung ist bereits zugeordnet -------------------------- 2340 # -- -> SiAnf -> Gefahrenszenario -------------------------- 2341 # -- -> SiAnf -> Vorgänger -------------------------- 2342 # 2343 istFehlermeldung = False 2344 2345 # -- kein Vorgänger gewählt (SiAnf darf nicht auf der obersten Ebene stehen) -- 2346 if( prtProtokollId_Vorg is None ) : 2347 2348 istFehlermeldung = ( ( prtProtokollId not in self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt.keys() ) and ( prtProtokollId in zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt[self.__dbVerbindung__.ps_gefszenario_id] ) ) ) 2349 2350 # -- Vorgänger gewählt (SiAnf darf nicht auf der obersten Ebene stehen) -- 2351 else : 2352 2353 istFehlermeldung = ( ( prtProtokollId in self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt ) and ( prtProtokollId_Vorg in zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt[prtProtokollId] ) ) ) 2354 2355 # -- Fehlermeldung ausgeben, Routine verlassen -------------------------- 2356 if( istFehlermeldung ) : 2357 2358 dlg = wx.MessageDialog( self 2359 , "Die Sicherheitsanforderung ist bereits zugeordnet !\n\nDas Verschieben wird abgebrochen." 2360 , "Sicherheitsanforderung wird nicht zugeordnet !" 2361 , wx.OK | wx.ICON_ERROR ) 2362 dlg.CenterOnScreen() 2363 dlg.ShowModal() 2364 dlg.Destroy() 2365 2366 if( ereignis != None ) : 2367 2368 ereignis.Skip( skip = True ) 2369 return 2370 2371 2372 2373 # 2374 # -- Warnung ---------- 2375 # -- ---------- 2376 # -- Verbindung wirklich aufheben ? ---------- 2377 # -- Der Nachfolger soll auf die oberste Ebene (Ebene ohne ---------- 2378 # -- Vorgänger) geschoben werden ---------- 2379 # 2380 if( ( prtProtokollId_Vorg is None ) 2381 and ( prtProtokollId in self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt ) ) : 2382 2383 dlg = wx.MessageDialog( self 2384 , "Soll die Verbindung zu sämtlichen Sicherheitsanforderungen aufgehoben und die aktuell gewählte\n\nSicherheitsanforderung-Id\t" + zk.gibIdWertNotizen( id = prtProtokollId, zusInfo = "" ) + "\n\nauf die oberste Ebene geschoben werden ?" 2385 , "Verbindungen aufheben ?" 2386 , style = wx.YES_NO | wx.ICON_QUESTION ) 2387 2388 dlg.CenterOnScreen() 2389 2390 if ( dlg.ShowModal() == wx.ID_NO ): 2391 2392 dlg.Destroy() 2393 2394 if( ereignis != None ) : 2395 2396 ereignis.Skip( skip = True ) 2397 return 2398 2399 dlg.Destroy() 2400 2401 2402 2403 # 2404 # -- Fehlermeldung ---------- 2405 # -- ---------- 2406 # -- Vorgänger muß eine technische Maßnahme sein (Id [T]) ---------- 2407 # -- Nachfolger darf keine technische Maßnahme sein (Id [D,P,O]) ---------- 2408 # -- (Die Zuordnung von SiAnf zu sich selbst wird somit automatisch ---------- 2409 # -- unterbunden) ---------- 2410 # 2411 if( prtProtokollId_Vorg is not None ) : 2412 2413 if( not self.__dbVerbindung__.ist__prtTypId( typ = 'T', id = self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId_Vorg][0][2] ) 2414 or self.__dbVerbindung__.ist__prtTypId( typ = 'T', id = self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt[prtProtokollId][0][2] ) ) : 2415 2416 dlg = wx.MessageDialog( self 2417 , "Verbindungen können nur zwischen einer technischen Maßnahme (Id [T]) und den restlichen Typen der Sicherheitsanforderungen (Id [D,P,O]) hergestellt werden.\n\nDas Verschieben wird abgebrochen." 2418 , "Sicherheitsanforderung wird nicht zugeordnet !" 2419 , wx.OK | wx.ICON_ERROR ) 2420 2421 dlg.CenterOnScreen() 2422 dlg.ShowModal() 2423 dlg.Destroy() 2424 2425 if( ereignis != None ) : 2426 2427 ereignis.Skip( skip = True ) 2428 return 2429 2430 2431 # 2432 # -- Fortschrittsdialog -------------------------------------------------- 2433 # -- Delta = 100 / ( 8 ) -------------------------------------------------- 2434 # 2435 self.__Fortschritt__.nimmDelta( delta = 100 / 8 ) 2436 2437 2438 # 2439 # -- ---------- 2440 # -- Alternatives Projekt gewählt. ---------- 2441 # -- ---------- 2442 # -- Sicherheitsanforderung(en) und zugeordnete Strukturpunkte / ---------- 2443 # -- Dokumente in das aktuelle Projekt übernehmen ---------- 2444 # -- ---------- 2445 # 2446 if( self.Notebook__Verfuegbar.GetPage( 0 ).SiAnf__VerfSiAnf.istPermDaten_Flex ) : 2447 2448 # 2449 # -- Hinweis -- 2450 # -- -- 2451 # -- Auf Besonderheiten bei Übernahme projektfremder SiAnf hinweisen -- 2452 # -- Der Hinweis erscheint nur bei der ersten Übernahme -- 2453 # 2454 if( self.__anderesProjektHinweisZeigen__ ) : 2455 2456 dlg = wx.MessageDialog( self 2457 , "Die Sicherheitsanforderung befindet sich in einem anderen Projekt.\n\nBitte beachte, daß die zugeordneten Sicherheitsanforderungen nicht übernommen werden.\nDie zugeordneten Strukturpunkte werden vollständig übernommen. Von den zugeordneten Dokumenten werden nur Dokument-Id und Dokumentbezeichnung übernommen. Gefahrenprotokolleinträge werden nicht übernommen.\n\nBehalte diese Hinweise im Kopf.Sie werden nicht mehr angezeigt, solange Du dieses Fenster geöffnet hast.\n\nSoll die Sicherheitsanforderung in das aktuelle Projekt übernommen werden ?" 2458 , "Sicherheitsanforderung in das aktuelle Projekt übernehmen ?" 2459 , style = wx.YES_NO | wx.ICON_QUESTION ) 2460 2461 dlg.CenterOnScreen() 2462 2463 if ( dlg.ShowModal() == wx.ID_NO ): 2464 2465 dlg.Destroy() 2466 2467 if( ereignis != None ) : 2468 2469 ereignis.Skip( skip = True ) 2470 return 2471 2472 dlg.Destroy() 2473 self.__anderesProjektHinweisZeigen__ = False 2474 2475 2476 2477 # 2478 # -- Sicherheitsanforderung(en) in das aktuelle Projekt ---------- 2479 # -- übernehmen (wenn noch nicht vorhanden) ---------- 2480 # -- Zugeordnete Sicherheitsanforderungen ignorieren ---------- 2481 # 2482 listePrtProtokollId = [prtProtokollId] 2483 if( prtProtokollId not in self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt ) : 2484 2485 self.__dbVerbindung__.schreibe__prjPPPrtProtokoll( Fortschritt = self.__Fortschritt__ 2486 , listeWerte = [[ # 2487 # -- 0) id 2488 # 2489 None 2490 # 2491 # -- 1) notizen 2492 # 2493 , self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt_Flex[prtProtokollId][0][1] 2494 # 2495 # -- 2) datuhrz 2496 # 2497 , None 2498 # 2499 # -- 3) duanfrage 2500 # 2501 , None 2502 # 2503 # -- 4) erledigt 2504 # 2505 , None 2506 # 2507 # -- 5) intern 2508 # 2509 , None 2510 # 2511 # -- 6) prj_personen_id 2512 # 2513 , 0 2514 # 2515 # -- 7) prt_protokoll_id 2516 # 2517 , prtProtokollId 2518 # 2519 # -- 8) spr_uebvar_id 2520 # 2521 , self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt_Flex[prtProtokollId][0][3] 2522 # 2523 # -- 9) teilnehmer 2524 # 2525 , None 2526 # 2527 # -- 10) termin 2528 # 2529 , None ]] ) 2530 2531 2532 # 2533 # -- permanente Datenstruktur aktualisieren -------------------------- 2534 # 2535 self.istGeaendert__daten__prtProtokoll_siAnf__Sprache__Projekt = True 2536 self.__dbVerbindung__.daten__prtProtokoll_siAnf__Sprache__Projekt.clear() 2537 self.__dbVerbindung__.init__prtProtokoll__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 2538 2539 2540 2541 # 2542 # -- Strukturpunkte in das aktuelle Projekt übernehmen ---------- 2543 # -- (wenn noch nicht vorhanden) ---------- 2544 # -- Verbindungen zwischen Strukturpunkten werden ignoriert ---------- 2545 # -- ---------- 2546 # -- Sicherheitsanforderungen und Strukturpunkte verbinden ---------- 2547 # -- (wenn noch nicht vorhanden) ---------- 2548 # 2549 if( prtProtokollId in self.__dbVerbindung__.daten__ProtId_StruktId__Projekt_Flex ) : 2550 2551 # 2552 # -- Strukturpunkte in das aktuelle Projekt übernehmen ---------- 2553 # 2554 bereitsZugeordnet = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt, spalte = 1 ) 2555 2556 istAenderungProjekt = False 2557 for strId in zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_StruktId__Projekt_Flex[prtProtokollId] ) : 2558 2559 if( bereitsZugeordnet is not None and strId in bereitsZugeordnet ) : continue 2560 2561 istAenderungProjekt = True 2562 2563 lfdNr = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex, spalte = 1 ).index( strId ) 2564 2565 self.__dbVerbindung__.schreibe__PrjPpStrStrkt( 2566 Fortschritt = self.__Fortschritt__ 2567 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 2568 , strStrktId = strId 2569 , prjPersonenId = "1" 2570 , sprUebvarId = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex[lfdNr][4] 2571 , fbereignis = "" 2572 , notizen = "" ) 2573 2574 if( len( str( self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex[lfdNr][2] ) ) > 0 ) : 2575 2576 self.__dbVerbindung__.schreibe__prjPStrverbindung( 2577 Fortschritt = self.__Fortschritt__ 2578 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 2579 , strStrktIdVorg = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex[lfdNr][2] 2580 , strStrktIdNachf = strId ) 2581 2582 2583 # 2584 # -- Sicherheitsanforderung und Strukturpunkte verbinden ---------- 2585 # 2586 bereitsZugeordnet = None 2587 if( prtProtokollId in self.__dbVerbindung__.daten__ProtId_StruktId__Projekt ) : 2588 2589 bereitsZugeordnet = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_StruktId__Projekt[prtProtokollId] ) 2590 2591 istAenderungSiAnf = False 2592 for strId in zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_StruktId__Projekt_Flex[prtProtokollId] ) : 2593 2594 if( bereitsZugeordnet is not None and strId in bereitsZugeordnet ) : continue 2595 2596 istAenderungSiAnf = True 2597 2598 self.__dbVerbindung__.schreibe__PrjPPrtStrStrkt( Fortschritt = self.__Fortschritt__ 2599 , listeWerte = [ # 2600 # -- 0) prt_protokoll_id 2601 # 2602 prtProtokollId 2603 # 2604 # -- 1) str_strkt_id 2605 # 2606 , strId ] ) 2607 2608 # 2609 # -- permanente Datenstrukturen aktualisieren ------------------ 2610 # 2611 if( istAenderungProjekt ) : 2612 2613 self.istGeaendert__daten__strStrkt__Sprache__Projekt = True 2614 self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt = [] 2615 self.__dbVerbindung__.init__strStrkt__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 2616 2617 if( istAenderungSiAnf ) : 2618 2619 self.istGeaendert__daten__ProtId_StruktId__Projekt = True 2620 self.__dbVerbindung__.daten__ProtId_StruktId__Projekt.clear() 2621 self.__dbVerbindung__.init__ProtId_StruktId__Projekt( Fortschritt = self.__Fortschritt__ ) 2622 2623 2624 2625 # 2626 # -- Dokumente in das aktuelle Projekt übernehmen ---------- 2627 # -- (wenn noch nicht vorhanden) ---------- 2628 # -- ---------- 2629 # -- Sicherheitsanforderungen und Dokumente verbinden ---------- 2630 # -- (wenn noch nicht vorhanden) ---------- 2631 # 2632 if( prtProtokollId in self.__dbVerbindung__.daten__ProtId_DokuId__Projekt_Flex ) : 2633 2634 # 2635 # -- Dokumente in das aktuelle Projekt übernehmen ---------- 2636 # 2637 bereitsZugeordnet = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt ) 2638 2639 istAenderungProjekt = False 2640 for dokId in zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_DokuId__Projekt_Flex[prtProtokollId] ) : 2641 2642 if( bereitsZugeordnet is not None and dokId in bereitsZugeordnet ) : continue 2643 2644 istAenderungProjekt = True 2645 2646 lfdNr = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt_Flex ).index( dokId ) 2647 2648 self.__dbVerbindung__.schreibe__prjPlDokAusgabe( Fortschritt = self.__Fortschritt__ 2649 , listeWerte = [ # 2650 # -- dok_doku_id 2651 # 2652 dokId 2653 # 2654 # -- nr -------------- 2655 # 2656 , '????' 2657 # 2658 # -- spr_uebvar_id --- 2659 # 2660 , self.__dbVerbindung__.daten__dokDoku__Sprache[dokId][0][3] ] ) 2661 2662 # 2663 # -- Sicherheitsanforderung und Dokumente verbinden ------------------ 2664 # 2665 bereitsZugeordnet = None 2666 if( prtProtokollId in self.__dbVerbindung__.daten__ProtId_DokuId__Projekt ) : 2667 2668 bereitsZugeordnet = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_DokuId__Projekt[prtProtokollId] ) 2669 2670 istAenderungSiAnf = False 2671 for dokId in zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_DokuId__Projekt_Flex[prtProtokollId] ) : 2672 2673 if( bereitsZugeordnet is not None and dokId in bereitsZugeordnet ) : continue 2674 2675 istAenderungSiAnf = True 2676 2677 lfdNr = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt_Flex ).index( dokId ) 2678 2679 self.__dbVerbindung__.schreibe__prjPlPrtDokDoku( Fortschritt = self.__Fortschritt__ 2680 , listeWerte = [ # 2681 # -- notizen --------- 2682 # 2683 self.__dbVerbindung__.daten__dokDoku__Sprache[dokId][0][0] 2684 # 2685 # -- logentfernt ----- 2686 # 2687 , 'false' 2688 # 2689 # -- dok_doku_id ----- 2690 # 2691 , dokId 2692 # 2693 # -- prj_projekte_id - 2694 # 2695 , self.__dbVerbindung__.filter__prj_projekte_id 2696 # 2697 # -- prt_protokoll_id 2698 # 2699 , prtProtokollId ] ) 2700 2701 # 2702 # -- permanente Datenstrukturen aktualisieren ------------------ 2703 # 2704 if( istAenderungProjekt ) : 2705 2706 self.istGeaendert__daten__dokDoku__Sprache__Projekt = True 2707 self.__dbVerbindung__.daten__dokDoku__Sprache__Projekt = [] 2708 self.__dbVerbindung__.init__dokDoku__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 2709 2710 if( istAenderungSiAnf ) : 2711 2712 self.istGeaendert__daten__ProtId_DokuId__Projekt = True 2713 self.__dbVerbindung__.daten__ProtId_DokuId__Projekt.clear() 2714 self.__dbVerbindung__.init__ProtId_DokuId__Projekt( Fortschritt = self.__Fortschritt__ ) 2715 2716 2717 2718 # 2719 # -- ---------- 2720 # -- Sicherheitsanforderung(en) dem Gefahrenszenario zuordnen ---------- 2721 # -- >prj.pl_prtpsgefszenario< ---------- 2722 # -- ---------- 2723 # -- Wenn Verbindungen zum Vorgänger hergestellt werden, den Vor- ---------- 2724 # -- gänger den anderen Gefahrenszenarien zuordnen ---------- 2725 # -- ---------- 2726 # -- ---------- 2727 # -- Bereits zugeordnete Sicherheitsanforderung(en) werden in ---------- 2728 # -- >schreibe__prjPlPrtPsGefszenario()< übersprungen ---------- 2729 # 2730 self.__dbVerbindung__.schreibe__prjPlPrtPsGefszenario( Fortschritt = self.__Fortschritt__ 2731 , listePrtProtokollId = listePrtProtokollId 2732 , psGefszenarioId = self.__dbVerbindung__.ps_gefszenario_id ) 2733 2734 # -- Den (neuen) Vorgänger allen Gefahrenszenarien zuordnen, denen ---------- 2735 # -- der Nachfolger bereits zugeordnet ist ---------- 2736 if( prtProtokollId_Vorg is not None ) : 2737 2738 for gefszenId in self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt.iteritems(): 2739 2740 if( prtProtokollId in zk.gibListeTeilmenge( liste = gefszenId[1] ) ) : 2741 2742 self.__dbVerbindung__.schreibe__prjPlPrtPsGefszenario( Fortschritt = self.__Fortschritt__ 2743 , listePrtProtokollId = [prtProtokollId_Vorg] 2744 , psGefszenarioId = gefszenId[0] ) 2745 2746 # 2747 # -- permanente Datenstruktur aktualisieren ---------------------------------- 2748 # 2749 self.istGeaendert__daten__GefszenId_ProtId_siAnf__Projekt = True 2750 self.__dbVerbindung__.daten__GefszenId_ProtId_siAnf__Projekt.clear() 2751 self.__dbVerbindung__.init__GefszenId_ProtId__Projekt( Fortschritt = self.__Fortschritt__ ) 2752 2753 2754 2755 # 2756 # -- ---------- 2757 # -- Verbindung zur selektierten Sicherheitsanforderung herstellen ---------- 2758 # -- >prj.p_prtverbindung< ---------- 2759 # -- ---------- 2760 # -- ---------- 2761 # -- Bereits zugeordnete Sicherheitsanforderung(en) werden in ---------- 2762 # -- >schreibe__prjPPrtVerbindung()< übersprungen ---------- 2763 # -- ---------- 2764 # 2765 if( prtProtokollId_Vorg is not None ) : 2766 2767 self.__dbVerbindung__.schreibe__prjPPrtVerbindung( 2768 Fortschritt = self.__Fortschritt__ 2769 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 2770 , prtProtokollIdVorg = prtProtokollId_Vorg 2771 , prtProtokollIdNachf = prtProtokollId ) 2772 2773 2774 # 2775 # -- permanente Datenstruktur aktualisieren -------------------------- 2776 # 2777 self.istGeaendert__daten__prtProtokoll_siAnf_vorg__Sprache__Projekt = True 2778 self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt.clear() 2779 self.__dbVerbindung__.init__prtProtokoll__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 2780 2781 2782 2783 # 2784 # -- ---------- 2785 # -- Verbindung aufheben (Sicherheitsanforderung auf oberste ---------- 2786 # -- Ebene schieben ) ---------- 2787 # -- >prj.p_prtverbindung< ---------- 2788 # -- ---------- 2789 # -- ---------- 2790 # -- Bereits zugeordnete Sicherheitsanforderung(en) werden in ---------- 2791 # -- >schreibe__prjPPrtVerbindung()< übersprungen ---------- 2792 # -- ---------- 2793 # 2794 if( prtProtokollId_Vorg is None 2795 and prtProtokollId in self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt ) : 2796 2797 for prtProtokollId_vorg in self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt[prtProtokollId] : 2798 2799 self.__dbVerbindung__.schreibe__prjPPrtVerbindung( 2800 Fortschritt = self.__Fortschritt__ 2801 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 2802 , prtProtokollIdVorg = prtProtokollId_vorg[0] 2803 , prtProtokollIdNachf = prtProtokollId 2804 , trennen = True ) 2805 2806 2807 # 2808 # -- permanente Datenstruktur aktualisieren -------------------------- 2809 # 2810 self.istGeaendert__daten__prtProtokoll_siAnf_vorg__Sprache__Projekt = True 2811 self.__dbVerbindung__.daten__prtProtokoll_siAnf_vorg__Sprache__Projekt.clear() 2812 self.__dbVerbindung__.init__prtProtokoll__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 2813 2814 2815 # 2816 # -- Fortschrittsdialog schließen ------------------------------------------ 2817 # 2818 self.__Fortschritt__.loescheFortschritt() 2819 2820 2821 # 2822 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 2823 # -- SiAnfId - 'Verfügbare Sicherheitsanforderungen' neu auslesen -- 2824 # 2825 self.SiAnf__SiAnf.liesDB() 2826 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 2827 2828 self.Notebook__Verfuegbar.GetPage( 0 ).__ereignisLiesDBVerfSiAnf__() 2829 self.Notebook__Verfuegbar.GetPage( 0 ).SiAnf__VerfSiAnf.TreeCtrlErg__SiAnf.ExpandAll() 2830 2831 2832 2833 # 2834 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2835 # -- ausgewertet werden kann -------------------------- 2836 # 2837 if( ereignis != None ) : ereignis.Skip( skip = True )
2838 2839 2840 2841 2842 # 2843 # ------------------------------------------------------------------------------------ 2844 # -- Strukturpunkt von Sicherheitsanforderung trennen ------------------ 2845 # ------------------------------------------------------------------------------------ 2846 #
2847 - def __ereignisStrukturPunktLoesen__( self, ereignis = None ):
2848 """ 2849 Den aktuellen Strukturpunkt / die Strukturpunkte von der gewählten Sicherheitsanforderung lösen. 2850 2851 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 2852 @type ereignis: C{wx - Ereignisobjekt} 2853 """ 2854 2855 # 2856 # -- KK 'Sicherheitsanforderungen' darf nicht gewählt sein ------------------ 2857 # -- Es muß ein Strukturpunkt gewählt sein ---------------------------------- 2858 # -- Strukturbezeichnung (root) nicht auswerten -------------------------- 2859 # 2860 if( self.Notebook__Verfuegbar.GetCurrentPage() == self.Notebook__Verfuegbar.GetPage( 0 ) 2861 or ereignis.GetEventObject().gibBezeichnungHauptknoten( ereignis.GetItem() ) != HK_STR 2862 or ereignis.GetEventObject().istHauptknoten() ) : 2863 2864 if( ereignis != None ) : 2865 2866 ereignis.Skip( skip = True ) 2867 return 2868 2869 2870 2871 # 2872 # -- aktuelle Werte übernehmen ------------------------------------------ 2873 # 2874 listeStrStrktId = zk.gibListeTeilmenge( liste = ereignis.GetEventObject().gibZweigDaten() ) 2875 prtProtokollId_SiAnf = self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.gibDbId() 2876 2877 2878 2879 # 2880 # -- Fortschrittsdialog -------------------------------------------------- 2881 # -- Delta = 100 / ( 1 ) -------------------------------------------------- 2882 # 2883 self.__Fortschritt__.nimmDelta( delta = 100 / 1 ) 2884 2885 2886 # 2887 # -- ---------- 2888 # -- Sicherheitsanforderungen vom Strukturpunkt trennen ---------- 2889 # 2890 for strId in listeStrStrktId : 2891 2892 self.__dbVerbindung__.schreibe__PrjPPrtStrStrkt( Fortschritt = self.__Fortschritt__ 2893 , listeWerte = [ # 2894 # -- 0) prt_protokoll_id 2895 # 2896 prtProtokollId_SiAnf 2897 # 2898 # -- 1) str_strkt_id 2899 # 2900 , strId ] 2901 , entfernen = True ) 2902 2903 2904 2905 # 2906 # -- permanente Datenstrukturen aktualisieren ------------------ 2907 # 2908 self.istGeaendert__daten__ProtId_StruktId__Projekt = True 2909 self.__dbVerbindung__.daten__ProtId_StruktId__Projekt.clear() 2910 self.__dbVerbindung__.init__ProtId_StruktId__Projekt( Fortschritt = self.__Fortschritt__ ) 2911 2912 2913 2914 # 2915 # -- Fortschrittsdialog schließen ------------------------------------------ 2916 # 2917 self.__Fortschritt__.loescheFortschritt() 2918 2919 2920 2921 # 2922 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 2923 # 2924 self.SiAnf__SiAnf.liesDB() 2925 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 2926 2927 2928 2929 # 2930 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 2931 # -- ausgewertet werden kann -------------------------- 2932 # 2933 if( ereignis != None ) : ereignis.Skip( skip = True )
2934 2935 2936 2937 2938 2939 # 2940 # ------------------------------------------------------------------------------------ 2941 # -- Sicherheitsanforderung zuordnen ---------------------------------- 2942 # ------------------------------------------------------------------------------------ 2943 #
2944 - def __ereignisStrukturPunktZuordnen__( self, ereignis = None ):
2945 """ 2946 Den aktuellen Strukturpunkt / die Strukturpunkte der gewählten Sicherheitsanforderung zuordnen. 2947 2948 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 2949 @type ereignis: C{wx - Ereignisobjekt} 2950 """ 2951 2952 # 2953 # -- Strukturbezeichnung (root) nicht auswerten -------------------------- 2954 # -- Eine Sicherheitsanforderung muß selektiert sein ------------------ 2955 # 2956 if( ereignis.GetEventObject().istHauptknoten() 2957 or self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.istHauptknoten() 2958 or self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetSelection() == self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.GetRootItem() ) : 2959 2960 if( ereignis != None ) : ereignis.Skip( skip = True ) 2961 return 2962 2963 2964 2965 # 2966 # -- aktuelle Werte übernehmen ------------------------------------------ 2967 # 2968 listeStrStrktId = zk.gibListeTeilmenge( liste = ereignis.GetEventObject().gibZweigDaten() ) 2969 strStrktId = ereignis.GetEventObject().gibDbId() 2970 prtProtokollId_SiAnf = self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.gibDbId() 2971 2972 bereitsZugeordnet = [] 2973 if( prtProtokollId_SiAnf in self.__dbVerbindung__.daten__ProtId_StruktId__Projekt ) : 2974 bereitsZugeordnet = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__ProtId_StruktId__Projekt[prtProtokollId_SiAnf] ) 2975 2976 2977 2978 # 2979 # -- Fehlermeldung -------------------------- 2980 # -- -------------------------- 2981 # -- Strukturpunkt ist bereits zugeordnet -------------------------- 2982 # 2983 if( strStrktId in bereitsZugeordnet ) : 2984 2985 dlg = wx.MessageDialog( self 2986 , "Der Strukturpunkt ist bereits zugeordnet !\n\nDas Verschieben wird abgebrochen." 2987 , "Strukturpunkt wird nicht zugeordnet !" 2988 , wx.OK | wx.ICON_ERROR ) 2989 dlg.CenterOnScreen() 2990 dlg.ShowModal() 2991 dlg.Destroy() 2992 2993 if( ereignis != None ) : 2994 2995 ereignis.Skip( skip = True ) 2996 return 2997 2998 2999 3000 # 3001 # -- Fortschrittsdialog -------------------------------------------------- 3002 # -- Delta = 100 / ( 2 ) -------------------------------------------------- 3003 # 3004 self.__Fortschritt__.nimmDelta( delta = 100 / 2 ) 3005 3006 3007 3008 # 3009 # -- ---------- 3010 # -- Alternatives Projekt gewählt. ---------- 3011 # -- ---------- 3012 # -- Sicherheitsanforderung(en) und zugeordnete Strukturpunkte / ---------- 3013 # -- Dokumente in das aktuelle Projekt übernehmen ---------- 3014 # -- ---------- 3015 # 3016 if( self.Notebook__Verfuegbar.GetPage( 1 ).__istFlex__ ) : 3017 3018 # 3019 # -- Hinweis ---------- 3020 # -- ---------- 3021 # -- Auf Besonderheiten bei Übernahme projektfremder StrPkt ---------- 3022 # -- hinweisen ---------- 3023 # -- Der Hinweis erscheint nur bei der ersten Übernahme ---------- 3024 # 3025 if( self.__anderesProjektHinweisZeigen__ ) : 3026 3027 dlg = wx.MessageDialog( self 3028 , "Der Strukturpunkt befindet sich in einem anderen Projekt.\n\nEr wird gemeinsam mit seinen untergeordneten Strukturpunkten in das aktuelle Projekt übernommen. Sollte der Vorgänger des Strukturpunktes bereits im Projekt vorhanden sein, wird die Verbindung zwischen beiden Strukturpunkten hergestellt.\n\nBehalte diese Hinweise im Kopf. Sie wedren nicht mehr angezeigt, solange Du dieses Fenster geöffnet hast.\n\nSoll der Strukturpunkt (einschließlich untergeordneter Strukturpunkte) in das aktuelle Projekt übernommen werden ?" 3029 , "Strukturpunkt in das aktuelle Projekt übernehmen ?" 3030 , style = wx.YES_NO | wx.ICON_QUESTION ) 3031 3032 dlg.CenterOnScreen() 3033 3034 if ( dlg.ShowModal() == wx.ID_NO ): 3035 3036 dlg.Destroy() 3037 3038 if( ereignis != None ) : 3039 3040 ereignis.Skip( skip = True ) 3041 return 3042 3043 dlg.Destroy() 3044 self.__anderesProjektHinweisZeigen__ = False 3045 3046 3047 # 3048 # -- Strukturpunkte in das aktuelle Projekt übernehmen ---------- 3049 # -- (wenn noch nicht vorhanden) ---------- 3050 # -- ---------- 3051 # -- Verbindungen der Strukturpunkte in das aktuelle ---------- 3052 # -- Projekt übernehmen (wenn noch nicht vorhanden) ---------- 3053 # 3054 bereitsVorhanden = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt, spalte = 1 ) 3055 3056 istAenderung = False 3057 for strId in listeStrStrktId : 3058 3059 if( bereitsVorhanden is not None and strId in bereitsVorhanden ) : continue 3060 3061 istAenderung = True 3062 3063 lfdNr = zk.gibListeTeilmenge( liste = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex, spalte = 1 ).index( strId ) 3064 3065 self.__dbVerbindung__.schreibe__PrjPpStrStrkt( 3066 Fortschritt = self.__Fortschritt__ 3067 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 3068 , strStrktId = strId 3069 , prjPersonenId = "1" 3070 , sprUebvarId = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex[lfdNr][4] 3071 , fbereignis = "" 3072 , notizen = "" ) 3073 3074 if( len( str( self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex[lfdNr][2] ) ) > 0 ) : 3075 3076 self.__dbVerbindung__.schreibe__prjPStrverbindung( 3077 Fortschritt = self.__Fortschritt__ 3078 , prjProjekteId = self.__dbVerbindung__.filter__prj_projekte_id 3079 , strStrktIdVorg = self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt_Flex[lfdNr][2] 3080 , strStrktIdNachf = strId ) 3081 3082 3083 # 3084 # -- permanente Datenstrukturen aktualisieren ------------------ 3085 # 3086 if( istAenderung ) : 3087 3088 self.istGeaendert__daten__strStrkt__Sprache__Projekt = True 3089 self.__dbVerbindung__.daten__strStrkt__Sprache__Projekt = [] 3090 self.__dbVerbindung__.init__strStrkt__Sprache__Projekt( Fortschritt = self.__Fortschritt__ ) 3091 3092 3093 3094 # 3095 # -- ---------- 3096 # -- Sicherheitsanforderungen und Strukturpunkte verbinden ---------- 3097 # -- (wenn noch nicht vorhanden) ---------- 3098 # 3099 for strId in listeStrStrktId : 3100 3101 if( strId in bereitsZugeordnet ) : continue 3102 3103 self.__dbVerbindung__.schreibe__PrjPPrtStrStrkt( Fortschritt = self.__Fortschritt__ 3104 , listeWerte = [ # 3105 # -- 0) prt_protokoll_id 3106 # 3107 prtProtokollId_SiAnf 3108 # 3109 # -- 1) str_strkt_id 3110 # 3111 , strId ] ) 3112 3113 3114 # 3115 # -- permanente Datenstrukturen aktualisieren ------------------ 3116 # 3117 self.istGeaendert__daten__ProtId_StruktId__Projekt = True 3118 self.__dbVerbindung__.daten__ProtId_StruktId__Projekt.clear() 3119 self.__dbVerbindung__.init__ProtId_StruktId__Projekt( Fortschritt = self.__Fortschritt__ ) 3120 3121 3122 3123 # 3124 # -- Fortschrittsdialog schließen ------------------------------------------ 3125 # 3126 self.__Fortschritt__.loescheFortschritt() 3127 3128 3129 3130 # 3131 # -- SiAnfId - 'bereits zugeordnete Sicherheitsanforderungen' neu auslesen -- 3132 # 3133 self.SiAnf__SiAnf.liesDB() 3134 self.SiAnf__SiAnf.TreeCtrlErg__SiAnf.ExpandAll() 3135 3136 3137 3138 # 3139 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 3140 # -- ausgewertet werden kann -------------------------- 3141 # 3142 if( ereignis != None ) : ereignis.Skip( skip = True )
3143 3144 3145 3146 3147 # 3148 # ------------------------------------------------------------------------------------ 3149 # -- Verfügbare Sicherheitsanforderungen initialisieren ------------------ 3150 # ------------------------------------------------------------------------------------ 3151 #
3152 - def init_Sicherheitsanforderungen( self ):
3153 """ 3154 Initialisierung. 3155 """ 3156 3157 # 3158 # -- Karteikarten initialisieren auslesen -------------------------------------------------- 3159 # 3160 self.Notebook__Verfuegbar.GetPage(0).init_VerfSiAnf() 3161 self.Notebook__Verfuegbar.GetPage(1).init_VerfStrkt() 3162 self.Notebook__Verfuegbar.GetPage(2).init_VerfDok() 3163 self.Notebook__Verfuegbar.GetPage(3).init_VerfProtokolleintraege() 3164 3165 3166 3167 # 3168 # -- Liste der Sicherheitsanforderungen-Id füllen ------------------ 3169 # 3170 self.SiAnf__SiAnf.liesDB()
3171 3172 3173 3174 3175 3176 # 3177 # ------------------------------------------------------------------------------------ 3178 # -- ClientData des Eintrages mit der lfdNr zurückgegeben ------------------ 3179 # ------------------------------------------------------------------------------------ 3180 #
3182 """ 3183 Mit Aufruf dieser Methode wird die Karteikarte 'Protokolleinträge' ausgewählt. 3184 3185 """ 3186 3187 # 3188 # -- Karteikarte auswählen -------------------------------------------------- 3189 # 3190 self.Notebook__Verfuegbar.ChangeSelection( 3 ) 3191 self.__ereignisKKGewechselt__()
3192