----boundary-LibPST-iamunique-802799868_-_-
Content-type: text/plain
Hallo Bernhard,
vielen Dank für Deine Antwort zu diesem Thema. Bin bis jetzt leider nicht dazugekommen, das Thema ganz abzuschliessen, konnte aber das Problem wesentlich vereinfachen. Anstatt ein von mir erzeugtes Fenster zu beschreiben, verwende ich StdLog; dessen Fenster wird bei Schreibzugriffen NICHT zum Focus.
Auf meiner GUI habe ich neben einigen Buttons und dem EditField, das programmatisch gesteuert den Focus erhalten soll, auch ein TabView mit mehreren Tabs. Diese erhalten ihrerseits Views, in welchen Controls enthalten sind.
Habe den Code von ObxContIter verwendet, um zu bestimmten Zeitpunkten dem EditField den Focus zuzuordnen. Da ich zuvor Ausgaben auf das TabView geschrieben hatte, und daher das TabView den Focus innehatte, konnte der anschliessend aufgerufene Code von ObxContIter das Edit Field nicht finden, um ihm den Focus zuzuordnen, da sich das EditField nicht auf dem TabView befand.
Habe einige Zeit gebraucht, bis ich gemerkt habe, dass ich zu Beginn des Programms den Code von ObxContIter laufen lassen muss, solange das EditField auffindbar ist, und mir den in der ersten Zeile ( c := Containers.Focus () ) ermittelten Containers.Controller merken muss, um ihn zu verwenden, wenn das TabView den Focus hat ...
Jetzt funktioniert die Eingabe in das EditField wie geplant, ohne vorher mit der Maus in das EditField klicken zu müssen. Als kleiner Schönheitsfehler bleibt, dass der blinkende Cursor nicht im EditField erscheint, sobald dieses den Focus hat. Evtl. hängt das damit zusammen, dass es einen front focus path und einen target focus path gibt, wie in der Docu zu Modul Controllers beschrieben. Habe aber dieses Konzept leider nicht im geringsten verstanden ...
Jedenfalls nochmals danke für deine Antwort und gesegnete Feiertage für Dich und Deine Familie
Viele Grüsse,
Rainer
Am 08.12.2011 um 10:21 schrieb Treutwein Bernhard:
> Hallo,
>
> since nobody replies ... It is not really clear to me, why your program
> fragment hits a "precondition violated trap 22", to be honest, I don't
> have any idea what this precondition means:
> focus.context.ThisModel() = c.ThisModel()
>
> But: you could give Martin Fishers Output a try. Iit is available from
> CPC (see
http://zinnamturm.eu/downloadsOS.htm#Output) and it appears to
> me that it should provide what you are trying to solve ...
>
> regards
> --
> Bernhard Treutwein
> Ludwig-Maximilians-Universität
> Ref. VI.3 Anwendungsbetreuung
> Martiusstr. 4/I Raum 107
> 80802 München
> Tel. 089 2180-2774
> Fax. 089 2180-992774
> Mobil. 0152-01549335
> e-mail: bernhard treutwein (at) verwaltung uni-muenchen de
>
>
>> -----Original Message-----
>> From: BlackBox [mailto:BLACKBOX{([at]})nowhere.xy>> Rainer Neubauer
>> Sent: Monday, December 05, 2011 7:04 PM
>> To: BLACKBOX{([at]})nowhere.xy>> Subject: [BLACKBOX] Writing to text view while maintaining the focus
>>
>>
>> Hi all,
>>
>> I have some small procedures for showing a text view and
>> writing text to it programmatically.
>> Problem: after write access to the view and update the view
>> gets the focus.
>> What should I do to have the focus not changed by writing to
>> and updating the text view ?
>>
>> Please find the involved procedures below:
>>
>> TYPE
>> TerminalDesc* = LIMITED RECORD
>> width, height: INTEGER;
>> title: POINTER TO ARRAY OF CHAR;
>> f: TextMappers.Formatter;
>> m: TextModels.Model
>> END;
>>
>> Terminal* = POINTER TO TerminalDesc;
>>
>>
>> PROCEDURE Create* (IN title: ARRAY OF CHAR; width, height:
>> INTEGER): Terminal;
>> VAR
>> newObject: Terminal;
>> BEGIN
>> NEW (newObject);
>> newObject.width := width;
>> newObject.height := height;
>> NEW (newObject.title, LEN (title$) + 1);
>> newObject.title^ := title$;
>> newObject.m := TextModels.dir.New ();
>> newObject.f.ConnectTo (newObject.m);
>> RETURN newObject
>> END Create;
>>
>> PROCEDURE Flush (terminal: Terminal);
>> VAR
>> pos: INTEGER;
>> c: Containers.Controller;
>> v: Views.View;
>> BEGIN
>> c := Containers.Focus ();
>> v := c.ThisView ();
>> Views.RestoreDomain (terminal.m.Domain ()); (* update display
>> right now *)
>> pos := terminal.m.Length();
>> TextViews.ShowRange (terminal.m, pos, pos, TextViews.any); (*
>> show end of text *)
>> TextControllers.SetCaret (terminal.m, pos); (* position
>> cursor at end of text *)
>> c.SetFocus (v) (* maintain focus view prior to writing *)
>> END Flush;
>>
>>
>> Procedure Flush writes to and updates the text view. To
>> restore the focus I added the bold lines but the last line traps.
>> Do I require to modify the bold lines ?
>> Would you recommend to use a totally different approach for
>> writing and updating a text view just for logging purposes ?
>>
>> Thanks in advance for any hints.
>> Best regards,
>> Rainer
>>
>>
>>
>> ---- To unsubscribe, send a message with body "SIGNOFF
>> BLACKBOX" to LISTSERV{([at]})nowhere.xy>>
>
>
> ----
> To unsubscribe, send a message with body "SIGNOFF BLACKBOX" to LISTSERV{([at]})nowhere.xy
----boundary-LibPST-iamunique-802799868_-_-
Content-type: application/rtf
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="rtf-body.rtf"
e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZnJvbXRleHQgXGRlZmYwe1xmb250dGJsDQp7XGYwXGZz
d2lzc1xmY2hhcnNldDAgQXJpYWw7fQ0Ke1xmMVxmbW9kZXJuIENvdXJpZXIgTmV3O30NCntcZjJc
Zm5pbFxmY2hhcnNldDIgU3ltYm9sO30NCntcZjNcZm1vZGVyblxmY2hhcnNldDAgQ291cmllciBO
ZXc7fX0NCntcY29sb3J0YmxccmVkMFxncmVlbjBcYmx1ZTA7XHJlZDBcZ3JlZW4wXGJsdWUyNTU7
fQ0KXHVjMVxwYXJkXHBsYWluXGRlZnRhYjM2MCBcZjBcZnMyMCBIYWxsbyBCZXJuaGFyZCxccGFy
DQp2aWVsZW4gRGFuayBmXCdmY3IgRGVpbmUgQW50d29ydCB6dSBkaWVzZW0gVGhlbWEuIEJpbiBi
aXMgamV0enQgbGVpZGVyIG5pY2h0IGRhenVnZWtvbW1lbiwgZGFzIFRoZW1hIGdhbnogYWJ6dXNj
aGxpZXNzZW4sIGtvbm50ZSBhYmVyIGRhcyBQcm9ibGVtIHdlc2VudGxpY2ggdmVyZWluZmFjaGVu
LiBBbnN0YXR0IGVpbiB2b24gbWlyIGVyemV1Z3RlcyBGZW5zdGVyIHp1IGJlc2NocmVpYmVuLCB2
ZXJ3ZW5kZSBpY2ggU3RkTG9nOyBkZXNzZW4gRmVuc3RlciB3aXJkIGJlaSBTY2hyZWlienVncmlm
ZmVuIE5JQ0hUIHp1bSBGb2N1cy5ccGFyDQpccGFyDQpBdWYgbWVpbmVyIEdVSSBoYWJlIGljaCBu
ZWJlbiBlaW5pZ2VuIEJ1dHRvbnMgdW5kIGRlbSBFZGl0RmllbGQsIGRhcyBwcm9ncmFtbWF0aXNj
aCBnZXN0ZXVlcnQgZGVuIEZvY3VzIGVyaGFsdGVuIHNvbGwsIGF1Y2ggZWluIFRhYlZpZXcgbWl0
IG1laHJlcmVuIFRhYnMuIERpZXNlIGVyaGFsdGVuIGlocmVyc2VpdHMgVmlld3MsIGluIHdlbGNo
ZW4gQ29udHJvbHMgZW50aGFsdGVuIHNpbmQuXHBhcg0KXHBhcg0KSGFiZSBkZW4gQ29kZSB2b24g
T2J4Q29udEl0ZXIgdmVyd2VuZGV0LCB1bSB6dSBiZXN0aW1tdGVuIFplaXRwdW5rdGVuIGRlbSBF
ZGl0RmllbGQgZGVuIEZvY3VzIHp1enVvcmRuZW4uIERhIGljaCB6dXZvciBBdXNnYWJlbiBhdWYg
ZGFzIFRhYlZpZXcgZ2VzY2hyaWViZW4gaGF0dGUsIHVuZCBkYWhlciBkYXMgVGFiVmlldyBkZW4g
Rm9jdXMgaW5uZWhhdHRlLCBrb25udGUgZGVyIGFuc2NobGllc3NlbmQgYXVmZ2VydWZlbmUgQ29k
ZSB2b24gT2J4Q29udEl0ZXIgZGFzIEVkaXQgRmllbGQgbmljaHQgZmluZGVuLCB1bSBpaG0gZGVu
IEZvY3VzIHp1enVvcmRuZW4sIGRhIHNpY2ggZGFzIEVkaXRGaWVsZCBuaWNodCBhdWYgZGVtIFRh
YlZpZXcgYmVmYW5kLlxwYXINClxwYXINCkhhYmUgZWluaWdlIFplaXQgZ2VicmF1Y2h0LCBiaXMg
aWNoIGdlbWVya3QgaGFiZSwgZGFzcyBpY2ggenUgQmVnaW5uIGRlcyBQcm9ncmFtbXMgZGVuIENv
ZGUgdm9uIE9ieENvbnRJdGVyIGxhdWZlbiBsYXNzZW4gbXVzcywgc29sYW5nZSBkYXMgRWRpdEZp
ZWxkIGF1ZmZpbmRiYXIgaXN0LCB1bmQgbWlyIGRlbiBpbiBkZXIgZXJzdGVuIFplaWxlICggIGMg
Oj0gQ29udGFpbmVycy5Gb2N1cyAoKSAgKSBlcm1pdHRlbHRlbiBDb250YWluZXJzLkNvbnRyb2xs
ZXIgbWVya2VuIG11c3MsIHVtIGlobiB6dSB2ZXJ3ZW5kZW4sIHdlbm4gZGFzIFRhYlZpZXcgZGVu
IEZvY3VzIGhhdCAuLi5ccGFyDQpccGFyDQpccGFyDQpKZXR6dCBmdW5rdGlvbmllcnQgZGllIEVp
bmdhYmUgaW4gZGFzIEVkaXRGaWVsZCB3aWUgZ2VwbGFudCwgb2huZSB2b3JoZXIgbWl0IGRlciBN
YXVzIGluIGRhcyBFZGl0RmllbGQga2xpY2tlbiB6dSBtXCdmY3NzZW4uIEFscyBrbGVpbmVyIFNj
aFwnZjZuaGVpdHNmZWhsZXIgYmxlaWJ0LCBkYXNzIGRlciBibGlua2VuZGUgQ3Vyc29yIG5pY2h0
IGltIEVkaXRGaWVsZCBlcnNjaGVpbnQsIHNvYmFsZCBkaWVzZXMgZGVuIEZvY3VzIGhhdC4gRXZ0
bC4gaFwnZTRuZ3QgZGFzIGRhbWl0IHp1c2FtbWVuLCBkYXNzIGVzIGVpbmVuIGZyb250IGZvY3Vz
IHBhdGggdW5kIGVpbmVuIHRhcmdldCBmb2N1cyBwYXRoIGdpYnQsIHdpZSBpbiBkZXIgRG9jdSB6
dSBNb2R1bCBDb250cm9sbGVycyBiZXNjaHJpZWJlbi4gSGFiZSBhYmVyIGRpZXNlcyBLb256ZXB0
IGxlaWRlciBuaWNodCBpbSBnZXJpbmdzdGVuIHZlcnN0YW5kZW4gLi4uXHBhcg0KXHBhcg0KXHBh
cg0KSmVkZW5mYWxscyBub2NobWFscyBkYW5rZSBmXCdmY3IgZGVpbmUgQW50d29ydCB1bmQgZ2Vz
ZWduZXRlIEZlaWVydGFnZSBmXCdmY3IgRGljaCB1bmQgRGVpbmUgRmFtaWxpZVxwYXINClxwYXIN
ClZpZWxlIEdyXCdmY3NzZSxccGFyDQpSYWluZXJccGFyDQpccGFyDQpBbSAwOC4xMi4yMDExIHVt
IDEwOjIxIHNjaHJpZWIgVHJldXR3ZWluIEJlcm5oYXJkOlxwYXINClxwYXINCj4gSGFsbG8sXHBh
cg0KPiBccGFyDQo+IHNpbmNlIG5vYm9keSByZXBsaWVzIC4uLiBJdCBpcyBub3QgcmVhbGx5IGNs
ZWFyIHRvIG1lLCB3aHkgeW91ciBwcm9ncmFtXHBhcg0KPiBmcmFnbWVudCBoaXRzIGEgInByZWNv
bmRpdGlvbiB2aW9sYXRlZCB0cmFwIDIyIiwgdG8gYmUgaG9uZXN0LCBJIGRvbid0XHBhcg0KPiBo
YXZlIGFueSBpZGVhIHdoYXQgdGhpcyBwcmVjb25kaXRpb24gbWVhbnM6XHBhcg0KPiBcdGFiIGZv
Y3VzLmNvbnRleHQuVGhpc01vZGVsKCkgPSBjLlRoaXNNb2RlbCgpXHRhYiBccGFyDQo+IFxwYXIN
Cj4gQnV0OiB5b3UgY291bGQgZ2l2ZSBNYXJ0aW4gRmlzaGVycyBPdXRwdXQgYSB0cnkuIElpdCBp
cyBhdmFpbGFibGUgZnJvbVxwYXINCj4gQ1BDIChzZWUgaHR0cDovL3ppbm5hbXR1cm0uZXUvZG93
bmxvYWRzT1MuaHRtI091dHB1dCkgYW5kIGl0IGFwcGVhcnMgdG8gXHBhcg0KPiBtZSB0aGF0IGl0
IHNob3VsZCBwcm92aWRlIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gc29sdmUgLi4uXHBhcg0KPiBc
cGFyDQo+IHJlZ2FyZHNccGFyDQo+IC0tXHBhcg0KPiAgQmVybmhhcmQgVHJldXR3ZWluXHBhcg0K
PiAgTHVkd2lnLU1heGltaWxpYW5zLVVuaXZlcnNpdFwnZTR0XHBhcg0KPiAgUmVmLiBWSS4zIEFu
d2VuZHVuZ3NiZXRyZXV1bmdccGFyDQo+ICBNYXJ0aXVzc3RyLiA0L0kgUmF1bSAxMDdccGFyDQo+
ICA4MDgwMiBNXCdmY25jaGVuXHBhcg0KPiAgVGVsLiAwODkgMjE4MC0yNzc0XHBhcg0KPiAgRmF4
LiAwODkgMjE4MC05OTI3NzRccGFyDQo+ICBNb2JpbC4gMDE1Mi0wMTU0OTMzNVxwYXINCj4gIGUt
bWFpbDogYmVybmhhcmQgdHJldXR3ZWluIChhdCkgdmVyd2FsdHVuZyB1bmktbXVlbmNoZW4gZGVc
cGFyDQo+IFxwYXINCj4gXHBhcg0KPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS1ccGFyDQo+
PiBGcm9tOiBCbGFja0JveCBbbWFpbHRvOkJMQUNLQk9YQExJU1RTLk9CRVJPTi5DSF0gT24gQmVo
YWxmIE9mIFxwYXINCj4+IFJhaW5lciBOZXViYXVlclxwYXINCj4+IFNlbnQ6IE1vbmRheSwgRGVj
ZW1iZXIgMDUsIDIwMTEgNzowNCBQTVxwYXINCj4+IFRvOiBCTEFDS0JPWEBMSVNUUy5PQkVST04u
Q0hccGFyDQo+PiBTdWJqZWN0OiBbQkxBQ0tCT1hdIFdyaXRpbmcgdG8gdGV4dCB2aWV3IHdoaWxl
IG1haW50YWluaW5nIHRoZSBmb2N1c1xwYXINCj4+IFxwYXINCj4+IFxwYXINCj4+IEhpIGFsbCxc
cGFyDQo+PiBccGFyDQo+PiBJIGhhdmUgc29tZSBzbWFsbCBwcm9jZWR1cmVzIGZvciBzaG93aW5n
IGEgdGV4dCB2aWV3IGFuZCBccGFyDQo+PiB3cml0aW5nIHRleHQgdG8gaXQgcHJvZ3JhbW1hdGlj
YWxseS5ccGFyDQo+PiBQcm9ibGVtOiBhZnRlciB3cml0ZSBhY2Nlc3MgdG8gdGhlIHZpZXcgYW5k
IHVwZGF0ZSB0aGUgdmlldyBccGFyDQo+PiBnZXRzIHRoZSBmb2N1cy5ccGFyDQo+PiBXaGF0IHNo
b3VsZCBJIGRvIHRvIGhhdmUgdGhlIGZvY3VzIG5vdCBjaGFuZ2VkIGJ5IHdyaXRpbmcgdG8gXHBh
cg0KPj4gYW5kIHVwZGF0aW5nIHRoZSB0ZXh0IHZpZXcgP1xwYXINCj4+IFxwYXINCj4+IFBsZWFz
ZSBmaW5kIHRoZSBpbnZvbHZlZCBwcm9jZWR1cmVzIGJlbG93OlxwYXINCj4+IFxwYXINCj4+IFRZ
UEVccGFyDQo+PiBUZXJtaW5hbERlc2MqID0gTElNSVRFRCBSRUNPUkRccGFyDQo+PiB3aWR0aCwg
aGVpZ2h0OiBJTlRFR0VSO1xwYXINCj4+IHRpdGxlOiBQT0lOVEVSIFRPIEFSUkFZIE9GIENIQVI7
XHBhcg0KPj4gZjogVGV4dE1hcHBlcnMuRm9ybWF0dGVyO1xwYXINCj4+IG06IFRleHRNb2RlbHMu
TW9kZWxccGFyDQo+PiBFTkQ7XHBhcg0KPj4gXHBhcg0KPj4gVGVybWluYWwqID0gUE9JTlRFUiBU
TyBUZXJtaW5hbERlc2M7XHBhcg0KPj4gXHBhcg0KPj4gXHBhcg0KPj4gUFJPQ0VEVVJFIENyZWF0
ZSogKElOIHRpdGxlOiBBUlJBWSBPRiBDSEFSOyB3aWR0aCwgaGVpZ2h0OiBccGFyDQo+PiBJTlRF
R0VSKTogVGVybWluYWw7XHBhcg0KPj4gVkFSXHBhcg0KPj4gbmV3T2JqZWN0OiBUZXJtaW5hbDtc
cGFyDQo+PiBCRUdJTlxwYXINCj4+IE5FVyAobmV3T2JqZWN0KTtccGFyDQo+PiBuZXdPYmplY3Qu
d2lkdGggOj0gd2lkdGg7XHBhcg0KPj4gbmV3T2JqZWN0LmhlaWdodCA6PSBoZWlnaHQ7XHBhcg0K
Pj4gTkVXIChuZXdPYmplY3QudGl0bGUsIExFTiAodGl0bGUkKSArIDEpO1xwYXINCj4+IG5ld09i
amVjdC50aXRsZV4gOj0gdGl0bGUkO1xwYXINCj4+IG5ld09iamVjdC5tIDo9IFRleHRNb2RlbHMu
ZGlyLk5ldyAoKTtccGFyDQo+PiBuZXdPYmplY3QuZi5Db25uZWN0VG8gKG5ld09iamVjdC5tKTtc
cGFyDQo+PiBSRVRVUk4gbmV3T2JqZWN0XHBhcg0KPj4gRU5EIENyZWF0ZTtccGFyDQo+PiBccGFy
DQo+PiBQUk9DRURVUkUgRmx1c2ggKHRlcm1pbmFsOiBUZXJtaW5hbCk7XHBhcg0KPj4gVkFSXHBh
cg0KPj4gcG9zOiBJTlRFR0VSO1xwYXINCj4+IGM6IENvbnRhaW5lcnMuQ29udHJvbGxlcjtccGFy
DQo+PiB2OiBWaWV3cy5WaWV3O1xwYXINCj4+IEJFR0lOXHBhcg0KPj4gYyA6PSBDb250YWluZXJz
LkZvY3VzICgpO1xwYXINCj4+IHYgOj0gYy5UaGlzVmlldyAoKTtccGFyDQo+PiBWaWV3cy5SZXN0
b3JlRG9tYWluICh0ZXJtaW5hbC5tLkRvbWFpbiAoKSk7ICgqIHVwZGF0ZSBkaXNwbGF5IFxwYXIN
Cj4+IHJpZ2h0IG5vdyAqKVxwYXINCj4+IHBvcyA6PSB0ZXJtaW5hbC5tLkxlbmd0aCgpO1xwYXIN
Cj4+IFRleHRWaWV3cy5TaG93UmFuZ2UgKHRlcm1pbmFsLm0sIHBvcywgcG9zLCBUZXh0Vmlld3Mu
YW55KTsgKCogXHBhcg0KPj4gc2hvdyBlbmQgb2YgdGV4dCAqKVxwYXINCj4+IFRleHRDb250cm9s
bGVycy5TZXRDYXJldCAodGVybWluYWwubSwgcG9zKTsgKCogcG9zaXRpb24gXHBhcg0KPj4gY3Vy
c29yIGF0IGVuZCBvZiB0ZXh0ICopXHBhcg0KPj4gYy5TZXRGb2N1cyAodikgKCogbWFpbnRhaW4g
Zm9jdXMgdmlldyBwcmlvciB0byB3cml0aW5nICopXHBhcg0KPj4gRU5EIEZsdXNoO1xwYXINCj4+
IFxwYXINCj4+IFxwYXINCj4+IFByb2NlZHVyZSBGbHVzaCB3cml0ZXMgdG8gYW5kIHVwZGF0ZXMg
dGhlIHRleHQgdmlldy4gVG8gXHBhcg0KPj4gcmVzdG9yZSB0aGUgZm9jdXMgSSBhZGRlZCB0aGUg
Ym9sZCBsaW5lcyBidXQgdGhlIGxhc3QgbGluZSB0cmFwcy5ccGFyDQo+PiBEbyBJIHJlcXVpcmUg
dG8gbW9kaWZ5IHRoZSBib2xkIGxpbmVzID9ccGFyDQo+PiBXb3VsZCB5b3UgcmVjb21tZW5kIHRv
IHVzZSBhIHRvdGFsbHkgZGlmZmVyZW50IGFwcHJvYWNoIGZvciBccGFyDQo+PiB3cml0aW5nIGFu
ZCB1cGRhdGluZyBhIHRleHQgdmlldyBqdXN0IGZvciBsb2dnaW5nIHB1cnBvc2VzID9ccGFyDQo+
PiBccGFyDQo+PiBUaGFua3MgaW4gYWR2YW5jZSBmb3IgYW55IGhpbnRzLlxwYXINCj4+IEJlc3Qg
cmVnYXJkcyxccGFyDQo+PiBSYWluZXJccGFyDQo+PiBccGFyDQo+PiBccGFyDQo+PiBccGFyDQo+
PiAtLS0tIFRvIHVuc3Vic2NyaWJlLCBzZW5kIGEgbWVzc2FnZSB3aXRoIGJvZHkgIlNJR05PRkYg
XHBhcg0KPj4gQkxBQ0tCT1giIHRvIExJU1RTRVJWQExJU1RTLk9CRVJPTi5DSCBccGFyDQo+PiBc
cGFyDQo+IFxwYXINCj4gXHBhcg0KPiAtLS0tXHBhcg0KPiBUbyB1bnN1YnNjcmliZSwgc2VuZCBh
IG1lc3NhZ2Ugd2l0aCBib2R5ICJTSUdOT0ZGIEJMQUNLQk9YIiB0byBMSVNUU0VSVkBMSVNUUy5P
QkVST04uQ0hccGFyDQp9fQB4c2FX
----boundary-LibPST-iamunique-802799868_-_---
Received on Fri Dec 23 2011 - 15:56:28 UTC