Version française
Home     About     Download     Resources     Contact us    
Browse thread
Does LablTk have a future?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Damien Bobillot <damien.bobillot@m...>
Subject: Re: [Caml-list] Re: Feeding the OCaml GUI troll

--Apple-Mail-34--739913102
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	delsp=yes;
	format=flowed

skaller wrote :

> IMHO the *key* problem with GUI's -- and why real (TM) developers
> hate using them -- is the lack of automation: unix script
> sucks, but it does provide automation. If we're going to make
> a new GUI it has to have full automation capability.

I totally agree : in software development, GUI programming is one of  
the most boring phases. According to my experience, the main issue is  
GUI to core program communication, you have to :
- programmatically get pointers to hundreds of GUI elements
- programmatically install event callbacks for the same widgets
- programmatically keep GUI element contents in synchronization with  
internal variables

All this stuff is very easy to do, but often long, boring.  
Fortunately, you don't any more need to programmatically define your  
widgets (and their attributes, position), thanks to WYSIWYG GUI  
creation tools (Qtdesigner for Qt, Apple's Interface Builder, Visual  
Studio...).

I think, the good idea is the automation of all this work. I'll give  
the solutions retained by Apple for Interface Builder :
- the global variables/class member containing reference to widgets  
are automatically set-up. You just have to define them in your code  
and tell the GUI creation tool to which widgets each variables is  
bind to.
- the user directly define the callbacks function in the GUI editor  
tool : you just have to give the name of the callback function.
- any class member may be bind to the content of a widget : if the  
user types characters in a text field, the matching class member (a  
variable of type string) is automatically updated to contain the  
newly typed characters. If the programmer modify the value of this  
variable, the text field is automatically updated to the new value of  
the variable. Several widgets may be bond to one variable, several  
variable to one widget, and even a variable/widget may be bond
to a file entry to enable persistent storage of the value (it's used  
for user preference storage). It's also possible to create  
transformers in order to do some type convertion when you use, for  
instance, a text field bond to a integer variable.

I don't know if it is implementable in ocaml as is, or if it is  
really the good solution (it has been designed for the Objective-C  
language, using some of its very particular features). However, I  
think it gives a good idea of what is missing in current GUI APIs and  
GUI creation tools.

Apple explanation of bindings :
http://developer.apple.com/cocoa/cocoabindings.html

-- 
Damien alias Schmurtz
aim:goim?screenname=schmuuurtz


--Apple-Mail-34--739913102
Content-Transfer-Encoding: base64
Content-Type: application/pkcs7-signature;
	name=smime.p7s
Content-Disposition: attachment;
	filename=smime.p7s

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGIjCCAtsw
ggJEoAMCAQICAw54xzANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh
d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt
YWlsIElzc3VpbmcgQ0EwHhcNMDUwNDEzMTc1MTAxWhcNMDYwNDEzMTc1MTAxWjBJMR8wHQYDVQQD
ExZUaGF3dGUgRnJlZW1haWwgTWVtYmVyMSYwJAYJKoZIhvcNAQkBFhdkYW1pZW4uYm9iaWxsb3RA
bTR4Lm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ1TOYBqwJ42s0Fzz56jY1p0
fplGyikFgoNEUKGnOpqt4vpeoqUppAnORt2yvdQJxfIkhsWkrD/diiPS7MTF73wcxlSJtqYzVzPK
G/2WDm6dBinuWCIyWYFhtGedyxbap3kJW44H7cL7HUVVxZ0JhOIOTsjCoEzaeKnML7bctbIJeXEE
lErfbDv2jA1PDG1ru5dx+Q+AmbexX92ygnntE6aX3QZLSbhrytg4yCRdV8cOyQ9eFruZBI42RJv3
nJXevjUOr4n+y/7bzijAJj4BFyUU+dllvj6bmk5brnUXheCSOD0Ci20dqGNC1MyJ43b6MoIrbW7j
JwYIv12D6KuWoaUCAwEAAaM0MDIwIgYDVR0RBBswGYEXZGFtaWVuLmJvYmlsbG90QG00eC5vcmcw
DAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQQFAAOBgQB0u5b6wgwsbcyzDHJTzshlCn4gshxWtU/1
mH77gBCpsY8L554YV4/Tvm1PzmDzErm++drQf5HMy8sEFjmwLvNfBP0BqtkSqsdRFGR4wHzTjMhS
EW5LgmlaccqBQzqQrANtzglgBVbtmBDAV92qHjQslwHK4FohCRRzGl4DLQmqBDCCAz8wggKooAMC
AQICAQ0wDQYJKoZIhvcNAQEFBQAwgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
cGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNV
BAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJz
b25hbCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3Rl
LmNvbTAeFw0wMzA3MTcwMDAwMDBaFw0xMzA3MTYyMzU5NTlaMGIxCzAJBgNVBAYTAlpBMSUwIwYD
VQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVyc29u
YWwgRnJlZW1haWwgSXNzdWluZyBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxKY8VXNV
+065yplaHmjAdQRwnd/p/6Me7L3N9VvyGna9fww6YfK/Uc4B1OVQCjDXAmNaLIkVcI7dyfArhVqq
P3FWy688Cwfn8R+RNiQqE88r1fOCdz0Dviv+uxg+B79AgAJk16emu59l0cUqVIUPSAR/p7bRPGEE
QB5kGXJgt/sCAwEAAaOBlDCBkTASBgNVHRMBAf8ECDAGAQH/AgEAMEMGA1UdHwQ8MDowOKA2oDSG
Mmh0dHA6Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVQZXJzb25hbEZyZWVtYWlsQ0EuY3JsMAsGA1Ud
DwQEAwIBBjApBgNVHREEIjAgpB4wHDEaMBgGA1UEAxMRUHJpdmF0ZUxhYmVsMi0xMzgwDQYJKoZI
hvcNAQEFBQADgYEASIzRUIPqCy7MDaNmrGcPf6+svsIXoUOWlJ1/TCG4+DYfqi2fNi/A9BxQIJNw
PP2t4WFiw9k6GX6EsZkbAMUaC4J0niVQlGLH2ydxVyWN3amcOY6MIE9lX5Xa9/eH1sYITq726jTl
EBpbNU1341YheILcIRk13iSx0x1G/11fZU8xggLnMIIC4wIBATBpMGIxCzAJBgNVBAYTAlpBMSUw
IwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQDEyNUaGF3dGUgUGVy
c29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIDDnjHMAkGBSsOAwIaBQCgggFTMBgGCSqGSIb3DQEJ
AzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA1MDkwMzEwMzQxOFowIwYJKoZIhvcNAQkE
MRYEFCWG8NC00nZDqgn7iOr+KbfkMEH9MHgGCSsGAQQBgjcQBDFrMGkwYjELMAkGA1UEBhMCWkEx
JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ
ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAgMOeMcwegYLKoZIhvcNAQkQAgsxa6BpMGIxCzAJ
BgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29uc3VsdGluZyAoUHR5KSBMdGQuMSwwKgYDVQQD
EyNUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgSXNzdWluZyBDQQIDDnjHMA0GCSqGSIb3DQEBAQUA
BIIBAFPSKfQ2qRDvvBJ/hfs3GP9MEHOGBNFilWEPo4YLBYO6N09HxDtUdb8HYN9q6oC4LEtQbA2A
RI4d3i3ZDhCyyf+9sZXAjcZTeWFQM/Y6VhSCaPk/OswQji3uwPS2Shr3JElgvaqYn/gZMa7wenrl
znGXPLNgbCDIo6SgV7WkdvBmeMtPJeCp+QY56dQ7MP2bvVmvWKY1mp2eDMYDCAYDNzPBkySgEtRd
3aO3xnEyRSzvnvIYFy41lmI3FlVra5Fszbu8Br7M0ikFJCp1bqPUnTAxcweB+phYVmeDZ3gZUUhN
K2Nyn789nuOmVtQaJUyPEydTtMDr2iRUwVWL6D8++6sAAAAAAAA=

--Apple-Mail-34--739913102--