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 wx
40 import wx.lib.masked as wxmsk
41
42 from universal import zk
43
44
45
46
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 farbeAuswahlListe = "LIGHT STEEL BLUE"
84 farbeBearbeiten = "LIGHT YELLOW"
85
86
87
88
89
90
91
92
93
94
95
96
98 """
99 Basisklasse, die die Ergänzungen bereitstellt.
100 """
101
102
103
104
105
106
108
109
110
111
112
113
114
115 self.KMenues = MultiMenu()
116
117
118
119
120 self.KMenues.initMenu()
121
122
123
124
125
126 self.__StatusLeiste__ = Statusleiste
127 self.__statusLeisteDBSpName__ = None
128 self.statusLeisteDBSpNameErlaeuterung = None
129
130
131
132
133
134 self.wertNichtMod = []
135 self.wertNichtMod.append( None )
136 """
137 @cvar: Aktueller, nichtmodifizierter Wert, wie er beim letzten Aufruf von C{nimmWert(...)} eingelesen wurde.
138 @type: Python - Objekt
139 """
140
141
142
143
144
145 self.clientData = []
146 """
147 @cvar: Zusatzinformationen, die dem aktuellen Objekt zugeordnet werden können.
148 @type: Python - Objekt
149 """
150
151
152
153
154
155
156 self.istVomBenutzerGeaendert = False
157 """
158 @cvar: Wenn dieser Wert C{True} ist, wurde der Wert des C{wx-Objektes} vom Benutzer verändert.
159 @type: Boolescher Wert
160 """
161
162
163
164
165
166
167 self.istBenutzerAenderungJetzt = False
168 """
169 @cvar: Wenn dieser Wert C{True} ist, wurde der Wert des C{wx-Objektes} jetzt vom Benutzer verändert.
170 @type: Boolescher Wert
171 """
172
173
174
175
176
177
178
179
180
181
183 """
184 Methode die aufgerufen wird, wenn der Inhalt des C{wx-Objektes} geändert wird.
185
186 @param ereignis: Es ist das C{wx-Ereignisobjekt} zur Ereignisbehandlung zu übergeben.
187 @type ereignis: C{wx-Ereignisobjekt}
188 """
189
190
191
192
193 self.istVomBenutzerGeaendert = True
194 self.istBenutzerAenderungJetzt = True
195
196
197
198
199
200
201 ereignis.Skip( skip = True )
202
203
204
205
206
207
208
209
210
212 """
213 Kontextmenü nicht anzeigen
214
215 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben.
216 @type ereignis: C{wx - Ereignisobjekt}
217 """
218
219
220
221
222 self.PopupMenu( self.KMenues.gibMenu( lfdNrMenu = 0 ) )
223
224
225
226
227
228 ereignis.Skip( skip = False )
229
230
231
232
233
234
235
236
237
239 """
240 Methode die aufgerufen wird, um die Einträge in der Statusleiste darzustellen.
241
242 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben.
243 @type ereignis: C{wx - Ereignisobjekt}
244 """
245
246
247
248
249
250 if ereignis.Leaving():
251 self.__StatusLeiste__.SetStatusText( "", 0 )
252 self.__StatusLeiste__.SetStatusText( "", 1 )
253
254
255
256
257
258 if ereignis.Entering():
259
260
261
262
263 self.__StatusLeiste__.SetStatusText( str( self.__statusLeisteDBSpName__ ), 1 )
264
265
266
267
268 self.__StatusLeiste__.SetStatusText( str( self.statusLeisteDBSpNameErlaeuterung ), 0 )
269
270
271
272
273
274
275 ereignis.Skip( skip = True )
276
277
278
279
280
281
282
283
285 """
286 Hat der Benutzer eine Änderung durchgeführt ?
287
288 @return: Es wird C{True} zurückgegeben, wenn der Benutzer eine Änderung durchgeführt hat; sonst C{False}.
289 @rtype: Boolean
290 """
291
292 return self.istVomBenutzerGeaendert
293
294
295
296
297
298
299
300
302 """
303 Den Status der Benutzeränderung explizit setzen.
304
305 @param istVomBenutzerGeaendert: Es ist der Status der Benutzeränderung zu übergeben.
306 @type istVomBenutzerGeaendert: C{Boolean}
307 """
308
309 self.istVomBenutzerGeaendert = istVomBenutzerGeaendert
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324 -class __TextFunktionen__( __Ergaenzung__ ):
325 """
326 Basisklasse, die zusätzlichen Funktionen für Texteingabeobjekte bereitstellt.
327 """
328
329
330
331
332
333
334 - def __init__( self, Statusleiste ):
335 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste )
336
337
338
339
340
341 self.darfLeerSein = False
342
343
344
345
346
347
348 self.istMeldungRechtschreibFehlerKorrektur = True
349
350
351
352
353
354
355 self.istRechtschreibFehlerKorrektur = False
356
357
358
359
360
361
362
363
364
366 """
367 Wenn eine Benutzeränderung vorliegt wird ein Meldung ausgegeben, um beim Benutzer abzufragen, ob eine Rechtschreibkorrektur vorliegt.
368 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.
369
370 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet.
371 @type ereignis: C{wx - Ereignisobjekt}
372 """
373
374
375
376
377
378
379
380 if( self.istLeer() ) :
381
382
383
384
385 if( zk.istLeer( self.wertNichtMod[0] ) ) :
386 self.nimmWert( wert = zk.LeerZk, clientData = self.clientData )
387 else:
388 self.nimmWert( wert = self.wertNichtMod[0], clientData = self.clientData )
389
390
391
392
393
394
395 ereignis.Skip( skip = True )
396
397
398
399
400
401 return
402
403
404
405
406
407
408
409
410 if( ( not self.istBenutzerAenderungJetzt )
411 or ( not self.istMeldungRechtschreibFehlerKorrektur ) ) :
412
413
414
415
416 ereignis.Skip( skip = True )
417 return
418
419
420
421
422
423 dlg = wx.MessageDialog( parent = self
424 , message = "Wurde eine Korrektur von Rechtschreibfehlern durchgeführt ?"
425 , caption = "Rechtschreibfehler ?"
426 , style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION )
427
428 self.istRechtschreibFehlerKorrektur = ( dlg.ShowModal() == wx.ID_YES )
429
430 dlg.Destroy()
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445 self.istBenutzerAenderungJetzt = False
446
447
448
449
450
451
452 ereignis.Skip( skip = True )
453
454
455
456
457
458
459
460
461 - def gibClientData( self ):
462 """
463 Virtuelle Funktion zur Rückgabe der Zusatzinformationen C{clientData}. Diese Funktion muß in der abgeleiteten Klasse implementiert werden (overloading).
464 """
465
466 return "Muß in der abgeleiteten Klasse implementiert (überschrieben) werden."
467
468
469
470
471
472
473
474
475 - def gibWert( self ):
476 """
477 Virtuelle Funktion zur Rückgabe des Wertes. Diese Funktion muß in der abgeleiteten Klasse implementiert werden (overloading).
478 """
479
480 return "Muß in der abgeleiteten Klasse implementiert (überschrieben) werden."
481
482
483
484
485
486
487
488
489 - def istLeer( self ):
490 """
491 Der Inhalt des Texteingabeobjektes ist leer
492 """
493
494 return zk.istLeer( self.gibWert() )
495
496
497
498
499
500
501
502
503 - def nimmWert( self, wert, clientData = None ):
504 """
505 Virtuelle Funktion zur Rückgabe des Wertes. Diese Funktion muß in der abgeleiteten Klasse implementiert werden (overloading).
506 """
507
508 return "Muß in der abgeleiteten Klasse implementiert (überschrieben) werden."
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
525 """
526 Klasse, die einem beliebigen wx-Objekt einen Titel zuordnet.
527 """
528
529
530
531
532
533
534 - def __init__( self, parent, wxObj, titel, orient ):
535
536
537
538
539 self.wxText = wx.StaticText( parent, label = titel )
540 """
541 @cvar: Titel des C{wx-Objektes}.
542 @type: wxPython - wxText
543 """
544
545
546
547
548 self.wxObjekt = wxObj
549 """
550 @cvar: Beliebiges C{wx-Objekt}, welchem der Titel zugeordnet wird.
551 @type: wxPython - wx-Objekt
552 """
553
554
555
556
557
558 if( orient == wx.VERTICAL ) :
559 wx.FlexGridSizer.__init__( self, rows = 2, cols = 1, vgap = 5, hgap = 5 )
560
561 self.AddGrowableCol( idx = 0, proportion = 1 )
562 self.AddGrowableRow( idx = 1, proportion = 1 )
563 else :
564 wx.FlexGridSizer.__init__( self, rows = 1, cols = 2, vgap = 5, hgap = 5 )
565
566 self.AddGrowableCol( idx = 1, proportion = 1 )
567 self.AddGrowableRow( idx = 0, proportion = 1 )
568
569
570
571
572 self.Add( self.wxText, flag = wx.EXPAND )
573 self.Add( self.wxObjekt, flag = wx.EXPAND )
574
575
576
577
578
579
580
581
582 - def Enable( self, enable = True ):
583 """
584 Diese Methode implementiert die Standardfunktion C{Enable(...)} für diese Klasse.
585 """
586
587
588
589
590 self.wxText.Enable( enable )
591 self.wxObjekt.Enable( enable )
592
593
594
595
596
597
598
599
600
601
602
603
604
605
607 """
608 Klasse, die eine C{wx.CheckBox} mit weiteren Funktionen versieht.
609 """
610
611
612
613
614
615
616 - def __init__( self, parent, Statusleiste, dbVerbindung ):
633
634
635
636
637
638
639
640
642 """
643 Mit Aufruf dieser Methode wird der Wert der C{CheckBox} zurückgegeben.
644 """
645
646
647
648
649 return self.GetValue()
650
651
652
653
654
655
656
657
659 """
660 Mit Aufruf dieser Methode wird C{wx.CheckBox.SetValue( False )} gesetzt, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt.
661 """
662
663
664
665
666
667 self.istVomBenutzerGeaendert = False
668 self.istBenutzerAenderungJetzt = False
669 del self.wertNichtMod[:]
670 self.SetValue( False )
671
672
673
674
675
676
677
678
679 - def nimmWert( self, wert, clientData = None ):
680 """
681 Mit Aufruf dieser Methode wird der Wert der C{CheckBox} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden
682
683 @param wert: Es ist der Wert der C{CheckBox} anzugeben.
684 @type wert: Boolescher Wert
685
686 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben.
687 @type clientData: beliebiges Objekt
688 """
689
690
691
692
693 self.wertNichtMod.insert( 0, wert )
694 self.SetValue( wert )
695 self.clientData = clientData
696
697
698
699
700
701 self.istVomBenutzerGeaendert = False
702 self.istBenutzerAenderungJetzt = False
703
704
705
706
707
708
709
710
711
712
713
714
715
716
718 """
719 Klasse, die eine C{wx.ComboBox} mit weiteren Funktionen versieht.
720 """
721
722
723
724
725
726
727 - def __init__( self, parent, choices, style, Statusleiste, dbVerbindung ):
746
747
748
749
750
751
752
753
755 """
756 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.
757 """
758
759
760
761
762
763 del self.clientData[:]
764 self.istVomBenutzerGeaendert = False
765 self.istBenutzerAenderungJetzt = False
766 del self.wertNichtMod[:]
767 self.Clear()
768
769
770
771
772
773
774
775
776
777 - def nimmWert( self, wert, clientData = None ):
778 """
779 Mit Aufruf dieser Methode wird der Wert der C{ComboBox} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden
780
781 @param wert: Es ist der Wert der C{ComboBox} anzugeben.
782 @type wert: Zeichenkette
783
784 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben.
785 @type clientData: beliebiges Objekt
786 """
787
788
789
790
791 self.wertNichtMod.append( wert )
792 self.Append( wert, clientData )
793
794
795
796
797
798 self.istVomBenutzerGeaendert = False
799 self.istBenutzerAenderungJetzt = False
800
801
802
803
804
805
806
807
809 """
810 Mit Aufruf dieser Methode werden die Zusatzinformationen zum aktuell ausgewählten Eintrag der C{ComboBox} zurückgegeben.
811
812
813 @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.
814 @type selection:
815
816 @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.
817 @type lfdNr: Gazzahl
818 """
819
820
821
822
823 if( selection == None ) : return self.GetClientData( self.GetSelection() )[lfdNr]
824 else : return self.GetClientData( selection )[lfdNr]
825
826
827
828
829
830
831
832
834 """
835 Mit Aufruf dieser Methode wird der Wert der C{ComboBox} zurückgegeben.
836 """
837
838
839
840
841 return self.GetValue()
842
843
844
845
846
847
848
849
851 """
852 Mit Aufruf dieser Methode wird der Wert der in C{ComboBox} selektiert, dem C{clientDataId} in C{clientData} zugeordnet ist .
853
854
855 @param clientDataId: Es ist die Identifikationsnummer in C{clientData} des Eintrages der C{ComboBox} anzugeben, der ausgewählt werden soll.
856 @type clientDataId: beliebig (meist Ganzzahl)
857
858 @return: C{True} wenn der Wert selektiert werden konnte; sonst C{False}.
859 @rtype: Boolean
860 """
861
862
863
864
865 for i in range( self.GetCount() ) :
866
867 self.SetSelection( i )
868
869 if ( self.gibClientData( selection = i, lfdNr = 0 ) == clientDataId ) :
870
871 return True
872
873
874
875
876
877 self.SetSelection( 0 )
878 return False
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
895 """
896 Klasse, die eine C{wx.Dialog} mit weiteren Funktionen versieht.
897 """
898
899
900
901
902
903
904 - def __init__( self, parent, title, dbVerbindung, style = wx.RESIZE_BORDER ):
905 wx.Dialog.__init__( self, parent = parent, title = title, style = style )
906
907
908
909
910 self.dbVerbindung = dbVerbindung
911 self.nameSafepoint = 'DialogErg' + str( self.GetId() ).replace( "-", "_" )
912 self.__safepointSetzen__()
913
914
915
916
917 self.Button__Verwerfen = wx.Button( parent = self, label = u" Änderungen verwerfen " )
918 self.Button__Verwerfen.SetMinSize( ( 200, 30 ) )
919 self.Button__Verwerfen.SetMaxSize( ( 200, 30 ) )
920 self.Button__Verwerfen.Enable( False )
921
922
923
924
925 self.Button__Sichern = wx.Button( parent = self, label = u" Speichere Änderungen" )
926 self.Button__Sichern.SetMinSize( ( 200, 30 ) )
927 self.Button__Sichern.SetMaxSize( ( 200, 30 ) )
928 self.Button__Sichern.Enable( False )
929
930
931
932
933 self.Button__FensterSchliessen = wx.Button( parent = self
934 , label = u" Fenster schließen " )
935 self.Button__FensterSchliessen.SetMinSize( ( 150, 30 ) )
936 self.Button__FensterSchliessen.SetMaxSize( ( 150, 30 ) )
937 self.Button__FensterSchliessen.SetDefault()
938 self.Button__FensterSchliessen.SetFocus()
939
940
941
942
943 self.FlexGridSizerButton = wx.FlexGridSizer( rows = 1, cols = 4, vgap = 0, hgap = 5 )
944 self.FlexGridSizerButton.AddGrowableCol( idx = 0, proportion = 1 )
945 self.FlexGridSizerButton.AddGrowableRow( idx = 0, proportion = 1 )
946
947
948 self.FlexGridSizerButton.AddStretchSpacer()
949 self.FlexGridSizerButton.Add( self.Button__Verwerfen, flag = wx.EXPAND )
950 self.FlexGridSizerButton.Add( self.Button__Sichern, flag = wx.EXPAND )
951 self.FlexGridSizerButton.Add( self.Button__FensterSchliessen, flag = wx.EXPAND )
952
953
954 self.FlexGridSizer = wx.FlexGridSizer( rows = 2, cols = 1, vgap = 5, hgap = 0 )
955
956 self.FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 )
957 self.FlexGridSizer.AddGrowableRow( idx = 0, proportion = 1 )
958
959
960
961
962
963 self.Bind( wx.EVT_BUTTON, self.__ereignisVerwerfen__, self.Button__Verwerfen )
964 self.Bind( wx.EVT_BUTTON, self.__ereignisSpeichern__, self.Button__Sichern )
965 self.Bind( wx.EVT_BUTTON, self.__ereignisSchliessen__, self.Button__FensterSchliessen )
966
967
968
969
970
971
972
973
975 """
976 Methode die aufgerufen wird, wenn das Meldungsfenster geschlossen werden soll (sie überschreibt die Standardmethode)
977
978 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben.
979 @type ereignis: C{wx - Ereignisobjekt}
980 """
981
982
983
984
985 if( self.Button__Verwerfen.IsEnabled() or self.Button__Sichern.IsEnabled() ) :
986
987
988
989
990 dlg = wx.MessageDialog( parent = self
991 , message = """Die Änderungen wurden nicht gesichert. Soll das Fenster trotzdem geschlossen werden ?
992
993 Die Änderungen werden dann verworfen."""
994 , caption = "Änderungen verwerfen ?"
995 , style = wx.YES_NO | wx.ICON_QUESTION )
996
997
998
999
1000
1001 if ( dlg.ShowModal() != wx.ID_YES ):
1002
1003
1004
1005
1006
1007 ereignis.Skip( skip = True )
1008 return
1009
1010
1011
1012
1013
1014 self.__safepointVerwerfen__()
1015
1016
1017
1018
1019
1020 self.Destroy()
1021
1022
1023
1024
1025
1026
1027 ereignis.Skip( skip = True )
1028
1029
1030
1031
1032
1033
1034
1035
1037 """
1038 Methode die aufgerufen wird, wenn die Änderungen gespeichert werden sollen.
1039
1040 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet.
1041 @type ereignisDummy: C{wx - Ereignisobjekt}
1042 """
1043
1044
1045
1046
1047
1048 self.__spezAktionenSpeichern__()
1049
1050
1051
1052
1053
1054 self.__safepointSpeichern__()
1055
1056
1057
1058
1059
1060
1061 self.__safepointSetzen__()
1062
1063
1064
1065
1066
1067 self.Button__Verwerfen.Enable( False )
1068 self.Button__Sichern.Enable( False )
1069
1070
1071
1072
1073
1074
1075
1076
1078 """
1079 Methode die aufgerufen wird, wenn alle Änderungen verworfen werden sollen..
1080
1081 @param ereignisDummy: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet.
1082 @type ereignisDummy: C{wx - Ereignisobjekt}
1083 """
1084
1085
1086
1087
1088 self.__safepointVerwerfen__()
1089
1090
1091
1092
1093
1094
1095 self.__safepointSetzen__()
1096
1097
1098
1099
1100
1101
1102 self.__spezAktionenVerwerfen__()
1103
1104
1105
1106
1107
1108 self.Button__Verwerfen.Enable( False )
1109 self.Button__Sichern.Enable( False )
1110
1111
1112
1113
1114
1115
1116
1117
1119 """
1120 Neuen PostgreSQL-SAFEPOINT setzen.
1121 """
1122
1123 self.dbVerbindung.setzeSafepoint( self.nameSafepoint )
1124
1125
1126
1127
1128
1129
1130
1131
1132
1134 """
1135 Die Änderungen bis zum aktuellen PostgreSQL-SAFEPOINT speichern.
1136 """
1137
1138 self.dbVerbindung.nimmAenderungenSafepoint( self.nameSafepoint )
1139
1140
1141
1142
1143
1144
1145
1146
1148 """
1149 Die Änderungen bis zum aktuellen PostgreSQL-SAFEPOINT verwerfen.
1150 """
1151
1152 self.dbVerbindung.verwerfeAenderungenSafepoint( self.nameSafepoint )
1153
1154
1155
1156
1157
1158
1159
1160
1162 """
1163 Methode die von der abgeleiteten Klasse überschrieben werden kann, um spezifische Aktionen beim Speichern der Änderungen auszuführen.
1164 """
1165
1166
1167
1168
1169 None
1170
1171
1172
1173
1174
1175
1176
1177
1179 """
1180 Methode die von der abgeleiteten Klasse überschrieben werden kann, um spezifische Aktionen beim Verwerfen der Änderungen auszuführen.
1181 """
1182
1183
1184
1185
1186 None
1187
1188
1189
1190
1191
1192
1193
1194
1196 """
1197 Diese Methode fügt dem Dialog die frei definierbaren Elemente hinzu.
1198 """
1199
1200
1201
1202
1203 self.FlexGridSizer.Add( elemente
1204 , flag = wx.LEFT|wx.TOP|wx.RIGHT|wx.EXPAND
1205 , border = 10 )
1206 self.FlexGridSizer.Add( self.FlexGridSizerButton
1207 , flag = wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND
1208 , border = 10 )
1209
1210 self.SetSizerAndFit( self.FlexGridSizer )
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1227 """
1228 Klasse, die eine C{wx.ListBox} mit weiteren Funktionen versieht.
1229 """
1230
1231
1232
1233
1234
1235
1236 - def __init__( self, parent, size, style, Statusleiste, dbVerbindung ):
1252
1253
1254
1255
1256
1257
1258
1260 """
1261 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.
1262
1263 @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.
1264 @type lfdNr: Ganzzahl
1265
1266 @return: C{wx.ClientData} zur C{lfdNr}
1267 @rtype: Listenobjekt
1268 """
1269
1270
1271
1272
1273 if( self.IsEmpty() ) : return None
1274
1275
1276
1277
1278
1279 if( lfdNr == None ) :
1280 clientDataTmp = []
1281
1282 for i in range( self.GetCount() ):
1283 clientDataTmp.append( self.GetClientData( i )[0] )
1284
1285 return clientDataTmp
1286
1287 else :
1288 return self.GetClientData( lfdNr )
1289
1290
1291
1292
1293
1294
1295
1296
1297 - def gibWert( self, lfdNr = None ):
1298 """
1299 Mit Aufruf dieser Methode wird der Wert des Eintrages mit der C{lfdNr} zurückgegeben.
1300
1301 @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.
1302 @type lfdNr: Ganzzahl
1303
1304 @return: Wert zur C{lfdNr}
1305 @rtype: Zeichenkette
1306 """
1307
1308
1309
1310
1311 if( lfdNr != None ) : self.SetSelection( lfdNr )
1312 return self.GetStringSelection()
1313
1314
1315
1316
1317
1318
1319
1320
1322 """
1323 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.
1324 """
1325
1326
1327
1328
1329
1330 del self.clientData[:]
1331 self.istVomBenutzerGeaendert = False
1332 self.istBenutzerAenderungJetzt = False
1333 del self.wertNichtMod[:]
1334 self.Clear()
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344 - def nimmWert( self, wert, clientData = None ):
1345 """
1346 Mit Aufruf dieser Methode wird der Wert der C{ListBox} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden
1347
1348 @param wert: Es ist der Wert der C{ListBox} anzugeben.
1349 @type wert: Zeichenkette
1350
1351 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben.
1352 @type clientData: beliebiges Objekt
1353 """
1354
1355
1356
1357
1358 self.wertNichtMod.append( wert )
1359 self.Append( wert, clientData )
1360
1361
1362
1363
1364
1365 self.istVomBenutzerGeaendert = False
1366 self.istBenutzerAenderungJetzt = False
1367
1368
1369
1370
1371
1372
1373
1374
1376 """
1377 Mit Aufruf dieser Methode wird der Wert der in C{ListBoxErg} selektiert, dem C{clientDataId} in C{clientData} zugeordnet ist .
1378
1379
1380 @param clientDataId: Es ist die Identifikationsnummer in C{clientData} des Eintrages der C{ListBoxErg} anzugeben, der ausgewählt werden soll.
1381 @type clientDataId: beliebig (meist Ganzzahl)
1382
1383 @return: C{True} wenn der Wert selektiert werden konnte; sonst C{False}.
1384 @rtype: Boolean
1385 """
1386
1387
1388
1389
1390 for i in range( self.GetCount() ) :
1391
1392 self.SetSelection( i )
1393
1394 if ( self.gibClientData( lfdNr = i )[0] == clientDataId ) :
1395
1396 return True
1397
1398
1399
1400
1401
1402 self.SetSelection( 0 )
1403 return False
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1419 """
1420 Klasse, die zwei C{ListBox} in einem C{SplitterWindow} darstellt. Weiterhin wird ein Titel zugeordnet.
1421 """
1422
1423
1424
1425
1426
1427
1428 - def __init__( self, parent, titel, minSize, orient, Statusleiste, dbVerbindung, styleLBli = wx.BORDER_SUNKEN | wx.LB_SORT, styleLBre = wx.BORDER_SUNKEN | wx.LB_SORT ):
1429 wx.Panel.__init__( self, parent )
1430
1431 self.SplitterWindow = wx.SplitterWindow( self, -1, style = wx.SP_LIVE_UPDATE )
1432 self.SplitterWindow.SetMinimumPaneSize( 20 )
1433
1434
1435
1436
1437
1438 self.ListBox__li = ListBoxErg( self.SplitterWindow
1439 , size = ( -1, -1 )
1440
1441 , style = styleLBli
1442 , Statusleiste = Statusleiste
1443 , dbVerbindung = dbVerbindung )
1444 self.ListBox__re = ListBoxErg( self.SplitterWindow
1445 , size = ( -1, -1 )
1446
1447 , style = styleLBre
1448 , Statusleiste = Statusleiste
1449 , dbVerbindung = dbVerbindung )
1450
1451
1452
1453
1454
1455 self.SplitterWindow.SplitVertically( self.ListBox__li
1456 , self.ListBox__re
1457 , -100 )
1458
1459 self.FlexGridSizerWxObjTitel = FlexGridSizerWxObjTitel( parent = self
1460 , wxObj = self.SplitterWindow
1461 , titel = titel
1462 , orient = orient )
1463
1464 self.FlexGridSizerWxObjTitel.wxObjekt.SetMinSize( minSize )
1465
1466 BoxSizer = wx.BoxSizer( wx.VERTICAL )
1467 BoxSizer.Add( self.FlexGridSizerWxObjTitel
1468 , proportion = 1
1469 , flag = wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL
1470 , border = 0 )
1471 self.SetSizerAndFit( BoxSizer )
1472
1473
1474
1475
1476
1477
1478
1479
1480 - def Enable( self, enable = True ):
1481 """
1482 Diese Methode implementiert die Standardfunktion C{Enable(...)} für diese Klasse.
1483 """
1484
1485
1486
1487
1488 self.FlexGridSizerWxObjTitel.Enable( enable )
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1506
1507 """
1508 Klasse, die zwei C{ListBox} in einem C{SplitterWindow} darstellt, um aus einer Liste von Vorgabewerten auszuwählen. Weiterhin wird ein Titel zugeordnet.
1509 Wird ein Doppelklick auf einem Eintrag in einer der beiden C{ListBox} ausgeführt, so wird er in die andere C{ListBox} verschoben.
1510 """
1511
1512
1513
1514
1515
1516
1517 - def __init__( self, parent, titel, minSize, orient, Statusleiste, dbVerbindung, styleLBli = wx.BORDER_SUNKEN | wx.LB_SORT, styleLBre = wx.BORDER_SUNKEN | wx.LB_SORT ):
1518 ListBoxSpWTitel.__init__( self, parent, titel, minSize, orient, Statusleiste, dbVerbindung, styleLBli = styleLBli, styleLBre = styleLBre )
1519
1520
1521
1522
1523
1524 self.ListBoxLiDarfLeerSein = True
1525
1526
1527
1528
1529
1530 self.ListBox__li.SetToolTip(wx.ToolTip( "Doppelklick:\nEintrag in das Nachbarfenster schieben" ))
1531 self.ListBox__re.SetToolTip(wx.ToolTip( "Doppelklick:\nEintrag in das Nachbarfenster schieben" ))
1532
1533
1534
1535
1536
1537 self.ListBox__re.markiereWertProjUeb = False
1538
1539
1540
1541
1542
1543 self.ListBox__re.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) )
1544
1545
1546
1547
1548
1549 self.Bind( wx.EVT_LISTBOX_DCLICK, self.__ereignisSchieben__, self.ListBox__li )
1550 self.Bind( wx.EVT_LISTBOX_DCLICK, self.__ereignisSchieben__, self.ListBox__re )
1551
1552
1553
1554
1555
1556
1557
1558
1560 """
1561 Methode die aufgerufen wird, wenn der aktuelle Eintrag in das andere Fenster verschoben werden soll.
1562
1563 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben.
1564 @type ereignis: C{wx - Ereignisobjekt}
1565 """
1566
1567
1568
1569
1570
1571 self.ListBox__li.istVomBenutzerGeaendert = True
1572 self.ListBox__re.istVomBenutzerGeaendert = True
1573
1574
1575
1576
1577
1578 if ereignis.GetId() == self.ListBox__re.GetId():
1579 self.schiebeLinks( ereignis.GetClientData()[0] )
1580
1581
1582
1583
1584
1585 if( ereignis.GetId() == self.ListBox__li.GetId() ):
1586 if( self.ListBox__li.GetCount() > 1
1587 or ( self.ListBox__li.GetCount() == 1 and self.ListBoxLiDarfLeerSein ) ) :
1588 self.schiebeRechts( ereignis.GetClientData()[0] )
1589
1590
1591
1592
1593
1594
1595
1596
1598 """
1599 Mit Aufruf dieser Methode werden alle Einträge des rechten Fensters C{ListBox__re} in das linke Fenster C{ListBox__li} verschoben.
1600 """
1601
1602
1603
1604
1605
1606 self.ListBox__li.istVomBenutzerGeaendert = False
1607 self.ListBox__re.istVomBenutzerGeaendert = False
1608
1609
1610
1611
1612
1613 if self.ListBox__re.IsEmpty():
1614 return
1615
1616
1617
1618
1619
1620 for i in range( self.ListBox__re.GetCount() ) :
1621 self.ListBox__li.Append( self.ListBox__re.GetString( i )
1622 , self.ListBox__re.GetClientData( i ) )
1623
1624
1625
1626
1627
1628 self.ListBox__re.Clear()
1629
1630
1631
1632
1633
1634
1635
1636
1638 """
1639 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.
1640 """
1641
1642
1643
1644
1645
1646 self.ListBox__li.istVomBenutzerGeaendert = False
1647 self.ListBox__re.istVomBenutzerGeaendert = False
1648
1649
1650
1651
1652
1653 if self.ListBox__li.IsEmpty():
1654 return
1655
1656
1657
1658
1659
1660 for i in range( self.ListBox__li.GetCount() ) :
1661 self.ListBox__re.Append( self.ListBox__li.GetString( i )
1662 , self.ListBox__li.GetClientData( i ) )
1663
1664
1665
1666
1667
1668 self.ListBox__li.Clear()
1669
1670
1671
1672
1673
1674
1675
1676
1678 """
1679 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.
1680 Wird C{cdNullId = None} übergeben, wird der erste Eintrag der Liste verschoben.
1681
1682 @param cdNullId: Es ist die in C{ListBox__re.wxClientData[0]} gespeicherte Identifikationsnummer anzugeben, die nach links verschoben werden soll.
1683 @type cdNullId: Ganzzahl
1684 """
1685
1686
1687
1688
1689
1690 if self.ListBox__re.IsEmpty():
1691 return
1692
1693
1694
1695
1696
1697
1698 nrEintrag = 0
1699
1700
1701
1702
1703
1704 if cdNullId != None:
1705 for nrEintrag in range( self.ListBox__re.GetCount() ) :
1706 if self.ListBox__re.GetClientData( nrEintrag )[0] == cdNullId:
1707 break
1708
1709
1710
1711
1712
1713
1714 if ( nrEintrag == self.ListBox__re.GetCount() - 1 ) and ( self.ListBox__re.GetClientData( nrEintrag )[0] != cdNullId ):
1715 return
1716
1717
1718
1719
1720
1721 self.ListBox__li.Append( self.ListBox__re.GetString( nrEintrag )
1722 , self.ListBox__re.GetClientData( nrEintrag ) )
1723 self.ListBox__re.Delete( nrEintrag )
1724
1725
1726
1727
1728
1729
1730
1731
1733 """
1734 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.
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 rechts verschoben werden soll.
1738 @type cdNullId: Ganzzahl
1739 """
1740
1741
1742
1743
1744
1745 if self.ListBox__li.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__li.GetCount() ) :
1761 if self.ListBox__li.GetClientData( nrEintrag )[0] == cdNullId:
1762 break
1763
1764
1765
1766
1767
1768
1769 if ( nrEintrag == self.ListBox__li.GetCount() - 1 ) and ( self.ListBox__li.GetClientData( nrEintrag )[0] != cdNullId ):
1770 return
1771
1772
1773
1774
1775
1776 self.ListBox__re.Append( self.ListBox__li.GetString( nrEintrag )
1777 , self.ListBox__li.GetClientData( nrEintrag ) )
1778 self.ListBox__li.Delete( nrEintrag )
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1795 """
1796 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.
1797 Der linke und rechte Eintrag ist synchronisiert (beide Einträge sind über eine Identifikationsnummer ansprechbar)
1798 """
1799
1800
1801
1802
1803
1804
1805
1806 - def __init__( self, parent, titel, minSize, orient, Statusleiste, dbVerbindung, styleLBli = wx.BORDER_SUNKEN | wx.LB_SORT, styleLBre = wx.BORDER_SUNKEN | wx.LB_SORT ):
1807 ListBoxSpWTitel.__init__( self, parent, titel, minSize, orient, Statusleiste, dbVerbindung, styleLBli = styleLBli, styleLBre = styleLBre )
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1826 """
1827 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.
1828 Der linke und rechte Eintrag sind unabhängig voneinander.
1829 """
1830
1831
1832
1833
1834
1835
1836
1837 - def __init__( self, parent, titel, minSize, orient, Statusleiste, dbVerbindung ):
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855 -class MaskedTextCtrlErg( wxmsk.TextCtrl, __Ergaenzung__ ):
1856 """
1857 Klasse, die eine C{MaskedTextCtrl} mit weiteren Funktionen versieht.
1858 """
1859
1860
1861
1862
1863
1864
1865 - def __init__( self, parent, validRequired, autoformat, Statusleiste, dbVerbindung ):
1866 wxmsk.TextCtrl.__init__( self, parent = parent
1867 , validRequired = validRequired
1868 , autoformat = autoformat )
1869 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste )
1870
1871
1872
1873
1874
1875 self.__statusLeisteDBSpName__ = dbVerbindung.gibSpaltenName( self.GetId() )
1876
1877
1878
1879
1880
1881 self.Bind( wx.EVT_TEXT, self.__ereignisAenderung__, self )
1882 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ )
1883 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ )
1884
1885
1886
1887
1888
1889
1890
1891
1892 - def gibWert( self ):
1893 """
1894 Mit Aufruf dieser Methode wird der Wert des C{wxmsk.TextCtrl} zurückgegeben.
1895 """
1896
1897
1898
1899
1900 return self.GetValue()
1901
1902
1903
1904
1905
1906
1907
1908
1909 - def loescheAlles( self ):
1910 """
1911 Mit Aufruf dieser Methode wird der Text aus dem C{MaskedTextCtrl} gelöscht, sowie C{self.istVomBenutzerGeaendert = False} und C{self.istBenutzerAenderungJetzt} gesetzt.
1912 """
1913
1914
1915
1916
1917
1918 self.istVomBenutzerGeaendert = False
1919 self.istBenutzerAenderungJetzt = False
1920 del self.wertNichtMod[:]
1921 self.Clear()
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931 - def nimmWert( self, wert, clientData = None ):
1932 """
1933 Mit Aufruf dieser Methode wird der Wert der C{MaskedTextCtrl} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden
1934
1935 @param wert: Es ist der Wert der C{MaskedTextCtrl} anzugeben.
1936 @type wert: Zeichenkette
1937
1938 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben.
1939 @type clientData: beliebiges Objekt
1940 """
1941
1942
1943
1944
1945 self.loescheAlles()
1946
1947
1948
1949
1950
1951 self.wertNichtMod.insert( 0, wert )
1952 self.ChangeValue( wert )
1953 self.clientData = clientData
1954
1955
1956
1957
1958
1959 self.istVomBenutzerGeaendert = False
1960 self.istBenutzerAenderungJetzt = False
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1977 """
1978 Klasse, die mehrere C{wx.Menu} bereitstellt.
1979 """
1980
1981
1982
1983
1984
1985
1987
1988
1989
1990
1991 self.menu = []
1992
1993
1994
1995
1996 self.basisMenuId = 10
1997
1998
1999
2000
2001
2002
2003
2004
2005
2007 """
2008 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.
2009
2010 @param aktivieren: Menüeintrag aktivieren C{aktivieren = True}. Menüeintrag deaktivieren C{aktivieren = False}.
2011 @type aktivieren: Ganzzahl
2012
2013 @param lfdNrMenu: lfd. Nummer des Menüs (beginnt mit Null)
2014 @type lfdNrMenu: Ganzzahl
2015
2016 @param lfdNrEintrag: lfd. Nummer des Menüeintrages (beginnt mit Null)
2017 @type lfdNrEintrag: Ganzzahl
2018 """
2019
2020
2021
2022
2023 self.menu[lfdNrMenu].Enable( self.gibMenuEintragId( lfdNrMenu, lfdNrEintrag ), aktivieren )
2024
2025
2026
2027
2028
2029
2030
2031
2033 """
2034 Mit Aufruf dieser Methode wird das Menü mit der laufenden Nummer C{lfdNrMenu} der Menüeintrag C{eintrag} übergebenzurückgegeben.
2035
2036 @param lfdNrMenu: lfd. Nummer des Menüs
2037 @type lfdNrMenu: wx.Menu
2038 """
2039
2040
2041
2042
2043 return self.menu[lfdNrMenu]
2044
2045
2046
2047
2048
2049
2050
2051
2053 """
2054 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.
2055
2056 @param lfdNrMenu: lfd. Nummer des Menüs (beginnt mit Null)
2057 @type lfdNrMenu: Ganzzahl
2058
2059 @param lfdNrEintrag: lfd. Nummer des Menüeintrages (beginnt mit Null)
2060 @type lfdNrEintrag: Ganzzahl
2061
2062 @return: Id des Menüeintrages
2063 @rtype: Ganzzahl
2064 """
2065
2066
2067
2068
2069 return self.basisMenuId * ( lfdNrMenu + 1 ) + lfdNrEintrag
2070
2071
2072
2073
2074
2075
2076
2077
2079 """
2080 Mit Aufruf dieser Methode ein neues Menü hinzugefügt.
2081 """
2082
2083
2084
2085
2086 self.menu.append( wx.Menu() )
2087
2088
2089
2090
2091
2092
2093
2095 """
2096 Mit Aufruf dieser Methode wird dem Menü mit der laufenden Nummer C{lfdNrMenu} der Menüeintrag C{eintrag} übergeben
2097
2098 @param eintrag: Es ist der Menüeintrag anzugeben.
2099 @type eintrag: Zeichenkette
2100
2101 @param lfdNrMenu: lfd. Nummer des Menüs
2102 @type lfdNrMenu: Ganzzahl
2103 """
2104
2105
2106
2107
2108 self.menu[lfdNrMenu].Append( self.gibMenuEintragId( lfdNrMenu, self.menu[lfdNrMenu].GetMenuItemCount() ), eintrag )
2109
2110
2111
2112
2113
2114
2115
2116
2118 """
2119 Mit Aufruf dieser Methode wird dem Menü mit der laufenden Nummer C{lfdNrMenu} der Menüeintrag C{eintrag} übergeben
2120
2121 @param ereignisMethode: Es ist die Methode zur Ereignisbehandlung zu übergeben.
2122 @type ereignisMethode: Zeichenkette
2123
2124 @param lfdNrMenu: lfd. Nummer des Menüs
2125 @type lfdNrMenu: Ganzzahl
2126
2127 @param lfdNrEintrag: lfd. Nummer des Menüeintrages (beginnt mit Null)
2128 @type lfdNrEintrag: Ganzzahl
2129 """
2130
2131
2132
2133
2134 self.menu[lfdNrMenu].Bind( wx.EVT_MENU
2135 , ereignisMethode
2136 , id = self.gibMenuEintragId( lfdNrMenu, lfdNrEintrag ) )
2137
2138
2139
2140
2141
2142
2143
2144
2145
2147 """
2148 Mit Aufruf dieser Methode wird dem Menü mit der laufenden Nummer C{lfdNrMenu} eine Trennlinie hinugefügt
2149
2150 @param lfdNrMenu: lfd. Nummer des Menüs
2151 @type lfdNrMenu: Ganzzahl
2152 """
2153
2154
2155
2156
2157 self.menu[lfdNrMenu].AppendSeparator()
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2181 """
2182 Klasse, die das Fenster zur Auswahl der Eingabefelder, die durchsucht / gefiltert werden sollen repräsentiert.
2183 """
2184
2185
2186
2187
2188
2189
2191 wx.PopupTransientWindow.__init__( self, parent, style )
2192
2193
2194
2195
2196 self.SetBackgroundColour("#FFB6C1")
2197
2198 self.cb1 = wx.CheckBox(self, -1, "Apples")
2199 self.cb2 = wx.CheckBox(self, -1, "Oranges")
2200 self.cb3 = wx.CheckBox(self, -1, "Pears")
2201
2202 sizer = wx.BoxSizer(wx.VERTICAL)
2203 sizer.Add( self.cb1 )
2204 sizer.Add( self.cb2 )
2205 sizer.Add( self.cb3 )
2206 self.SetSizerAndFit( sizer )
2207 self.Layout()
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2228 """
2229 Klasse zur Abbildung des Teil-Eingabeformulars der Sicherheitsanforderungen für die Strukturpunkte bzw. Dokumente
2230 """
2231
2232
2233
2234
2235
2236
2237 - def __init__( self, parent, varId, Statusleiste, dbVerbindung, prjProjekteId, sprSprachenId, psGefszenarioId ):
2238 wx.Panel.__init__( self, parent = parent )
2239
2240
2241
2242
2243
2244
2245
2246 self.varId = varId
2247
2248
2249
2250
2251 if( self.varId == 1 ):
2252 titel = "Verfügbare Sicherheitsanforderungen"
2253
2254 ComboBox__Titel = "Typ der Sicherheitsanforderung:"
2255 ComboBox__Zweck = """Verfügbare Sicherheitsanforderungen anhand des Typs einschränken."""
2256
2257 CheckBox__Text = "Alle im Projekt:"
2258 CheckBox__Zweck = "Es wird die projektübergreifende Einschränkung auf das aktuelle Gefahrenszenario aufgehoben und alle im Projekt verfügbaren Sicherheitsanforderungen angezeigt."
2259
2260 ListBox__Titel = "SiAnf-Id"
2261 ListBox__Zweck = "Eineindeutige Identifikationsnummer der verfügbaren Sicherheitsanforderungen zum Gefahrenszenario."
2262 ListBox__ToolTip = "Doppelklick:\nSicherheitsanforderung(en) der aktuell gewählten Sicherheitsanforderung bzw. dem aktuellen Gefahrenszenario zuordnen.\n\nMittlere Maustaste:\nSicherheitsanforderung (org. Maßnahme) dem aktuellen Gefahrenszenario zuordnen."
2263 ListBoxSync__Titel = "Verfügbare Sicherheitsanforderungen / Interne Notizen"
2264 ListBoxSync__ZweckLi = "Verfügbare Sicherheitsanforderung."
2265 ListBoxSync__ZweckRe = "Interne Notizen, Gedanken, Ideen zur Sicherheitsanforderung."
2266
2267
2268
2269
2270 elif( self.varId == 2 ):
2271 titel = "Zugeordnete Strukturpunkte / Dokumente"
2272
2273 ComboBox__Titel = "Nicht verwendet"
2274 ComboBox__Zweck = "Nicht verwendet"
2275
2276 CheckBox__Text = "Nicht verwendet"
2277 CheckBox__Zweck = "Nicht verwendet"
2278
2279 ListBox__Titel = "Zugeordnete Strukturpunkte / Dokumente"
2280 ListBox__Zweck = "Eineindeutige Identifikationsnummer der zugeordneten Strukturpunkte/Dokumente."
2281 ListBox__ToolTip = ""
2282
2283 ListBoxSync__Titel = "Zugeordnete Strukturpunkte, Dokumente \t / \t Interne Notizen"
2284 ListBoxSync__ZweckLi = "Zugeordnete Strukturpunkte, Dokumente."
2285 ListBoxSync__ZweckRe = "Interne Notizen, Gedanken, Ideen zu den Sicherheitsanforderungen / Dokumenten."
2286
2287
2288
2289
2290 elif( self.varId == 3 ):
2291 titel = "Verfügbare Strukturpunkte"
2292
2293 ComboBox__Titel = "Strukturbezeichnung:"
2294 ComboBox__Zweck = """Verfügbare Strukturpunkte anhand der Bezeichnung einschränken."""
2295
2296 CheckBox__Text = "Alle im Projekt:"
2297 CheckBox__Zweck = "Es wird die projektübergreifende Einschränkung auf das aktuelle Gefahrenszenario aufgehoben und alle im Projekt verfügbaren Strukturpunkte angezeigt."
2298
2299 ListBox__Titel = "StrNr/Id"
2300 ListBox__Zweck = "Eineindeutige Identifikationsnummer der verfügbaren Strukturpunkte zum Gefahrenszenario."
2301 ListBox__ToolTip = "Doppelklick:\nStrukturpunkt der gewählten Sicherheitsanforderung zuordnen."
2302 ListBoxSync__Titel = "Verfügbare Strukturpunkte / Interne Notizen"
2303 ListBoxSync__ZweckLi = "Verfügbare Strukturpunkte."
2304 ListBoxSync__ZweckRe = "Interne Notizen, Gedanken, Ideen zu den Strukturpunkten."
2305
2306
2307
2308
2309 elif( self.varId == 4 ):
2310 titel = "Verfügbare Dokumente"
2311
2312 ComboBox__Titel = "Ersteller (Firma):"
2313 ComboBox__Zweck = """Verfügbare Dokumente anhand der Bezeichnung einschränken."""
2314
2315 CheckBox__Text = "Alle im Projekt:"
2316 CheckBox__Zweck = "Es wird die projektübergreifende Einschränkung auf das aktuelle Gefahrenszenario aufgehoben und alle im Projekt verfügbaren Dokumente angezeigt."
2317
2318 ListBox__Titel = "Dok-Id"
2319 ListBox__Zweck = "Eineindeutige Identifikationsnummer der verfügbaren Dokumente zum Gefahrenszenario."
2320 ListBox__ToolTip = "Doppelklick:\nDokument der gewählten Sicherheitsanforderung zuordnen."
2321 ListBoxSync__Titel = "DokNr, Ausgabe, Titel / Interne Notizen"
2322 ListBoxSync__ZweckLi = "Verfügbare Dokumente."
2323 ListBoxSync__ZweckRe = "Interne Notizen, Gedanken, Ideen zu den Dokumenten."
2324
2325
2326
2327
2328
2329
2330
2331
2332 self.Statusleiste = Statusleiste
2333 self.dbVerbindung = dbVerbindung
2334 self.prjProjekteId = prjProjekteId
2335 self.sprSprachenId = sprSprachenId
2336 self.psGefszenarioId = psGefszenarioId
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346 if( self.varId == 1 or self.varId == 3 or self.varId == 4 ):
2347
2348
2349
2350
2351
2352
2353 self.CheckBox__Alle = FlexGridSizerWxObjTitel( parent = self
2354 , wxObj = CheckBoxErg( self
2355 , Statusleiste = self.Statusleiste
2356 , dbVerbindung = self.dbVerbindung )
2357 , titel = CheckBox__Text
2358 , orient = wx.VERTICAL )
2359
2360
2361
2362 self.CheckBox__Alle.wxObjekt.statusLeisteDBSpNameErlaeuterung = CheckBox__Zweck
2363
2364 self.Bind( wx.EVT_CHECKBOX
2365 , self.__ereignisLiesDBVerfSiAnf__
2366 , self.CheckBox__Alle.wxObjekt )
2367
2368 self.Bind( wx.EVT_CHECKBOX
2369 , self.__ereignisLiesDBVerfStrkt__
2370 , self.CheckBox__Alle.wxObjekt )
2371
2372 self.Bind( wx.EVT_CHECKBOX
2373 , self.__ereignisLiesDBVerfDok__
2374 , self.CheckBox__Alle.wxObjekt )
2375
2376
2377
2378
2379
2380
2381
2382 self.ComboBox__Selektion = FlexGridSizerWxObjTitel( parent = self
2383 , wxObj = ComboBoxErg( self
2384 , choices = []
2385 , style = wx.CB_DROPDOWN|wx.CB_READONLY
2386 , Statusleiste = self.Statusleiste
2387 , dbVerbindung = self.dbVerbindung )
2388 , orient = wx.VERTICAL
2389 , titel = ComboBox__Titel )
2390
2391 self.ComboBox__Selektion.wxObjekt.SetMaxSize( ( 400, -1 ) )
2392
2393 self.ComboBox__Selektion.wxObjekt.statusLeisteDBSpNameErlaeuterung = ComboBox__Zweck
2394
2395 self.Bind( wx.EVT_COMBOBOX
2396 , self.__ereignisLiesDBVerfSiAnf__
2397 , self.ComboBox__Selektion.wxObjekt )
2398
2399 self.Bind( wx.EVT_COMBOBOX
2400 , self.__ereignisLiesDBVerfStrkt__
2401 , self.ComboBox__Selektion.wxObjekt )
2402
2403 self.Bind( wx.EVT_COMBOBOX
2404 , self.__ereignisLiesDBVerfDok__
2405 , self.ComboBox__Selektion.wxObjekt )
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419 self.TreeCtrlErg__Id = FlexGridSizerWxObjTitel( parent = self
2420 , wxObj = TreeCtrlErg( self
2421 , Statusleiste = self.Statusleiste
2422 , dbVerbindung = self.dbVerbindung )
2423 , titel = ListBox__Titel
2424 , orient = wx.VERTICAL )
2425
2426
2427
2428 self.TreeCtrlErg__Id.wxObjekt.statusLeisteDBSpNameErlaeuterung = ListBox__Zweck
2429
2430 self.TreeCtrlErg__Id.wxObjekt.SetToolTip( wx.ToolTip( ListBox__ToolTip ) )
2431
2432 self.TreeCtrlErg__Id.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) )
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446 if( self.varId == 1 or self.varId == 3 or self.varId == 4 ):
2447
2448 FlexGridSizerH = wx.FlexGridSizer( rows = 1, cols = 2, vgap = 0, hgap = 10 )
2449
2450 FlexGridSizerH.AddGrowableCol( idx = 0, proportion = 0 )
2451 FlexGridSizerH.AddGrowableCol( idx = 1, proportion = 0 )
2452 FlexGridSizerH.AddGrowableRow( idx = 0, proportion = 1 )
2453
2454 FlexGridSizerH.Add( self.CheckBox__Alle
2455 , flag = wx.EXPAND )
2456
2457 FlexGridSizerH.Add( self.ComboBox__Selektion
2458 , flag = wx.EXPAND )
2459
2460
2461 FlexGridSizer = wx.FlexGridSizer( rows = 4, cols = 1, vgap = 10, hgap = 0 )
2462
2463 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 )
2464 FlexGridSizer.AddGrowableRow( idx = 2, proportion = 0 )
2465 FlexGridSizer.AddGrowableRow( idx = 3, proportion = 0 )
2466
2467 tmp = wx.StaticText( parent = self, label = titel )
2468 FlexGridSizer.Add( tmp
2469 , flag = wx.LEFT|wx.TOP|wx.RIGHT|wx.EXPAND
2470 , border = 10 )
2471
2472 FlexGridSizer.Add( FlexGridSizerH
2473 , flag = wx.LEFT|wx.RIGHT|wx.EXPAND
2474 , border = 10 )
2475
2476 FlexGridSizer.Add( self.TreeCtrlErg__Id
2477 , flag = wx.LEFT|wx.BOTTOM|wx.RIGHT|wx.EXPAND
2478 , border = 10 )
2479
2480 self.SetSizerAndFit( FlexGridSizer )
2481
2482
2483
2484
2485 elif( self.varId == 2 ):
2486
2487 FlexGridSizer = wx.FlexGridSizer( rows = 1, cols = 1, vgap = 0, hgap = 0 )
2488
2489 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 )
2490 FlexGridSizer.AddGrowableRow( idx = 0, proportion = 1 )
2491
2492 FlexGridSizer.Add( self.TreeCtrlErg__Id
2493 , flag = wx.EXPAND )
2494
2495 self.SetSizerAndFit( FlexGridSizer )
2496
2497
2498
2499
2500
2501
2502 if( self.varId == 1 ):
2503 self.dbVerbindung.init_prtTyp( self.ComboBox__Selektion.wxObjekt
2504 , self.sprSprachenId
2505 , "SF"
2506 , hatAlle = True )
2507 self.__ereignisLiesDBVerfSiAnf__()
2508
2509
2510
2511
2512
2513
2514 if( self.varId == 3 ):
2515 self.dbVerbindung.init_strName( self.ComboBox__Selektion.wxObjekt )
2516 self.__ereignisLiesDBVerfStrkt__()
2517
2518
2519
2520
2521
2522
2523 if( self.varId == 4 ):
2524 self.dbVerbindung.init_internFirma( self.ComboBox__Selektion.wxObjekt )
2525 self.__ereignisLiesDBVerfDok__()
2526
2527
2528
2529
2530
2531
2532
2533
2534
2536 """
2537 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ß.
2538
2539 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet.
2540 @type ereignis: C{wx - Ereignisobjekt}
2541 """
2542
2543
2544
2545
2546
2547 if( self.varId != 4 ) :
2548
2549
2550
2551
2552
2553 if( ereignis != None ) : ereignis.Skip( skip = True )
2554
2555 return
2556
2557
2558
2559
2560
2561 gefszenario = None
2562 if( self.CheckBox__Alle.wxObjekt.gibWert() == False ) :
2563 gefszenario = self.psGefszenarioId
2564
2565
2566
2567
2568
2569 firma = None
2570 if( self.ComboBox__Selektion.wxObjekt.gibClientData() > 0 ) :
2571 firma = self.ComboBox__Selektion.wxObjekt.gibClientData()
2572
2573
2574
2575
2576
2577
2578 self.dbVerbindung.selektiere__prjPrtDoku(
2579 SiAnfStrktDok = self
2580 , prjProjekteId = None
2581 , sprSprachenId = self.sprSprachenId
2582 , prtProtokollId = None
2583 , psGefszenarioId = gefszenario
2584 , internFirmaId = firma )
2585
2586
2587
2588
2589
2590
2591 if( ereignis != None ) : ereignis.Skip( skip = True )
2592
2593
2594
2595
2596
2597
2598
2599
2600
2602 """
2603 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ß.
2604
2605 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet.
2606 @type ereignis: C{wx - Ereignisobjekt}
2607 """
2608
2609
2610
2611
2612
2613
2614 if( self.varId != 1 ) :
2615
2616
2617
2618
2619
2620 if( ereignis != None ) : ereignis.Skip( skip = True )
2621
2622 return
2623
2624
2625
2626
2627
2628 gefszenario = None
2629 projekt = self.prjProjekteId
2630 if( self.CheckBox__Alle.wxObjekt.gibWert() == False ) :
2631 gefszenario = self.psGefszenarioId
2632 projekt = None
2633
2634
2635
2636
2637
2638 prtTyp = None
2639 if( self.ComboBox__Selektion.wxObjekt.gibClientData() > 0 ) :
2640 prtTyp = self.ComboBox__Selektion.wxObjekt.gibClientData()
2641
2642
2643
2644
2645
2646 self.dbVerbindung.selektiere__psPrtProtokoll(
2647 TreeCtrlErg = self.TreeCtrlErg__Id.wxObjekt
2648 , prjProjekteId = projekt
2649 , sprSprachenId = self.sprSprachenId
2650 , psGefszenarioId = gefszenario
2651 , prtTypId = prtTyp )
2652
2653
2654
2655
2656
2657
2658 if( ereignis != None ) : ereignis.Skip( skip = True )
2659
2660
2661
2662
2663
2664
2665
2666
2667
2669 """
2670 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ß.
2671
2672 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. Es wird jedoch nicht verwendet.
2673 @type ereignis: C{wx - Ereignisobjekt}
2674 """
2675
2676
2677
2678
2679
2680 if( self.varId != 3 ) :
2681
2682
2683
2684
2685
2686 if( ereignis != None ) : ereignis.Skip( skip = True )
2687
2688 return
2689
2690
2691
2692
2693
2694 gefszenario = None
2695 if( self.CheckBox__Alle.wxObjekt.gibWert() == False ) :
2696 gefszenario = self.psGefszenarioId
2697
2698
2699
2700
2701
2702 strName = None
2703 if( self.ComboBox__Selektion.wxObjekt.gibClientData() > 0 ) :
2704 strName = self.ComboBox__Selektion.wxObjekt.gibClientData()
2705
2706
2707
2708
2709
2710 self.dbVerbindung.selektiere__psPrtStrkt(
2711 SiAnfStrktDok = self
2712 , prjProjekteId = self.prjProjekteId
2713 , sprSprachenId = self.sprSprachenId
2714 , prtProtokollId = None
2715 , psGefszenarioId = gefszenario
2716 , strNameId = strName )
2717
2718
2719
2720
2721
2722
2723 if( ereignis != None ) : ereignis.Skip( skip = True )
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733 - def gibId( self, wertId, istStrName = False ):
2734 """
2735 Diese Methode bildet die gültige Identifikationsnummer der Strukturelemente
2736
2737 @param wertId: Eineindeutige Identifikationsnummer des Wertes
2738 @type wertId: Ganzzahl
2739
2740 @param istStrName: Wenn C{wertId} die Konstante für Strukturnamen hinzugefügt werden soll, ist C{True} anzugeben. Wird C{False} angegeben, wird die Konstante für Strukturpunkte hinzugefügt.
2741 @type istStrName: Boolean
2742
2743 """
2744
2745
2746
2747
2748 if( istStrName ) :
2749 return ( wertId + 10000 )
2750
2751
2752
2753
2754 else :
2755 return ( wertId + 10100 )
2756
2757
2758
2759
2760
2761
2762
2763
2764
2766 """
2767 Diese Methode klassifiziert den aktuell gewählten Eintrag des C{TreeCtrl}. Es wird zwischen Strukturpunkten, Dokumenten und den Hauptknoten unterschieden.
2768
2769 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben.
2770 @type ereignis: C{wx - Ereignisobjekt}
2771
2772 @return: Es wird C{True} zurückgegeben, wenn der aktuell gewählte Eintrag ein Strukturpunkt ist. Es wird C{False} zurückgegeben, wenn der aktuell gewählte Eintrag ein Dokument ist. Es wird C{None} zurückgegeben, wenn der aktuell gewählte Eintrag ein Hauptknoten (C{Dok, Strukturbezeichnung}) ist.
2773 @rtype: Boolean
2774
2775 """
2776
2777
2778
2779
2780 if( ereignis.GetEventObject().GetPyData( ereignis.GetItem() )[1] is None ) :
2781 return None
2782
2783
2784
2785
2786
2787 return( ereignis.GetEventObject().GetPyData( ereignis.GetItem() )[0] >= 10100 )
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802 -class TextCtrlAuswStatisch( wx.TextCtrl, __Ergaenzung__ ):
2803 """
2804 Klasse, die einem C{wx.TextCtrl} eine Auswahlliste zuordnet, aus der die anzuzeigenden Wert entnommen werden.
2805 """
2806
2807
2808
2809
2810
2811
2812 - def __init__( self, parent, size, Statusleiste, dbVerbindung ):
2813 wx.TextCtrl.__init__( self, parent = parent, size = size, style = wx.TE_READONLY )
2814 __Ergaenzung__.__init__( self, Statusleiste = Statusleiste )
2815
2816
2817
2818
2819
2820 self.SetBackgroundColour( self.GetParent().GetBackgroundColour() )
2821
2822
2823
2824
2825
2826 self.__statusLeisteDBSpName__ = dbVerbindung.gibSpaltenName( self.GetId() )
2827
2828
2829
2830
2831
2832 self.__Auswahlliste__ = []
2833
2834
2835
2836
2837
2838 self.__aktLfdNr__ = 0
2839
2840
2841
2842
2843
2844 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ )
2845 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ )
2846
2847 self.Bind( wx.EVT_CONTEXT_MENU, self.__ereignisKMenueNicht__ )
2848
2849
2850
2851
2852
2853
2854
2855
2856 - def gibAnzahl( self ):
2857 """
2858 Mit Aufruf dieser Methode wird die Gesamtzahl der Einträge der Auswahlliste des C{wx.TextCtrl} zurückgegeben.
2859
2860 @return: Es wird die Gesamtzahl der Einträge der Auswahlliste zurückgegeben.
2861 @rtype: Ganzzahl
2862 """
2863
2864
2865
2866
2867 return len( self.__Auswahlliste__ )
2868
2869
2870
2871
2872
2873
2874
2875 - def gibClientData( self, lfdNr = None, gibAktWert = True ):
2876 """
2877 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.
2878
2879 @param gibAktWert : Wird C{True} angegeben (UND C{lfdNr == None}) wird der aktuelle Wert zurückgegeben. Wird C{False} angegeben (UND C{lfdNr == None})
2880 @type gibAktWert :
2881
2882 @param lfdNr: Es ist die lfd. Nummer des Eintrages anzugeben, dessen C{wx.ClientData} zurückgegeben werden soll.
2883 @type lfdNr: Ganzzahl
2884
2885 @return: C{wx.ClientData} zur C{lfdNr}
2886 @rtype: Listenobjekt
2887 """
2888
2889
2890
2891
2892 if( len( self.__Auswahlliste__ ) == 0 ) : return None
2893
2894
2895
2896
2897
2898 if( lfdNr == None ) :
2899 if( gibAktWert ) : return self.clientData[self.__aktLfdNr__]
2900 else : return self.clientData
2901 else :
2902 return self.clientData[lfdNr]
2903
2904
2905
2906
2907
2908
2909
2910
2911 - def gibWert( self ):
2912 """
2913 Mit Aufruf dieser Methode wird der Wert der C{TextCtrl} zurückgegeben.
2914 """
2915
2916
2917
2918
2919 return self.GetValue()
2920
2921
2922
2923
2924
2925
2926
2927
2928 - def loescheAlles( self ):
2929 """
2930 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.
2931 """
2932
2933
2934
2935
2936
2937 self.istVomBenutzerGeaendert = False
2938 self.istBenutzerAenderungJetzt = False
2939 self.__Auswahlliste__ = []
2940 self.__aktLfdNr__ = 0
2941 del self.wertNichtMod[:]
2942 self.ChangeValue( "" )
2943
2944
2945
2946
2947
2948
2949
2950
2951 - def nimmWert( self, wert, clientData = None ):
2952 """
2953 Mit Aufruf dieser Methode werden die Werte der C{wx.TextCtrl} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden
2954
2955 @param wert: Es ist ein Wert der Auswahlliste des C{wx.TextCtrl} anzugeben.
2956 @type wert: Zeichenkette
2957
2958 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben.
2959 @type clientData: beliebiges Objekt
2960 """
2961
2962
2963
2964
2965 self.wertNichtMod.append( wert )
2966 self.__Auswahlliste__.append( wert )
2967 self.clientData.append( clientData )
2968
2969
2970
2971
2972
2973 self.istVomBenutzerGeaendert = False
2974 self.istBenutzerAenderungJetzt = False
2975
2976
2977
2978
2979
2980
2981
2982
2983 - def setzeWert( self, lfdNr ):
2984 """
2985 Mit Aufruf dieser Methode wird der Wert des Eintrages mit der C{lfdNr} ausgewählt.
2986
2987 @param lfdNr: Es ist die lfd. Nummer des Eintrages anzugeben, dessen Wert ausgewählt werden soll.
2988 @type lfdNr: Ganzzahl
2989 """
2990
2991
2992
2993
2994 self.__aktLfdNr__ = lfdNr
2995 self.ChangeValue( self.__Auswahlliste__[lfdNr] )
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010 -class TextCtrlErg( wx.TextCtrl, __TextFunktionen__ ):
3011 """
3012 Klasse, die eine C{wx.TextCtrl} mit weiteren Funktionen versieht.
3013 """
3014
3015
3016
3017
3018
3019
3020 - def __init__( self, parent, size, style, Statusleiste, dbVerbindung ):
3021 wx.TextCtrl.__init__( self, parent = parent, size = size, style = style )
3022 __TextFunktionen__.__init__( self, Statusleiste = Statusleiste )
3023
3024
3025
3026
3027
3028 self.__statusLeisteDBSpName__ = dbVerbindung.gibSpaltenName( self.GetId() )
3029
3030
3031
3032
3033
3034 self.Bind( wx.EVT_TEXT, self.__ereignisAenderung__, self )
3035 self.Bind( wx.EVT_ENTER_WINDOW, self.__ereignisStatusleiste__ )
3036 self.Bind( wx.EVT_LEAVE_WINDOW, self.__ereignisStatusleiste__ )
3037 self.Bind( wx.EVT_LEAVE_WINDOW, self.__frageRechtschreibfehlerkorrekur__ )
3038
3039
3040
3041
3042
3043
3044
3045 - def gibClientData( self ):
3046 """
3047 Mit Aufruf dieser Methode wird C{self.clientData} zurückgegeben.
3048
3049 @return: self.clientData
3050 @rtype: Listenobjekt
3051 """
3052
3053 return self.clientData
3054
3055
3056
3057
3058
3059
3060
3061
3062 - def gibWert( self ):
3063 """
3064 Mit Aufruf dieser Methode wird der Wert des C{TextCtrl} zurückgegeben.
3065 """
3066
3067
3068
3069
3070 return self.GetValue()
3071
3072
3073
3074
3075
3076
3077
3078
3079 - def loescheAlles( self ):
3080 """
3081 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.
3082 """
3083
3084
3085
3086
3087
3088 self.istVomBenutzerGeaendert = False
3089 self.istBenutzerAenderungJetzt = False
3090 del self.wertNichtMod[:]
3091 self.ChangeValue( "" )
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101 - def nimmWert( self, wert, clientData = None ):
3102 """
3103 Mit Aufruf dieser Methode wird der Wert der C{wx.TextCtrl} übernommen. Mittels C{ClientData[0 ... n]} können Zusatzinformationen übergeben werden
3104
3105 @param wert: Es ist der Wert der C{wx.TextCtrl} anzugeben.
3106 @type wert: Zeichenkette
3107
3108 @param clientData: Mittels C{clientData[0...n]} werden weitere Zusatzinformationen übergeben.
3109 @type clientData: beliebiges Objekt
3110 """
3111
3112
3113
3114
3115 self.loescheAlles()
3116
3117
3118
3119
3120 self.wertNichtMod.insert( 0, wert )
3121 self.ChangeValue( wert )
3122 self.clientData = clientData
3123
3124
3125
3126
3127
3128 self.istVomBenutzerGeaendert = False
3129 self.istBenutzerAenderungJetzt = False
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145 -class TextCtrlSpWTitel( wx.Panel ):
3146 """
3147 Klasse, die zwei C{TextCtrl} in einem C{SplitterWindow} miteinander verbindet. Weiterhin wird ein Titel zugeordnet.
3148 """
3149
3150
3151
3152
3153
3154
3155 - def __init__( self, parent, titel, minSize, orient, Statusleiste, dbVerbindung ):
3156 wx.Panel.__init__( self, parent )
3157
3158
3159
3160
3161
3162
3163 self.SplitterWindow = wx.SplitterWindow( self, -1, style = wx.SP_LIVE_UPDATE )
3164 self.SplitterWindow.SetMinimumPaneSize( 20 )
3165
3166 self.TextCtrl__li = TextCtrlErg( self.SplitterWindow
3167 , size = (-1, -1 )
3168 , style = wx.TE_MULTILINE|wx.BORDER_SUNKEN
3169 , Statusleiste = Statusleiste
3170 , dbVerbindung = dbVerbindung )
3171
3172 self.TextCtrl__re = TextCtrlErg( self.SplitterWindow
3173 , size = (-1, -1 )
3174 , style = wx.TE_MULTILINE|wx.BORDER_SUNKEN
3175 , Statusleiste = Statusleiste
3176 , dbVerbindung = dbVerbindung )
3177
3178 self.SplitterWindow.SplitVertically( self.TextCtrl__li
3179 , self.TextCtrl__re
3180 , -100 )
3181
3182 self.FlexGridSizerWxObjTitel = FlexGridSizerWxObjTitel( parent = self
3183 , wxObj = self.SplitterWindow
3184 , titel = titel
3185 , orient = orient )
3186
3187 self.FlexGridSizerWxObjTitel.wxObjekt.SetMinSize( minSize )
3188
3189 BoxSizer = wx.BoxSizer( wx.VERTICAL )
3190 BoxSizer.Add( self.FlexGridSizerWxObjTitel
3191 , proportion = 1
3192 , flag = wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL
3193 , border = 0 )
3194 self.SetSizerAndFit( BoxSizer )
3195
3196
3197
3198
3199
3200
3201
3202
3203 - def Enable( self, enable = True ):
3204 """
3205 Diese Methode implementiert die Standardfunktion C{Enable(...)} für diese Klasse.
3206 """
3207
3208
3209
3210
3211 self.FlexGridSizerWxObjTitel.Enable( enable )
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3228 """
3229 Klasse, die ein C{wx.TreeCtrl} mit weiteren Funktionen versieht.
3230 """
3231
3232
3233
3234
3235
3236
3237 - def __init__( self, parent, Statusleiste, dbVerbindung, style = wx.BORDER_SUNKEN|wx.TR_DEFAULT_STYLE|wx.TR_HIDE_ROOT ):
3261
3262
3263
3264
3265
3266
3267
3268
3270 """
3271 Diese Methode erzeugt aus den Einträgen der Ebene 0 (auf Wurzelebene) den Baum
3272 """
3273
3274
3275
3276
3277
3278 if len( self.elementListe ) < 1 or self.GetCount() < 1 :
3279 return
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302 i = 0
3303 aktLaenge = len( self.elementListe )
3304 fehllauf = 0
3305 while len( self.elementListe ) > 0 :
3306
3307
3308
3309
3310
3311 self.ExpandAll()
3312
3313
3314
3315
3316
3317
3318
3319 vorgaenger = self.GetRootItem()
3320 self.ScrollTo( vorgaenger )
3321 for j in range( self.GetCount() ):
3322
3323
3324
3325
3326
3327 vorgaenger = self.GetNextVisible( vorgaenger )
3328 self.ScrollTo( vorgaenger )
3329
3330
3331
3332
3333
3334
3335 if self.GetPyData( vorgaenger )[0] == self.elementListe[i][1][1] :
3336
3337 neu = self.AppendItem( vorgaenger, str( self.elementListe[i][0] ) )
3338 self.SetPyData( neu, self.elementListe[i][1] )
3339 self.elementListe.pop(i)
3340 break
3341
3342
3343
3344
3345
3346 i = 0
3347
3348
3349
3350
3351
3352
3353 if( aktLaenge == len( self.elementListe )
3354 and fehllauf > len( self.elementListe ) ) :
3355
3356 print "Fehlerhafte Baumdefinition ! Der aktuelle Eintrag besitzt keinen Vorgänger: ", self.elementListe[i]
3357 return
3358
3359 aktLaenge = len( self.elementListe )
3360 fehllauf = fehllauf + 1
3361
3362
3363
3364
3365
3366
3367
3369 """
3370 Mit Aufruf dieser Methode wird C{ClientData} zum aktuell gewählten Eintrages zurückgegeben.
3371
3372 @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.
3373 @type eintrag: wx.TreeItemId
3374
3375 @return: C{wx.ClientData}
3376 @rtype: Listenobjekt
3377 """
3378
3379
3380
3381
3382 if( not self.GetSelection().IsOk() ) :
3383 return
3384
3385
3386
3387
3388
3389 if( eintrag is None ) : return self.GetPyData( self.GetSelection() )[2]
3390
3391 return self.GetPyData( eintrag )[2]
3392
3393
3394
3395
3396
3397
3398
3399
3400 - def gibDbId( self, eintrag = None ):
3401 """
3402 Mit Aufruf dieser Methode wird C{dbId} zum aktuell gewählten Eintrages zurückgegeben.
3403
3404
3405 @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.
3406 @type eintrag: wx.TreeItemId
3407
3408 @return: C{self.dbId}
3409 @rtype: Python-Objekt
3410 """
3411
3412
3413
3414
3415
3416 if( eintrag is None ) :
3417
3418
3419
3420
3421 if( not self.GetSelection().IsOk() ) :
3422 return None
3423
3424
3425
3426
3427
3428 return self.GetPyData( self.GetSelection() )[3]
3429
3430
3431
3432
3433
3434
3435 return self.GetPyData( eintrag )[3]
3436
3437
3438
3439
3440
3441
3442
3443
3444 - def gibWert( self, eintrag = None ):
3445 """
3446 Mit Aufruf dieser Methode wird der C{wert} zum aktuell gewählten Eintrages zurückgegeben.
3447
3448
3449 @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.
3450 @type eintrag: wx.TreeItemId
3451
3452 @return: C{self.dbId}
3453 @rtype: Python-Objekt
3454 """
3455
3456
3457
3458
3459
3460 if( eintrag is None ) :
3461
3462
3463
3464
3465 if( not self.GetSelection().IsOk() ) :
3466 return None
3467
3468
3469
3470
3471
3472 return self.GetPyData( self.GetSelection() )[0]
3473
3474
3475
3476
3477
3478
3479 return self.GetPyData( eintrag )[0]
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3491 """
3492 Mit Aufruf dieser Methode wird der Eintrag C{eintrag} einschließlich der untergeordneten Einträge (d.h. der gesamte Zweig) zurückgegeben.
3493
3494 @param eintrag: Es ist der Eintrag anzugeben, dessen untergeordneten Einträge zurückgegeben werden sollen.
3495 @type eintrag: wx.TreeItemId
3496
3497 @return: liste der C{wx.TreeItemId}
3498 @rtype: Python-Liste
3499 """
3500
3501
3502
3503
3504 eintragListe = []
3505 eintragListe.append( eintrag )
3506
3507
3508
3509
3510
3511 if( not self.ItemHasChildren( eintrag ) ) : return eintragListe
3512
3513
3514
3515
3516
3517 eintragListe.append( self.GetFirstChild( eintrag )[0] )
3518 cookie = self.GetFirstChild( eintrag )[1]
3519
3520
3521
3522
3523
3524 item = self.GetNextChild( eintrag, cookie )[0]
3525 cookie = self.GetNextChild( eintrag, cookie )[1]
3526
3527 while( item.IsOk() ) :
3528
3529 eintragListe.append( item )
3530 item = self.GetNextChild( eintrag, cookie )[0]
3531 cookie = self.GetNextChild( eintrag, cookie )[1]
3532
3533
3534
3535
3536
3537 return eintragListe
3538
3539
3540
3541
3542
3543
3544
3545
3546
3548 """
3549 Mit Aufruf dieser Methode wird geprüft, ob C{dbId} im Baum vorhanden ist.
3550
3551 @param dbId: Es wird C{True} zurückgegeben, wenn C{dbId} vorhanden ist.
3552 @type dbId: Ganzzahl
3553
3554 @return: C{wx.ClientData}
3555 @rtype: Listenobjekt
3556 """
3557
3558
3559
3560
3561 return( dbId in self.dbIdListe )
3562
3563
3564
3565
3566
3567
3568
3570 """
3571 Diese Methode löscht den gesamten Baum und fügt die Wurzel (C{self.wurzel}) ein.
3572 """
3573
3574
3575
3576
3577 self.DeleteAllItems()
3578 self.wurzel = self.AddRoot( "Wird nicht angezeigt (style = wx.TR_HIDE_ROOT ) !" )
3579 self.elementListe = []
3580 self.dbIdListe = []
3581
3582
3583
3584
3585
3586
3587
3589 """
3590 Mit Aufruf dieser Methode wird der Eintrag mit der C{lfdNr} markiert.
3591 ACHTUNG ! Noch nicht vollständig implementiert !
3592
3593 @param eintrag: Es ist der Eintrag anzugeben, der markiert werden soll.
3594 @type eintrag: wx.TreeItemId
3595 """
3596
3597
3598
3599
3600 if( self.IsEmpty() ) : return
3601
3602
3603
3604
3605
3606
3607 if( eintrag is None ) :
3608
3609 self.ExpandAll()
3610 self.SelectItem( self.GetNextVisible( self.GetRootItem() ) )
3611 return
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628 - def nimmWert( self, wert, wertId, dbId, wertIdVorgaenger = None, clientData = None ):
3629 """
3630 Diese Methode übernimmt den kompletten Wert, ohne ihn im C{TreeCtrl} darzustellen. Er muß eine eineindeutige Identifikationsnummer (C{wertId}) besitzen.
3631
3632 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
3633
3634 @param wert: Es ist die Zeichenkette anzugeben, die im Baum sichtbar ist.
3635 @type wert: Zeichenkette
3636
3637 @param wertId: Eineindeutige Identifikationsnummer des Wertes (zur internen Organisation)
3638 @type wertId: Ganzzahl
3639
3640 @param dbId: Eineindeutige Identifikationsnummer des Eintrages welche zum Beispiel in der Datenbank verwendet wird. Einträge mit derselben Identifikationsnummer dürfen mehrfach auftreten.
3641 @type dbId: Ganzzahl
3642
3643 @param wertIdVorgaenger: Eineindeutige Identifikationsnummer des Vorgängers des Wertes
3644 @type wertIdVorgaenger: Ganzzahl
3645
3646 @param clientData: Ein beliebiges C{Python-Objekt}, welches weitere Zusatzinformationen zum Wert enthält
3647 @type clientData: C{Python-Objekt}
3648 """
3649
3650
3651
3652
3653
3654
3655 if wertIdVorgaenger == None :
3656 eintr = self.AppendItem( self.wurzel, wert )
3657 self.SetPyData( eintr, ( wertId, wertIdVorgaenger, clientData, dbId ) )
3658
3659
3660
3661
3662 else :
3663 self.elementListe.append( ( wert, ( wertId, wertIdVorgaenger, clientData, dbId ) ) )
3664
3665
3666
3667
3668
3669 self.dbIdListe.append( dbId )
3670