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

Source Code for Module bearbeitesicherheitsanf

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