AppController.h
AppController.m
BUGS
BUGS
BUGS
BUGS
BUGS
BUGS
ChangeLog
Doxyfile.am
Doxyfile.global
FAQ.html
GNU_Gettext.html
GNU_Gettext_GettextResourceManager.html
GNU_Gettext_GettextResourceSet.html
GNUmakefile
GNUmakefile
GettextResource.html
Hello.h
Hello.java
Hello.java
Hello.java
Hello.java
Hello.m
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
INSTALL
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LINGUAS
LocaleAliases
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.am
Makefile.common
Makevars
Makevars
Makevars
Makevars
Makevars
Makevars
Makevars
Makevars
POTFILES.in
POTFILES.in
POTFILES.in
POTFILES.in
POTFILES.in
POTFILES.in
POTFILES.in
POTFILES.in
README
README
README
Test15.class
Test15.java
TestAWT.class
TestAWT.class
TestAWT.java
TestAWT.java
acinclude.m4.in
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
af.po
allclasses-frame.html
am_edit
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
ast.po
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autoclean.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autogen.sh
autopoint.1.html
autosprintf_all.html
begin.html
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bg.po
bind_textdomain_codeset.3.html
bindtextdomain.3.html
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
ca.po
compile
conf.change.pl
config.guess
config.pl
config.sub
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.ac
configure.in.bot.end
configure.in.in
configure.in.min
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
cs.po
csharpcomp.m4
csharpcomp.sh.in
csharpexec-test.exe
csharpexec.m4
csharpexec.sh.in
cvs-clean.pl
cvs.sh
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
da.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
de.po
debianrules
depcomp
deprecated-list.html
detect-autoconf.sh
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
el.po
envsubst.1.html
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
eo.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
es.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fi.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
fr.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
ga.po
gettext.1.html
gettext.3.html
gettext_1.html
gettext_10.html
gettext_11.html
gettext_12.html
gettext_13.html
gettext_14.html
gettext_15.html
gettext_16.html
gettext_17.html
gettext_18.html
gettext_19.html
gettext_2.html
gettext_20.html
gettext_21.html
gettext_22.html
gettext_23.html
gettext_24.html
gettext_25.html
gettext_26.html
gettext_27.html
gettext_28.html
gettext_29.html
gettext_3.html
gettext_30.html
gettext_4.html
gettext_5.html
gettext_6.html
gettext_7.html
gettext_8.html
gettext_9.html
gettext_abt.html
gettext_fot.html
gettext_toc.html
gettextize.1.html
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gl.po
gnome-gnorba-check.m4
gnome-gnorba-check.m4
gnome-gnorba-check.m4
gnome-orbit-check.m4
gnome-orbit-check.m4
gnome-orbit-check.m4
gnome.m4
gnome.m4
gnome.m4
gtk--.m4
gtk.m4
hello-1.pl.in
hello-2.pl.in
hello.awk
hello.c
hello.c
hello.c
hello.cc
hello.cc
hello.cc
hello.cc
hello.cc
hello.cs
hello.cs
hello.desktop.in.in
hello.gresource.xml
hello.gschema.xml
hello.jl.in
hello.lisp.in
hello.m
hello.m
hello.pas
hello.php
hello.py.in
hello.scm
hello.sh
hello.st.in
hello.tcl
hello.tcl
hello.ui
hello.ycp
hellowindow.cc
hellowindow.h
help-doc.html
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hr.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
hu.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
id.po
index-all.html
index.html
index.html
install-sh
installpaths
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
it.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
ja.po
javacomp.m4
javacomp.sh.in
javaexec.m4
javaexec.sh.in
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
ky.po
libtool.m4.in
ltmain.sh
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
lv.po
main.m
missing
mkinstalldirs
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
ms.po
msgattrib.1.html
msgcat.1.html
msgcmp.1.html
msgcomm.1.html
msgconv.1.html
msgen.1.html
msgexec.1.html
msgfilter.1.html
msgfmt.1.html
msggrep.1.html
msginit.1.html
msgmerge.1.html
msgunfmt.1.html
msguniq.1.html
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
mt.po
namespaces.html
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
nb.po
ngettext.1.html
ngettext.3.html
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nl.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
nn.po
overview-tree.html
package-frame.html
package-list
package-summary.html
package-tree.html
packages.html
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pl.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
pt_BR.po
qt.m4
recode-sr-latin.1.html
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ro.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
ru.po
serialized-form.html
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sk.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sl.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sq.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
sr.po
stylesheet.css
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
sv.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
ta.po
textdomain.3.html
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tr.po
tutorial.html
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
uk.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
vi.po
wxwidgets.m4
xgettext.1.html
ylwrap
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_CN.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_HK.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
zh_TW.po
README
Before you read the hello.cs source code:
Preface about GUI Programming Methodologies
===========================================
The traditional GUI programming methodology for Windows GUI programmers
is to assemble controls using a GUI builder. These GUI builders
don't have good techniques for determining the size and position of the
controls depending on their contents. Instead, they *hardcode* the
size and positions of the controls in each panel, as fixed numbers,
measured in pixels.
What are the consequences?
1) Consequences for all users:
Such panels would not look nice when the user resizes them. So the
programmer simply makes the dialogs non-resizable. When such a
panel then contains a scrollable list of items, with 100 items and
a scroll window of 5 items, a user's normal reaction is to enlarge
the dialog, to see more items. But the dialog is not resizable!
Frustration.
2) Consequences for disabled users:
Some users need bigger fonts for working comfortably. Guess what
happens when the user changes the size of the default system font?
Many labels in dialogs are truncated.
3) Consequences for internationalization:
The translation of a term or label in another language often needs
more screen space. For example, Japanese translations often are 30%
longer than the original English label. Therefore, if only the strings
of a dialog are localized, many labels are truncated.
Problems 1 and 2 are usually accepted in the Windows programmers
community. (Problem 1 is not fatal, only frustrating. And problem 2
affects only a small proportion of the users; they are simply ignored.)
Problem 3 is "solved" by letting the localization team not only translate
the strings, but also redo the layout of each dialog.
In contrast, the methodology of programmers of the Qt/KDE, Gtk/GNOME,
wxWidgets, AWT, Swing, Tk toolkits is to have the positions and sizes
of controls determined at runtime, according to
- the needs of the control itself,
- the needs of the other controls in the panel,
- the available panel size, given by the user through resizing.
The common technology for this approach is to group related controls
together in containers, and perform size and position propagations
between the controls of the container, the container, the container's
container etc. These computations are performed by so-called
"layout manager" objects.
Other technologies such as global constraint systems (as in Garnet) or
spring-like attachments are not so much in use anymore nowadays.
This programmed-resizing methodology solves the problems 1), 2) and 3).
What are the associated costs and efforts? Taking the programmed-resizing
methodology as baseline, the hardcoded sizes and positions approach has
- the advantage that the programmer saves about 1/3 of the GUI
programming work (namely choosing the layout managers and setting
alignment hints),
- the drawback that each localization team has much more work, namely
to rearrange the controls in the panel.
In most free software projects, there are at least ca. 5 localizations;
successful projects even have 30 or 50 localizations.
In other words, a program built with hardcoded sizes and positions
cannot afford many localizations, or the effort for localization will
be prohibitively high.
For this reason, we strongly recommend to use the programmed-resizing
methodology. In this example, since the Windows.Forms package lacks
layout manager classes, we compute the layout by hand, through an
override of the OnResize method. For larger programs, we would recommend
to build a few simple layout managers, to get on par with the layout
abilities found in Qt, Swing, etc.
(The layout system of Gtk/GNOME is somewhat particular: It does not
provide the ability to set a preferred alignment on controls like labels.
Instead one uses intermediate containers for the purpose of alignment.)
Acknowledgement: This preface borrows ideas from an article of Luke Plant.
Copyright (C) 2006 Free Software Foundation, Inc.