20100729

Heute war wieder nur eine halbe Stunde für Lino übrig… aber ich habe jetzt immerhin verstanden, weshalb system.ReportColum.colname im Detail einer ReportConfig ihren Context nicht gesetzt bekommt. Lino generiert folgenden Code für before_row_edit in der Lino.system.ReportConfigs.detail():

before_row_edit: function(record){
  ReportColumn_colname_field.setContextValue('rptconfig',record.data['rptconfigHidden']);
  this.load_slavegrid(system_ColumnsByReport_grid,record);
}

Das ist grundlegend falsch. Die CSC in SlaveGrids dürfen ja nicht mit dem Master-Record verknüpft werden. lino.ui.extjsw.ext_windows.MasterWrapper.js_render() macht was falsch. Dort soll kein walk() übers main gemacht werden (das ja auch in die Kolonnen aller Slavegrids rein geht), sondern nur die direkten Comboboxen der Form verknüpfen. Stattdessen muss Lino.GridPanel auch einen before_row_edit kriegen.

20100730

14 Uhr. Check-In 1094. Super : system.ReportColum.colname im Slave-Grid des Details einer ReportConfig kriegt jetzt den Context gesetzt und lässt sich auswählen. Dazu waren noch einige Umtrukturierungen nötig:

  • before_row_edit war bisher ein config parameter des WindowWrappers. Jetzt ist es auf dem main panel (GridPanel bzw. FormPanel). Also slavegrid-panels haben nun auch ihre eigene before_row_edit.

  • Daneben wurde ja in WindowWrapper.js_render (direkt, nicht erst in before_row_edit) für alle CSCs ein Lino.chooser_handler ans change-Event der Textfelder verknüpft, die Einfluss auf den Kontext haben. Diese Operation ist ein einer Grid nicht nötig (zumindest so lange dort immer nur ein Editor auf einmal aktiv ist). Achtung, diese Operation darf erst generiert werden, wenn alle Variablen für die Textfelder generiert worden sind, weil eine CSC möglicherweise von einem Feld abhängen kann, dessen Editor nach ihr definiert wird. Deshalb ist der logische Ort dieser Operation in einem Listener aufs render-Event der Ext.Form.FormPanel. Das wird nun also in lino.ui.extjs.ext_elems.FormPanel.__init__() gemacht.

  • WindowWrapper.load_slavegrid(cmt,record) wird jetzt direkt in GridPanel.load_master_record gemacht. get_master_params ermittelt ja die Parameter mk und mt (master key und master type), die load_slavegrid braucht.

  • FormPanel und GridPanel müssen den WindowWrapper kennen, in dem sie definiert sind. Weil FormPanel.load_master_record dessen sindow.setTitle() ruft, und GridPanel.load_master_record dessen get_master_params braucht. Problem ist, dass SlaveGrids (Grid-Elemente in einem Detail) kein Attribut ww gesetzt bekommen haben, weil sie ja nicht das main_item sind. Das mach ich deshalb etwas unelegant in WindowWrapper.js_render:

    for e in self.main.walk():
        if e is not self.main and isinstance(e,ext_elems.GridElement):
            yield "%s.ww = ww;" % e.ext_name
    

20.30 Uhr : Check-In 1095. Wieder ein paar Fehler weniger:

  • Passfotos wurden nicht angezeigt,
  • Klick auf ‘remarks’ öffnete ein neues Fenster
  • bei jedem load_master_record wurde ein onclick-Handler hinzugefügt (also nach 5x next und dann click aufs Foto öffneten sich 5 Fenster)

TODO:

  • Der Bildschirmaufbau ist echt noch zu langsam. Da muss ich noch was dran tun.
  • Wenn man eine Kolonne erstellen will, kommt auf dem Server ‘IntegrityError: PRIMARY KEY must be unique’. Wahrscheinlich funktioniert INSERT in Slavegrids allgemein noch nicht.