← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands/about into lp:widelands

 

GunChleoc has proposed merging lp:~widelands-dev/widelands/about into lp:widelands.

Commit message:
Readme, License and Authors are now displayed in a tabbed view. Split off Translators from the Developers list.

Requested reviews:
  Widelands Developers (widelands-dev)

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/about/+merge/288697

The reason for this change is that I always found the developers list hard to scroll through. It scrolls too fast, because we have had so many translators participating. Also, the texture that the new font renderer would generate for the developers list is so big that it will crash Widelands.

As an added bonus, less buttons in the menus, and wui no longer depends on ui_fsmenu :)
-- 
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/about into lp:widelands.
=== removed file 'data/images/ui_fsmenu/fileviewmenu.jpg'
Binary files data/images/ui_fsmenu/fileviewmenu.jpg	2014-12-03 13:06:42 +0000 and data/images/ui_fsmenu/fileviewmenu.jpg	1970-01-01 00:00:00 +0000 differ
=== modified file 'data/txts/AUTHORS.lua'
--- data/txts/AUTHORS.lua	2015-10-31 12:11:44 +0000
+++ data/txts/AUTHORS.lua	2016-03-10 20:23:24 +0000
@@ -1,26 +1,13 @@
-include "scripting/formatting.lua"
+include "txts/format_authors.lua"
 include "txts/developers.lua"
 
 set_textdomain("texts")
 
--- Formatting functions
-function h1_authors(text)
-   return "<rt text-align=left><p font-size=24 font-decoration=bold font-face=serif font-color=f4a131>" .. text .. "</p></rt>"
-end
-
-function h2_authors(text)
-   return "<rt><p font-size=4> <br></p>" .. h2(text) .. "</rt>"
-end
-
-function p_authors(person, image)
-   return "<rt image=" .. image .. " text-align=left image-align=left><p font-size=12>" .. person .. "</p></rt>"
-end
-
 -- Uses structured data to format authors
 function list_authors()
-   local developers = developers()
+   local authors = developers()
    local result = ""
-   for i, category in ipairs(developers) do
+   for i, category in ipairs(authors) do
       result = result .. "<rt>" .. h1_authors(category["heading"]) .. "</rt>"
       for j, entry in ipairs(category["entries"])  do
          if (entry["subheading"] ~= nil) then
@@ -37,7 +24,7 @@
 
 -- Main script
 return {
-   title = _"Authors",
+   title = _"Developers",
    text = rt(
       "<rt text-align=center><p font-size=28 font-decoration=bold font-face=serif font-color=2F9131>" .. _"Widelands Development Team" .. "</p></rt>" ..
       list_authors()

=== modified file 'data/txts/README.lua'
--- data/txts/README.lua	2016-01-28 05:24:34 +0000
+++ data/txts/README.lua	2016-03-10 20:23:24 +0000
@@ -3,7 +3,7 @@
 set_textdomain("texts")
 
 return {
-   title = _ "README",
+   title = _"Readme",
    text =
 rt("image=images/logos/wl-logo-64.png image-align=center text-align=center") ..
 rt("text-align=center",

=== added file 'data/txts/TRANSLATORS.lua'
--- data/txts/TRANSLATORS.lua	1970-01-01 00:00:00 +0000
+++ data/txts/TRANSLATORS.lua	2016-03-10 20:23:24 +0000
@@ -0,0 +1,30 @@
+include "txts/format_authors.lua"
+include "txts/translators_data.lua"
+
+set_textdomain("texts")
+
+-- Uses structured data to format authors
+function list_authors()
+   local authors = translators()
+   local result = ""
+   local translators_image = "images/wui/editor/fsel_editor_set_height.png"
+   for i, category in ipairs(authors) do
+      result = result .. "<rt>" .. h2_authors(category["heading"]) .. "</rt>"
+      for j, entry in ipairs(category["entries"])  do
+         for k, member in ipairs(entry["members"])  do
+            result = result .. p_authors(member, translators_image)
+         end
+      end
+      result = result .. rt("<p font-size=10> <br></p>")
+   end
+   return result
+end
+
+-- Main script
+return {
+   title = _"Translators",
+   text = rt(
+      "<rt text-align=center><p font-size=28 font-decoration=bold font-face=serif font-color=2F9131>" .. _"Widelands Translators" .. "</p></rt>" ..
+      list_authors()
+   )
+}

=== modified file 'data/txts/developers.lua'
--- data/txts/developers.lua	2016-03-08 07:24:38 +0000
+++ data/txts/developers.lua	2016-03-10 20:23:24 +0000
@@ -1,3 +1,3 @@
 -- Do not edit this file - it is automatically generated
 -- by utils/update_authors.py from developers.json.
-function developers() return {{heading = _"Chieftain",image = "images/players/genstats_enable_plr_01.png",entries = {{members = {"Holger Rapp (SirVer)",},},},},{heading = _"Elders",image = "images/players/genstats_enable_plr_04.png",entries = {{subheading = _"Graphics",members = {"Chuck Wilder (chuckw)",},},{subheading = _"Homepage",members = {"Markus Pfitzner (janus)",},},{subheading = _"Sound",members = {"Jan Bruns (solatis)",},},{subheading = _"Tongues",members = {"GunChleoc",},},},},{heading = _"Coders",image = "images/wui/stats/genstats_nrwares.png",entries = {{members = {"Holger Rapp (SirVer)","Nicolai Hähnle (ixprefect)","Florian Bluemel","Florian Falkner (foldrian)","Florian Weber (Bedouin)","Philipp Engelhard","Stefan Boettner","Tron","Martin Quinson","Raul Ferriz","Willem Jan Palenstijn","Josef Spillner","Christof Petig","Erik Sigra (sigra)","Nanne Wams","Surgery","Andrius R. (knutux)","Jari Hautio (jarih)","Peter Schwanemann (Nasenbaer)","Victor Pelt (Dwarik)","Axel Gehlert (dunkelbrauer)","András Eisenberger (Kiscsirke)","Andi","Timo","Hannes","TimoW","Jens Beyer (Qcumber-some)","Andreas Breitschopp (ab-tools)","Joachim Breitner (nomeata)","Nizamov Shawkat","Carl-Philip Hänsch (carli)","Martin Prussak (martin)","David Allwicher (aber)","Nathan Peters (nathanpeters)","Leif Sandstede (lcsand)","Matthias Horne (shevonar)","Borim (borim)","Angelo Locritani (alocritani)","Gabriel Margiani (gamag)","Anthony J. Bentley (anthonyjbentley)","Peter Waller (iri)","Johannes Ebke (sirius-in4matiker)","Andreas Eriksson","Mark Scott","Teppo Mäenpää","Steven De Herdt","Charly Ghislain (cghislai)","Tino Miegel (TinoM)","Tibor Bamhor (tiborb95)","GunChleoc","Ferdinand Thiessen (f-thiessen)","Willy Scheibel (willyscheibel)","Martin Schmidt (mars)","Simon Eilting","Alexander Kartzow (daAlx1)","Łukasz Majcher","Paul Mehrer (meitis)","Miroslav Remák (MiroslavR)","Janosch Peters",},},},},{heading = _"Graphicians",image = "images/wui/stats/genstats_nrbuildings.png",entries = {{members = {"Albert Jasiowka","Holger Rapp (SirVer)","Marz","Philipp Engelhard","Yannick Warnier","Delia","Florian Neuerburg","Jerome Rosinski","Mats Olsson","Odin Omdal","Wolfgang Weidner","Andreas Baier","Juri Chomé","Toralf Bethke (bithunter32)","Peter Schwanemann (Nasenbaer)","Alexia Death","Repsa Jih","Geoffroy Schmitlin (Trimard)","Benedikt Freisen (Objpaswriter)","Stefano Guidoni (Ilguido)","Samith Sandanayake (samithdisal)","Chuck Wilder (chuckw)","Astuur","Gerrit Familiegrosskopf (kingcreole)","Florian Angermeier (fraang)",},},},},{heading = _"Musicians",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Kristian","MiddleFinger","Valerio Orlandini (Symbiosis)","Barry van Oudtshoorn (barryvan)","Jan Bruns (Solatis)","Nikola Whallon (Saturn)","Joshua O'Leary (Joshun)",},},},},{heading = _"Sound Effects",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Stefan de Konik","Peter Schwanemann (Nasenbaer)","Stephan","Adam Piggott (_aD)","Stanisław Gackowski (Soeb)",},},},},{heading = _"Maps and Missions",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Michal Szopa (Winterwind)","Jan-Henrik Kluth (Isch)","Peter Schwanemann (Nasenbaer)","Sven (deviant)","Tuxlands","Kamil Wilczek (Another Barbarian)","Tarvo Reim (Tarrei)","Manuel Holzmeier (Quappo)","ivh","Hanna Podewski (kristin)","Teppo Mäenpää","fk","Einstein13","Jenia","Robnick","wl-zocker",},},},},{heading = _"Campaign Story",image = "images/ui_basic/ls_wlmap.png",entries = {{subheading = _"Barbarian",members = {"Bastian Rapp","Alexander Kahl (wolfpac)","Peter Schwanemann (Nasenbaer)",},},{subheading = _"Empire",members = {"Peter Schwanemann (Nasenbaer)",},},{subheading = _"Atlantean",members = {"Holger Rapp (SirVer)","Peter Schwanemann (Nasenbaer)",},},},},{heading = _"Translators",image = "images/wui/editor/fsel_editor_set_height.png",entries = {{subheading = "العربية (Arabic)",members = {"abdXelrhman","m-abudrais","someone",},},{subheading = "Asturianu (Asturian)",members = {"Xuacu Saturio",},},{subheading = "Български (Bulgarian)",members = {"А. Ташев","Любомир Василев",},},{subheading = "Català (Catalan)",members = {"Guybrush88","Joan Josep","Oriol",},},{subheading = "Čeština (Czech)",members = {"Adam Matoušek","David Spanel","Jens Beyer","Jezevec","Jiří Locker","Konki","Marek Donar (Markus7cz)","Martin Volf","Martin Vecera (Marvec)","MaSo_CZ","Matej Svrcek (prometheus)","Milan Fašina","prom","Vit Hrachovy","Zbyněk Schwarz",},},{subheading = "Dansk (Danish)",members = {"Ask Hjorth Larsen","beer","Daniel Ejsing-Duun","David Lamhauge","Erik Soe Sorensen","Esben Aaberg","hulagutten","Joe Hansen (joedalton)","larsch","Nikolaj Sejergaard","silentStatic","Simon Stubben","Ville Witt",},},{subheading = "Deutsch (German)",members = {"Andreas Breitschopp","Astuur","Benedikt Tröster","Bob Johns","Borim","Clemens Dinkel","Daniel Kutrowatz","Daniel Winzen","Das MC","David Allwicher","DelphiMarkus","Dirk Stöcker","Fenris Wolf","Ferdinand T.","FetteNase","Flames_in_Paradise","fraang","Frank Kubitschek","Gabriel Margiani","Hagen","Hanna Podewski (kristin)","herbert","hurz","Johannes (nuefke)","Johannes Haupt","Kaste","Klappstuhl","Koneu","kraileth","LAZA","LennStar","Macedon","Marc Wischnowsky","Markus Pfitzner (janus)","Martin","Matthias Krüger","Max","meru","Mirian Margiani","MirkoWodtke","Mister Pi","Mr. Anderson","Ole","Peter Schwanemann (Nasenbaer)","Philipp Niemann (Azagtoth)","Provetin","Ralf-J. Block","raymond","ronny","Shevonar","SirVer","Sonnrain","Thomas","Tim O.","Timowi","Tino Miegel (TinoM)","Tobias Margiani","Venatrix","wl-zocker","Wolfgang Kurz","Wolfs","Wuzzy",},},{subheading = "Ελληνικά (Greek)",members = {"ptr","Γιάννης Ανθυμίδης",},},{subheading = "Canadian English",members = {"Ne-1",},},{subheading = "British English",members = {"_aD","Alex Denvir","Andi Chandler","Anthony Harrington","Biffaboy","Heber","Jackson Doak","James Thorrold","Jon Senior","LiSrt","Luis Miguel D.P.","mrx5682","Terry Jones","Tinker","UndiFineD","Vladimir Oka",},},{subheading = "US American English",members = {"DragonAtma",},},{subheading = "Esperanto",members = {"alms21","Fenris Wolf","Ivan Camilo Quintero Santacruz","Jens Beyer","Kristjan SCHMIDT","LaPingvino","Manuel Berkemeier","Michael Moroni",},},{subheading = "Español (Spanish)",members = {"Adolfo Jayme","Agustín Vela","Alberto D.V.","Alejandro Pérez","Antonio Trueba (Fasser)","David Mitos","David Pérez","DiegoJ","Dishito","Eduardo Alberto Calvo","Gerardb","ironfisher","Ivan","Ivan Camilo Quintero Santacruz","Javi Sol","Jonay","Joseph Molina","JoseRoberto","Juan Eduardo Riva","Kiibakun","Luis Miguel D.P.","MadkaT","Martín V.","Miguel adre","Miguel de Dios","Monkey","Pablo Frigerio","Paco Molinero","Paulomorales","pescamillam","Rafael Augusto Maguiña Yrivarren","Rafael Medina","Raul Ferriz","Roberto López","schimmm","simon","Siz","WalterCool","zer berros",},},{subheading = "Eesti keel (Estonian)",members = {"gert7","rm87",},},{subheading = "Euskara (Basque)",members = {"Mikel Alzibar",},},{subheading = "فارسی (Persian)",members = {"katy Zahedi",},},{subheading = "Suomi (Finnish)",members = {"Jari Hautio","Juhani Numminen","Markus Hällfors","Pekka Järvinen (Raspi)","Sampo Harjula","Sini Ruohomaa (Byakushin)","Teppo Mäenpää","Tommi Nirha","Vazde",},},{subheading = "Français (French)",members = {"AGuechoum","AnubiS","Audiger Jeremy","Aurelien Pavel","Benjamin Subtil","Bertram","bouchard renaud","Bruno Veilleux","clark17","crep4ever","David .","El Pensador","Eliovir","Emmanuel Andry (Eandry)","fk","François Rousselet","Gilles Aubert","Guillaume Brant","Guybrush88","Immunoman","Jean-Pierre Gemble","Hanna Podewski (kristin)","londumas","Michael Colignon","Michael DOUBEZ","Mohamed SEDKI","NonoSan","Pierre Rudloff","Sébastien Duthil","Sevy Ride","Tarou","Thomas Jungers","tomtom","Tubuntu","Ubuntu1988","verdy_p","wl-zocker","YS1","Yves MATHIEU",},},{subheading = "Gàidhlig (Scottish Gaelic)",members = {"GunChleoc",},},{subheading = "Galego (Galician)",members = {"Adrián Chaves Fernández","Antonio Trueba (Fasser)","Xosé",},},{subheading = "עברית (Hebrew)",members = {"Danny Albocher","Liel Fridman","Michael DOUBEZ","Solomon Gruber (Piql7)","Yaron",},},{subheading = "हिन्दी (Hindi)",members = {"girdhari rao",},},{subheading = "Hrvatski (Croatian)",members = {"Mario Dautović",},},{subheading = "Magyar (Hungarian)",members = {"cn4ij","Dániel Varga (EuroF)","Ferenc Nagy","Gyönki Bendegúz","HUNStree","István Kiss","jzombi","Kiscsirke","Major Gabesz","Muszela Balázs","Papp Bence","Richard Somlói","Robert Roth","SanskritFritz","Szűcs Kornél Géza",},},{subheading = "Interlingua",members = {"alms21",},},{subheading = "Bahasa Indonesia (Indonesian)",members = {"dadanhrn",},},{subheading = "Italiano (Italian)",members = {"Angelo Locritani","Colin Gibson","DarkSaivor","Davidus","Dom De Felice","Doukas7","Eulogy","Gabriel Rota","Guybrush88","ido","Loris Turchetti","Oibaf","Pierpaolo Pierozzi","pierusch","Pietro Battiston","Roberto Sciascia","Sergio Spinatelli","sgargel","simone.sandri",},},{subheading = "日本語 (Japanese)",members = {"alms21","Dios","guess880","Midori","SevyRide","tubame",},},{subheading = "Basa jawa (Javanese)",members = {"zaenal arifin",},},{subheading = "ქართული (Georgian)",members = {"Gabriel Margiani","Meyer Konrad",},},{subheading = "한국어 (Korean)",members = {"ddfddf2k",},},{subheading = "Lingua latīna (Latin)",members = {"alms21","lopho","Sonnrain","Stephan Lenk","Thorsten",},},{subheading = "Lietuvių (Lithuanian)",members = {"Mantas Kriaučiūnas",},},{subheading = "मराठी (Marathi)",members = {"Amod Ajit Karmarkar",},},{subheading = "بهاس ملايو (Malay)",members = {"abuyop",},},{subheading = "မြန်မာစ (Burmese)",members = {"pyaehtetaung",},},{subheading = "Norsk (Bokmål) (Norwegian Bokmål)",members = {"Fredrik Sudmann","Hans Joachim Desserud","Magnus Meyer Hustveit","Martin Dahl Moe","mr.x","Thorbjørn Bruarøy",},},{subheading = "Plattdütsch (Low German)",members = {"Mister Pi ","Nasenbaer ","Ole ","tando",},},{subheading = "Nederlands (Dutch)",members = {"BenW","Christian Groenendijk","Dirk Schut","fireprog","fk","Foppe Benedictus","Johan Jonkman (Dikjuh)","Maasieboy","Marcel","megabyte","Patrick van der Leer","Pieter Ouwerkerk (Pietertje)","Pietertje","PliniusNeo","REAL NAME","RickvanderZwet","Rob Snelders (Ertai)","Teun Spaans","Victor Pelt","Wim Champagne",},},{subheading = "Nynorsk (Norwegian Nynorsk)",members = {"Alexander Mackinnon Jansen","Hans Joachim Desserud","Odin Hørthe Omdal","Thorbjørn Bruarøy",},},{subheading = "Occitan",members = {"Cédric VALMARY (Tot en òc)",},},{subheading = "Polski (Polish)",members = {"Andrzej Krentosz (Endrju)","Asahi Koishi","BartekChom","Bartosz Wiśniewski","Gabriel Fortin","Hubert Pluta","Jakub Rak (einstein13)","Januzi (januzi)","Jacek Wolszczak (Shutdownrunner)","Jens Beyer","Karol Sobolewski","Łukasz Chełmicki","Mateusz Micał","Michal Maslanko","Michał Rzepiński","orzeh","Patryk Sawicki","Pawel PErz","Stanisław Gackowski (Soeb)","Szymon Fornal","Szymon Gackowski","Szymon Nieznański","tim","Tomasz Sterna","Wesmania","Wojtek","XeonBloomfield",},},{subheading = "Português (Portuguese)",members = {"Almufadado","daniel reis","David Rodrigues","Flávio J. Saraiva","GunChleoc","Marcelo do Pagode","Miguel de Freitas Fonseca","Tiago Silva","trewe",},},{subheading = "Português do Brasil (Brazilian Portuguese)",members = {"Alexandre","alms21","Almufadado","Cleverton","daniel reis","Fabio Garz","Flaviano Angeli","HicHic","Hriostat","Israel","JoãoPedro BrasãoToledo","Juarez S.","Júlio Cezar Santos Pires","Juno","Luiz N","Maraschin","Marcelo do Pagode","Nicolas Abril","Pedro Pisandelli","Proezas","Rafael Neri","Rayback","Rubens Bueno","Samer Ghosnlas.2932","Tomas Abril","Vitor",},},{subheading = "Română (Romanian)",members = {"Ursachi Alexandru",},},{subheading = "Русский (Russian)",members = {"Александр","Александр Бикмеев (Rombal)","Александр Глухов","Алексей Кабанов","Андрей Кулаков ","Андрей Олыкайнен ","Антон Хабаров (lu)","Виктор Биркманис","Владимир Коваленко","Глеб Синковский","Глория Хрусталёва","Денис Дерябин","Егор Панфилов","Константин Щукин","Никита Шехов","Руслан Ковтун","Сергей Фуканчик ","Юрий Соколов (Urra)","CupIvan","Georgiy","gerich","Izon","KroArtem","Lex","Massol","Papazu","SashaQR","TroubleMakerDV","Vampire Hunter D","Vlad",},},{subheading = "Kinyarwanda",members = {"Nasenbaer",},},{subheading = "සිංහල (Sinhala)",members = {"Samith Sandanayake",},},{subheading = "Slovenčina (Slovak)",members = {"Kefir111","Marek Hám","Miroslav Remák","Vladimir","Vladímir Tóth (Ike)",},},{subheading = "Slovenski jezik (Slovenian)",members = {"Andrej Znidarsic","Boštjan Miklavčič","Jure Repinc","kleb","Klemen Košir","Matevž Jekovec","Matic Gradišer","mrt",},},{subheading = "српски (Serbian)",members = {"Никола Павловић",},},{subheading = "Svenska (Swedish)",members = {"Arve Eriksson","Christian Widell","Daniel Nylander (yeager)","Frederik Pettersson (luno)","ivh","Joakim Lundborg","karlrune","Marcus E","Michael Rydén","Patrick H.","Phoenix","Rasmus Olstedt","RasmusBackman","Sigra","Treecko","Tumaini","Ulite",},},{subheading = "Türkçe (Turkish)",members = {"Asiye","Ekrem Kocadere","Ercin Senturk","Recep Hasanbaş","ScriptMonster","Volkan Gezer",},},{subheading = "українська мова (Ukranian)",members = {"Fedik","Shemet Yevhene","Сергій Дубик",},},{subheading = "Tiếng Việt (Vietnamese)",members = {"Nguyen Quang Chien",},},{subheading = "简体中文 (Simplified Chinese)",members = {"luojie-dune","XIA",},},{subheading = "繁體中文 (Traditional Chinese)",members = {"AJ","poormusic","sonny",},},},},{heading = _"Packagers",image = "images/wui/stats/genstats_productivity.png",entries = {{subheading = _"Debian Linux",members = {"Martin Quinson",},},{subheading = _"Fedora Linux",members = {"Karol Trzcionka","Jochen Wiedmann",},},{subheading = _"Mandriva Linux",members = {"Emmanuel Andry (eandry)",},},{subheading = _"FreeBSD",members = {"Bartosz Fabianowski",},},{subheading = _"Mac OS X",members = {"Philipp Engelhard","Pierre Salagnac (Tarou)","Wolf St. Kappesser","David Allwicher (aber)",},},{subheading = _"Windows",members = {"Tino Miegel (TinoM)","Alexander Kahl (Wolfpac)","Geodomus","Jari Hautio",},},{subheading = _"ZetaOS",members = {"BeSman",},},},},{heading = _"Homepage",image = "images/logos/WL-Editor-16.png",entries = {{subheading = _"Homepage Coders",members = {"Holger Rapp (SirVer)","Stanislaw Gackowski (Soeb)","Markus Pfitzner (janus)","Tobi",},},{subheading = _"Documentation, Help and Wiki",members = {"Erik Sigra (sigra)","Florian Falkner (foldrian)","Florian Weber (bedouin)","Nicolai Haehnle","Holger Rapp (SirVer)","Johannes (nuefke)","Alexander Kahl (wolfpac)","Stanislaw Gackowski (Soeb)","Hanna Podewski (kristin)",},},},},{heading = _"Former Elders",image = "images/players/genstats_enable_plr_04.png",entries = {{subheading = _"Graphics",members = {"Salamander","Alexia Death (death)",},},{subheading = _"Homepage",members = {"holymoly","Stuart Eglington (DaaL1973)","Jon Harris (jonsjava)",},},{subheading = _"Sound",members = {"Yannick Warnier",},},{subheading = _"Translation",members = {"Peter Schwanemann (Nasenbaer)","Philipp Niemann (Azagtoth)",},},},},{heading = _"Other",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Matt Howe (mdhowe)","Samuel Tilly (eldamar)","and many, many more (thank you for everything you've done)",},},},},} end
+function developers() return {{heading = _"Chieftain",image = "images/players/genstats_enable_plr_01.png",entries = {{members = {"Holger Rapp (SirVer)",},},},},{heading = _"Elders",image = "images/players/genstats_enable_plr_04.png",entries = {{subheading = _"Graphics",members = {"Chuck Wilder (chuckw)",},},{subheading = _"Homepage",members = {"Markus Pfitzner (janus)",},},{subheading = _"Sound",members = {"Jan Bruns (solatis)",},},{subheading = _"Tongues",members = {"GunChleoc",},},},},{heading = _"Coders",image = "images/wui/stats/genstats_nrwares.png",entries = {{members = {"Holger Rapp (SirVer)","Nicolai Hähnle (ixprefect)","Florian Bluemel","Florian Falkner (foldrian)","Florian Weber (Bedouin)","Philipp Engelhard","Stefan Boettner","Tron","Martin Quinson","Raul Ferriz","Willem Jan Palenstijn","Josef Spillner","Christof Petig","Erik Sigra (sigra)","Nanne Wams","Surgery","Andrius R. (knutux)","Jari Hautio (jarih)","Peter Schwanemann (Nasenbaer)","Victor Pelt (Dwarik)","Axel Gehlert (dunkelbrauer)","András Eisenberger (Kiscsirke)","Andi","Timo","Hannes","TimoW","Jens Beyer (Qcumber-some)","Andreas Breitschopp (ab-tools)","Joachim Breitner (nomeata)","Nizamov Shawkat","Carl-Philip Hänsch (carli)","Martin Prussak (martin)","David Allwicher (aber)","Nathan Peters (nathanpeters)","Leif Sandstede (lcsand)","Matthias Horne (shevonar)","Borim (borim)","Angelo Locritani (alocritani)","Gabriel Margiani (gamag)","Anthony J. Bentley (anthonyjbentley)","Peter Waller (iri)","Johannes Ebke (sirius-in4matiker)","Andreas Eriksson","Mark Scott","Teppo Mäenpää","Steven De Herdt","Charly Ghislain (cghislai)","Tino Miegel (TinoM)","Tibor Bamhor (tiborb95)","GunChleoc","Ferdinand Thiessen (f-thiessen)","Willy Scheibel (willyscheibel)","Martin Schmidt (mars)","Simon Eilting","Alexander Kartzow (daAlx1)","Łukasz Majcher","Paul Mehrer (meitis)","Miroslav Remák (MiroslavR)","Janosch Peters",},},},},{heading = _"Graphicians",image = "images/wui/stats/genstats_nrbuildings.png",entries = {{members = {"Albert Jasiowka","Holger Rapp (SirVer)","Marz","Philipp Engelhard","Yannick Warnier","Delia","Florian Neuerburg","Jerome Rosinski","Mats Olsson","Odin Omdal","Wolfgang Weidner","Andreas Baier","Juri Chomé","Toralf Bethke (bithunter32)","Peter Schwanemann (Nasenbaer)","Alexia Death","Repsa Jih","Geoffroy Schmitlin (Trimard)","Benedikt Freisen (Objpaswriter)","Stefano Guidoni (Ilguido)","Samith Sandanayake (samithdisal)","Chuck Wilder (chuckw)","Astuur","Gerrit Familiegrosskopf (kingcreole)","Florian Angermeier (fraang)",},},},},{heading = _"Musicians",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Kristian","MiddleFinger","Valerio Orlandini (Symbiosis)","Barry van Oudtshoorn (barryvan)","Jan Bruns (Solatis)","Nikola Whallon (Saturn)","Joshua O'Leary (Joshun)",},},},},{heading = _"Sound Effects",image = "images/wui/overlays/workarea123.png",entries = {{members = {"Stefan de Konik","Peter Schwanemann (Nasenbaer)","Stephan","Adam Piggott (_aD)","Stanisław Gackowski (Soeb)",},},},},{heading = _"Maps and Missions",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Michal Szopa (Winterwind)","Jan-Henrik Kluth (Isch)","Peter Schwanemann (Nasenbaer)","Sven (deviant)","Tuxlands","Kamil Wilczek (Another Barbarian)","Tarvo Reim (Tarrei)","Manuel Holzmeier (Quappo)","ivh","Hanna Podewski (kristin)","Teppo Mäenpää","fk","Einstein13","Jenia","Robnick","wl-zocker",},},},},{heading = _"Campaign Story",image = "images/ui_basic/ls_wlmap.png",entries = {{subheading = _"Barbarian",members = {"Bastian Rapp","Alexander Kahl (wolfpac)","Peter Schwanemann (Nasenbaer)",},},{subheading = _"Empire",members = {"Peter Schwanemann (Nasenbaer)",},},{subheading = _"Atlantean",members = {"Holger Rapp (SirVer)","Peter Schwanemann (Nasenbaer)",},},},},{heading = _"Packagers",image = "images/wui/stats/genstats_productivity.png",entries = {{subheading = _"Debian Linux",members = {"Martin Quinson",},},{subheading = _"Fedora Linux",members = {"Karol Trzcionka","Jochen Wiedmann",},},{subheading = _"Mandriva Linux",members = {"Emmanuel Andry (eandry)",},},{subheading = _"FreeBSD",members = {"Bartosz Fabianowski",},},{subheading = _"Mac OS X",members = {"Philipp Engelhard","Pierre Salagnac (Tarou)","Wolf St. Kappesser","David Allwicher (aber)",},},{subheading = _"Windows",members = {"Tino Miegel (TinoM)","Alexander Kahl (Wolfpac)","Geodomus","Jari Hautio",},},{subheading = _"ZetaOS",members = {"BeSman",},},},},{heading = _"Homepage",image = "images/logos/WL-Editor-16.png",entries = {{subheading = _"Homepage Coders",members = {"Holger Rapp (SirVer)","Stanislaw Gackowski (Soeb)","Markus Pfitzner (janus)","Tobi",},},{subheading = _"Documentation, Help and Wiki",members = {"Erik Sigra (sigra)","Florian Falkner (foldrian)","Florian Weber (bedouin)","Nicolai Haehnle","Holger Rapp (SirVer)","Johannes (nuefke)","Alexander Kahl (wolfpac)","Stanislaw Gackowski (Soeb)","Hanna Podewski (kristin)",},},},},{heading = _"Former Elders",image = "images/players/genstats_enable_plr_04.png",entries = {{subheading = _"Graphics",members = {"Salamander","Alexia Death (death)",},},{subheading = _"Homepage",members = {"holymoly","Stuart Eglington (DaaL1973)","Jon Harris (jonsjava)",},},{subheading = _"Sound",members = {"Yannick Warnier",},},{subheading = _"Translation",members = {"Peter Schwanemann (Nasenbaer)","Philipp Niemann (Azagtoth)",},},},},{heading = _"Other",image = "images/wui/stats/genstats_landsize.png",entries = {{members = {"Matt Howe (mdhowe)","Samuel Tilly (eldamar)","and many, many more (thank you for everything you've done)",},},},},} end
\ No newline at end of file

=== modified file 'data/txts/editor_readme.lua'
--- data/txts/editor_readme.lua	2016-01-28 05:24:34 +0000
+++ data/txts/editor_readme.lua	2016-03-10 20:23:24 +0000
@@ -3,7 +3,7 @@
 set_textdomain("texts")
 
 return {
-   title = _"README for the Widelands Editor",
+   title = _"Readme",
    text = rt(
       "<rt><p font-size=38 font-color=2F9131>" .. _[[The Widelands Editor]] .. "<br><br></p>" ..
 

=== added file 'data/txts/format_authors.lua'
--- data/txts/format_authors.lua	1970-01-01 00:00:00 +0000
+++ data/txts/format_authors.lua	2016-03-10 20:23:24 +0000
@@ -0,0 +1,14 @@
+include "scripting/formatting.lua"
+
+-- Formatting functions
+function h1_authors(text)
+   return "<rt text-align=left><p font-size=24 font-decoration=bold font-face=serif font-color=f4a131>" .. text .. "</p></rt>"
+end
+
+function h2_authors(text)
+   return "<rt><p font-size=4> <br></p>" .. h2(text) .. "</rt>"
+end
+
+function p_authors(person, image)
+   return "<rt image=" .. image .. " text-align=left image-align=left><p font-size=12>" .. person .. "</p></rt>"
+end

=== added file 'data/txts/translators_data.lua'
--- data/txts/translators_data.lua	1970-01-01 00:00:00 +0000
+++ data/txts/translators_data.lua	2016-03-10 20:23:24 +0000
@@ -0,0 +1,1 @@
+function translators() return {{heading = "العربية (Arabic)",entries = {{members = {"abdXelrhman","m-abudrais","someone",},},},},{heading = "Asturianu (Asturian)",entries = {{members = {"Xuacu Saturio",},},},},{heading = "Български (Bulgarian)",entries = {{members = {"А. Ташев","Любомир Василев",},},},},{heading = "Català (Catalan)",entries = {{members = {"Guybrush88","Joan Josep","Oriol",},},},},{heading = "Čeština (Czech)",entries = {{members = {"Adam Matoušek","David Spanel","Jens Beyer","Jezevec","Jiří Locker","Konki","Marek Donar (Markus7cz)","Martin Volf","Martin Vecera (Marvec)","MaSo_CZ","Matej Svrcek (prometheus)","Milan Fašina","prom","Vit Hrachovy","Zbyněk Schwarz",},},},},{heading = "Dansk (Danish)",entries = {{members = {"Ask Hjorth Larsen","beer","Daniel Ejsing-Duun","David Lamhauge","Erik Soe Sorensen","Esben Aaberg","hulagutten","Joe Hansen (joedalton)","larsch","Nikolaj Sejergaard","silentStatic","Simon Stubben","Ville Witt",},},},},{heading = "Deutsch (German)",entries = {{members = {"Andreas Breitschopp","Astuur","Benedikt Tröster","Bob Johns","Borim","Clemens Dinkel","Daniel Kutrowatz","Daniel Winzen","Das MC","David Allwicher","DelphiMarkus","Dirk Stöcker","Fenris Wolf","Ferdinand T.","FetteNase","Flames_in_Paradise","fraang","Frank Kubitschek","Gabriel Margiani","Hagen","Hanna Podewski (kristin)","herbert","hurz","Johannes (nuefke)","Johannes Haupt","Kaste","Klappstuhl","Koneu","kraileth","LAZA","LennStar","Macedon","Marc Wischnowsky","Markus Pfitzner (janus)","Martin","Matthias Krüger","Max","meru","Mirian Margiani","MirkoWodtke","Mister Pi","Mr. Anderson","Ole","Peter Schwanemann (Nasenbaer)","Philipp Niemann (Azagtoth)","Provetin","Ralf-J. Block","raymond","ronny","Shevonar","SirVer","Sonnrain","Thomas","Tim O.","Timowi","Tino Miegel (TinoM)","Tobias Margiani","Venatrix","wl-zocker","Wolfgang Kurz","Wolfs","Wuzzy",},},},},{heading = "Ελληνικά (Greek)",entries = {{members = {"ptr","Γιάννης Ανθυμίδης",},},},},{heading = "Canadian English",entries = {{members = {"Ne-1",},},},},{heading = "British English",entries = {{members = {"_aD","Alex Denvir","Andi Chandler","Anthony Harrington","Biffaboy","Heber","Jackson Doak","James Thorrold","Jon Senior","LiSrt","Luis Miguel D.P.","mrx5682","Terry Jones","Tinker","UndiFineD","Vladimir Oka",},},},},{heading = "US American English",entries = {{members = {"DragonAtma",},},},},{heading = "Esperanto",entries = {{members = {"alms21","Fenris Wolf","Ivan Camilo Quintero Santacruz","Jens Beyer","Kristjan SCHMIDT","LaPingvino","Manuel Berkemeier","Michael Moroni",},},},},{heading = "Español (Spanish)",entries = {{members = {"Adolfo Jayme","Agustín Vela","Alberto D.V.","Alejandro Pérez","Antonio Trueba (Fasser)","David Mitos","David Pérez","DiegoJ","Dishito","Eduardo Alberto Calvo","Gerardb","ironfisher","Ivan","Ivan Camilo Quintero Santacruz","Javi Sol","Jonay","Joseph Molina","JoseRoberto","Juan Eduardo Riva","Kiibakun","Luis Miguel D.P.","MadkaT","Martín V.","Miguel adre","Miguel de Dios","Monkey","Pablo Frigerio","Paco Molinero","Paulomorales","pescamillam","Rafael Augusto Maguiña Yrivarren","Rafael Medina","Raul Ferriz","Roberto López","schimmm","simon","Siz","WalterCool","zer berros",},},},},{heading = "Eesti keel (Estonian)",entries = {{members = {"gert7","rm87",},},},},{heading = "Euskara (Basque)",entries = {{members = {"Mikel Alzibar",},},},},{heading = "فارسی (Persian)",entries = {{members = {"katy Zahedi",},},},},{heading = "Suomi (Finnish)",entries = {{members = {"Jari Hautio","Juhani Numminen","Markus Hällfors","Pekka Järvinen (Raspi)","Sampo Harjula","Sini Ruohomaa (Byakushin)","Teppo Mäenpää","Tommi Nirha","Vazde",},},},},{heading = "Français (French)",entries = {{members = {"AGuechoum","AnubiS","Audiger Jeremy","Aurelien Pavel","Benjamin Subtil","Bertram","bouchard renaud","Bruno Veilleux","clark17","crep4ever","David .","El Pensador","Eliovir","Emmanuel Andry (Eandry)","fk","François Rousselet","Gilles Aubert","Guillaume Brant","Guybrush88","Immunoman","Jean-Pierre Gemble","Hanna Podewski (kristin)","londumas","Michael Colignon","Michael DOUBEZ","Mohamed SEDKI","NonoSan","Pierre Rudloff","Sébastien Duthil","Sevy Ride","Tarou","Thomas Jungers","tomtom","Tubuntu","Ubuntu1988","verdy_p","wl-zocker","YS1","Yves MATHIEU",},},},},{heading = "Gàidhlig (Scottish Gaelic)",entries = {{members = {"GunChleoc",},},},},{heading = "Galego (Galician)",entries = {{members = {"Adrián Chaves Fernández","Antonio Trueba (Fasser)","Xosé",},},},},{heading = "עברית (Hebrew)",entries = {{members = {"Danny Albocher","Liel Fridman","Michael DOUBEZ","Solomon Gruber (Piql7)","Yaron",},},},},{heading = "हिन्दी (Hindi)",entries = {{members = {"girdhari rao",},},},},{heading = "Hrvatski (Croatian)",entries = {{members = {"Mario Dautović",},},},},{heading = "Magyar (Hungarian)",entries = {{members = {"cn4ij","Dániel Varga (EuroF)","Ferenc Nagy","Gyönki Bendegúz","HUNStree","István Kiss","jzombi","Kiscsirke","Major Gabesz","Muszela Balázs","Papp Bence","Richard Somlói","Robert Roth","SanskritFritz","Szűcs Kornél Géza",},},},},{heading = "Interlingua",entries = {{members = {"alms21",},},},},{heading = "Bahasa Indonesia (Indonesian)",entries = {{members = {"dadanhrn",},},},},{heading = "Italiano (Italian)",entries = {{members = {"Angelo Locritani","Colin Gibson","DarkSaivor","Davidus","Dom De Felice","Doukas7","Eulogy","Gabriel Rota","Guybrush88","ido","Loris Turchetti","Oibaf","Pierpaolo Pierozzi","pierusch","Pietro Battiston","Roberto Sciascia","Sergio Spinatelli","sgargel","simone.sandri",},},},},{heading = "日本語 (Japanese)",entries = {{members = {"alms21","Dios","guess880","Midori","SevyRide","tubame",},},},},{heading = "Basa jawa (Javanese)",entries = {{members = {"zaenal arifin",},},},},{heading = "ქართული (Georgian)",entries = {{members = {"Gabriel Margiani","Meyer Konrad",},},},},{heading = "한국어 (Korean)",entries = {{members = {"ddfddf2k",},},},},{heading = "Lingua latīna (Latin)",entries = {{members = {"alms21","lopho","Sonnrain","Stephan Lenk","Thorsten",},},},},{heading = "Lietuvių (Lithuanian)",entries = {{members = {"Mantas Kriaučiūnas",},},},},{heading = "मराठी (Marathi)",entries = {{members = {"Amod Ajit Karmarkar",},},},},{heading = "بهاس ملايو (Malay)",entries = {{members = {"abuyop",},},},},{heading = "မြန်မာစ (Burmese)",entries = {{members = {"pyaehtetaung",},},},},{heading = "Norsk (Bokmål) (Norwegian Bokmål)",entries = {{members = {"Fredrik Sudmann","Hans Joachim Desserud","Magnus Meyer Hustveit","Martin Dahl Moe","mr.x","Thorbjørn Bruarøy",},},},},{heading = "Plattdütsch (Low German)",entries = {{members = {"Mister Pi ","Nasenbaer ","Ole ","tando",},},},},{heading = "Nederlands (Dutch)",entries = {{members = {"BenW","Christian Groenendijk","Dirk Schut","fireprog","fk","Foppe Benedictus","Johan Jonkman (Dikjuh)","Maasieboy","Marcel","megabyte","Patrick van der Leer","Pieter Ouwerkerk (Pietertje)","Pietertje","PliniusNeo","REAL NAME","RickvanderZwet","Rob Snelders (Ertai)","Teun Spaans","Victor Pelt","Wim Champagne",},},},},{heading = "Nynorsk (Norwegian Nynorsk)",entries = {{members = {"Alexander Mackinnon Jansen","Hans Joachim Desserud","Odin Hørthe Omdal","Thorbjørn Bruarøy",},},},},{heading = "Occitan",entries = {{members = {"Cédric VALMARY (Tot en òc)",},},},},{heading = "Polski (Polish)",entries = {{members = {"Andrzej Krentosz (Endrju)","Asahi Koishi","BartekChom","Bartosz Wiśniewski","Gabriel Fortin","Hubert Pluta","Jakub Rak (einstein13)","Januzi (januzi)","Jacek Wolszczak (Shutdownrunner)","Jens Beyer","Karol Sobolewski","Łukasz Chełmicki","Mateusz Micał","Michal Maslanko","Michał Rzepiński","orzeh","Patryk Sawicki","Pawel PErz","Stanisław Gackowski (Soeb)","Szymon Fornal","Szymon Gackowski","Szymon Nieznański","tim","Tomasz Sterna","Wesmania","Wojtek","XeonBloomfield",},},},},{heading = "Português (Portuguese)",entries = {{members = {"Almufadado","daniel reis","David Rodrigues","Flávio J. Saraiva","GunChleoc","Marcelo do Pagode","Miguel de Freitas Fonseca","Tiago Silva","trewe",},},},},{heading = "Português do Brasil (Brazilian Portuguese)",entries = {{members = {"Alexandre","alms21","Almufadado","Cleverton","daniel reis","Fabio Garz","Flaviano Angeli","HicHic","Hriostat","Israel","JoãoPedro BrasãoToledo","Juarez S.","Júlio Cezar Santos Pires","Juno","Luiz N","Maraschin","Marcelo do Pagode","Nicolas Abril","Pedro Pisandelli","Proezas","Rafael Neri","Rayback","Rubens Bueno","Samer Ghosnlas.2932","Tomas Abril","Vitor",},},},},{heading = "Română (Romanian)",entries = {{members = {"Ursachi Alexandru",},},},},{heading = "Русский (Russian)",entries = {{members = {"Александр","Александр Бикмеев (Rombal)","Александр Глухов","Алексей Кабанов","Андрей Кулаков ","Андрей Олыкайнен ","Антон Хабаров (lu)","Виктор Биркманис","Владимир Коваленко","Глеб Синковский","Глория Хрусталёва","Денис Дерябин","Егор Панфилов","Константин Щукин","Никита Шехов","Руслан Ковтун","Сергей Фуканчик ","Юрий Соколов (Urra)","CupIvan","Georgiy","gerich","Izon","KroArtem","Lex","Massol","Papazu","SashaQR","TroubleMakerDV","Vampire Hunter D","Vlad",},},},},{heading = "Kinyarwanda",entries = {{members = {"Nasenbaer",},},},},{heading = "සිංහල (Sinhala)",entries = {{members = {"Samith Sandanayake",},},},},{heading = "Slovenčina (Slovak)",entries = {{members = {"Kefir111","Marek Hám","Miroslav Remák","Vladimir","Vladímir Tóth (Ike)",},},},},{heading = "Slovenski jezik (Slovenian)",entries = {{members = {"Andrej Znidarsic","Boštjan Miklavčič","Jure Repinc","kleb","Klemen Košir","Matevž Jekovec","Matic Gradišer","mrt",},},},},{heading = "српски (Serbian)",entries = {{members = {"Никола Павловић",},},},},{heading = "Svenska (Swedish)",entries = {{members = {"Arve Eriksson","Christian Widell","Daniel Nylander (yeager)","Frederik Pettersson (luno)","ivh","Joakim Lundborg","karlrune","Marcus E","Michael Rydén","Patrick H.","Phoenix","Rasmus Olstedt","RasmusBackman","Sigra","Treecko","Tumaini","Ulite",},},},},{heading = "Türkçe (Turkish)",entries = {{members = {"Asiye","Ekrem Kocadere","Ercin Senturk","Recep Hasanbaş","ScriptMonster","Volkan Gezer",},},},},{heading = "українська мова (Ukranian)",entries = {{members = {"Fedik","Shemet Yevhene","Сергій Дубик",},},},},{heading = "Tiếng Việt (Vietnamese)",entries = {{members = {"Nguyen Quang Chien",},},},},{heading = "简体中文 (Simplified Chinese)",entries = {{members = {"luojie-dune","XIA",},},},},{heading = "繁體中文 (Traditional Chinese)",entries = {{members = {"AJ","poormusic","sonny",},},},},} end

=== modified file 'src/editor/ui_menus/editor_main_menu.cc'
--- src/editor/ui_menus/editor_main_menu.cc	2016-01-29 08:37:22 +0000
+++ src/editor/ui_menus/editor_main_menu.cc	2016-03-10 20:23:24 +0000
@@ -26,7 +26,7 @@
 #include "editor/ui_menus/editor_main_menu_new_map.h"
 #include "editor/ui_menus/editor_main_menu_random_map.h"
 #include "editor/ui_menus/editor_main_menu_save_map.h"
-#include "ui_fsmenu/fileview.h"
+#include "wui/fileview.h"
 
 //TODO(unknown): these should be defined globally for the whole UI
 #define width 200
@@ -71,11 +71,11 @@
 		 0, 0, width, 0,
 		 g_gr->images().get("images/ui_basic/but1.png"),
 		 _("Map Options")),
-	button_view_readme_
-		(&box_, "readme",
+	button_about_
+		(&box_, "about",
 		 0, 0, width, 0,
 		 g_gr->images().get("images/ui_basic/but1.png"),
-		 _("View Readme")),
+		 _("About")),
 	button_exit_editor_
 		(&box_, "exit",
 		 0, 0, width, 0,
@@ -87,23 +87,17 @@
 	box_.add(&button_load_map_, UI::Align::kHCenter);
 	box_.add(&button_save_map_, UI::Align::kHCenter);
 	box_.add(&button_map_options_, UI::Align::kHCenter);
-	box_.add(&button_view_readme_, UI::Align::kHCenter);
+	box_.add(&button_about_, UI::Align::kHCenter);
 	box_.add(&button_exit_editor_, UI::Align::kHCenter);
 	box_.set_size(width, 7 * button_new_map_.get_h()+ 6 * vspacing);
 	set_inner_size(get_inner_w(), box_.get_h() + 2 * margin);
 
+	button_about_.sigclicked.connect(boost::bind(&EditorMainMenu::about_btn, boost::ref(*this)));
 	button_new_map_.sigclicked.connect(boost::bind(&EditorMainMenu::new_map_btn, this));
 	button_new_random_map_.sigclicked.connect(boost::bind(&EditorMainMenu::new_random_map_btn, this));
 	button_load_map_.sigclicked.connect(boost::bind(&EditorMainMenu::load_btn, this));
 	button_save_map_.sigclicked.connect(boost::bind(&EditorMainMenu::save_btn, this));
 	button_map_options_.sigclicked.connect(boost::bind(&EditorMainMenu::map_options_btn, this));
-
-	window_readme_.open_window = [this] {
-		fileview_window(eia(), window_readme_, "txts/editor_readme.lua");
-	};
-	button_view_readme_.sigclicked.connect(
-		boost::bind(&UI::UniqueWindow::Registry::toggle, window_readme_));
-
 	button_exit_editor_.sigclicked.connect(boost::bind(&EditorMainMenu::exit_btn, this));
 
 	// Put in the default position, if necessary
@@ -114,6 +108,18 @@
 /**
  * Called, when buttons get clicked
 */
+void EditorMainMenu::about_btn() {
+	if (window_readme_.window) {
+		delete window_readme_.window;
+	} else {
+		FileViewWindow* fileview = new FileViewWindow(eia(), window_readme_, _("About the Widelands Editor"));
+		fileview->add_tab("txts/editor_readme.lua");
+		fileview->add_tab("txts/LICENSE.lua");
+		fileview->add_tab("txts/AUTHORS.lua");
+		fileview->add_tab("txts/TRANSLATORS.lua");
+	}
+}
+
 void EditorMainMenu::new_map_btn() {
 	new MainMenuNewMap(eia());
 	die();

=== modified file 'src/editor/ui_menus/editor_main_menu.h'
--- src/editor/ui_menus/editor_main_menu.h	2016-01-16 12:55:14 +0000
+++ src/editor/ui_menus/editor_main_menu.h	2016-03-10 20:23:24 +0000
@@ -40,16 +40,17 @@
 	UI::Button button_load_map_;
 	UI::Button button_save_map_;
 	UI::Button button_map_options_;
-	UI::Button button_view_readme_;
+	UI::Button button_about_;
 	UI::Button button_exit_editor_;
 
 	UI::UniqueWindow::Registry window_readme_;
 
+	void about_btn      ();
 	void exit_btn       ();
 	void load_btn       ();
 	void save_btn       ();
 	void new_map_btn    ();
-	void new_random_map_btn    ();
+	void new_random_map_btn();
 	void map_options_btn();
 };
 

=== modified file 'src/graphic/text/sdl_ttf_font.cc'
--- src/graphic/text/sdl_ttf_font.cc	2016-02-14 14:16:26 +0000
+++ src/graphic/text/sdl_ttf_font.cc	2016-03-10 20:23:24 +0000
@@ -128,9 +128,6 @@
 }
 
 void SdlTtfFont::m_set_style(int style) {
-	// Those must have been handled by loading the correct font.
-	// NOCOM assert(!(style & BOLD));
-	//assert(!(style & ITALIC));
 
 	int sdl_style = TTF_STYLE_NORMAL;
 	if (style & UNDERLINE) sdl_style |= TTF_STYLE_UNDERLINE;

=== modified file 'src/ui_basic/CMakeLists.txt'
--- src/ui_basic/CMakeLists.txt	2015-11-28 11:45:40 +0000
+++ src/ui_basic/CMakeLists.txt	2016-03-10 20:23:24 +0000
@@ -8,6 +8,8 @@
     checkbox.h
     editbox.cc
     editbox.h
+    fileview_panel.cc
+    fileview_panel.h
     icon.cc
     icon.h
     icongrid.cc

=== added file 'src/ui_basic/fileview_panel.cc'
--- src/ui_basic/fileview_panel.cc	1970-01-01 00:00:00 +0000
+++ src/ui_basic/fileview_panel.cc	2016-03-10 20:23:24 +0000
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2016 by Widelands Development Team
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ */
+
+#include "ui_basic/fileview_panel.h"
+
+#include <memory>
+
+#include <boost/format.hpp>
+
+#include "scripting/lua_interface.h"
+#include "scripting/lua_table.h"
+
+namespace UI {
+
+FileViewPanel::FileViewPanel(Panel* parent, int32_t x, int32_t y, int32_t w, int32_t h,
+									  const Image* background, TabPanel::Type border_type)
+	:
+	TabPanel(parent, x, y, w, h, background, border_type),
+	padding_(5)
+{}
+
+void FileViewPanel::add_tab(const std::string& lua_script) {
+	std::string content, title;
+	try {
+		LuaInterface lua;
+		std::unique_ptr<LuaTable> t(lua.run_script(lua_script));
+		content = t->get_string("text");
+		title = t->get_string("title");
+	} catch (LuaError & err) {
+		content = err.what();
+		title = "Lua error";
+	}
+	boxes_.push_back(std::unique_ptr<UI::Box>(new UI::Box(this, 0, 0, UI::Box::Vertical, 0, 0, padding_)));
+	size_t index = boxes_.size() - 1;
+
+	// If there is a border, we have less space
+	const int width = border_type_ == TabPanel::Type::kNoBorder ?
+								 get_w() - padding_ :
+								 get_w() - 2 * padding_;
+
+	const int height = border_type_ == TabPanel::Type::kNoBorder ?
+								 get_inner_h() - 2 * padding_ - UI::kTabPanelButtonHeight :
+								 get_inner_h() - 3 * padding_ - UI::kTabPanelButtonHeight;
+
+	textviews_.push_back(std::unique_ptr<UI::MultilineTextarea>(
+									new UI::MultilineTextarea(boxes_.at(index).get(), 0, 0, width, height, content)));
+	add((boost::format("about_%lu") % index).str(),
+				 title,
+				 boxes_.at(index).get(),
+				 "");
+	boxes_.at(index)->set_size(get_inner_w(), get_inner_h());
+
+	assert(boxes_.size() == textviews_.size());
+	assert(tabs().size() == textviews_.size());
+}
+
+} // namespace UI

=== added file 'src/ui_basic/fileview_panel.h'
--- src/ui_basic/fileview_panel.h	1970-01-01 00:00:00 +0000
+++ src/ui_basic/fileview_panel.h	2016-03-10 20:23:24 +0000
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 by the Widelands Development Team
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ */
+
+#ifndef WL_UI_BASIC_FILEVIEW_PANEL_H
+#define WL_UI_BASIC_FILEVIEW_PANEL_H
+
+#include <string>
+#include <memory>
+#include <vector>
+
+#include "ui_basic/box.h"
+#include "ui_basic/multilinetextarea.h"
+#include "ui_basic/tabpanel.h"
+
+namespace UI {
+
+/**
+ * A panel with tabs that get filled from Lua scripts.
+ */
+class FileViewPanel : public TabPanel {
+public:
+	FileViewPanel(Panel * parent,
+					  int32_t x, int32_t y, int32_t w, int32_t h,
+					  const Image* background,
+					  TabPanel::Type border_type = TabPanel::Type::kNoBorder);
+
+	/// Adds a tab with the contents of 'lua_script'.
+	/// 'lua_script' must return a table that contains 'title' and 'text' keys.
+	void add_tab(const std::string& lua_script);
+
+private:
+	const uint32_t padding_;
+
+	// Tab contents
+	std::vector<std::unique_ptr<Box>> boxes_;
+	std::vector<std::unique_ptr<MultilineTextarea>> textviews_;
+};
+
+} // namespace UI
+
+#endif  // end of include guard: WL_UI_BASIC_FILEVIEW_PANEL_H

=== modified file 'src/ui_basic/tabpanel.cc'
--- src/ui_basic/tabpanel.cc	2016-02-14 14:09:29 +0000
+++ src/ui_basic/tabpanel.cc	2016-03-10 20:23:24 +0000
@@ -26,9 +26,6 @@
 
 namespace UI {
 
-// Button height of tab buttons in pixels. Is also used for width with pictorial buttons.
-constexpr int kTabPanelButtonHeight = 34;
-
 // Margin around image. The image will be scaled down to fit into this rectangle with preserving size.
 constexpr int kTabPanelImageMargin = 2;
 
@@ -97,10 +94,10 @@
 	 TabPanel::Type border_type)
 	:
 	Panel           (parent, x, y, 0, 0),
+	border_type_    (border_type),
 	active_         (0),
 	highlight_      (kNotFound),
-	pic_background_ (background),
-	border_type_    (border_type)
+	pic_background_ (background)
 {}
 TabPanel::TabPanel
 	(Panel * const parent,
@@ -109,10 +106,10 @@
 	 TabPanel::Type border_type)
 	:
 	Panel           (parent, x, y, w, h),
+	border_type_    (border_type),
 	active_         (0),
 	highlight_      (kNotFound),
-	pic_background_ (background),
-	border_type_    (border_type)
+	pic_background_ (background)
 {}
 
 /**
@@ -150,10 +147,10 @@
 
 		panel->get_desired_size(&panelw, &panelh);
 		// TODO(unknown):  the panel might be bigger -> add a scrollbar in that case
-		//panel->set_size(panelw, panelh);
 
-		if (panelw > w)
+		if (panelw > w) {
 			w = panelw;
+		}
 		h += panelh;
 	}
 

=== modified file 'src/ui_basic/tabpanel.h'
--- src/ui_basic/tabpanel.h	2016-02-08 12:38:48 +0000
+++ src/ui_basic/tabpanel.h	2016-03-10 20:23:24 +0000
@@ -27,6 +27,10 @@
 #include "ui_basic/panel.h"
 
 namespace UI {
+
+// Button height of tab buttons in pixels. Is also used for width with pictorial buttons.
+constexpr int kTabPanelButtonHeight = 34;
+
 /**
  * This represents a Tab of the TabPanel. Note that this does no work
  * of drawing itself or handling anything really, it is only here to
@@ -122,6 +126,8 @@
 	void layout() override;
 	void update_desired_size() override;
 
+	TabPanel::Type border_type_;    ///< whether there will be a border around the panels.
+
 private:
 	// Common adding function for textual and pictorial tabs
 	uint32_t add_tab(int32_t width,
@@ -147,7 +153,6 @@
 	size_t           highlight_;      ///< index of the highlighted button
 
 	const Image*     pic_background_; ///< picture used to draw background
-	TabPanel::Type   border_type_;    ///< whether there will be a border around the panels.
 };
 }
 

=== modified file 'src/ui_fsmenu/CMakeLists.txt'
--- src/ui_fsmenu/CMakeLists.txt	2015-11-28 11:45:40 +0000
+++ src/ui_fsmenu/CMakeLists.txt	2016-03-10 20:23:24 +0000
@@ -1,11 +1,11 @@
 wl_library(ui_fsmenu
   SRCS
+    about.cc
+    about.h
     base.cc
     base.h
     campaign_select.cc
     campaign_select.h
-    fileview.cc
-    fileview.h
     helpwindow.cc
     helpwindow.h
     internet_lobby.cc

=== added file 'src/ui_fsmenu/about.cc'
--- src/ui_fsmenu/about.cc	1970-01-01 00:00:00 +0000
+++ src/ui_fsmenu/about.cc	2016-03-10 20:23:24 +0000
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2016 by Widelands Development Team
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ */
+
+#include "ui_fsmenu/about.h"
+
+#include <map>
+#include <memory>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/format.hpp>
+
+#include "base/i18n.h"
+#include "graphic/font_handler1.h"
+#include "graphic/graphic.h"
+#include "graphic/text/font_set.h"
+#include "graphic/text_constants.h"
+#include "io/filesystem/filesystem.h"
+#include "scripting/lua_interface.h"
+#include "scripting/lua_table.h"
+
+
+FullscreenMenuAbout::FullscreenMenuAbout()
+	:
+	FullscreenMenuBase(),
+
+// Values for alignment and size
+	butw_    (get_w() / 5),
+	buth_    (get_h() * 9 / 200),
+	hmargin_ (get_w() * 19 / 200),
+	padding_ (10),
+	tab_panel_width_(get_inner_w() - 2 * hmargin_),
+	tab_panel_y_(get_h() * 14 / 100),
+
+	title_(this, get_w() / 2, buth_, _("About Widelands"), UI::Align::kCenter),
+
+	close_
+		(this, "close",
+		 get_w() * 2 / 4 - butw_ / 2,
+		 get_inner_h() - hmargin_,
+		 butw_, buth_,
+		 g_gr->images().get("images/ui_basic/but2.png"),
+		 _("Close"), std::string(), true, false),
+
+	tabs_(this, hmargin_, 0,
+			tab_panel_width_, get_inner_h() - tab_panel_y_ - buth_ - hmargin_,
+			g_gr->images().get("images/ui_basic/but1.png"),
+			UI::TabPanel::Type::kBorder)
+{
+	title_.set_fontsize(UI_FONT_SIZE_BIG);
+	tabs_.set_pos(Point(hmargin_, tab_panel_y_));
+
+	tabs_.add_tab("txts/README.lua");
+	tabs_.add_tab("txts/LICENSE.lua");
+	tabs_.add_tab("txts/AUTHORS.lua");
+	tabs_.add_tab("txts/TRANSLATORS.lua");
+
+	close_.sigclicked.connect(boost::bind(&FullscreenMenuAbout::clicked_back, this));
+}

=== added file 'src/ui_fsmenu/about.h'
--- src/ui_fsmenu/about.h	1970-01-01 00:00:00 +0000
+++ src/ui_fsmenu/about.h	2016-03-10 20:23:24 +0000
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2016 by the Widelands Development Team
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ */
+
+#ifndef WL_UI_FSMENU_ABOUT_H
+#define WL_UI_FSMENU_ABOUT_H
+
+#include <cstring>
+#include <string>
+#include <memory>
+#include <vector>
+
+#include "ui_fsmenu/base.h"
+#include "ui_basic/box.h"
+#include "ui_basic/button.h"
+#include "ui_basic/fileview_panel.h"
+#include "ui_basic/multilinetextarea.h"
+#include "ui_basic/tabpanel.h"
+#include "ui_basic/textarea.h"
+
+/**
+ * "Fullscreen "About" information with tabs
+ */
+class FullscreenMenuAbout : public FullscreenMenuBase {
+public:
+	FullscreenMenuAbout();
+
+private:
+	uint32_t const              butw_;
+	uint32_t const              buth_;
+	uint32_t const              hmargin_;
+	uint32_t const              padding_;
+	uint32_t const              tab_panel_width_;
+	uint32_t const              tab_panel_y_;
+
+	UI::Textarea                title_;
+	UI::Button                  close_;
+
+	// Tab contents
+	UI::FileViewPanel tabs_;
+};
+
+#endif  // end of include guard: WL_UI_FSMENU_ABOUT_H

=== modified file 'src/ui_fsmenu/base.h'
--- src/ui_fsmenu/base.h	2016-02-07 18:10:53 +0000
+++ src/ui_fsmenu/base.h	2016-03-10 20:23:24 +0000
@@ -45,9 +45,7 @@
 		kReplay,
 		kEditor,
 		kOptions,
-		kReadme,
-		kLicense,
-		kAuthors,
+		kAbout,
 		kExit,
 
 		// Single player

=== modified file 'src/ui_fsmenu/main.cc'
--- src/ui_fsmenu/main.cc	2016-02-04 09:10:44 +0000
+++ src/ui_fsmenu/main.cc	2016-03-10 20:23:24 +0000
@@ -50,15 +50,9 @@
 	options
 		(&vbox, "options", 0, 0, butw_, buth_, g_gr->images().get(button_background_),
 		 _("Options"), "", true, false),
-	readme
-		(&vbox, "readme", 0, 0, butw_, buth_, g_gr->images().get(button_background_),
-		 _("View Readme"), "", true, false),
-	license
-		(&vbox, "license", 0, 0, butw_, buth_, g_gr->images().get(button_background_),
-		 _("License"), "", true, false),
-	authors
-		(&vbox, "authors", 0, 0, butw_, buth_, g_gr->images().get(button_background_),
-		 _("Authors"), "", true, false),
+	about
+		(&vbox, "about", 0, 0, butw_, buth_, g_gr->images().get(button_background_),
+		 _("About Widelands"), "", true, false),
 	exit
 		(&vbox, "exit", 0, 0, butw_, buth_, g_gr->images().get(button_background_),
 		 _("Exit Widelands"), "", true, false),
@@ -104,46 +98,36 @@
 		(boost::bind
 			 (&FullscreenMenuMain::end_modal<FullscreenMenuBase::MenuTarget>, boost::ref(*this),
 			  FullscreenMenuBase::MenuTarget::kOptions));
-	readme.sigclicked.connect
-		(boost::bind
-			 (&FullscreenMenuMain::end_modal<FullscreenMenuBase::MenuTarget>, boost::ref(*this),
-			  FullscreenMenuBase::MenuTarget::kReadme));
-	license.sigclicked.connect
-		(boost::bind
-			 (&FullscreenMenuMain::end_modal<FullscreenMenuBase::MenuTarget>, boost::ref(*this),
-			  FullscreenMenuBase::MenuTarget::kLicense));
-	authors.sigclicked.connect
-		(boost::bind
-			 (&FullscreenMenuMain::end_modal<FullscreenMenuBase::MenuTarget>, boost::ref(*this),
-			  FullscreenMenuBase::MenuTarget::kAuthors));
+	about.sigclicked.connect
+		(boost::bind
+			 (&FullscreenMenuMain::end_modal<FullscreenMenuBase::MenuTarget>, boost::ref(*this),
+			  FullscreenMenuBase::MenuTarget::kAbout));
 	exit.sigclicked.connect
 		(boost::bind
 			 (&FullscreenMenuMain::end_modal<FullscreenMenuBase::MenuTarget>, boost::ref(*this),
 			  FullscreenMenuBase::MenuTarget::kExit));
 
 	vbox.add(&playtutorial, UI::Align::kHCenter);
-
-	vbox.add_space(padding_);
-
 	vbox.add(&singleplayer, UI::Align::kHCenter);
 	vbox.add(&multiplayer, UI::Align::kHCenter);
+
+	vbox.add_space(2 * padding_);
+
 	vbox.add(&replay, UI::Align::kHCenter);
 
-	vbox.add_space(padding_);
+	vbox.add_space(2 * padding_);
 
 	vbox.add(&editor, UI::Align::kHCenter);
 
-	vbox.add_space(padding_);
+	vbox.add_space(2 * padding_);
 
 	vbox.add(&options, UI::Align::kHCenter);
 
-	vbox.add_space(padding_);
-
-	vbox.add(&readme, UI::Align::kHCenter);
-	vbox.add(&license, UI::Align::kHCenter);
-	vbox.add(&authors, UI::Align::kHCenter);
-
-	vbox.add_space(padding_);
+	vbox.add_space(2 * padding_);
+
+	vbox.add(&about, UI::Align::kHCenter);
+
+	vbox.add_space(5 * padding_);
 
 	vbox.add(&exit, UI::Align::kHCenter);
 

=== modified file 'src/ui_fsmenu/main.h'
--- src/ui_fsmenu/main.h	2015-08-05 10:44:37 +0000
+++ src/ui_fsmenu/main.h	2016-03-10 20:23:24 +0000
@@ -44,9 +44,7 @@
 	UI::Button   replay;
 	UI::Button   editor;
 	UI::Button   options;
-	UI::Button   readme;
-	UI::Button   license;
-	UI::Button   authors;
+	UI::Button   about;
 	UI::Button   exit;
 	UI::Textarea version;
 	UI::Textarea copyright;

=== modified file 'src/wlapplication.cc'
--- src/wlapplication.cc	2016-02-18 18:12:48 +0000
+++ src/wlapplication.cc	2016-03-10 20:23:24 +0000
@@ -75,8 +75,8 @@
 #include "sound/sound_handler.h"
 #include "ui_basic/messagebox.h"
 #include "ui_basic/progresswindow.h"
+#include "ui_fsmenu/about.h"
 #include "ui_fsmenu/campaign_select.h"
-#include "ui_fsmenu/fileview.h"
 #include "ui_fsmenu/internet_lobby.h"
 #include "ui_fsmenu/intro.h"
 #include "ui_fsmenu/launch_spg.h"
@@ -1024,18 +1024,8 @@
 				OptionsCtrl om(s);
 				break;
 			}
-			case FullscreenMenuBase::MenuTarget::kReadme: {
-				FullscreenMenuFileView ff("txts/README.lua");
-				ff.run<FullscreenMenuBase::MenuTarget>();
-				break;
-			}
-			case FullscreenMenuBase::MenuTarget::kLicense: {
-				FullscreenMenuFileView ff("txts/LICENSE.lua");
-				ff.run<FullscreenMenuBase::MenuTarget>();
-				break;
-			}
-			case FullscreenMenuBase::MenuTarget::kAuthors: {
-				FullscreenMenuFileView ff("txts/AUTHORS.lua");
+			case FullscreenMenuBase::MenuTarget::kAbout: {
+				FullscreenMenuAbout ff;
 				ff.run<FullscreenMenuBase::MenuTarget>();
 				break;
 			}

=== modified file 'src/wui/CMakeLists.txt'
--- src/wui/CMakeLists.txt	2016-02-06 18:58:57 +0000
+++ src/wui/CMakeLists.txt	2016-03-10 20:23:24 +0000
@@ -97,6 +97,8 @@
     encyclopedia_window.h
     fieldaction.cc
     fieldaction.h
+    fileview.cc
+    fileview.h
     game_debug_ui.cc
     game_debug_ui.h
     game_main_menu.cc
@@ -204,7 +206,6 @@
     scripting_lua_table
     sound
     ui_basic
-    ui_fsmenu
     widelands_ball_of_mud
     wui_chat_ui
     wui_edge_overlay_manager

=== renamed file 'src/ui_fsmenu/fileview.cc' => 'src/wui/fileview.cc'
--- src/ui_fsmenu/fileview.cc	2016-02-09 21:14:53 +0000
+++ src/wui/fileview.cc	2016-03-10 20:23:24 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002, 2006-2011 by the Widelands Development Team
+ * Copyright (C) 2002-2016 by the Widelands Development Team
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -17,144 +17,23 @@
  *
  */
 
-#include "ui_fsmenu/fileview.h"
-
-#include <map>
-#include <memory>
-
-#include <boost/algorithm/string.hpp>
-#include <boost/format.hpp>
-
-#include "base/i18n.h"
-#include "graphic/font_handler1.h"
+#include "wui/fileview.h"
+
 #include "graphic/graphic.h"
-#include "graphic/text/font_set.h"
-#include "graphic/text_constants.h"
-#include "io/filesystem/filesystem.h"
-#include "scripting/lua_interface.h"
-#include "scripting/lua_table.h"
-
-namespace {
-bool read_text(const std::string& filename, std::string* title, std::string* content) {
-	try {
-		LuaInterface lua;
-		std::unique_ptr<LuaTable> t(lua.run_script(filename));
-		*content = t->get_string("text");
-		*title = t->get_string("title");
-	} catch (LuaError & err) {
-		*content = err.what();
-		*title = "Lua error";
-		return false;
+
+FileViewWindow::FileViewWindow
+	(UI::Panel& parent, UI::UniqueWindow::Registry& reg, const std::string& title)
+	:
+	  UI::UniqueWindow(&parent, "file_view", &reg, 0, 0, title),
+	  tabs_(this, 0, 0, 560, 340, g_gr->images().get("images/ui_basic/but4.png"))
+ {
+	set_inner_size(560, 340);
+
+	if (get_usedefaultpos()) {
+		center_to_parent();
 	}
-	return true;
-}
-
-}  // namespace
-
-FullscreenMenuTextView::FullscreenMenuTextView
-	()
-	:
-	FullscreenMenuBase("images/ui_fsmenu/fileviewmenu.jpg"),
-
-	title (this, get_w() * 3 / 50, get_h() / 10, "", UI::Align::kCenter),
-
-	textview
-		(this,
-		 get_w() *   3 /   80, get_h() * 283 / 1000,
-		 get_w() * 919 / 1000, get_h() *  11 /   20),
-
-	close_button
-		(this, "close",
-		 get_w() * 3 / 8, get_h() * 9 / 10, get_w() / 4, get_h() * 9 / 200,
-		 g_gr->images().get("images/ui_basic/but0.png"),
-		 _("Close"), std::string(), true, false)
-{
-	close_button.sigclicked.connect(
-				boost::bind(&FullscreenMenuTextView::end_modal<FullscreenMenuBase::MenuTarget>,
-								boost::ref(*this),
-								FullscreenMenuBase::MenuTarget::kBack));
-
-	title.set_fontsize(fs_big());
-	title.set_pos
-		(Point((get_inner_w() - title.get_w()) / 2, get_h() * 167 / 1000));
-}
-
-void FullscreenMenuTextView::set_text(const std::string & text)
-{
-	textview.set_text(text);
-}
-
-void FullscreenMenuTextView::set_title(const std::string& text)
-{
-	title.set_text(text);
-}
-
-FullscreenMenuFileView::FullscreenMenuFileView(const std::string & filename)
-: FullscreenMenuTextView()
-{
-	std::string content, title_text;
-	read_text(filename, &title_text, &content);
-	set_text(content);
-	set_title(title_text);
-}
-
-struct TextViewWindow : public UI::UniqueWindow {
-	TextViewWindow
-		(UI::Panel                  & parent,
-		 UI::UniqueWindow::Registry & reg);
-protected:
-	void set_text(const std::string & text);
-private:
-	UI::MultilineTextarea textview;
-};
-
-TextViewWindow::TextViewWindow
-	(UI::Panel                  & parent,
-	 UI::UniqueWindow::Registry & reg)
-	:
-	UI::UniqueWindow(&parent, "file_view", &reg, 0, 0, ""),
-	textview(this, 0, 0, 560, 240)
-{
-	set_inner_size(560, 240);
-
-	if (get_usedefaultpos())
-		center_to_parent();
-}
-
-void TextViewWindow::set_text(const std::string& text)
-{
-	textview.set_text(text);
-}
-
-
-struct FileViewWindow : public TextViewWindow {
-	FileViewWindow
-		(UI::Panel                  & parent,
-		 UI::UniqueWindow::Registry & reg,
-		 const std::string          & filename);
-};
-
-FileViewWindow::FileViewWindow
-	(UI::Panel                  & parent,
-	 UI::UniqueWindow::Registry & reg,
-	 const std::string          & filename)
-	:
-	TextViewWindow(parent, reg)
-{
-	std::string title_text, content;
-	read_text(filename, &title_text, &content);
-	set_text(content);
-	set_title(title_text);
-}
-
-
-/**
- * Display the contents of a text file in a scrollable window.
-*/
-void fileview_window
-	(UI::Panel                  & parent,
-	 UI::UniqueWindow::Registry & reg,
-	 const std::string          & filename)
-{
-	new FileViewWindow(parent, reg, filename);
+}
+
+void FileViewWindow::add_tab(const std::string& lua_script) {
+	tabs_.add_tab(lua_script);
 }

=== renamed file 'src/ui_fsmenu/fileview.h' => 'src/wui/fileview.h'
--- src/ui_fsmenu/fileview.h	2015-08-05 10:44:37 +0000
+++ src/wui/fileview.h	2016-03-10 20:23:24 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002, 2006, 2008-2009 by the Widelands Development Team
+ * Copyright (C) 2002-2016 by the Widelands Development Team
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -17,48 +17,21 @@
  *
  */
 
-#ifndef WL_UI_FSMENU_FILEVIEW_H
-#define WL_UI_FSMENU_FILEVIEW_H
+#ifndef WL_WUI_FILEVIEW_H
+#define WL_WUI_FILEVIEW_H
 
 #include <cstring>
 #include <string>
 
-#include "ui_fsmenu/base.h"
-#include "ui_basic/button.h"
-#include "ui_basic/multilinetextarea.h"
-#include "ui_basic/textarea.h"
+#include "ui_basic/fileview_panel.h"
 #include "ui_basic/unique_window.h"
 
-void fileview_window
-	(UI::Panel                  & parent,
-	 UI::UniqueWindow::Registry & reg,
-	 const std::string          & filename);
-
-/**
- * Shows a Text in a Fullscreen Menu. Can automatically handle Lua files and
- * plain text files. Waits for the button Ok to be clicked.
-*/
-class FullscreenMenuTextView : public FullscreenMenuBase {
-public:
-	FullscreenMenuTextView();
-
-protected:
-	void set_title(const std::string& title);
-	void set_text(const std::string& text);
+struct FileViewWindow : public UI::UniqueWindow {
+	FileViewWindow(UI::Panel& parent, UI::UniqueWindow::Registry& reg, const std::string& title);
+	void add_tab(const std::string& lua_script);
 
 private:
-	UI::Textarea                                title;
-	UI::MultilineTextarea                      textview;
-	UI::Button                     close_button;
-};
-
-/**
- * Shows an ASCII-File in a Fullscreen Menu. Waits for the button Ok
- * to be clicked.
- */
-class FullscreenMenuFileView : public FullscreenMenuTextView {
-public:
-	FullscreenMenuFileView(const std::string & filename);
-};
-
-#endif  // end of include guard: WL_UI_FSMENU_FILEVIEW_H
+	UI::FileViewPanel tabs_;
+};
+
+#endif  // end of include guard: WL_WUI_FILEVIEW_H

=== modified file 'src/wui/game_options_menu.cc'
--- src/wui/game_options_menu.cc	2016-01-29 08:37:22 +0000
+++ src/wui/game_options_menu.cc	2016-03-10 20:23:24 +0000
@@ -27,7 +27,7 @@
 #include "base/i18n.h"
 #include "graphic/graphic.h"
 #include "sound/sound_handler.h"
-#include "ui_fsmenu/fileview.h"
+#include "wui/fileview.h"
 #include "wui/game_main_menu_save_game.h"
 #include "wui/game_options_sound_menu.h"
 #include "wui/unique_window_handler.h"
@@ -71,27 +71,13 @@
 	windows_(windows),
 	box_(this, margin, margin, UI::Box::Vertical,
 		  width, get_h() - 2 * margin, vspacing),
-	readme_
-		(&box_, "readme",
-		 0, 0, width, 0,
-		 g_gr->images().get("images/ui_basic/but4.png"),
-		 _("README"),
-		/** TRANSLATORS: Button tooltip */
-		_("Show general information about Widelands and keyboard shortcuts")),
-	license_
-		(&box_, "license",
-		 0, 0, width, 0,
-		 g_gr->images().get("images/ui_basic/but4.png"),
-		 _("License"),
-		/** TRANSLATORS: Button tooltip */
-		_("Show the distribution licence document")),
-	authors_
+	about_
 		(&box_, "authors",
 		 0, 0, width, 0,
 		 g_gr->images().get("images/ui_basic/but4.png"),
-		 _("Authors"),
+		 _("About"),
 		/** TRANSLATORS: Button tooltip */
-		_("Show information about the Widelands Development Team")),
+		_("Show information about Widelands")),
 	sound_
 		(&box_, "sound_options",
 		 0, 0, width, 0,
@@ -114,55 +100,45 @@
 		 /** TRANSLATORS: Button tooltip */
 		 _("Exit Game"))
 {
-	box_.add(&readme_, UI::Align::kHCenter);
-	box_.add(&license_, UI::Align::kHCenter);
-	box_.add(&authors_, UI::Align::kHCenter);
+	box_.add(&about_, UI::Align::kHCenter);
 	box_.add_space(vgap);
 	box_.add(&sound_, UI::Align::kHCenter);
 	box_.add_space(vgap);
 	box_.add(&save_game_, UI::Align::kHCenter);
 	box_.add(&exit_game_, UI::Align::kHCenter);
-	box_.set_size(width, 4 * readme_.get_h() + 2 * save_game_.get_h() + 2 * vgap + 7 * vspacing);
+	box_.set_size(width, 2 * about_.get_h() + 2 * save_game_.get_h() + 2 * vgap + 5 * vspacing);
 	set_inner_size(get_inner_w(), box_.get_h() + 2 * margin);
 
-	readme_.sigclicked.connect
-		(boost::bind(&UI::UniqueWindow::Registry::toggle, boost::ref(windows_.readme)));
-	license_.sigclicked.connect
-		(boost::bind(&UI::UniqueWindow::Registry::toggle, boost::ref(windows_.license)));
-	authors_.sigclicked.connect
-		(boost::bind(&UI::UniqueWindow::Registry::toggle, boost::ref(windows_.authors)));
+	about_.sigclicked.connect(boost::bind(&GameOptionsMenu::clicked_about, boost::ref(*this)));
 	sound_.sigclicked.connect(boost::bind(&GameOptionsMenu::clicked_sound, boost::ref(*this)));
 	save_game_.sigclicked.connect(boost::bind(&GameOptionsMenu::clicked_save_game, boost::ref(*this)));
 	exit_game_.sigclicked.connect(boost::bind(&GameOptionsMenu::clicked_exit_game, boost::ref(*this)));
 
 
-	windows_.readme.open_window = boost::bind
-		(&fileview_window, boost::ref(igb_),
-		 boost::ref(windows_.readme),
-		 "txts/README.lua");
-	windows_.license.open_window = boost::bind
-		(&fileview_window, boost::ref(igb_),
-		 boost::ref(windows_.license),
-		 "txts/LICENSE.lua");
-	windows_.authors.open_window = boost::bind
-		(&fileview_window, boost::ref(igb_),
-		 boost::ref(windows_.license),
-		 "txts/AUTHORS.lua");
-
 #define INIT_BTN_HOOKS(registry, btn)                                        \
  registry.on_create = std::bind(&UI::Button::set_perm_pressed, &btn, true);  \
  registry.on_delete = std::bind(&UI::Button::set_perm_pressed, &btn, false); \
  if (registry.window) btn.set_perm_pressed(true);                            \
 
-	INIT_BTN_HOOKS(windows_.readme, readme_)
-	INIT_BTN_HOOKS(windows_.license, license_)
-	INIT_BTN_HOOKS(windows_.authors, authors_)
+	INIT_BTN_HOOKS(windows_.authors, about_)
 	INIT_BTN_HOOKS(windows_.sound_options, sound_)
 
 	if (get_usedefaultpos())
 		center_to_parent();
 }
 
+void GameOptionsMenu::clicked_about() {
+	if (windows_.authors.window) {
+		delete windows_.authors.window;
+	} else {
+		FileViewWindow* fileview = new FileViewWindow(igb_, windows_.authors, _("About Widelands"));
+		fileview->add_tab("txts/README.lua");
+		fileview->add_tab("txts/LICENSE.lua");
+		fileview->add_tab("txts/AUTHORS.lua");
+		fileview->add_tab("txts/TRANSLATORS.lua");
+	}
+}
+
 
 void GameOptionsMenu::clicked_sound() {
 	if (windows_.sound_options.window)

=== modified file 'src/wui/game_options_menu.h'
--- src/wui/game_options_menu.h	2015-09-25 13:08:22 +0000
+++ src/wui/game_options_menu.h	2016-03-10 20:23:24 +0000
@@ -39,14 +39,13 @@
 	InteractiveGameBase& igb_;
 	InteractiveGameBase::GameMainMenuWindows& windows_;
 	UI::Box box_;
-	UI::Button readme_;
-	UI::Button license_;
-	UI::Button authors_;
+	UI::Button about_;
 	UI::Button sound_;
 	UI::Button save_game_;
 	UI::Button exit_game_;
 
 	void clicked_sound    ();
+	void clicked_about    ();
 	void clicked_save_game();
 	void clicked_exit_game();
 };

=== modified file 'utils/update_authors.py'
--- utils/update_authors.py	2016-01-28 06:19:02 +0000
+++ utils/update_authors.py	2016-03-10 20:23:24 +0000
@@ -26,8 +26,6 @@
 # Each language's translators live in a separate file, so we list the dir
 source_files = sorted(os.listdir(source_path), key=str.lower)
 
-lua_translators = ""
-
 lua_locales = "-- This file is generated by utils/update_authors.py.\n"
 lua_locales += "-- The locale data is managed in Transifex.\n\n"
 lua_locales += "return {\n"
@@ -41,6 +39,9 @@
 lua_locales += '\t\tfont = "default"\n'
 lua_locales += '\t},\n'
 
+lua_translators = ""
+lua_translators += "function translators() return {" # developers
+
 for source_filename in source_files:
 	# Only json files, and not the template file please
 	if source_filename.endswith(".json") and source_filename != "locales_translators.json":
@@ -53,16 +54,19 @@
 		if translators["translator-list"] != 'translator-credits':
 			locale_message += " translators and"
 			lua_translators += '{' # entry
-			lua_translators += 'subheading = "' + translators["your-language-name"]
+			lua_translators += 'heading = "' + translators["your-language-name"]
 			if translators["your-language-name-in-english"] != 'English' and translators["your-language-name-in-english"] != translators["your-language-name"] :
 				lua_translators += ' (' + translators["your-language-name-in-english"] + ')'
 			lua_translators += '",'
-
+			lua_translators += 'entries = {' # entries
+			lua_translators += '{' # entry
 			lua_translators += 'members = {' # members
 			for transl_name in translators["translator-list"].split("\n"):
 				lua_translators += '"' + transl_name + '",'
 			lua_translators += "}," # members
 			lua_translators += "}," # entry
+			lua_translators += "}," # entries
+			lua_translators += "}," # entry
 
 		# Parsing locale info
 		# Make sure we don't pick up untranslated stuff
@@ -85,12 +89,20 @@
 		print(locale_message)
 lua_locales += "}\n"
 
+lua_translators += "} end" # developers
+
 print("Writing locales\n")
 dest_filename = "locales.lua"
 dest_filepath = os.path.normpath(base_path + "/data/i18n") + "/" + dest_filename
 dest_file = codecs.open(dest_filepath, encoding='utf-8', mode='w')
 dest_file.write(lua_locales)
 
+print("Writing translators\n")
+dest_filename = "translators_data.lua"
+dest_filepath = os.path.normpath(base_path + "/data/txts") + "/" + dest_filename
+dest_file = codecs.open(dest_filepath, encoding='utf-8', mode='w')
+dest_file.write(lua_translators)
+
 print("Reading developers from JSON")
 source_path = os.path.normpath(base_path + "/data/txts")
 
@@ -108,14 +120,13 @@
 
 for category in developers:
 	print("- Adding " + category["heading"])
-	lua_string += '{' # category
-	lua_string += 'heading = _"' + category["heading"] + '",' # This will be localized
-	lua_string += 'image = "' + category["image"] + '",'
-
-	lua_string += 'entries = {' # entries
-	if category["heading"] == "Translators": # Hook for adding the translators parsed above
-		lua_string += lua_translators
-	else:
+	if category["heading"] != "Translators": # Unused hook for adding translators
+		lua_string += '{' # category
+		lua_string += 'heading = _"' + category["heading"] + '",' # This will be localized
+		lua_string += 'image = "' + category["image"] + '",'
+
+		lua_string += 'entries = {' # entries
+
 		for subcategory in category["entries"]:
 			lua_string += '{' # entry
 			if 'subheading' in subcategory:
@@ -127,9 +138,9 @@
 			lua_string += "}," # members
 
 			lua_string += "}," # entry
-	lua_string += "}," # entries
+		lua_string += "}," # entries
 
-	lua_string += "}," # category
+		lua_string += "}," # category
 lua_string += "} end" # developers
 
 print("Writing developers")


Follow ups