1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00

* improved tile support

* misc. bugs fixes


git-svn-id: https://pysolfc.svn.sourceforge.net/svnroot/pysolfc/PySolFC/trunk@80 39dd0a4e-7c14-0410-91b3-c4f2d318f732
This commit is contained in:
skomoroh 2006-10-07 21:13:04 +00:00
parent 76dcd2d1ae
commit e401d6a28e
11 changed files with 289 additions and 382 deletions

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PySol 0.0.1\n"
"POT-Creation-Date: Thu Sep 21 15:56:22 2006\n"
"POT-Creation-Date: Sat Oct 7 20:02:33 2006\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -576,6 +576,9 @@ msgstr ""
msgid "Congress"
msgstr ""
msgid "Constitution"
msgstr ""
msgid "Contradance"
msgstr ""
@ -723,6 +726,9 @@ msgstr ""
msgid "Dojouji's Game Doubled"
msgstr ""
msgid "Dolphin"
msgstr ""
msgid "Doorway"
msgstr ""
@ -738,6 +744,9 @@ msgstr ""
msgid "Double Cockroach"
msgstr ""
msgid "Double Dolphin"
msgstr ""
msgid "Double Dot"
msgstr ""
@ -3132,6 +3141,9 @@ msgstr ""
msgid "Spanish Patience"
msgstr ""
msgid "Spanish Patience II"
msgstr ""
msgid "Sphere"
msgstr ""
@ -3342,6 +3354,12 @@ msgstr ""
msgid "The Great Wall"
msgstr ""
msgid "The Last Monarch"
msgstr ""
msgid "The Last Monarch II"
msgstr ""
msgid "The Little Corporal"
msgstr ""
@ -3354,9 +3372,6 @@ msgstr ""
msgid "The Wish (open)"
msgstr ""
msgid "The last Monarch"
msgstr ""
msgid "Theater"
msgstr ""
@ -3669,6 +3684,9 @@ msgstr ""
msgid "Zeus"
msgstr ""
msgid "Zigzag Course"
msgstr ""
msgid "Zodiac"
msgstr ""

View file

@ -14,7 +14,7 @@ msgid ""
msgstr ""
"#-#-#-#-# pysol-1.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: Thu Sep 21 15:57:22 2006\n"
"POT-Creation-Date: Sat Oct 7 20:03:30 2006\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -24,7 +24,7 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
"#-#-#-#-# pysol-2.pot (PACKAGE VERSION) #-#-#-#-#\n"
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2006-09-21 15:57+0400\n"
"POT-Creation-Date: 2006-10-07 20:03+0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -69,8 +69,8 @@ msgid "&Next number"
msgstr ""
#: pysollib/actions.py:316 pysollib/app.py:1150 pysollib/app.py:1162
#: pysollib/game.py:925 pysollib/game.py:1861 pysollib/main.py:460
#: pysollib/main.py:468 pysollib/tk/colorsdialog.py:122
#: pysollib/game.py:925 pysollib/game.py:1861 pysollib/main.py:478
#: pysollib/main.py:486 pysollib/tk/colorsdialog.py:122
#: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143
#: pysollib/tk/fontsdialog.py:205 pysollib/tk/gameinfodialog.py:155
#: pysollib/tk/playeroptionsdialog.py:85
@ -422,31 +422,31 @@ msgid ""
"This won't come out...\n"
msgstr ""
#: pysollib/game.py:2298
#: pysollib/game.py:2291
msgid "Set bookmark"
msgstr ""
#: pysollib/game.py:2299
#: pysollib/game.py:2292
msgid "Replace existing bookmark %d ?"
msgstr ""
#: pysollib/game.py:2321
#: pysollib/game.py:2314
msgid "Goto bookmark"
msgstr ""
#: pysollib/game.py:2322
#: pysollib/game.py:2315
msgid "Goto bookmark %d ?"
msgstr ""
#: pysollib/game.py:2353
#: pysollib/game.py:2346
msgid "Open game"
msgstr ""
#: pysollib/game.py:2364 pysollib/game.py:2373 pysollib/game.py:2378
#: pysollib/game.py:2357 pysollib/game.py:2366 pysollib/game.py:2371
msgid "Load game error"
msgstr ""
#: pysollib/game.py:2365
#: pysollib/game.py:2358
msgid ""
"Error while loading game.\n"
"\n"
@ -454,22 +454,22 @@ msgid ""
"but this could also be a bug you might want to report."
msgstr ""
#: pysollib/game.py:2374
#: pysollib/game.py:2367
msgid "Error while loading game"
msgstr ""
#: pysollib/game.py:2379
#: pysollib/game.py:2372
msgid ""
"Internal error while loading game.\n"
"\n"
"Please report this bug."
msgstr ""
#: pysollib/game.py:2404
#: pysollib/game.py:2397
msgid "Save game error"
msgstr ""
#: pysollib/game.py:2405
#: pysollib/game.py:2398
msgid "Error while saving game"
msgstr ""
@ -683,7 +683,7 @@ msgstr ""
#: pysollib/games/auldlangsyne.py:158 pysollib/games/calculation.py:104
#: pysollib/games/numerica.py:90 pysollib/games/numerica.py:272
#: pysollib/games/numerica.py:639 pysollib/games/numerica.py:743
#: pysollib/games/numerica.py:639 pysollib/games/numerica.py:752
msgid "Tableau. Build regardless of rank and suit."
msgstr ""
@ -710,12 +710,12 @@ msgid ""
msgstr ""
#: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224
#: pysollib/stack.py:1410 pysollib/util.py:80
#: pysollib/stack.py:1409 pysollib/util.py:80
msgid "King"
msgstr ""
#: pysollib/games/canfield.py:531 pysollib/games/special/tarock.py:224
#: pysollib/stack.py:1409 pysollib/util.py:80
#: pysollib/stack.py:1408 pysollib/util.py:80
msgid "Queen"
msgstr ""
@ -744,11 +744,15 @@ msgstr ""
msgid "Balance $%d"
msgstr ""
#: pysollib/games/klondike.py:439
#: pysollib/games/klondike.py:172 pysollib/stack.py:2115
msgid "Tableau. Build down by color."
msgstr ""
#: pysollib/games/klondike.py:441
msgid "Reserve. Only Kings are acceptable."
msgstr ""
#: pysollib/games/larasgame.py:163 pysollib/stack.py:1626
#: pysollib/games/larasgame.py:163 pysollib/stack.py:1625
msgid "Round %d"
msgstr ""
@ -851,7 +855,7 @@ msgstr ""
#: pysollib/games/special/tarock.py:223
#: pysollib/games/ultra/dashavatara.py:351
#: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254
#: pysollib/stack.py:1411 pysollib/util.py:79
#: pysollib/stack.py:1410 pysollib/util.py:79
msgid "Ace"
msgstr ""
@ -1231,7 +1235,7 @@ msgstr ""
msgid " Help"
msgstr ""
#: pysollib/main.py:67 pysollib/main.py:368
#: pysollib/main.py:67 pysollib/main.py:386
msgid " installation error"
msgstr ""
@ -1245,17 +1249,17 @@ msgid ""
"Please check your %s installation.\n"
msgstr ""
#: pysollib/main.py:75 pysollib/main.py:376 pysollib/tk/menubar.py:382
#: pysollib/main.py:75 pysollib/main.py:394 pysollib/tk/menubar.py:382
msgid "&Quit"
msgstr ""
#: pysollib/main.py:98
#: pysollib/main.py:99
msgid ""
"%s: %s\n"
"try %s --help for more information"
msgstr ""
#: pysollib/main.py:139
#: pysollib/main.py:143
msgid ""
"Usage: %s [OPTIONS] [FILE]\n"
" -g --game=GAMENAME start game GAMENAME\n"
@ -1273,19 +1277,19 @@ msgid ""
" MOD - one of following: pss(default), pygame, oss, win\n"
msgstr ""
#: pysollib/main.py:157
#: pysollib/main.py:161
msgid ""
"%s: too many files\n"
"try %s --help for more information"
msgstr ""
#: pysollib/main.py:161
#: pysollib/main.py:165
msgid ""
"%s: invalid file name\n"
"try %s --help for more information"
msgstr ""
#: pysollib/main.py:369
#: pysollib/main.py:387
msgid ""
"\n"
"No games were found !!!\n"
@ -1296,25 +1300,25 @@ msgid ""
"Please check your %s installation.\n"
msgstr ""
#: pysollib/main.py:455 pysollib/main.py:463
#: pysollib/main.py:473 pysollib/main.py:481
msgid " installation problem"
msgstr ""
#: pysollib/main.py:456
#: pysollib/main.py:474
msgid ""
"Your Python installation is compiled without thread support.\n"
"\n"
"Sounds and background music will be disabled."
msgstr ""
#: pysollib/main.py:464
#: pysollib/main.py:482
msgid ""
"The pysolsoundserver module was not found.\n"
"\n"
"Sounds and background music will be disabled."
msgstr ""
#: pysollib/main.py:471
#: pysollib/main.py:489
msgid "Welcome to "
msgstr ""
@ -1582,71 +1586,71 @@ msgstr ""
msgid "USA"
msgstr ""
#: pysollib/settings.py:54 data/glade-translations:29
#: pysollib/settings.py:55 data/glade-translations:29
msgid "Top 10"
msgstr ""
#: pysollib/stack.py:1405
#: pysollib/stack.py:1404
msgid "Base card - %s."
msgstr ""
#: pysollib/stack.py:1406
#: pysollib/stack.py:1405
msgid "Empty row cannot be filled."
msgstr ""
#: pysollib/stack.py:1407
#: pysollib/stack.py:1406
msgid "any card"
msgstr ""
#: pysollib/stack.py:1408 pysollib/util.py:80
#: pysollib/stack.py:1407 pysollib/util.py:80
msgid "Jack"
msgstr ""
#: pysollib/stack.py:1421
#: pysollib/stack.py:1420
msgid "No cards"
msgstr ""
#: pysollib/stack.py:1422
#: pysollib/stack.py:1421
msgid "1 card"
msgstr ""
#: pysollib/stack.py:1423
#: pysollib/stack.py:1422
msgid " cards"
msgstr ""
#: pysollib/stack.py:1635 pysollib/stack.py:1637 pysollib/stack.py:1673
#: pysollib/stack.py:1634 pysollib/stack.py:1636 pysollib/stack.py:1672
msgid "Redeal"
msgstr ""
#: pysollib/stack.py:1637
#: pysollib/stack.py:1636
msgid "Stop"
msgstr ""
#: pysollib/stack.py:1698
#: pysollib/stack.py:1697
msgid "Variable redeals."
msgstr ""
#: pysollib/stack.py:1699
#: pysollib/stack.py:1698
msgid "Unlimited redeals."
msgstr ""
#: pysollib/stack.py:1700
#: pysollib/stack.py:1699
msgid "No redeals."
msgstr ""
#: pysollib/stack.py:1701
#: pysollib/stack.py:1700
msgid "One redeal."
msgstr ""
#: pysollib/stack.py:1702
#: pysollib/stack.py:1701
msgid " redeals."
msgstr ""
#: pysollib/stack.py:1704
#: pysollib/stack.py:1703
msgid "Talon."
msgstr ""
#: pysollib/stack.py:1938 pysollib/stack.py:2388
#: pysollib/stack.py:1937 pysollib/stack.py:2388
msgid "Reserve. No building."
msgstr ""
@ -1696,10 +1700,6 @@ msgstr ""
msgid "Tableau. Build up by color."
msgstr ""
#: pysollib/stack.py:2115
msgid "Tableau. Build down by color."
msgstr ""
#: pysollib/stack.py:2123
msgid "Tableau. Build up by suit."
msgstr ""

View file

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PySol 0.0.1\n"
"POT-Creation-Date: Thu Sep 21 15:56:22 2006\n"
"PO-Revision-Date: 2006-09-30 18:19+0400\n"
"POT-Creation-Date: Sat Oct 7 20:02:33 2006\n"
"PO-Revision-Date: 2006-10-07 20:10+0400\n"
"Last-Translator: Скоморох <skomoroh@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
@ -580,6 +580,9 @@ msgstr "Конус"
msgid "Congress"
msgstr "Конгресс"
msgid "Constitution"
msgstr "Конституция"
msgid "Contradance"
msgstr "Контрданс"
@ -728,6 +731,9 @@ msgstr ""
msgid "Dojouji's Game Doubled"
msgstr ""
msgid "Dolphin"
msgstr "Дельфин"
msgid "Doorway"
msgstr "Вход"
@ -743,6 +749,9 @@ msgstr "Двойной Кенфилд"
msgid "Double Cockroach"
msgstr "Двойной таракан"
msgid "Double Dolphin"
msgstr "Двойной Дельфин"
msgid "Double Dot"
msgstr "Двоеточие"
@ -3185,6 +3194,9 @@ msgstr "Промежутки и тузы"
msgid "Spanish Patience"
msgstr "Испанский пасьянс"
msgid "Spanish Patience II"
msgstr "Испанский пасьянс II"
msgid "Sphere"
msgstr "Сфера"
@ -3402,6 +3414,14 @@ msgstr "Сад"
msgid "The Great Wall"
msgstr "Великая Стена"
#, fuzzy
msgid "The Last Monarch"
msgstr "Последний Монарх"
#, fuzzy
msgid "The Last Monarch II"
msgstr "Последний Монарх"
msgid "The Little Corporal"
msgstr "Маленький Капрал"
@ -3414,9 +3434,6 @@ msgstr "Желание"
msgid "The Wish (open)"
msgstr "Желание (открытое)"
msgid "The last Monarch"
msgstr "Последний Монарх"
msgid "Theater"
msgstr "Театр"
@ -3745,6 +3762,9 @@ msgstr "Церлин (3 колоды)"
msgid "Zeus"
msgstr "Зевс"
msgid "Zigzag Course"
msgstr ""
msgid "Zodiac"
msgstr "Зодиак"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PySol 0.0.1\n"
"POT-Creation-Date: Thu Sep 21 15:57:22 2006\n"
"POT-Creation-Date: Sat Oct 7 20:03:30 2006\n"
"PO-Revision-Date: 2006-10-05 16:31+0400\n"
"Last-Translator: Скоморох <skomoroh@gmail.com>\n"
"Language-Team: Russian <ru@li.org>\n"
@ -54,8 +54,8 @@ msgid "&Next number"
msgstr "&Следующий номер"
#: pysollib/actions.py:316 pysollib/app.py:1150 pysollib/app.py:1162
#: pysollib/game.py:925 pysollib/game.py:1861 pysollib/main.py:460
#: pysollib/main.py:468 pysollib/tk/colorsdialog.py:122
#: pysollib/game.py:925 pysollib/game.py:1861 pysollib/main.py:478
#: pysollib/main.py:486 pysollib/tk/colorsdialog.py:122
#: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143
#: pysollib/tk/fontsdialog.py:205 pysollib/tk/gameinfodialog.py:155
#: pysollib/tk/playeroptionsdialog.py:85
@ -460,31 +460,31 @@ msgstr ""
"\n"
"Не удалось...\n"
#: pysollib/game.py:2298
#: pysollib/game.py:2291
msgid "Set bookmark"
msgstr "Установить закладку"
#: pysollib/game.py:2299
#: pysollib/game.py:2292
msgid "Replace existing bookmark %d ?"
msgstr "Заменить существующую закладку %d ?"
#: pysollib/game.py:2321
#: pysollib/game.py:2314
msgid "Goto bookmark"
msgstr "Перейти к закладке"
#: pysollib/game.py:2322
#: pysollib/game.py:2315
msgid "Goto bookmark %d ?"
msgstr "Перейти к закладке %d ?"
#: pysollib/game.py:2353
#: pysollib/game.py:2346
msgid "Open game"
msgstr "Открыть игру"
#: pysollib/game.py:2364 pysollib/game.py:2373 pysollib/game.py:2378
#: pysollib/game.py:2357 pysollib/game.py:2366 pysollib/game.py:2371
msgid "Load game error"
msgstr "Ошибка при загрузке игры"
#: pysollib/game.py:2365
#: pysollib/game.py:2358
msgid ""
"Error while loading game.\n"
"\n"
@ -496,11 +496,11 @@ msgstr ""
"Возможно повреждён файл,\n"
"или ошибка в программе."
#: pysollib/game.py:2374
#: pysollib/game.py:2367
msgid "Error while loading game"
msgstr "Ошибка при загрузке игры"
#: pysollib/game.py:2379
#: pysollib/game.py:2372
msgid ""
"Internal error while loading game.\n"
"\n"
@ -510,11 +510,11 @@ msgstr ""
"\n"
"Пожалуйста сообщите об этой ошибке."
#: pysollib/game.py:2404
#: pysollib/game.py:2397
msgid "Save game error"
msgstr "Ошибка при сохранении игры"
#: pysollib/game.py:2405
#: pysollib/game.py:2398
msgid "Error while saving game"
msgstr "Ошибка при сохранении игры"
@ -728,7 +728,7 @@ msgstr "Пазлы"
#: pysollib/games/auldlangsyne.py:158 pysollib/games/calculation.py:104
#: pysollib/games/numerica.py:90 pysollib/games/numerica.py:272
#: pysollib/games/numerica.py:639 pysollib/games/numerica.py:743
#: pysollib/games/numerica.py:639 pysollib/games/numerica.py:752
msgid "Tableau. Build regardless of rank and suit."
msgstr "Игровой стол. Складывать не считаясь с мастью и достоинством."
@ -759,12 +759,12 @@ msgstr ""
"4: 8 Д 3 7 В 2 6 10 Т 5 9 К"
#: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224
#: pysollib/stack.py:1410 pysollib/util.py:80
#: pysollib/stack.py:1409 pysollib/util.py:80
msgid "King"
msgstr "Король"
#: pysollib/games/canfield.py:531 pysollib/games/special/tarock.py:224
#: pysollib/stack.py:1409 pysollib/util.py:80
#: pysollib/stack.py:1408 pysollib/util.py:80
msgid "Queen"
msgstr "Королева"
@ -794,11 +794,15 @@ msgstr "Базовая ячейка. Складывать по возраста
msgid "Balance $%d"
msgstr "Баланс $%d"
#: pysollib/games/klondike.py:439
#: pysollib/games/klondike.py:172 pysollib/stack.py:2115
msgid "Tableau. Build down by color."
msgstr "Игровой стол. Складывать по убыванию в соответствии с цветом."
#: pysollib/games/klondike.py:441
msgid "Reserve. Only Kings are acceptable."
msgstr "Резерв. Только для королей."
#: pysollib/games/larasgame.py:163 pysollib/stack.py:1626
#: pysollib/games/larasgame.py:163 pysollib/stack.py:1625
msgid "Round %d"
msgstr "Раунд %d"
@ -927,7 +931,7 @@ msgstr "Жезлы"
#: pysollib/games/special/tarock.py:223
#: pysollib/games/ultra/dashavatara.py:351
#: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254
#: pysollib/stack.py:1411 pysollib/util.py:79
#: pysollib/stack.py:1410 pysollib/util.py:79
msgid "Ace"
msgstr "Туз"
@ -1335,7 +1339,7 @@ msgstr "Не найден файл помощи\n"
msgid " Help"
msgstr " Помощь"
#: pysollib/main.py:67 pysollib/main.py:368
#: pysollib/main.py:67 pysollib/main.py:386
msgid " installation error"
msgstr " проблема с установкой"
@ -1349,11 +1353,11 @@ msgid ""
"Please check your %s installation.\n"
msgstr ""
#: pysollib/main.py:75 pysollib/main.py:376 pysollib/tk/menubar.py:382
#: pysollib/main.py:75 pysollib/main.py:394 pysollib/tk/menubar.py:382
msgid "&Quit"
msgstr "В&ыход"
#: pysollib/main.py:98
#: pysollib/main.py:99
msgid ""
"%s: %s\n"
"try %s --help for more information"
@ -1361,7 +1365,7 @@ msgstr ""
"%s: %s\n"
"попробуйте %s --help для получения более подробной информации"
#: pysollib/main.py:139
#: pysollib/main.py:143
#, fuzzy
msgid ""
"Usage: %s [OPTIONS] [FILE]\n"
@ -1390,7 +1394,7 @@ msgstr ""
"\n"
" FILE - имя файла сохранённой игры\n"
#: pysollib/main.py:157
#: pysollib/main.py:161
msgid ""
"%s: too many files\n"
"try %s --help for more information"
@ -1398,7 +1402,7 @@ msgstr ""
"\"%s: слишком много файлов\n"
"попробуйте %s --help для получения более подробной информации"
#: pysollib/main.py:161
#: pysollib/main.py:165
msgid ""
"%s: invalid file name\n"
"try %s --help for more information"
@ -1406,7 +1410,7 @@ msgstr ""
"%s: неправильное имя файла\n"
"попробуйте %s --help для получения более подробной информации"
#: pysollib/main.py:369
#: pysollib/main.py:387
msgid ""
"\n"
"No games were found !!!\n"
@ -1417,18 +1421,18 @@ msgid ""
"Please check your %s installation.\n"
msgstr ""
#: pysollib/main.py:455 pysollib/main.py:463
#: pysollib/main.py:473 pysollib/main.py:481
msgid " installation problem"
msgstr ""
#: pysollib/main.py:456
#: pysollib/main.py:474
msgid ""
"Your Python installation is compiled without thread support.\n"
"\n"
"Sounds and background music will be disabled."
msgstr ""
#: pysollib/main.py:464
#: pysollib/main.py:482
msgid ""
"The pysolsoundserver module was not found.\n"
"\n"
@ -1438,7 +1442,7 @@ msgstr ""
"\n"
"Звук и фоновая музыка будут недоступны"
#: pysollib/main.py:471
#: pysollib/main.py:489
msgid "Welcome to "
msgstr "Добро пожаловать в "
@ -1707,71 +1711,71 @@ msgstr "Швейцария"
msgid "USA"
msgstr "США"
#: pysollib/settings.py:54 data/glade-translations:29
#: pysollib/settings.py:55 data/glade-translations:29
msgid "Top 10"
msgstr "Top 10"
#: pysollib/stack.py:1405
#: pysollib/stack.py:1404
msgid "Base card - %s."
msgstr "Базовая карта - %s."
#: pysollib/stack.py:1406
#: pysollib/stack.py:1405
msgid "Empty row cannot be filled."
msgstr "Пустой ряд не заполняется."
#: pysollib/stack.py:1407
#: pysollib/stack.py:1406
msgid "any card"
msgstr "любая карта"
#: pysollib/stack.py:1408 pysollib/util.py:80
#: pysollib/stack.py:1407 pysollib/util.py:80
msgid "Jack"
msgstr "Валет"
#: pysollib/stack.py:1421
#: pysollib/stack.py:1420
msgid "No cards"
msgstr "Нет карт"
#: pysollib/stack.py:1422
#: pysollib/stack.py:1421
msgid "1 card"
msgstr "1 карта"
#: pysollib/stack.py:1423
#: pysollib/stack.py:1422
msgid " cards"
msgstr " карт"
#: pysollib/stack.py:1635 pysollib/stack.py:1637 pysollib/stack.py:1673
#: pysollib/stack.py:1634 pysollib/stack.py:1636 pysollib/stack.py:1672
msgid "Redeal"
msgstr "Сдать"
#: pysollib/stack.py:1637
#: pysollib/stack.py:1636
msgid "Stop"
msgstr "Стоп"
#: pysollib/stack.py:1698
#: pysollib/stack.py:1697
msgid "Variable redeals."
msgstr "Переменное количество пересдач."
#: pysollib/stack.py:1699
#: pysollib/stack.py:1698
msgid "Unlimited redeals."
msgstr "Неограниченное количество пересдач."
#: pysollib/stack.py:1700
#: pysollib/stack.py:1699
msgid "No redeals."
msgstr "Без пересдачи."
#: pysollib/stack.py:1701
#: pysollib/stack.py:1700
msgid "One redeal."
msgstr "1 пересдача."
#: pysollib/stack.py:1702
#: pysollib/stack.py:1701
msgid " redeals."
msgstr " пересдачи."
#: pysollib/stack.py:1704
#: pysollib/stack.py:1703
msgid "Talon."
msgstr "Колода."
#: pysollib/stack.py:1938 pysollib/stack.py:2388
#: pysollib/stack.py:1937 pysollib/stack.py:2388
msgid "Reserve. No building."
msgstr "Резерв. Без выкладывания."
@ -1821,10 +1825,6 @@ msgstr "Игровой стол. Складывать в соответстви
msgid "Tableau. Build up by color."
msgstr "Игровой стол. Складывать по возрастанию в соответствии с цветом."
#: pysollib/stack.py:2115
msgid "Tableau. Build down by color."
msgstr "Игровой стол. Складывать по убыванию в соответствии с цветом."
#: pysollib/stack.py:2123
msgid "Tableau. Build up by suit."
msgstr "Игровой стол. Складывать по возрастанию в соответствии с мастью."

View file

@ -143,18 +143,21 @@ class BakersDozen(CastlesInSpain):
# /***********************************************************************
# // Spanish Patience
# // Portuguese Solitaire
# ************************************************************************/
class SpanishPatience(BakersDozen):
Foundation_Class = AC_FoundationStack
# /***********************************************************************
# // Portuguese Solitaire
# ************************************************************************/
class PortugueseSolitaire(BakersDozen):
RowStack_Class = StackWrapper(RK_RowStack, base_rank=KING)
def _shuffleHook(self, cards):
return cards
class SpanishPatienceII(PortugueseSolitaire):
RowStack_Class = RK_RowStack
# /***********************************************************************
@ -347,3 +350,5 @@ registerGame(GameInfo(369, RippleFan, "Ripple Fan",
GI.GT_BAKERS_DOZEN, 1, -1, GI.SL_MOSTLY_SKILL))
registerGame(GameInfo(515, Indefatigable, "Indefatigable",
GI.GT_BAKERS_DOZEN | GI.GT_OPEN, 1, 2, GI.SL_MOSTLY_SKILL))
registerGame(GameInfo(664, SpanishPatienceII, "Spanish Patience II",
GI.GT_BAKERS_DOZEN | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))

View file

@ -242,15 +242,6 @@ def pysol_init(app, args):
app.top_bg = top.cget("bg")
app.top_palette = [None, None] # [fg, bg]
app.top_cursor = top.cget("cursor")
if USE_TILE:
import settings
if opts['tile-theme']:
settings.TILE_THEME = opts['tile-theme']
from pysoltk import load_theme
try:
load_theme(app, top, settings.TILE_THEME)
except Exception, err:
print >> sys.stderr, 'ERROR: set theme:', err
# load options
app.loadOptions()
@ -374,22 +365,20 @@ def pysol_init(app, args):
app.opt.fonts["default"] = None
if USE_TILE: # for tile
from pysoltk import load_theme
import settings
if opts['tile-theme']:
settings.TILE_THEME = opts['tile-theme']
try:
load_theme(app, top, settings.TILE_THEME)
except Exception, err:
print >> sys.stderr, 'ERROR: set theme:', err
##top.option_add('*Toolbar.relief', 'groove')
##top.option_add('*Toolbar.relief', 'raised')
top.option_add('*Toolbar.borderWidth', 1)
top.option_add('*Toolbar.Button.Pad', 2)
top.option_add('*Toolbar.Button.default', 'disabled')
top.option_add('*Toolbar*takeFocus', 0)
#
from settings import TILE_THEME
if TILE_THEME:
if font:
top.tk.call('style', 'configure', '.', '-font', font)
else:
font = top.tk.call('style', 'lookup', TILE_THEME, '-font')
top.option_add('*font', font)
bg = top.tk.call('style', 'lookup', TILE_THEME, '-background')
top.tk_setPalette(bg)
##top.option_add('*Toolbar.borderWidth', 1)
##top.option_add('*Toolbar.Button.Pad', 2)
##top.option_add('*Toolbar.Button.default', 'disabled')
##top.option_add('*Toolbar*takeFocus', 0)
# check games
if len(app.gdb.getGamesIdSortedByName()) == 0:

View file

@ -23,6 +23,10 @@ TkVersion = Tkinter.TkVersion
TclError = Tkinter.TclError
# internal
_flatten = Tkinter._flatten
class Style:
def __init__(self, master):
self.tk = master.tk
@ -84,7 +88,7 @@ class Style:
for k, v in cnf.items():
if v is not None:
if k[-1] == '_': k = k[:-1]
res = res + ('-'+k, v)
res = res + ('-'+k, str(v))
return res
def configure(self, style, **kw):
@ -372,7 +376,7 @@ class Treeview(Widget, Tkinter.Listbox):
The width of the column in pixels. Default is something
reasonable, probably 200 or so.
"""
pass
return self.tk.call((self._w, 'column', column) + self._options(kw))
def delete(self, items):
"""Deletes each of the items and all of their descendants.
@ -413,7 +417,7 @@ class Treeview(Widget, Tkinter.Listbox):
-command script
A script to evaluate when the heading label is pressed.
"""
pass
return self.tk.call((self._w, 'heading', column) + self._options(kw))
def identify(self, x, y):
"""Returns a description of the widget component under the point given
@ -458,7 +462,10 @@ class Treeview(Widget, Tkinter.Listbox):
returns the item identifier of the newly created item. See ITEM
OPTIONS for the list of available options.
"""
pass
if not parent: parent = ''
args = (self._w, 'insert', parent, index)
if id: args = args + ('-id', id)
return self.tk.call(args + self._options(kw))
def item(item, **kw):
"""Query or modify the options for the specified item. If no -option

View file

@ -120,6 +120,7 @@ class MfxStatusbar:
def configLabel(self, name, **kw):
if kw.has_key('fg'):
kw['foreground'] = kw['fg']
del kw['fg']
label = getattr(self, name + "_label")
apply(label.config, (), kw)
@ -165,21 +166,21 @@ class PysolStatusbar(MfxStatusbar):
#
l = self._createLabel("info", fill='both', expand=1)
##l.config(text="", justify="left", anchor='w')
#~l.config(padx=8)
l.config(padding=(8, 0))
class HelpStatusbar(MfxStatusbar):
def __init__(self, top):
MfxStatusbar.__init__(self, top, row=4, column=0, columnspan=3)
l = self._createLabel("info", fill='both', expand=1)
l.config(justify="left", anchor='w') #~, padx=8)
l.config(justify="left", anchor='w', padding=(8, 0))
class HtmlStatusbar(MfxStatusbar):
def __init__(self, top, row, column, columnspan):
MfxStatusbar.__init__(self, top, row=row, column=column, columnspan=columnspan)
l = self._createLabel("url", fill='both', expand=1)
l.config(justify="left", anchor='w') #~, padx=8)
l.config(justify="left", anchor='w', padding=(8, 0))
# /***********************************************************************

View file

@ -527,6 +527,7 @@ def tkhtml_main(args):
except:
url = os.path.join(os.pardir, os.pardir, "data", "html", "index.html")
top = Tkinter.Tk()
top.tk.call("package", "require", "tile")
top.wm_minsize(400, 200)
viewer = HTMLViewer(top)
viewer.app = None

View file

@ -300,229 +300,98 @@ class SingleGame_StatsDialog(MfxDialog):
# //
# ************************************************************************/
class CanvasWriter(PysolStatsFormatter.StringWriter):
def __init__(self, canvas, parent_window, font, w, h):
self.canvas = canvas
class TreeWriter(PysolStatsFormatter.StringWriter):
def __init__(self, tree, parent_window, font, w, h):
self.tree = tree
self.parent_window = parent_window
##self.fg = canvas.cget("insertbackground")
self.fg = canvas.option_get('foreground', '') or canvas.cget("insertbackground")
self.font = font
self.w = w
self.h = h
self.x = self.y = 0
self.gameid = None
self.gamenumber = None
self.canvas.config(yscrollincrement=h)
self._tabs = None
def _addItem(self, id):
self.canvas.dialog.nodes[id] = (self.gameid, self.gamenumber)
self.w = w
self.h = h
def p(self, s):
if self.y > 16000:
return
h1, h2 = 0, 0
while s and s[0] == "\n":
s = s[1:]
h1 = h1 + self.h
while s and s[-1] == "\n":
s = s[:-1]
h2 = h2 + self.h
self.y = self.y + h1
if s:
id = self.canvas.create_text(self.x, self.y, text=s, anchor="nw",
font=self.font, fill=self.fg)
self._addItem(id)
self.y = self.y + h2
pass
def pheader(self, s):
pass
def _calc_tabs(self, arg):
tw = 15*self.w
if self.parent_window.tree_tabs:
self._tabs = self.parent_window.tree_tabs
return
tw = 20*self.w
##tw = 160
self._tabs = [tw]
font = tkFont.Font(self.canvas, self.font)
font = tkFont.Font(self.tree, self.font)
for t in arg[1:]:
tw = font.measure(t)+20
self._tabs.append(tw)
self._tabs.append(10)
self.parent_window.tree_tabs = self._tabs
def pstats(self, *args, **kwargs):
gameid=kwargs.get('gameid', None)
header = False
if self._tabs is None:
# header
header = True
self._calc_tabs(args)
self.gameid = 'header'
self.gamenumber = None
## if False:
## sort_by = ( 'name', 'played', 'won', 'lost',
## 'time', 'moves', 'percent', )
## frame = Tkinter.Frame(self.canvas)
## i = 0
## for t in args:
## w = self._tabs[i]
## if i == 0:
## w += 10
## b = Tkinter.Button(frame, text=t)
## b.grid(row=0, column=i, sticky='ew')
## b.bind('<1>', lambda e, f=self.parent_window.rearrange, s=sort_by[i]: f(s))
## frame.columnconfigure(i, minsize=w)
## i += 1
## self.canvas.create_window(0, 0, window=frame, anchor='nw')
## self.y += 20
## return
## if False:
## i = 0
## x = 0
## for t in args:
## w = self._tabs[i]
## h = 18
## anchor = 'ne'
## y = 0
## self.canvas.create_rectangle(x+2, y, x+w, y+h, width=1,
## fill="#00ff00", outline="#000000")
## x += w
## self.canvas.create_text(x-3, y+3, text=t, anchor=anchor)
## i += 1
## self.y += 20
## return
header = True
else:
self.gameid = gameid
self.gamenumber = None
if self.y > 16000:
return
x, y = 1, self.y
p = self._pstats_text
t1, t2, t3, t4, t5, t6, t7 = args
h = 0
if not header: t1=gettext(t1) # game name
for var, text, anchor, tab in (
('name', t1, 'nw', self._tabs[0]+self._tabs[1]),
('played', t2, 'ne', self._tabs[2]),
('won', t3, 'ne', self._tabs[3]),
('lost', t4, 'ne', self._tabs[4]),
('time', t5, 'ne', self._tabs[5]),
('moves', t6, 'ne', self._tabs[6]),
('percent', t7, 'ne', self._tabs[7]), ):
if header: self.gamenumber=var
h = max(h, p(x, y, anchor=anchor, text=text))
x += tab
if header:
for column, text, anchor, tab in (
('#0', t1, 'nw', self._tabs[0]),
('played', t2, 'ne', self._tabs[1]),
('won', t3, 'ne', self._tabs[2]),
('lost', t4, 'ne', self._tabs[3]),
('time', t5, 'ne', self._tabs[4]),
('moves', t6, 'ne', self._tabs[5]),
('percent', t7, 'ne', self._tabs[6]), ):
self.tree.heading(column, text=text,
command=lambda par=self.parent_window, col=column: par.headerClick(col))
self.tree.column(column, width=tab)
else:
id = self.tree.insert(None, "end", text=t1,
values=(t2, t3, t4, t5, t6, t7))
self.parent_window.tree_items.append(id)
self.pstats_perc(x, y, t7)
self.y += h
self.gameid = None
return
def plog(self, *args, **kwargs):
header = False
if self._tabs is None:
# header
self._calc_tabs(('', '99999999999999999999', '9999-99-99 99:99', 'XXXXXXXXXXXX'))
header = True
## h = max(h, p(x, y, anchor="nw", text=t1))
## if header: self.gamenumber='played'
## x += self._tabs[0]+self._tabs[1]
## h = max(h, p(x, y, anchor="ne", text=t2))
## if header: self.gamenumber='won'
## x += self._tabs[2]
## h = max(h, p(x, y, anchor="ne", text=t3))
## if header: self.gamenumber='lost'
## x += self._tabs[3]
## h = max(h, p(x, y, anchor="ne", text=t4))
## if header: self.gamenumber='time'
## x += self._tabs[4]
## h = max(h, p(x, y, anchor="ne", text=t5))
## if header: self.gamenumber='moves'
## x += self._tabs[5]
## h = max(h, p(x, y, anchor="ne", text=t6))
## if header: self.gamenumber='percent'
## x += self._tabs[6]
## h = max(h, p(x, y, anchor="ne", text=t7))
## x += self._tabs[7]
## self.pstats_perc(x, y, t7)
## self.y += h
## self.gameid = None
t1, t2, t3, t4 = args[:4]
if not header: t1=gettext(t1) # game name
def _pstats_text(self, x, y, **kw):
kwdefault(kw, font=self.font, fill=self.fg)
id = apply(self.canvas.create_text, (x, y), kw)
self._addItem(id)
return self.h
##bbox = self.canvas.bbox(id)
##return bbox[3] - bbox[1]
def pstats_perc(self, x, y, t):
if not (t and "0" <= t[0] <= "9"):
return
perc = int(round(float(str(t))))
if perc < 1:
return
rx, ry, rw, rh = x, y+1, 2 + 8*10, self.h-5
if 1:
w = int(round(rw*perc/100.0))
if 1 and w < 1:
return
if w > 0:
w = max(3, w)
w = min(rw - 2, w)
id = self.canvas.create_rectangle(rx, ry, rx+w, ry+rh, width=1,
fill="#00ff00", outline="#000000")
if w < rw:
id = self.canvas.create_rectangle(rx+w, ry, rx+rw, ry+rh, width=1,
fill="#ff0000", outline="#000000")
return
##fill = "#ffffff"
##fill = self.canvas["bg"]
fill = None
id = self.canvas.create_rectangle(rx, ry, rx+rw, ry+rh, width=1,
fill=fill, outline="#808080")
if 1:
rx, rw = rx + 1, rw - 1
ry, rh = ry + 1, rh - 1
w = int(round(rw*perc/100.0))
if w > 0:
id = self.canvas.create_rectangle(rx, ry, rx+w, ry+rh, width=0,
fill="#00ff00", outline="")
if w < rw:
id = self.canvas.create_rectangle(rx+w, ry, rx+rw, ry+rh, width=0,
fill="#ff0000", outline="")
return
p = 1.0
ix = rx + 2
for i in (1, 11, 21, 31, 41, 51, 61, 71, 81, 91):
if perc < i:
break
##c = "#ff8040"
r, g, b = 255, 128*p, 64*p
c = "#%02x%02x%02x" % (int(r), int(g), int(b))
id = self.canvas.create_rectangle(ix, ry+2, ix+6, ry+rh-2, width=0,
fill=c, outline=c)
ix = ix + 8
p = max(0.0, p - 0.1)
def plog(self, gamename, gamenumber, date, status, gameid=-1, won=-1):
if gameid > 0 and "0" <= gamenumber[0:1] <= "9":
self.gameid = gameid
self.gamenumber = gamenumber
self.p("%-25s %-20s %17s %s\n" % (gamename, gamenumber, date, status))
self.gameid = None
self.gamenumber = None
if header:
for column, text, anchor, tab in (
('#0', t1, 'nw', self._tabs[0]),
('gamenumber', t2, 'ne', self._tabs[1]),
('date', t3, 'ne', self._tabs[2]),
('status', t4, 'ne', self._tabs[3]), ):
self.tree.heading(column, text=text,
command=lambda par=self.parent_window, col=column: par.headerClick(col))
self.tree.column(column, width=tab)
##if column in ('gamenumber', 'date', 'status'):
## self.tree.column(column, anchor='center')
else:
id = self.tree.insert(None, "end", text=t1, values=(t2, t3, t4))
self.parent_window.tree_items.append(id)
# /***********************************************************************
# //
# ************************************************************************/
class AllGames_StatsDialogScrolledCanvas(MfxScrolledCanvas):
pass
class AllGames_StatsDialog(MfxDialog):
# for font "canvas_fixed"
#CHAR_W, CHAR_H = 7, 16
#if os.name == "mac": CHAR_W = 6
#
YVIEW = 0
FONT_TYPE = "default"
COLUMNS = ('played', 'won', 'lost', 'time', 'moves', 'percent')
def __init__(self, parent, title, app, player, **kw):
lines = 25
@ -539,6 +408,8 @@ class AllGames_StatsDialog(MfxDialog):
self.player = player
self.title = title
self.sort_by = 'name'
self.tree_items = []
self.tree_tabs = None
#
kwdefault(kw, width=self.CHAR_W*64, height=lines*self.CHAR_H)
kw = self.initKw(kw)
@ -549,22 +420,15 @@ class AllGames_StatsDialog(MfxDialog):
self.top.wm_minsize(200, 200)
self.button = kw.default
#
self.sc = AllGames_StatsDialogScrolledCanvas(top_frame,
width=kw.width, height=kw.height)
self.sc.pack(fill=Tkinter.BOTH, expand=1, padx=kw.padx, pady=kw.pady)
#
self.nodes = {}
self.canvas = self.sc.canvas
self.canvas.dialog = self
bind(self.canvas, "<1>", self.singleClick)
frame = Tkinter.Frame(top_frame)
frame.pack(fill='both', expand=True, padx=kw.padx, pady=kw.pady)
sb = Tkinter.Scrollbar(frame)
sb.pack(side='right', fill='y')
self.tree = Tkinter.Treeview(frame, columns=self.COLUMNS)
self.tree.pack(side='left', fill='both', expand=True)
self.tree.config(yscrollcommand=sb.set)
sb.config(command=self.tree.yview)
self.fillCanvas(player, title)
bbox = self.canvas.bbox("all")
##print bbox
##self.canvas.config(scrollregion=bbox)
dx, dy = 4, 0
self.canvas.config(scrollregion=(-dx,-dy,bbox[2]+dx,bbox[3]+dy))
self.canvas.xview_moveto(-dx)
self.canvas.yview_moveto(self.YVIEW)
#
focus = self.createButtons(bottom_frame, kw)
self.mainloop(focus, kw.timeout)
@ -583,47 +447,32 @@ class AllGames_StatsDialog(MfxDialog):
def destroy(self):
self.app = None
self.canvas.dialog = None
self.nodes = {}
self.sc.destroy()
self.tree.destroy()
MfxDialog.destroy(self)
def rearrange(self, sort_by):
def headerClick(self, column):
if column == '#0':
sort_by = 'name'
else:
sort_by = column
if self.sort_by == sort_by: return
self.sort_by = sort_by
self.fillCanvas(self.player, self.title)
def singleClick(self, event=None):
id = self.canvas.find_withtag(Tkinter.CURRENT)
if not id:
return
##print id, self.nodes.get(id[0])
gameid, gamenumber = self.nodes.get(id[0], (None, None))
if gameid == 'header':
if self.sort_by == gamenumber: return
self.sort_by = gamenumber
self.fillCanvas(self.player, self.title)
return
## FIXME / TODO
return
if gameid and gamenumber:
print gameid, gamenumber
elif gameid:
print gameid
#
#
#
def fillCanvas(self, player, header):
self.canvas.delete('all')
self.nodes = {}
if self.tree_items:
self.tree.delete(tuple(self.tree_items))
self.tree_items = []
a = PysolStatsFormatter(self.app)
#print 'CHAR_W:', self.CHAR_W
writer = CanvasWriter(self.canvas, self,
self.font, self.CHAR_W, self.CHAR_H)
writer = TreeWriter(self.tree, self,
self.font, self.CHAR_W, self.CHAR_H)
if not a.writeStats(writer, player, header, sort_by=self.sort_by):
writer.p(_("No entries for player ") + player + "\n")
# FIXME
pass
destruct(writer)
destruct(a)
@ -633,35 +482,45 @@ class AllGames_StatsDialog(MfxDialog):
# ************************************************************************/
class FullLog_StatsDialog(AllGames_StatsDialog):
YVIEW = 1
FONT_TYPE = "fixed"
COLUMNS = ('gamenumber', 'date', 'status')
def fillCanvas(self, player, header):
a = PysolStatsFormatter(self.app)
writer = CanvasWriter(self.canvas, self, self.font, self.CHAR_W, self.CHAR_H)
writer = TreeWriter(self.tree, self, self.font,
self.CHAR_W, self.CHAR_H)
if not a.writeFullLog(writer, player, header):
writer.p(_("No log entries for %s\n") % player)
# FIXME
pass
destruct(a)
def initKw(self, kw):
kw = KwStruct(kw,
strings=(_("&OK"), (_("Session &log..."), 104), (_("&Save to file"), 203)), default=0,
strings=(_("&OK"), (_("Session &log..."), 104),
(_("&Save to file"), 203)), default=0,
width=76*self.CHAR_W,
)
return AllGames_StatsDialog.initKw(self, kw)
def headerClick(self, column):
pass
class SessionLog_StatsDialog(FullLog_StatsDialog):
def fillCanvas(self, player, header):
a = PysolStatsFormatter(self.app)
writer = CanvasWriter(self.canvas, self, self.font, self.CHAR_W, self.CHAR_H)
writer = TreeWriter(self.tree, self, self.font,
self.CHAR_W, self.CHAR_H)
if not a.writeSessionLog(writer, player, header):
writer.p(_("No current session log entries for %s\n") % player)
# FIXME
pass
destruct(a)
def initKw(self, kw):
kw = KwStruct(kw,
strings=(_("&OK"), (_("&Full log..."), 103), (_("&Save to file"), 204)), default=0,
strings=(_("&OK"), (_("&Full log..."), 103),
(_("&Save to file"), 204)), default=0,
)
return FullLog_StatsDialog.initKw(self, kw)

View file

@ -430,5 +430,12 @@ def load_theme(app, top, theme):
top.tk_setPalette(bg)
bg = top.tk.call('style', 'lookup', '.', '-background', 'active')
top.option_add('*Menu.activeBackground', bg)
font = app.opt.fonts['default']
if font:
top.tk.call('style', 'configure', '.', '-font', font)
else:
font = top.tk.call('style', 'lookup', '.', '-font')
top.option_add('*font', font)