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

Source Code for Module bearbeiteuebersetzung

  1  # -*- coding: utf-8 -*- 
  2  # 
  3  # 
  4  #    filename:  bearbeiteuebersetzung.py 
  5  # 
  6  #    version:   see wxvf.py 
  7  # 
  8  # 
  9  # ---------------------------------------------------------------------------------------- 
 10  # 
 11  # 
 12  #    Copyright (C) 2010  Michael Bellair 
 13  # 
 14  #    This file is part of wxvf. 
 15  # 
 16  #    wxvf is free software: you can redistribute it and/or modify 
 17  #    it under the terms of the GNU General Public License as published by 
 18  #    the Free Software Foundation, either version 3 of the License, or 
 19  #    (at your option) any later version. 
 20  # 
 21  #    wxvf is distributed in the hope that it will be useful, 
 22  #    but WITHOUT ANY WARRANTY; without even the implied warranty of 
 23  #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 24  #    GNU General Public License for more details. 
 25  # 
 26  #    You should have received a copy of the GNU General Public License 
 27  #    along with wxvf.  If not, see <http://www.gnu.org/licenses/>. 
 28  # 
 29  #    Michael Bellair 
 30  #    Sportplatzstrasse 11 
 31  #    01259 Dresden 
 32  # 
 33  #    E-Mail:    bellair@freenet.de 
 34  #    homepage:  http://freenet-homepage.de/bellair/vf/index.html 
 35  # 
 36  # 
 37  # ---------------------------------------------------------------------------------------- 
 38  # 
 39  import wx 
 40   
 41  from universal import zk                        # Zeichenketten bearbeiten 
 42   
 43  from wxuniversal import ComboBoxErg             # wx.ComboBox mit Ergänzungen 
 44  from wxuniversal import DialogErg               # wx.Dialog mit Ergänzungen 
 45  from wxuniversal import farbeAuswahlListe       # Farbe der Objekte, die Vorgabewerte enthalten 
 46  from wxuniversal import FlexGridSizerWxObjTitel # wxObjekt mit Titel 
 47  from wxuniversal import ListBoxErg              # wx.ListBox mit Ergänzungen 
 48  from wxuniversal import TextCtrlErg             # wx.TextCtrl mit Ergänzungen 
 49  from wxuniversal import TextCtrlSpWTitel        # TextCtrl im SplitterWindow mit Titel 
 50   
 51   
 52  # 
 53  # 
 54  # 
 55  # ---------------------------------------------------------------------------------------- 
 56  # ---------------------------------------------------------------------------------------- 
 57  # --                                    -------------------------------------------------- 
 58  # --    Offene Punkte / Aufgaben        -------------------------------------------------- 
 59  # --                                    -------------------------------------------------- 
 60  # ---------------------------------------------------------------------------------------- 
 61  # ---------------------------------------------------------------------------------------- 
 62  # 
 63  #  
 64  #       -- siehe TODO 'bearbeiteuebersetzung.py' -- 
 65  # 
 66  # 
 67  # ---------------------------------------------------------------------------------------- 
 68  # 
 69   
 70   
 71   
 72  # 
 73  # ---------------------------------------------------------------------------------------- 
 74  # ---------------------------------------------------------------------------------------- 
 75  # --                                                            -------------------------- 
 76  # --    Eingabeformular 'Übersetzung anzeigen/bearbeiten'      -------------------------- 
 77  # --                                                            -------------------------- 
 78  # ---------------------------------------------------------------------------------------- 
 79  # ---------------------------------------------------------------------------------------- 
 80  # 
81 -class BearbeiteUebersetzung( DialogErg ):
82 83 """ 84 Klasse zur Abbildung des Eingabeformulars 'Übersetzung anzeigen/bearbeiten. 85 Dem Formular wird eine >spr_uebvar_id< einschließlich aktueller >spr.sprachen.id< und zugeordnete >notizen< übergeben. 86 87 Beim Bearbeiten der Sicherheitsanforderung wird der Einfluß auf weitere Verwendungen der >spr_uebvar_id< überwacht ! 88 Wenn die aktuelle >spr_uebvar_id< mehrfach verwendet wird, wird sie nicht verändert, sondern eine Kopie einschließlich zugeordneter Übersetzungen angelegt 89 """ 90 91 # 92 # ------------------------------------------------------------------------------------ 93 # -- Eingabeformular initialisieren ---------------------------------- 94 # ------------------------------------------------------------------------------------ 95 #
96 - def __init__( self, parent, Statusleiste, dbVerbindung, sprSprachenId, sprUebvarId, notizen ):
97 DialogErg.__init__( self 98 , parent = parent 99 , title = u"Übersetzungen anzeigen/bearbeiten." 100 , dbVerbindung = dbVerbindung ) 101 102 # 103 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 104 # 105 self.SetName( name = "BearbeiteUebersetzung" ) 106 107 108 # 109 # -- Randbedingungen übernehmen ------------------------------------------ 110 # 111 self.Statusleiste = Statusleiste 112 self.dbVerbindung = dbVerbindung 113 self.sprUebvarId = sprUebvarId 114 self.sprUebvarIdStart = sprUebvarId # >spr_uebvar_id< beim Öffnen des Fensters 115 self.sprSprachenId = sprSprachenId 116 self.notizen = notizen 117 self.notizenStart = notizen # >notizen< beim Öffnen des Fensters 118 self.istAenderung = False 119 120 121 122 # 123 # -- Übersetzungsvarianten -------------------------------------------------- 124 # -- Objekt-Id = - -------------------------------------------------- 125 # 126 self.ListBox__Uebersetzungsvarianten = FlexGridSizerWxObjTitel( parent = self 127 , wxObj = ListBoxErg( self 128 , size = ( -1, 150 ) 129 , style = wx.BORDER_SUNKEN | wx.LB_SORT 130 , Statusleiste = self.Statusleiste 131 , dbVerbindung = self.dbVerbindung ) 132 , titel = u"Übersetzungsvarianten" 133 , orient = wx.VERTICAL ) 134 135 self.ListBox__Uebersetzungsvarianten.wxObjekt.statusLeisteDBSpNameErlaeuterung = u"Alle Übersetzungen zur aktuellen Übersetzungsvariante." 136 137 self.ListBox__Uebersetzungsvarianten.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 138 139 self.Bind( wx.EVT_LISTBOX 140 , self.__ereignisNavigation__ 141 , self.ListBox__Uebersetzungsvarianten.wxObjekt ) 142 143 144 145 146 147 # 148 # -- Sprache -------------------------------------------------- 149 # -- Objekt-Id = ???? -------------------------------------------------- 150 # 151 self.ComboBox__Sprache = FlexGridSizerWxObjTitel( parent = self 152 , wxObj = ComboBoxErg( self 153 , choices = [] 154 , style = wx.CB_DROPDOWN|wx.CB_READONLY 155 , Statusleiste = self.Statusleiste 156 , dbVerbindung = self.dbVerbindung ) 157 , orient = wx.VERTICAL 158 , titel = u"Sprache:" ) 159 160 # 161 # -- Sprachen einlesen -------------------------------------------------- 162 # 163 self.dbVerbindung.init_sprSprachen( self.ComboBox__Sprache.wxObjekt ) 164 165 self.Bind( wx.EVT_COMBOBOX 166 , self.__ereignisNavigation__ 167 , self.ComboBox__Sprache.wxObjekt ) 168 169 170 171 # 172 # -- Übersetzung bearbeiten -------------------------------------------------- 173 # -- Objekt-Id = ???? -------------------------------------------------- 174 # 175 self.TextCtrlErg__Uebersetzung = FlexGridSizerWxObjTitel( parent = self 176 , wxObj = TextCtrlErg( self 177 , size = ( -1, 100 ) 178 , style = wx.TE_MULTILINE|wx.BORDER_SUNKEN 179 , Statusleiste = self.Statusleiste 180 , dbVerbindung = self.dbVerbindung ) 181 , titel = u"Übersetzung bearbeiten:" 182 , orient = wx.VERTICAL ) 183 184 185 self.TextCtrlErg__Uebersetzung.wxObjekt.statusLeisteDBSpNameErlaeuterung = u"Die Übersetzung in der aktuell gewählten Sprache." 186 187 self.TextCtrlErg__Uebersetzung.wxObjekt.istMeldungRechtschreibFehlerKorrektur = False 188 189 self.Bind( wx.EVT_TEXT 190 , self.__ereignisAenderung__ 191 , self.TextCtrlErg__Uebersetzung.wxObjekt ) 192 193 194 195 # 196 # -- Kontextbezogene interne Notizen zur Übersetzungsvariante ---------- 197 # -- Objekt-Id = ???? -------------------------------------------------- 198 # 199 self.TextCtrl__KontextNotizen = FlexGridSizerWxObjTitel( parent = self 200 , wxObj = TextCtrlErg( self 201 , size = ( -1, 100 ) 202 , style = wx.TE_MULTILINE|wx.BORDER_SUNKEN 203 , Statusleiste = self.Statusleiste 204 , dbVerbindung = self.dbVerbindung ) 205 , titel = u"Kontextbezogene interne Notizen zur Übersetzungsvariante:" 206 , orient = wx.VERTICAL ) 207 208 self.TextCtrl__KontextNotizen.wxObjekt.istMeldungRechtschreibFehlerKorrektur = False 209 210 self.Bind( wx.EVT_TEXT 211 , self.__ereignisAenderung__ 212 , self.TextCtrl__KontextNotizen.wxObjekt ) 213 214 # 215 # -- es sind keine internen Notizen zu bearbeiten -------------------------- 216 # 217 if( self.notizen is None ) : 218 219 self.notizen = zk.gibZk( "" ) 220 self.notizenStart = self.notizen # >notizen< beim Öffnen des Fensters 221 222 self.TextCtrl__KontextNotizen.wxObjekt.Enable( False ) 223 224 225 226 # 227 # -- Layout setzen ---------------------------------------------------------- 228 # 229 FlexGridSizer = wx.FlexGridSizer( rows = 4, cols = 1, vgap = 5, hgap = 0 ) 230 231 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 232 FlexGridSizer.AddGrowableRow( idx = 0, proportion = 1 ) 233 234 FlexGridSizer.Add( self.ListBox__Uebersetzungsvarianten, flag = wx.EXPAND ) 235 FlexGridSizer.Add( self.ComboBox__Sprache, flag = wx.EXPAND ) 236 FlexGridSizer.Add( self.TextCtrlErg__Uebersetzung, flag = wx.EXPAND ) 237 FlexGridSizer.Add( self.TextCtrl__KontextNotizen, flag = wx.EXPAND ) 238 239 240 # 241 # -- In das Eingabeformular übernehmen ---------------------------------- 242 # 243 self.nimmDialogElemente( FlexGridSizer ) 244 245 246 # 247 # -- Eingabeobjekte initialisieren / auswählen -------------------------- 248 # 249 self.__spezAktionenVerwerfen__()
250 251 252 253 254 255 # 256 # ------------------------------------------------------------------------------------ 257 # -- Änderungen in den Texteingabefeldern auswerten -------------------------- 258 # ------------------------------------------------------------------------------------ 259 #
260 - def __ereignisAenderung__( self, ereignis = None ):
261 """ 262 Methode die aufgerufen wird, wenn der Text im Texteingabefeld geändert wird. 263 264 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 265 @type ereignis: C{wx - Ereignisobjekt} 266 """ 267 268 # 269 # -- Buttton 'Anderungen speichern' aktivieren, -------------------------- 270 # -- Buttton 'Anderungen verwerfen' aktivieren -------------------------- 271 # 272 if( self.TextCtrlErg__Uebersetzung.wxObjekt.istBenutzerAenderungJetzt 273 or self.TextCtrl__KontextNotizen.wxObjekt.istBenutzerAenderungJetzt ): 274 275 self.Button__Verwerfen.Enable( True ) 276 self.Button__Sichern.Enable( True ) 277 278 279 # 280 # -- Das Ereignis weiterreichen, damit es weiter -------------------------- 281 # -- ausgewertet werden kann -------------------------- 282 # 283 ereignis.Skip( skip = True )
284 285 286 287 288 289 # 290 # ------------------------------------------------------------------------------------ 291 # -- Innerhalb der verfügbaren Übersetzungen / Sprachen navigieren ---------- 292 # ------------------------------------------------------------------------------------ 293 #
294 - def __ereignisNavigation__( self, ereignis = None ):
295 """ 296 Innerhalb der verfügbaren Übersetzungen / Sprachen navigieren. Die entsprechende Sicherheitsanforderung wird in das Objekt zur Textbearbeitung eingetragen. 297 298 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 299 @type ereignis: C{wx - Ereignisobjekt} 300 """ 301 302 303 # 304 # -- Es gibt nichts zu bearbeiten ------------------------------------------ 305 # 306 if( self.ListBox__Uebersetzungsvarianten.wxObjekt.IsEmpty() 307 or self.ComboBox__Sprache.wxObjekt.IsEmpty() ) : 308 309 return 310 311 312 313 # 314 # -- Änderungen übernehmen -------------------------------------------------- 315 # 316 if( self.TextCtrlErg__Uebersetzung.wxObjekt.istBenutzerAenderungJetzt ) : 317 318 if( self.aktLfdNr_Uebersetzungsvarianten is not None ) : 319 320 self.ListBox__Uebersetzungsvarianten.wxObjekt.SetString( 321 self.aktLfdNr_Uebersetzungsvarianten 322 , zk.gibZk( zk = self.TextCtrlErg__Uebersetzung.wxObjekt.gibWert() 323 , leerZkAlternativ = self.TextCtrlErg__Uebersetzung.wxObjekt.wertNichtMod[0] ) ) 324 325 else : 326 327 self.ListBox__Uebersetzungsvarianten.wxObjekt.nimmWert( 328 wert = zk.gibZk( zk = self.TextCtrlErg__Uebersetzung.wxObjekt.gibWert() 329 , leerZkAlternativ = self.TextCtrlErg__Uebersetzung.wxObjekt.wertNichtMod[0] ) 330 , clientData = [self.aktSprSprachenId] ) 331 332 self.__schreibDB__() 333 334 self.TextCtrlErg__Uebersetzung.wxObjekt.istBenutzerAenderungJetzt = False 335 336 337 338 # 339 # -- Sicherheitsanforderung in 'Übersetzungsvarianten' gewählt ---------- 340 # 341 if( ereignis is not None 342 and ereignis.GetId() == self.ListBox__Uebersetzungsvarianten.wxObjekt.GetId() ) : 343 344 # 345 # -- Sprache setzen -------------------------------------------------- 346 # 347 self.aktLfdNr_Uebersetzungsvarianten = self.ListBox__Uebersetzungsvarianten.wxObjekt.GetSelection() 348 349 self.ComboBox__Sprache.wxObjekt.selektiereWert( 350 clientDataId = self.ListBox__Uebersetzungsvarianten.wxObjekt.gibClientData( 351 lfdNr = self.aktLfdNr_Uebersetzungsvarianten )[0] ) 352 353 self.aktSprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 354 355 356 357 # 358 # -- Sprache gewählt -------------------------------------------------- 359 # 360 elif( ereignis is None 361 or ereignis.GetId() == self.ComboBox__Sprache.wxObjekt.GetId() ) : 362 363 # 364 # -- >spr_sprachen_id< übernehmen ---------------------------------- 365 # 366 self.aktSprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 367 368 # 369 # -- 'Übersetzungsvarianten' setzen ---------------------------------- 370 # 371 if( not self.ListBox__Uebersetzungsvarianten.wxObjekt.selektiereWert( 372 clientDataId = self.ComboBox__Sprache.wxObjekt.gibClientData() ) ) : 373 374 self.aktLfdNr_Uebersetzungsvarianten = None 375 376 377 378 # 379 # -- 'Übersetzung bearbeiten' -------------------------- 380 # -- Text aus 'Übersetzungsvarianten' übernehmen -------------------------- 381 # 382 if( ereignis is not None ) : 383 self.TextCtrlErg__Uebersetzung.wxObjekt.nimmWert( 384 wert = self.ListBox__Uebersetzungsvarianten.wxObjekt.gibWert() ) 385 386 387 388 # 389 # -- Kontextbezogene interne Notizen zur Übersetzungsvariante ---------- 390 # -- Text übernehmen ---------- 391 # 392 self.notizen = self.TextCtrl__KontextNotizen.wxObjekt.gibWert()
393 394 395 396 397 # 398 # ------------------------------------------------------------------------------------ 399 # -- Datenbank schreiben -------------------------------------------------- 400 # ------------------------------------------------------------------------------------ 401 #
402 - def __schreibDB__( self ):
403 """ 404 Methode die aufgerufen wird, wenn die Änderungen in die Datenbank geschrieben werden sollen. 405 406 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 407 @type ereignis: C{wx - Ereignisobjekt} 408 """ 409 410 # 411 # -- Datenbank aktualisieren ------------------------------------------ 412 # 413 self.sprUebvarId = self.dbVerbindung.schreibe__sprUebvar( 414 ListBoxErg = self.ListBox__Uebersetzungsvarianten.wxObjekt 415 , sprUebvarId = self.sprUebvarId 416 , istMehrfachVerw = self.sprUebvarIdMehrfachVerw ) 417 418 419 # 420 # -- spätestens nach dem ersten Schreiben wird die >spr_uebvar_id< ---------- 421 # -- nicht mehrfach verwendet ---------- 422 # 423 self.sprUebvarIdMehrfachVerw = False
424 425 426 427 428 # 429 # ------------------------------------------------------------------------------------ 430 # -- Speichern ---------------------------------------------------------- 431 # ------------------------------------------------------------------------------------ 432 #
433 - def __spezAktionenSpeichern__( self ):
434 """ 435 Methode die in der abgeleiteten Klasse überschrieben wird, um spezifische Aktionen beim Speichern der Änderungen auszuführen. 436 """ 437 438 # 439 # -- Änderungen im Fenster / Datenbank übernehmen -------------------------- 440 # 441 self.__ereignisNavigation__() 442 443 444 # 445 # -- Änderungen werden gespeichert ------------------------------------------ 446 # 447 self.istAenderung = True;
448 449 450 451 452 # 453 # ------------------------------------------------------------------------------------ 454 # -- Verwerfen ---------------------------------------------------------- 455 # ------------------------------------------------------------------------------------ 456 #
457 - def __spezAktionenVerwerfen__( self ):
458 """ 459 Methode die in der abgeleiteten Klasse überschrieben wird, um spezifische Aktionen beim Verwerfen der Änderungen auszuführen. 460 """ 461 462 # 463 # -- prüfen, ob >self.sprUebvarId< mehrfach verwendet wird ------------------ 464 # 465 self.sprUebvarIdMehrfachVerw = self.dbVerbindung.istIdMehrfachVerwendet( zielSpalte = 'spr.uebvar.id' 466 , dbId = self.sprUebvarIdStart ) 467 468 469 # 470 # -- 'Übersetzungsvarianten' neu initialisieren -------------------------- 471 # 472 self.ListBox__Uebersetzungsvarianten.wxObjekt.loescheAlles() 473 474 self.dbVerbindung.init_sprWgruppe( wxListBox = self.ListBox__Uebersetzungsvarianten.wxObjekt 475 , sprUebvarId = self.sprUebvarIdStart ) 476 477 self.ListBox__Uebersetzungsvarianten.wxObjekt.selektiereWert( clientDataId = self.sprSprachenId ) 478 479 self.aktLfdNr_Uebersetzungsvarianten = self.ListBox__Uebersetzungsvarianten.wxObjekt.GetSelection() 480 481 482 # 483 # -- Sprache auswählen -------------------------------------------------- 484 # 485 self.ComboBox__Sprache.wxObjekt.selektiereWert( clientDataId = self.sprSprachenId ) 486 487 self.aktSprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 488 489 490 491 # 492 # -- 'Übersetzung bearbeiten' ------------------------------------------ 493 # 494 self.TextCtrlErg__Uebersetzung.wxObjekt.nimmWert( wert = self.ListBox__Uebersetzungsvarianten.wxObjekt.gibWert() ) 495 496 497 # 498 # -- 'Kontextbezogene interne Notizen' ---------------------------------- 499 # 500 self.TextCtrl__KontextNotizen.wxObjekt.nimmWert( wert = self.notizenStart )
501 502 503 504 505 # 506 # ------------------------------------------------------------------------------------ 507 # -- Es werden die veränderbaren Werte zurückgegeben -------------------------- 508 # ------------------------------------------------------------------------------------ 509 #
510 - def gibWerte( self ):
511 """ 512 Es wird der Änderungszustand (wenn Änderungen vorliegen C{True}), die veränderbaren Werte C{spr_uebvar_id} und C{notizen} zurückgegeben. 513 514 @return: Es wird C{[spr_uebvar_id, notizen]} zurückgegeben. 515 @rtype: Python-Liste 516 """ 517 518 return [self.istAenderung, self.sprUebvarId, self.notizen]
519