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:
parent
76dcd2d1ae
commit
e401d6a28e
11 changed files with 289 additions and 382 deletions
26
po/games.pot
26
po/games.pot
|
@ -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 ""
|
||||
|
||||
|
|
106
po/pysol.pot
106
po/pysol.pot
|
@ -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 ""
|
||||
|
|
|
@ -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 "Зодиак"
|
||||
|
||||
|
|
104
po/ru_pysol.po
104
po/ru_pysol.po
|
@ -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 "Игровой стол. Складывать по возрастанию в соответствии с мастью."
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
||||
# /***********************************************************************
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue