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