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://www.michaelbellair.de/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   
 50   
 51  # 
 52  # 
 53  # 
 54  # ---------------------------------------------------------------------------------------- 
 55  # ---------------------------------------------------------------------------------------- 
 56  # --                                    -------------------------------------------------- 
 57  # --    Offene Punkte / Aufgaben        -------------------------------------------------- 
 58  # --                                    -------------------------------------------------- 
 59  # ---------------------------------------------------------------------------------------- 
 60  # ---------------------------------------------------------------------------------------- 
 61  # 
 62  #  
 63  #       -- siehe TODO 'bearbeiteuebersetzung.py' -- 
 64  # 
 65  # 
 66  # ---------------------------------------------------------------------------------------- 
 67  # 
 68   
 69   
 70   
 71  # 
 72  # ---------------------------------------------------------------------------------------- 
 73  # ---------------------------------------------------------------------------------------- 
 74  # --                                                            -------------------------- 
 75  # --    Eingabeformular 'Übersetzung anzeigen/bearbeiten'      -------------------------- 
 76  # --                                                            -------------------------- 
 77  # ---------------------------------------------------------------------------------------- 
 78  # ---------------------------------------------------------------------------------------- 
 79  # 
80 -class BearbeiteUebersetzung( DialogErg ):
81 82 """ 83 Klasse zur Abbildung des Eingabeformulars 'Übersetzung anzeigen/bearbeiten. 84 Dem Formular wird eine >spr_uebvar_id< einschließlich aktueller >spr.sprachen.id< und zugeordnete >notizen< übergeben. 85 86 Beim Bearbeiten der Sicherheitsanforderung wird der Einfluß auf weitere Verwendungen der >spr_uebvar_id< überwacht ! 87 Wenn die aktuelle >spr_uebvar_id< mehrfach verwendet wird, wird sie nicht verändert, sondern eine Kopie einschließlich zugeordneter Übersetzungen angelegt 88 """ 89 90 # 91 # ------------------------------------------------------------------------------------ 92 # -- Eingabeformular initialisieren ---------------------------------- 93 # ------------------------------------------------------------------------------------ 94 #
95 - def __init__( self, parent, Statusleiste, dbVerbindung, sprUebvarId, notizen ):
96 DialogErg.__init__( self 97 , parent = parent 98 , title = u"Übersetzungen anzeigen/bearbeiten." 99 , dbVerbindung = dbVerbindung ) 100 101 # 102 # -- Namen setzen (somit Klasse / Objekt erkennen) -------------------------- 103 # 104 self.SetName( name = "BearbeiteUebersetzung" ) 105 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.notizen = notizen 116 self.notizenStart = notizen # >notizen< beim Öffnen des Fensters 117 118 119 120 # 121 # -- Übersetzungsvarianten -------------------------------------------------- 122 # -- Objekt-Id = - -------------------------------------------------- 123 # 124 self.ListBox__Uebersetzungsvarianten = FlexGridSizerWxObjTitel( parent = self 125 , wxObj = ListBoxErg( self 126 , size = ( -1, 150 ) 127 , style = wx.BORDER_SUNKEN | wx.LB_SORT 128 , Statusleiste = self.Statusleiste ) 129 , titel = u"Übersetzungsvarianten" 130 , orient = wx.VERTICAL ) 131 132 self.ListBox__Uebersetzungsvarianten.wxObjekt.nimmWerteStatusleiste( 133 DBSpNameErlaeuterung = u"Alle Übersetzungen zur aktuellen Übersetzungsvariante." 134 , DBSpName = "..." ) 135 136 self.ListBox__Uebersetzungsvarianten.wxObjekt.SetBackgroundColour( wx.NamedColour( farbeAuswahlListe ) ) 137 138 self.Bind( wx.EVT_LISTBOX 139 , self.__ereignisNavigation__ 140 , self.ListBox__Uebersetzungsvarianten.wxObjekt ) 141 142 143 144 145 146 # 147 # -- Sprache -------------------------------------------------- 148 # -- Objekt-Id = ???? -------------------------------------------------- 149 # 150 self.ComboBox__Sprache = FlexGridSizerWxObjTitel( parent = self 151 , wxObj = ComboBoxErg( self 152 , choices = [] 153 , style = wx.CB_DROPDOWN|wx.CB_READONLY 154 , Statusleiste = self.Statusleiste ) 155 , orient = wx.VERTICAL 156 , titel = u"Sprache:" ) 157 158 # 159 # -- Sprachen einlesen -------------------------------------------------- 160 # 161 self.dbVerbindung.init__sprSprachen( self.ComboBox__Sprache.wxObjekt ) 162 163 self.Bind( wx.EVT_COMBOBOX 164 , self.__ereignisNavigation__ 165 , self.ComboBox__Sprache.wxObjekt ) 166 167 168 169 # 170 # -- Übersetzung bearbeiten -------------------------------------------------- 171 # -- Objekt-Id = ???? -------------------------------------------------- 172 # 173 self.TextCtrlErg__Uebersetzung = FlexGridSizerWxObjTitel( parent = self 174 , wxObj = TextCtrlErg( self 175 , size = ( -1, 100 ) 176 , style = wx.TE_MULTILINE|wx.BORDER_SUNKEN 177 , Statusleiste = self.Statusleiste ) 178 , titel = u"Übersetzung bearbeiten:" 179 , orient = wx.VERTICAL ) 180 181 182 self.TextCtrlErg__Uebersetzung.wxObjekt.nimmWerteStatusleiste( 183 DBSpNameErlaeuterung = u"Die Übersetzung in der aktuell gewählten Sprache." 184 , DBSpName = "..." ) 185 186 self.Bind( wx.EVT_TEXT 187 , self.__ereignisAenderung__ 188 , self.TextCtrlErg__Uebersetzung.wxObjekt ) 189 190 191 192 # 193 # -- Kontextbezogene interne Notizen zur Übersetzungsvariante ---------- 194 # -- Objekt-Id = ???? -------------------------------------------------- 195 # 196 self.TextCtrl__KontextNotizen = FlexGridSizerWxObjTitel( parent = self 197 , wxObj = TextCtrlErg( self 198 , size = ( -1, 100 ) 199 , style = wx.TE_MULTILINE|wx.BORDER_SUNKEN 200 , Statusleiste = self.Statusleiste ) 201 , titel = u"Kontextbezogene interne Notizen zur Übersetzungsvariante:" 202 , orient = wx.VERTICAL ) 203 204 self.Bind( wx.EVT_TEXT 205 , self.__ereignisAenderung__ 206 , self.TextCtrl__KontextNotizen.wxObjekt ) 207 208 209 # 210 # -- es sind keine internen Notizen zu bearbeiten -------------------------- 211 # 212 if( self.notizen is None ) : 213 214 self.notizen = zk.gibZk( "" ) 215 self.notizenStart = self.notizen # >notizen< beim Öffnen des Fensters 216 217 self.TextCtrl__KontextNotizen.wxObjekt.Enable( False ) 218 219 220 221 # 222 # -- Layout setzen ---------------------------------------------------------- 223 # 224 FlexGridSizer = wx.FlexGridSizer( rows = 4, cols = 1, vgap = 5, hgap = 0 ) 225 226 FlexGridSizer.AddGrowableCol( idx = 0, proportion = 1 ) 227 FlexGridSizer.AddGrowableRow( idx = 0, proportion = 1 ) 228 229 FlexGridSizer.Add( self.ListBox__Uebersetzungsvarianten, flag = wx.EXPAND ) 230 FlexGridSizer.Add( self.ComboBox__Sprache, flag = wx.EXPAND ) 231 FlexGridSizer.Add( self.TextCtrlErg__Uebersetzung, flag = wx.EXPAND ) 232 FlexGridSizer.Add( self.TextCtrl__KontextNotizen, flag = wx.EXPAND ) 233 234 235 # 236 # -- In das Eingabeformular übernehmen ---------------------------------- 237 # 238 self.nimmDialogElemente( FlexGridSizer ) 239 240 241 # 242 # -- Eingabeobjekte initialisieren / auswählen -------------------------- 243 # 244 self.__spezAktionenVerwerfen__()
245 246 247 248 249 250 # 251 # ------------------------------------------------------------------------------------ 252 # -- Innerhalb der verfügbaren Übersetzungen / Sprachen navigieren ---------- 253 # ------------------------------------------------------------------------------------ 254 #
255 - def __ereignisNavigation__( self, ereignis = None ):
256 """ 257 Innerhalb der verfügbaren Übersetzungen / Sprachen navigieren. Die entsprechende Sicherheitsanforderung wird in das Objekt zur Textbearbeitung eingetragen. 258 259 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 260 @type ereignis: C{wx - Ereignisobjekt} 261 """ 262 263 264 # 265 # -- Es gibt nichts zu bearbeiten ------------------------------------------ 266 # 267 if( self.ListBox__Uebersetzungsvarianten.wxObjekt.IsEmpty() 268 or self.ComboBox__Sprache.wxObjekt.IsEmpty() ) : 269 270 return 271 272 273 274 # 275 # -- Änderungen übernehmen -------------------------------------------------- 276 # 277 if( self.TextCtrlErg__Uebersetzung.wxObjekt.istBenutzerAenderungJetzt ) : 278 279 if( self.aktLfdNr_Uebersetzungsvarianten is not None ) : 280 281 self.ListBox__Uebersetzungsvarianten.wxObjekt.SetString( 282 self.aktLfdNr_Uebersetzungsvarianten 283 , zk.gibZk( zk = self.TextCtrlErg__Uebersetzung.wxObjekt.gibWert() 284 , leerZkAlternativ = self.TextCtrlErg__Uebersetzung.wxObjekt.wertNichtMod[0] ) ) 285 286 else : 287 288 self.ListBox__Uebersetzungsvarianten.wxObjekt.nimmWert( 289 wert = zk.gibZk( zk = self.TextCtrlErg__Uebersetzung.wxObjekt.gibWert() 290 , leerZkAlternativ = self.TextCtrlErg__Uebersetzung.wxObjekt.wertNichtMod[0] ) 291 , clientData = [self.aktSprSprachenId] ) 292 293 self.__schreibDB__() 294 295 self.TextCtrlErg__Uebersetzung.wxObjekt.istBenutzerAenderungJetzt = False 296 297 298 299 # 300 # -- Sicherheitsanforderung in 'Übersetzungsvarianten' gewählt ---------- 301 # 302 if( ereignis is not None 303 and ereignis.GetId() == self.ListBox__Uebersetzungsvarianten.wxObjekt.GetId() ) : 304 305 # 306 # -- Sprache setzen -------------------------------------------------- 307 # 308 self.aktLfdNr_Uebersetzungsvarianten = self.ListBox__Uebersetzungsvarianten.wxObjekt.GetSelection() 309 310 self.ComboBox__Sprache.wxObjekt.selektiereWert( 311 clientDataId = self.ListBox__Uebersetzungsvarianten.wxObjekt.gibClientData( 312 lfdNr = self.aktLfdNr_Uebersetzungsvarianten )[0] ) 313 314 self.aktSprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 315 316 317 318 # 319 # -- Sprache gewählt -------------------------------------------------- 320 # 321 elif( ereignis is None 322 or ereignis.GetId() == self.ComboBox__Sprache.wxObjekt.GetId() ) : 323 324 # 325 # -- >spr_sprachen_id< übernehmen ---------------------------------- 326 # 327 self.aktSprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 328 329 # 330 # -- 'Übersetzungsvarianten' setzen ---------------------------------- 331 # 332 if( not self.ListBox__Uebersetzungsvarianten.wxObjekt.selektiereWert( 333 clientDataId = self.ComboBox__Sprache.wxObjekt.gibClientData() ) ) : 334 335 self.aktLfdNr_Uebersetzungsvarianten = None 336 337 338 339 # 340 # -- 'Übersetzung bearbeiten' -------------------------- 341 # -- Text aus 'Übersetzungsvarianten' übernehmen -------------------------- 342 # 343 if( ereignis is not None ) : 344 self.TextCtrlErg__Uebersetzung.wxObjekt.nimmWert( 345 wert = self.ListBox__Uebersetzungsvarianten.wxObjekt.gibWert() ) 346 347 348 349 # 350 # -- Kontextbezogene interne Notizen zur Übersetzungsvariante ---------- 351 # -- Text übernehmen ---------- 352 # 353 self.notizen = self.TextCtrl__KontextNotizen.wxObjekt.gibWert()
354 355 356 357 358 # 359 # ------------------------------------------------------------------------------------ 360 # -- Datenbank schreiben -------------------------------------------------- 361 # ------------------------------------------------------------------------------------ 362 #
363 - def __schreibDB__( self ):
364 """ 365 Methode die aufgerufen wird, wenn die Änderungen in die Datenbank geschrieben werden sollen. 366 367 @param ereignis: Es ist das C{wx - Ereignisobjekt} zur Ereignisbehandlung zu übergeben. 368 @type ereignis: C{wx - Ereignisobjekt} 369 """ 370 371 # 372 # -- Datenbank aktualisieren ------------------------------------------ 373 # 374 self.sprUebvarId = self.dbVerbindung.schreibe__sprUebvar( 375 ListBoxErg = self.ListBox__Uebersetzungsvarianten.wxObjekt 376 , sprUebvarId = self.sprUebvarId 377 , istMehrfachVerw = self.sprUebvarIdMehrfachVerw ) 378 379 380 # 381 # -- spätestens nach dem ersten Schreiben wird die >spr_uebvar_id< ---------- 382 # -- nicht mehrfach verwendet ---------- 383 # 384 self.sprUebvarIdMehrfachVerw = False
385 386 387 388 389 # 390 # ------------------------------------------------------------------------------------ 391 # -- Speichern ---------------------------------------------------------- 392 # ------------------------------------------------------------------------------------ 393 #
394 - def __spezAktionenSpeichern__( self ):
395 """ 396 Methode die in der abgeleiteten Klasse überschrieben wird, um spezifische Aktionen beim Speichern der Änderungen auszuführen. 397 """ 398 399 # 400 # -- Änderungen im Fenster / Datenbank übernehmen -------------------------- 401 # 402 self.__ereignisNavigation__()
403 404 405 406 407 # 408 # ------------------------------------------------------------------------------------ 409 # -- Verwerfen ---------------------------------------------------------- 410 # ------------------------------------------------------------------------------------ 411 #
412 - def __spezAktionenVerwerfen__( self ):
413 """ 414 Methode die in der abgeleiteten Klasse überschrieben wird, um spezifische Aktionen beim Verwerfen der Änderungen auszuführen. 415 """ 416 417 # 418 # -- prüfen, ob >self.sprUebvarId< mehrfach verwendet wird ------------------ 419 # 420 self.sprUebvarIdMehrfachVerw = self.dbVerbindung.istIdMehrfachVerwendet( zielSpalte = 'spr.uebvar.id' 421 , dbId = self.sprUebvarIdStart ) 422 423 424 # 425 # -- 'Übersetzungsvarianten' neu initialisieren -------------------------- 426 # 427 self.ListBox__Uebersetzungsvarianten.wxObjekt.loescheAlles() 428 429 self.dbVerbindung.selektiere__sprWgruppe( wxListBox = self.ListBox__Uebersetzungsvarianten.wxObjekt 430 , sprUebvarId = self.sprUebvarIdStart ) 431 432 self.ListBox__Uebersetzungsvarianten.wxObjekt.selektiereWert( 433 clientDataId = self.dbVerbindung.filter__spr_sprachen_id ) 434 435 self.aktLfdNr_Uebersetzungsvarianten = self.ListBox__Uebersetzungsvarianten.wxObjekt.GetSelection() 436 437 438 # 439 # -- Sprache auswählen -------------------------------------------------- 440 # 441 self.ComboBox__Sprache.wxObjekt.selektiereWert( clientDataId = self.dbVerbindung.filter__spr_sprachen_id ) 442 443 self.aktSprSprachenId = self.ComboBox__Sprache.wxObjekt.gibClientData() 444 445 446 447 # 448 # -- 'Übersetzung bearbeiten' ------------------------------------------ 449 # 450 self.TextCtrlErg__Uebersetzung.wxObjekt.nimmWert( wert = self.ListBox__Uebersetzungsvarianten.wxObjekt.gibWert() ) 451 452 453 # 454 # -- 'Kontextbezogene interne Notizen' ---------------------------------- 455 # 456 self.TextCtrl__KontextNotizen.wxObjekt.nimmWert( wert = self.notizenStart )
457 458 459 460 461 # 462 # ------------------------------------------------------------------------------------ 463 # -- Es werden die veränderbaren Werte zurückgegeben -------------------------- 464 # ------------------------------------------------------------------------------------ 465 #
466 - def gibWerte( self ):
467 """ 468 Es wird der Änderungszustand (wenn Änderungen vorliegen C{True}), die veränderbaren Werte C{spr_uebvar_id} und C{notizen} zurückgegeben. 469 470 @return: Es wird C{[spr_uebvar_id, notizen]} zurückgegeben. 471 @rtype: Python-Liste 472 """ 473 474 return [self.gibAenderung(), self.sprUebvarId, self.notizen]
475