From c215cb2fdd34f40fda826fda393ae7066c525add Mon Sep 17 00:00:00 2001 From: skomoroh Date: Thu, 9 Nov 2006 22:18:46 +0000 Subject: [PATCH] + 3 new games * cleanup main.py and mfxutil.py * bugs fixes git-svn-id: file:///home/shlomif/Backup/svn-dumps/PySolFC/svnsync-repos/pysolfc/PySolFC/trunk@91 efabe8c0-fbe8-4139-b769-b5e6d273206e --- po/games.pot | 11 ++- po/pysol.pot | 134 +++++++++++++-------------- po/ru_games.po | 63 ++++++------- po/ru_pysol.po | 132 +++++++++++++------------- pysollib/app.py | 48 +++++----- pysollib/games/capricieuse.py | 33 ++++++- pysollib/games/spider.py | 37 ++++++++ pysollib/main.py | 139 +++++----------------------- pysollib/mfxutil.py | 84 ----------------- pysollib/tile/soundoptionsdialog.py | 2 +- pysollib/tile/tkhtml.py | 3 +- pysollib/tk/soundoptionsdialog.py | 2 +- pysollib/tk/tkhtml.py | 3 +- 13 files changed, 296 insertions(+), 395 deletions(-) diff --git a/po/games.pot b/po/games.pot index fdc5b81f..d7b5d86c 100644 --- a/po/games.pot +++ b/po/games.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PySol 0.0.1\n" -"POT-Creation-Date: Tue Nov 7 05:42:15 2006\n" +"POT-Creation-Date: Thu Nov 9 17:36:05 2006\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -993,6 +993,9 @@ msgstr "" msgid "Fatimeh's Game Relaxed" msgstr "" +msgid "Fifteen" +msgstr "" + msgid "Fifteen Puzzle" msgstr "" @@ -1395,6 +1398,9 @@ msgstr "" msgid "Inca" msgstr "" +msgid "Incompatibility" +msgstr "" + msgid "Indefatigable" msgstr "" @@ -2973,6 +2979,9 @@ msgstr "" msgid "Scorpion Head" msgstr "" +msgid "Scorpion II" +msgstr "" + msgid "Scorpion Tail" msgstr "" diff --git a/po/pysol.pot b/po/pysol.pot index d08e9958..897e3b01 100644 --- a/po/pysol.pot +++ b/po/pysol.pot @@ -14,7 +14,7 @@ msgid "" msgstr "" "#-#-#-#-# pysol-1.pot (PACKAGE VERSION) #-#-#-#-#\n" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: Tue Nov 7 05:43:10 2006\n" +"POT-Creation-Date: Thu Nov 9 17:36:57 2006\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \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-11-07 05:43+0300\n" +"POT-Creation-Date: 2006-11-09 17:36+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -70,7 +70,7 @@ msgstr "" #: pysollib/actions.py:314 pysollib/app.py:892 pysollib/app.py:1155 #: pysollib/app.py:1167 pysollib/game.py:929 pysollib/game.py:1864 -#: pysollib/main.py:376 pysollib/main.py:384 pysollib/tk/colorsdialog.py:122 +#: pysollib/main.py:379 pysollib/main.py:387 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 @@ -465,211 +465,211 @@ msgstr "" msgid "Error while saving game" msgstr "" -#: pysollib/gamedb.py:120 +#: pysollib/gamedb.py:121 msgid "Baker's Dozen" msgstr "" -#: pysollib/gamedb.py:121 +#: pysollib/gamedb.py:122 msgid "Beleaguered Castle" msgstr "" -#: pysollib/gamedb.py:122 +#: pysollib/gamedb.py:123 msgid "Canfield" msgstr "" -#: pysollib/gamedb.py:123 +#: pysollib/gamedb.py:124 msgid "Fan" msgstr "" -#: pysollib/gamedb.py:124 +#: pysollib/gamedb.py:125 msgid "Forty Thieves" msgstr "" -#: pysollib/gamedb.py:125 +#: pysollib/gamedb.py:126 msgid "FreeCell" msgstr "" -#: pysollib/gamedb.py:126 +#: pysollib/gamedb.py:127 msgid "Golf" msgstr "" -#: pysollib/gamedb.py:127 +#: pysollib/gamedb.py:128 msgid "Gypsy" msgstr "" -#: pysollib/gamedb.py:128 +#: pysollib/gamedb.py:129 msgid "Klondike" msgstr "" -#: pysollib/gamedb.py:129 +#: pysollib/gamedb.py:130 msgid "Montana" msgstr "" -#: pysollib/gamedb.py:130 +#: pysollib/gamedb.py:131 msgid "Napoleon" msgstr "" -#: pysollib/gamedb.py:131 +#: pysollib/gamedb.py:132 msgid "Numerica" msgstr "" -#: pysollib/gamedb.py:132 +#: pysollib/gamedb.py:133 msgid "Pairing" msgstr "" -#: pysollib/gamedb.py:133 +#: pysollib/gamedb.py:134 msgid "Raglan" msgstr "" -#: pysollib/gamedb.py:134 pysollib/gamedb.py:167 +#: pysollib/gamedb.py:135 pysollib/gamedb.py:168 msgid "Simple games" msgstr "" -#: pysollib/gamedb.py:135 +#: pysollib/gamedb.py:136 msgid "Spider" msgstr "" -#: pysollib/gamedb.py:136 +#: pysollib/gamedb.py:137 msgid "Terrace" msgstr "" -#: pysollib/gamedb.py:137 +#: pysollib/gamedb.py:138 msgid "Yukon" msgstr "" -#: pysollib/gamedb.py:138 pysollib/gamedb.py:171 +#: pysollib/gamedb.py:139 pysollib/gamedb.py:172 msgid "One-Deck games" msgstr "" -#: pysollib/gamedb.py:139 pysollib/gamedb.py:172 +#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 msgid "Two-Deck games" msgstr "" -#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 +#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 msgid "Three-Deck games" msgstr "" -#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 +#: pysollib/gamedb.py:142 pysollib/gamedb.py:175 msgid "Four-Deck games" msgstr "" -#: pysollib/gamedb.py:153 +#: pysollib/gamedb.py:154 msgid "Baker's Dozen type" msgstr "" -#: pysollib/gamedb.py:154 +#: pysollib/gamedb.py:155 msgid "Beleaguered Castle type" msgstr "" -#: pysollib/gamedb.py:155 +#: pysollib/gamedb.py:156 msgid "Canfield type" msgstr "" -#: pysollib/gamedb.py:156 +#: pysollib/gamedb.py:157 msgid "Fan type" msgstr "" -#: pysollib/gamedb.py:157 +#: pysollib/gamedb.py:158 msgid "Forty Thieves type" msgstr "" -#: pysollib/gamedb.py:158 +#: pysollib/gamedb.py:159 msgid "FreeCell type" msgstr "" -#: pysollib/gamedb.py:159 +#: pysollib/gamedb.py:160 msgid "Golf type" msgstr "" -#: pysollib/gamedb.py:160 +#: pysollib/gamedb.py:161 msgid "Gypsy type" msgstr "" -#: pysollib/gamedb.py:161 +#: pysollib/gamedb.py:162 msgid "Klondike type" msgstr "" -#: pysollib/gamedb.py:162 +#: pysollib/gamedb.py:163 msgid "Montana type" msgstr "" -#: pysollib/gamedb.py:163 +#: pysollib/gamedb.py:164 msgid "Napoleon type" msgstr "" -#: pysollib/gamedb.py:164 +#: pysollib/gamedb.py:165 msgid "Numerica type" msgstr "" -#: pysollib/gamedb.py:165 +#: pysollib/gamedb.py:166 msgid "Pairing type" msgstr "" -#: pysollib/gamedb.py:166 +#: pysollib/gamedb.py:167 msgid "Raglan type" msgstr "" -#: pysollib/gamedb.py:168 +#: pysollib/gamedb.py:169 msgid "Spider type" msgstr "" -#: pysollib/gamedb.py:169 +#: pysollib/gamedb.py:170 msgid "Terrace type" msgstr "" -#: pysollib/gamedb.py:170 +#: pysollib/gamedb.py:171 msgid "Yukon type" msgstr "" -#: pysollib/gamedb.py:178 pysollib/gamedb.py:186 +#: pysollib/gamedb.py:179 pysollib/gamedb.py:187 msgid "French type" msgstr "" -#: pysollib/gamedb.py:179 pysollib/gamedb.py:187 pysollib/gamedb.py:195 +#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 pysollib/gamedb.py:196 msgid "Ganjifa type" msgstr "" -#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 pysollib/gamedb.py:196 +#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:197 msgid "Hanafuda type" msgstr "" -#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:203 +#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:204 msgid "Hex A Deck type" msgstr "" -#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:208 +#: pysollib/gamedb.py:183 pysollib/gamedb.py:191 pysollib/gamedb.py:209 msgid "Tarock type" msgstr "" -#: pysollib/gamedb.py:194 +#: pysollib/gamedb.py:195 msgid "Dashavatara Ganjifa type" msgstr "" -#: pysollib/gamedb.py:197 +#: pysollib/gamedb.py:198 msgid "Mughal Ganjifa type" msgstr "" -#: pysollib/gamedb.py:198 +#: pysollib/gamedb.py:199 msgid "Navagraha Ganjifa type" msgstr "" -#: pysollib/gamedb.py:202 +#: pysollib/gamedb.py:203 msgid "Shisen-Sho" msgstr "" -#: pysollib/gamedb.py:204 +#: pysollib/gamedb.py:205 msgid "Matrix type" msgstr "" -#: pysollib/gamedb.py:205 +#: pysollib/gamedb.py:206 msgid "Memory type" msgstr "" -#: pysollib/gamedb.py:206 +#: pysollib/gamedb.py:207 msgid "Poker type" msgstr "" -#: pysollib/gamedb.py:207 +#: pysollib/gamedb.py:208 msgid "Puzzle type" msgstr "" @@ -1227,11 +1227,11 @@ msgstr "" msgid " Help" msgstr "" -#: pysollib/main.py:67 pysollib/main.py:284 +#: pysollib/main.py:68 pysollib/main.py:287 msgid " installation error" msgstr "" -#: pysollib/main.py:68 +#: pysollib/main.py:69 msgid "" "No %ss were found !!!\n" "\n" @@ -1241,17 +1241,17 @@ msgid "" "Please check your %s installation.\n" msgstr "" -#: pysollib/main.py:75 pysollib/main.py:292 pysollib/tk/menubar.py:382 +#: pysollib/main.py:76 pysollib/main.py:295 pysollib/tk/menubar.py:382 msgid "&Quit" msgstr "" -#: pysollib/main.py:99 +#: pysollib/main.py:100 msgid "" "%s: %s\n" "try %s --help for more information" msgstr "" -#: pysollib/main.py:143 +#: pysollib/main.py:147 msgid "" "Usage: %s [OPTIONS] [FILE]\n" " -g --game=GAMENAME start game GAMENAME\n" @@ -1269,19 +1269,19 @@ msgid "" " MOD - one of following: pss(default), pygame, oss, win\n" msgstr "" -#: pysollib/main.py:161 +#: pysollib/main.py:165 msgid "" "%s: too many files\n" "try %s --help for more information" msgstr "" -#: pysollib/main.py:165 +#: pysollib/main.py:169 msgid "" "%s: invalid file name\n" "try %s --help for more information" msgstr "" -#: pysollib/main.py:285 +#: pysollib/main.py:288 msgid "" "\n" "No games were found !!!\n" @@ -1292,25 +1292,25 @@ msgid "" "Please check your %s installation.\n" msgstr "" -#: pysollib/main.py:371 pysollib/main.py:379 +#: pysollib/main.py:374 pysollib/main.py:382 msgid " installation problem" msgstr "" -#: pysollib/main.py:372 +#: pysollib/main.py:375 msgid "" "Your Python installation is compiled without thread support.\n" "\n" "Sounds and background music will be disabled." msgstr "" -#: pysollib/main.py:380 +#: pysollib/main.py:383 msgid "" "The pysolsoundserver module was not found.\n" "\n" "Sounds and background music will be disabled." msgstr "" -#: pysollib/main.py:387 +#: pysollib/main.py:390 msgid "Welcome to " msgstr "" diff --git a/po/ru_games.po b/po/ru_games.po index 1faaf812..f2d6e134 100644 --- a/po/ru_games.po +++ b/po/ru_games.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: PySol 0.0.1\n" -"POT-Creation-Date: Tue Nov 7 05:42:15 2006\n" -"PO-Revision-Date: 2006-11-07 05:51+0300\n" +"POT-Creation-Date: Thu Nov 9 17:36:05 2006\n" +"PO-Revision-Date: 2006-11-09 17:59+0300\n" "Last-Translator: Скоморох \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" @@ -925,10 +925,10 @@ msgid "Elevator" msgstr "Лифт" msgid "Elevens" -msgstr "Одиннадцать" +msgstr "По одиннадцать" msgid "Elevens Too" -msgstr "Тоже Одиннадцать" +msgstr "Тоже по одиннадцать" msgid "Emperor" msgstr "Император" @@ -1003,6 +1003,9 @@ msgstr "Пасьянс Фатимы" msgid "Fatimeh's Game Relaxed" msgstr "Облегчённый Пасьянс Фатимы" +msgid "Fifteen" +msgstr "Пятнадцать" + #, fuzzy msgid "Fifteen Puzzle" msgstr "Пятнашки" @@ -1011,7 +1014,7 @@ msgid "Fifteen plus" msgstr "Пятнадцать плюс" msgid "Fifteens" -msgstr "Пятнадцать" +msgstr "По пятнадцать" msgid "Final Battle" msgstr "Последняя битва" @@ -1414,6 +1417,9 @@ msgstr "Маджонг Inazuma" msgid "Inca" msgstr "Инка" +msgid "Incompatibility" +msgstr "Несовместимость" + msgid "Indefatigable" msgstr "Неутомимый" @@ -1576,53 +1582,41 @@ msgstr "Гигант" msgid "Kurma" msgstr "" -#, fuzzy msgid "Kyodai 14" -msgstr "Маджонг Kyodai 14" +msgstr "Kyodai 14" -#, fuzzy msgid "Kyodai 17" -msgstr "Маджонг Kyodai 17" +msgstr "Kyodai 17" -#, fuzzy msgid "Kyodai 18" -msgstr "Маджонг Kyodai 18" +msgstr "Kyodai 18" -#, fuzzy msgid "Kyodai 20" -msgstr "Маджонг Kyodai 20" +msgstr "Kyodai 20" -#, fuzzy msgid "Kyodai 23" -msgstr "Маджонг Kyodai 23" +msgstr "Kyodai 23" -#, fuzzy msgid "Kyodai 24" -msgstr "Маджонг Kyodai 24" +msgstr "Kyodai 24" -#, fuzzy msgid "Kyodai 25" -msgstr "Маджонг Kyodai 25" +msgstr "Kyodai 25" -#, fuzzy msgid "Kyodai 26" -msgstr "Маджонг Kyodai 26" +msgstr "Kyodai 26" -#, fuzzy msgid "Kyodai 27" -msgstr "Маджонг Kyodai 27" +msgstr "Kyodai 27" -#, fuzzy msgid "Kyodai 28" -msgstr "Маджонг Kyodai 28" +msgstr "Kyodai 28" -#, fuzzy msgid "Kyodai 41" -msgstr "Маджонг Kyodai 4" +msgstr "Kyodai 41" -#, fuzzy msgid "Kyodai 42" -msgstr "Маджонг Kyodai 42" +msgstr "Kyodai 42" msgid "La Belle Lucie" msgstr "Прекрасная Люси" @@ -1747,7 +1741,7 @@ msgid "Lucas" msgstr "Лукас" msgid "Lucky Piles" -msgstr "Счастливая ячейка" +msgstr "Счастливые кучки" msgid "Lucky Thirteen" msgstr "Счастливые Тринадцать" @@ -3023,6 +3017,9 @@ msgstr "Скорпион" msgid "Scorpion Head" msgstr "Голова скорпиона" +msgid "Scorpion II" +msgstr "Скорпион II" + msgid "Scorpion Tail" msgstr "Хвост скорпиона" @@ -3039,7 +3036,7 @@ msgid "Sea Towers" msgstr "Морские башни" msgid "Seahaven Towers" -msgstr "" +msgstr "Приморские башни" msgid "Selective Castle" msgstr "Избирательный Замок" @@ -3075,7 +3072,7 @@ msgid "Shady Lanes" msgstr "Тенистые аллеи" msgid "Shamrocks" -msgstr "Трилистник" +msgstr "Трилистники" msgid "Shamsher" msgstr "" @@ -3457,7 +3454,7 @@ msgid "Thirteen Up" msgstr "Тринадцать вверх" msgid "Thirteens" -msgstr "Тринадцать" +msgstr "По тринадцать" msgid "Thirty Six" msgstr "Тридцать шесть" diff --git a/po/ru_pysol.po b/po/ru_pysol.po index 73ad59b0..e9a60baa 100644 --- a/po/ru_pysol.po +++ b/po/ru_pysol.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PySol 0.0.1\n" -"POT-Creation-Date: Tue Nov 7 05:43:10 2006\n" +"POT-Creation-Date: Thu Nov 9 17:36:57 2006\n" "PO-Revision-Date: 2006-11-06 09:53+0300\n" "Last-Translator: Скоморох \n" "Language-Team: Russian \n" @@ -55,7 +55,7 @@ msgstr "&Следующий номер" #: pysollib/actions.py:314 pysollib/app.py:892 pysollib/app.py:1155 #: pysollib/app.py:1167 pysollib/game.py:929 pysollib/game.py:1864 -#: pysollib/main.py:376 pysollib/main.py:384 pysollib/tk/colorsdialog.py:122 +#: pysollib/main.py:379 pysollib/main.py:387 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 @@ -510,211 +510,211 @@ msgstr "Ошибка при сохранении игры" msgid "Error while saving game" msgstr "Ошибка при сохранении игры" -#: pysollib/gamedb.py:120 +#: pysollib/gamedb.py:121 msgid "Baker's Dozen" msgstr "" -#: pysollib/gamedb.py:121 +#: pysollib/gamedb.py:122 msgid "Beleaguered Castle" msgstr "" -#: pysollib/gamedb.py:122 +#: pysollib/gamedb.py:123 msgid "Canfield" msgstr "" -#: pysollib/gamedb.py:123 +#: pysollib/gamedb.py:124 msgid "Fan" msgstr "" -#: pysollib/gamedb.py:124 +#: pysollib/gamedb.py:125 msgid "Forty Thieves" msgstr "" -#: pysollib/gamedb.py:125 +#: pysollib/gamedb.py:126 msgid "FreeCell" msgstr "" -#: pysollib/gamedb.py:126 +#: pysollib/gamedb.py:127 msgid "Golf" msgstr "" -#: pysollib/gamedb.py:127 +#: pysollib/gamedb.py:128 msgid "Gypsy" msgstr "" -#: pysollib/gamedb.py:128 +#: pysollib/gamedb.py:129 msgid "Klondike" msgstr "" -#: pysollib/gamedb.py:129 +#: pysollib/gamedb.py:130 msgid "Montana" msgstr "" -#: pysollib/gamedb.py:130 +#: pysollib/gamedb.py:131 msgid "Napoleon" msgstr "" -#: pysollib/gamedb.py:131 +#: pysollib/gamedb.py:132 msgid "Numerica" msgstr "" -#: pysollib/gamedb.py:132 +#: pysollib/gamedb.py:133 msgid "Pairing" msgstr "" -#: pysollib/gamedb.py:133 +#: pysollib/gamedb.py:134 msgid "Raglan" msgstr "" -#: pysollib/gamedb.py:134 pysollib/gamedb.py:167 +#: pysollib/gamedb.py:135 pysollib/gamedb.py:168 msgid "Simple games" msgstr "Простые игры" -#: pysollib/gamedb.py:135 +#: pysollib/gamedb.py:136 msgid "Spider" msgstr "" -#: pysollib/gamedb.py:136 +#: pysollib/gamedb.py:137 msgid "Terrace" msgstr "" -#: pysollib/gamedb.py:137 +#: pysollib/gamedb.py:138 msgid "Yukon" msgstr "" -#: pysollib/gamedb.py:138 pysollib/gamedb.py:171 +#: pysollib/gamedb.py:139 pysollib/gamedb.py:172 msgid "One-Deck games" msgstr "Игры с одной колодой" -#: pysollib/gamedb.py:139 pysollib/gamedb.py:172 +#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 msgid "Two-Deck games" msgstr "Игры с двумя колодами" -#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 +#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 msgid "Three-Deck games" msgstr "Игры с тремя колодами" -#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 +#: pysollib/gamedb.py:142 pysollib/gamedb.py:175 msgid "Four-Deck games" msgstr "Игры с четырьмя колодами" -#: pysollib/gamedb.py:153 +#: pysollib/gamedb.py:154 msgid "Baker's Dozen type" msgstr "Игры типа Чёртова Дюжина (Baker's Dozen)" -#: pysollib/gamedb.py:154 +#: pysollib/gamedb.py:155 msgid "Beleaguered Castle type" msgstr "Игры типа Осаждённый Замок (Beleaguered Castle)" -#: pysollib/gamedb.py:155 +#: pysollib/gamedb.py:156 msgid "Canfield type" msgstr "Игры типа Кенфилд (Canfield)" -#: pysollib/gamedb.py:156 +#: pysollib/gamedb.py:157 msgid "Fan type" msgstr "Игры типа Веер (Fan)" -#: pysollib/gamedb.py:157 +#: pysollib/gamedb.py:158 msgid "Forty Thieves type" msgstr "Игры типа Сорок Воров (Forty Thieves)" -#: pysollib/gamedb.py:158 +#: pysollib/gamedb.py:159 msgid "FreeCell type" msgstr "Игры типа Свободная Ячейка (FreeCell)" -#: pysollib/gamedb.py:159 +#: pysollib/gamedb.py:160 msgid "Golf type" msgstr "Игры типа Гольф (Golf)" -#: pysollib/gamedb.py:160 +#: pysollib/gamedb.py:161 msgid "Gypsy type" msgstr "Игры типа Цыганский Пасьянс (Gypsy)" -#: pysollib/gamedb.py:161 +#: pysollib/gamedb.py:162 msgid "Klondike type" msgstr "Игры типа Клондайк (Klondike)" -#: pysollib/gamedb.py:162 +#: pysollib/gamedb.py:163 msgid "Montana type" msgstr "Игры типа Монтана (Montana)" -#: pysollib/gamedb.py:163 +#: pysollib/gamedb.py:164 msgid "Napoleon type" msgstr "Игры типа Наполеон (Napoleon)" -#: pysollib/gamedb.py:164 +#: pysollib/gamedb.py:165 msgid "Numerica type" msgstr "Игры числового типа (Numerica)" -#: pysollib/gamedb.py:165 +#: pysollib/gamedb.py:166 msgid "Pairing type" msgstr "Парные игры" -#: pysollib/gamedb.py:166 +#: pysollib/gamedb.py:167 msgid "Raglan type" msgstr "Игры типа Реглан (Raglan)" -#: pysollib/gamedb.py:168 +#: pysollib/gamedb.py:169 msgid "Spider type" msgstr "Игры типа Паук (Spider)" -#: pysollib/gamedb.py:169 +#: pysollib/gamedb.py:170 msgid "Terrace type" msgstr "Игры типа Терраса (Terrace)" -#: pysollib/gamedb.py:170 +#: pysollib/gamedb.py:171 msgid "Yukon type" msgstr "Игры типа Юкон (Yukon)" -#: pysollib/gamedb.py:178 pysollib/gamedb.py:186 +#: pysollib/gamedb.py:179 pysollib/gamedb.py:187 msgid "French type" msgstr "Классические" -#: pysollib/gamedb.py:179 pysollib/gamedb.py:187 pysollib/gamedb.py:195 +#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 pysollib/gamedb.py:196 msgid "Ganjifa type" msgstr "Игры типа Ганджифа" -#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 pysollib/gamedb.py:196 +#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:197 msgid "Hanafuda type" msgstr "Игры типа Ханафуда" -#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:203 +#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:204 msgid "Hex A Deck type" msgstr "Игры типа Hex A Deck" -#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:208 +#: pysollib/gamedb.py:183 pysollib/gamedb.py:191 pysollib/gamedb.py:209 msgid "Tarock type" msgstr "Таро" -#: pysollib/gamedb.py:194 +#: pysollib/gamedb.py:195 msgid "Dashavatara Ganjifa type" msgstr "Игры типа Дашаватара Ганджифа" -#: pysollib/gamedb.py:197 +#: pysollib/gamedb.py:198 msgid "Mughal Ganjifa type" msgstr "Игры типа Мугал Ганджифа" -#: pysollib/gamedb.py:198 +#: pysollib/gamedb.py:199 msgid "Navagraha Ganjifa type" msgstr "Игры типа Наваграха Ганджифа" -#: pysollib/gamedb.py:202 +#: pysollib/gamedb.py:203 msgid "Shisen-Sho" msgstr "Шисен-Сё" -#: pysollib/gamedb.py:204 +#: pysollib/gamedb.py:205 msgid "Matrix type" msgstr "Мозаика" -#: pysollib/gamedb.py:205 +#: pysollib/gamedb.py:206 msgid "Memory type" msgstr "Игры на запоминание" -#: pysollib/gamedb.py:206 +#: pysollib/gamedb.py:207 msgid "Poker type" msgstr "Покер" -#: pysollib/gamedb.py:207 +#: pysollib/gamedb.py:208 msgid "Puzzle type" msgstr "Пазлы" @@ -1331,11 +1331,11 @@ msgstr "Не найден файл помощи\n" msgid " Help" msgstr " Помощь" -#: pysollib/main.py:67 pysollib/main.py:284 +#: pysollib/main.py:68 pysollib/main.py:287 msgid " installation error" msgstr " проблема с установкой" -#: pysollib/main.py:68 +#: pysollib/main.py:69 msgid "" "No %ss were found !!!\n" "\n" @@ -1345,11 +1345,11 @@ msgid "" "Please check your %s installation.\n" msgstr "" -#: pysollib/main.py:75 pysollib/main.py:292 pysollib/tk/menubar.py:382 +#: pysollib/main.py:76 pysollib/main.py:295 pysollib/tk/menubar.py:382 msgid "&Quit" msgstr "В&ыход" -#: pysollib/main.py:99 +#: pysollib/main.py:100 msgid "" "%s: %s\n" "try %s --help for more information" @@ -1357,7 +1357,7 @@ msgstr "" "%s: %s\n" "попробуйте %s --help для получения более подробной информации" -#: pysollib/main.py:143 +#: pysollib/main.py:147 msgid "" "Usage: %s [OPTIONS] [FILE]\n" " -g --game=GAMENAME start game GAMENAME\n" @@ -1389,7 +1389,7 @@ msgstr "" " FILE - имя файла сохранённой игры\n" " MOD - one of following: pss(default), pygame, oss, win\n" -#: pysollib/main.py:161 +#: pysollib/main.py:165 msgid "" "%s: too many files\n" "try %s --help for more information" @@ -1397,7 +1397,7 @@ msgstr "" "\"%s: слишком много файлов\n" "попробуйте %s --help для получения более подробной информации" -#: pysollib/main.py:165 +#: pysollib/main.py:169 msgid "" "%s: invalid file name\n" "try %s --help for more information" @@ -1405,7 +1405,7 @@ msgstr "" "%s: неправильное имя файла\n" "попробуйте %s --help для получения более подробной информации" -#: pysollib/main.py:285 +#: pysollib/main.py:288 msgid "" "\n" "No games were found !!!\n" @@ -1416,18 +1416,18 @@ msgid "" "Please check your %s installation.\n" msgstr "" -#: pysollib/main.py:371 pysollib/main.py:379 +#: pysollib/main.py:374 pysollib/main.py:382 msgid " installation problem" msgstr "" -#: pysollib/main.py:372 +#: pysollib/main.py:375 msgid "" "Your Python installation is compiled without thread support.\n" "\n" "Sounds and background music will be disabled." msgstr "" -#: pysollib/main.py:380 +#: pysollib/main.py:383 msgid "" "The pysolsoundserver module was not found.\n" "\n" @@ -1437,7 +1437,7 @@ msgstr "" "\n" "Звук и фоновая музыка будут недоступны" -#: pysollib/main.py:387 +#: pysollib/main.py:390 msgid "Welcome to " msgstr "Добро пожаловать в " diff --git a/pysollib/app.py b/pysollib/app.py index b13d0630..d37fa604 100644 --- a/pysollib/app.py +++ b/pysollib/app.py @@ -853,6 +853,7 @@ class Application: self.top.busyUpdate() def loadImages1(self): + # load dialog images dir = os.path.join("images", "logos") for f in ("joker07_40_774", "joker08_40_774", @@ -861,12 +862,33 @@ class Application: "joker11_100_774", "joker10_100",): self.gimages.logos.append(self.dataloader.findImage(f, dir)) + if os.name == 'posix': + dir = os.path.join('images', 'dialog', 'bluecurve') + else: + dir = os.path.join('images', 'dialog', 'default') + for f in ('error', 'info', 'question', 'warning'): + fn = self.dataloader.findImage(f, dir) + im = loadImage(fn) + MfxMessageDialog.img[f] = im + + # load button images + if 0 and TOOLKIT == 'tk': + dir = os.path.join('images', 'buttons', 'bluecurve') + for n, f in ( + (_('&OK'), 'ok'), + (_('&Cancel'), 'cancel'), + (_('&New game'), 'new'), + ): + fn = self.dataloader.findImage(f, dir) + im = loadImage(fn) + MfxDialog.button_img[n] = im + + def loadImages2(self): + # load canvas images dir = "images" ##for f in ("noredeal", "redeal",): for f in ("stopsign", "redeal",): self.gimages.redeal.append(self.dataloader.findImage(f, dir)) - - def loadImages2(self): dir = os.path.join("images", "demo") for f in ("demo01", "demo02", "demo03", "demo04", "demo05",): self.gimages.demo.append(self.dataloader.findImage(f, dir)) @@ -878,32 +900,16 @@ class Application: ## self.gimages.stats.append(self.dataloader.findImage(f, dir)) def loadImages3(self): - if os.name == 'posix': - dir = os.path.join('images', 'dialog', 'bluecurve') - else: - dir = os.path.join('images', 'dialog', 'default') - for f in ('error', 'info', 'question', 'warning'): - fn = self.dataloader.findImage(f, dir) - im = loadImage(fn) - MfxMessageDialog.img[f] = im - if 0 and TOOLKIT == 'tk': - dir = os.path.join('images', 'buttons', 'bluecurve') - for n, f in ( - (_('&OK'), 'ok'), - (_('&Cancel'), 'cancel'), - (_('&New game'), 'new'), - ): - fn = self.dataloader.findImage(f, dir) - im = loadImage(fn) - MfxDialog.button_img[n] = im + # load treeview images SelectDialogTreeData.img = [] dir = os.path.join('images', 'tree') for f in ('folder', 'openfolder', 'node', 'emptynode'): fn = self.dataloader.findImage(f, dir) im = loadImage(fn) SelectDialogTreeData.img.append(im) + + # load htmlviewer images dir = os.path.join('images', 'htmlviewer') - # fn = self.dataloader.findImage('disk', dir) HTMLViewer.symbols_fn['disk'] = fn diff --git a/pysollib/games/capricieuse.py b/pysollib/games/capricieuse.py index 032391b1..d05f977b 100644 --- a/pysollib/games/capricieuse.py +++ b/pysollib/games/capricieuse.py @@ -48,16 +48,16 @@ class Capricieuse(Game): # game layout # - def createGame(self, **layout): + def createGame(self, rows=12): # create layout l, s = Layout(self), self.s # set window - self.setSize(l.XM+12*l.XS, l.YM+2*l.YS+15*l.YOFFSET) + self.setSize(l.XM+rows*l.XS, l.YM+2*l.YS+15*l.YOFFSET) # create stacks - x, y, = l.XM+2*l.XS, l.YM + x, y, = l.XM+(rows-8)*l.XS/2, l.YM for i in range(4): s.foundations.append(SS_FoundationStack(x, y, self, suit=i)) x = x + l.XS @@ -66,7 +66,7 @@ class Capricieuse(Game): base_rank=KING, dir=-1)) x = x + l.XS x, y, = l.XM, y + l.YS - for i in range(12): + for i in range(rows): s.rows.append(self.RowStack_Class(x, y, self, max_move=1, max_accept=1)) x = x + l.XS @@ -114,7 +114,7 @@ class Nationale(Capricieuse): class Strata(Game): - def createGame(self, **layout): + def createGame(self): # create layout l, s = Layout(self), self.s @@ -150,6 +150,27 @@ class Strata(Game): shallHighlightMatch = Game._shallHighlightMatch_AC +# /*********************************************************************** +# // Fifteen +# ************************************************************************/ + +class Fifteen(Capricieuse): + Talon_Class = InitialDealTalonStack + + def createGame(self): + Capricieuse.createGame(self, rows=15) + + def startGame(self): + for i in range(6): + self.s.talon.dealRow(frames=0) + self.startDealSample() + self.s.talon.dealRowAvail() + + def _shuffleHook(self, cards): + return cards + + + # register the game registerGame(GameInfo(292, Capricieuse, "Capricieuse", GI.GT_BAKERS_DOZEN | GI.GT_OPEN, 2, 2, GI.SL_MOSTLY_SKILL)) @@ -159,4 +180,6 @@ registerGame(GameInfo(293, Nationale, "Nationale", registerGame(GameInfo(606, Strata, "Strata", GI.GT_BAKERS_DOZEN | GI.GT_OPEN, 2, 2, GI.SL_MOSTLY_SKILL, ranks=(0, 6, 7, 8, 9, 10, 11, 12) )) +registerGame(GameInfo(673, Fifteen, "Fifteen", + GI.GT_BAKERS_DOZEN | GI.GT_OPEN, 2, 0, GI.SL_MOSTLY_SKILL)) diff --git a/pysollib/games/spider.py b/pysollib/games/spider.py index a1728d6b..95270311 100644 --- a/pysollib/games/spider.py +++ b/pysollib/games/spider.py @@ -1081,6 +1081,39 @@ class ShortTail(LongTail): LongTail.createGame(self, rows=8, playcards=24) +# /*********************************************************************** +# // Incompatibility +# ************************************************************************/ + +class Incompatibility(Spidike): + Talon_Class = GroundForADivorce_Talon + RowStack_Class = Spider_SS_RowStack + + def createGame(self): + Spidike.createGame(self, rows=10) + + def startGame(self): + for i in range(4): + self.s.talon.dealRow(frames=0) + self.startDealSample() + self.s.talon.dealRow() + + +# /*********************************************************************** +# // Scorpion II +# ************************************************************************/ + +class ScorpionII(Scorpion): + + def startGame(self): + for i in (3, 3, 3, 0, 0, 0): + self.s.talon.dealRow(rows=self.s.rows[:i], flip=0, frames=0) + self.s.talon.dealRow(rows=self.s.rows[i:], flip=1, frames=0) + self.startDealSample() + self.s.talon.dealRow() + + + # register the game registerGame(GameInfo(10, RelaxedSpider, "Relaxed Spider", GI.GT_SPIDER | GI.GT_RELAXED, 2, 0, GI.SL_MOSTLY_SKILL)) @@ -1193,4 +1226,8 @@ registerGame(GameInfo(571, ShortTail, "Short Tail", registerGame(GameInfo(670, ChineseSpider, "Chinese Spider", GI.GT_SPIDER, 4, 0, GI.SL_MOSTLY_SKILL, suits=(0, 1, 2),)) +registerGame(GameInfo(671, Incompatibility, "Incompatibility", + GI.GT_SPIDER, 2, 0, GI.SL_MOSTLY_SKILL)) +registerGame(GameInfo(672, ScorpionII, "Scorpion II", + GI.GT_SPIDER, 1, 0, GI.SL_MOSTLY_SKILL)) diff --git a/pysollib/main.py b/pysollib/main.py index 56a9f410..3f51d0ce 100644 --- a/pysollib/main.py +++ b/pysollib/main.py @@ -35,27 +35,26 @@ # imports -import sys, os, locale +import sys, os import traceback import getopt -import gettext # PySol imports from mfxutil import destruct, EnvError from util import CARDSET, DataLoader -import settings -from settings import PACKAGE, TOOLKIT, VERSION, SOUND_MOD from resource import Tile from gamedb import GI from app import Application from pysolaudio import thread, pysolsoundserver from pysolaudio import AbstractAudioClient, PysolSoundServerModuleClient from pysolaudio import Win32AudioClient, OSSAudioClient, PyGameAudioClient +import settings +PACKAGE, SOUND_MOD = settings.PACKAGE, settings.SOUND_MOD # Toolkit imports -from pysoltk import tkversion, wm_withdraw, loadImage +from pysoltk import wm_withdraw, loadImage from pysoltk import MfxMessageDialog, MfxExceptionDialog -from pysoltk import TclError, MfxRoot +from pysoltk import MfxRoot from pysoltk import PysolProgressBar @@ -97,21 +96,21 @@ def parse_option(argv): "sound-mod=", "help"]) except getopt.GetoptError, err: - print _("%s: %s\ntry %s --help for more information") \ + print >> sys.stderr, _("%s: %s\ntry %s --help for more information") \ % (prog_name, err, prog_name) return None - opts = {"help": False, - "game": None, - "gameid": None, - "fg": None, - "bg": None, - "fn": None, - "theme": None, - "french-only": False, - "noplugins": False, - "nosound": False, - "sound-mod": None, - "debug": None, + opts = {"help" : False, + "game" : None, + "gameid" : None, + "fg" : None, + "bg" : None, + "fn" : None, + "theme" : None, + "french-only" : False, + "noplugins" : False, + "nosound" : False, + "sound-mod" : None, + "debug" : None, } for i in optlist: if i[0] in ("-h", "--help"): @@ -162,11 +161,11 @@ def parse_option(argv): return None if len(args) > 1: - print _("%s: too many files\ntry %s --help for more information") % (prog_name, prog_name) + print >> sys.stderr, _("%s: too many files\ntry %s --help for more information") % (prog_name, prog_name) return None filename = args and args[0] or None if filename and not os.path.isfile(filename): - print _("%s: invalid file name\ntry %s --help for more information") % (prog_name, prog_name) + print >> sys.stderr, _("%s: invalid file name\ntry %s --help for more information") % (prog_name, prog_name) return None return opts, filename @@ -332,7 +331,7 @@ Please check your %s installation. if not app.audio.CAN_PLAY_SOUND: app.opt.sound = 0 if not opts["nosound"] and not opts['sound-mod'] and pysolsoundserver and not app.audio.connected: - print PACKAGE + ": could not connect to pysolsoundserver, sound disabled." + print >> sys.stderr, PACKAGE + ": could not connect to pysolsoundserver, sound disabled." warn_pysolsoundserver = 1 app.audio.updateSettings() # start up the background music @@ -364,9 +363,9 @@ Please check your %s installation. if thread is None: warn_thread = 1 if thread is None: - print PACKAGE + ": Python thread module not found, sound disabled." + print >> sys.stderr, PACKAGE+": Python thread module not found, sound disabled." else: - print PACKAGE + ": pysolsoundserver module not found, sound disabled." + print >> sys.stderr, PACKAGE+": pysolsoundserver module not found, sound disabled." sys.stdout.flush() if not opts["nosound"]: if warn_thread: @@ -415,39 +414,10 @@ Sounds and background music will be disabled.'''), # /*********************************************************************** -# // +# // main # ************************************************************************/ -def pysol_exit(app): - # clean up - if app.audio is not None: - app.audio.destroy() # shut down audio - destruct(app.audio) - ##app.wm_withdraw() - if app.canvas is not None: - app.canvas.destroy() - destruct(app.canvas) - if app.toolbar is not None: - app.toolbar.destroy() - destruct(app.toolbar) - if app.menubar is not None: - destruct(app.menubar) - top = app.top - destruct(app) - app = None - if top is not None: - try: - top.destroy() - except: - pass - destruct(top) - - -# /*********************************************************************** -# // PySol main entry -# ************************************************************************/ - -def pysol_main(args): +def main(args=None): # create the application app = Application() r = pysol_init(app, args) @@ -455,63 +425,4 @@ def pysol_main(args): return r # let's go - enter the mainloop app.mainloop() -## try: -## r = pysol_init(app, args) -## if r != 0: -## return r -## # let's go - enter the mainloop -## app.mainloop() -## except KeyboardInterrupt, ex: -## print "Exiting on SIGINT." -## pass -## except StandardError, ex: -## if not app.top: -## raise -## t = str(ex.__class__) -## if str(ex): t = t + ":\n" + str(ex) -## d = MfxMessageDialog(app.top, title=PACKAGE + " internal error", -## text="Internal errror. Please report this bug:\n\n"+t, -## strings=("&Quit",), bitmap="error") - try: - pysol_exit(app) - except: - pass return 0 - - -# /*********************************************************************** -# // main -# ************************************************************************/ - -def main(args=None): - - # setup (mainly for JPython) - if not hasattr(sys, "platform"): - sys.platform = "unknown" - if not hasattr(sys, "executable"): - sys.executable = None - if not hasattr(os, "defpath"): - os.defpath = "" - - # check versions - if sys.platform[:4] != "java": - if sys.version[:5] < "1.5.2": - print "%s needs Python 1.5.2 or better (you have %s)" % (PACKAGE, sys.version) - return 1 - assert len(tkversion) == 4 - if TOOLKIT == "tk": - import Tkinter - if tkversion < (8, 0, 0, 0): - print "%s needs Tcl/Tk 8.0 or better (you have %s)" % (PACKAGE, str(tkversion)) - return 1 - # check that Tkinter bindings are also at version 1.5.2 - if not hasattr(Tkinter.Wm, "wm_aspect") or not hasattr(Tkinter.Canvas, "tag_lower"): - print "%s: please update the Python-Tk bindings (aka Tkinter) to version 1.5.2 or better" % (PACKAGE,) - return 1 - # check Python - if -1 % 13 != 12: - raise Exception, "-1 % 13 != 12" - - # run it - return pysol_main(args) - diff --git a/pysollib/mfxutil.py b/pysollib/mfxutil.py index 50d1f670..0be5c385 100644 --- a/pysollib/mfxutil.py +++ b/pysollib/mfxutil.py @@ -320,90 +320,6 @@ def unpickle(filename): return obj -# /*********************************************************************** -# // -# ************************************************************************/ - -def spawnv(file, args=()): - if not args: - args = () - args = (file,) + tuple(args) - # - if not os.path.isfile(file): - raise os.error, str(file) - mode = os.stat(file)[0] - if not (mode & 0100): - return 0 - # - if os.name == "posix": - pid = os.fork() - if pid == -1: - raise os.error, "fork failed" - if pid != 0: - # parent - try: - os.waitpid(pid, 0) - except: - pass - return 1 - # child - # 1) close all files - for fd in range(255, -1, -1): - try: - os.close(fd) - except: - pass - # 2) open stdin, stdout and stderr to /dev/null - try: - fd = os.open("/dev/null", os.O_RDWR) - os.dup(fd) - os.dup(fd) - except: - pass - # 3) fork again and exec program - try: - if os.fork() == 0: - try: - os.setpgrp() - except: - pass - os.execv(file, args) - except: - pass - # 4) exit - while 1: - os._exit(0) - return 0 - - -def spawnvp(file, args=()): - if file and os.path.isabs(file): - try: - if spawnv(file, args): - return file - except: - ##if traceback: traceback.print_exc() - pass - return None - # - path = os.environ.get("PATH", "") - path = path.split(os.pathsep) - for dir in path: - try: - if dir and os.path.isdir(dir): - f = os.path.join(dir, file) - try: - if spawnv(f, args): - return f - except: - ##if traceback: traceback.print_exc() - pass - except: - ##if traceback: traceback.print_exc() - pass - return None - - # /*********************************************************************** # // # ************************************************************************/ diff --git a/pysollib/tile/soundoptionsdialog.py b/pysollib/tile/soundoptionsdialog.py index bba93f5f..bc899e75 100644 --- a/pysollib/tile/soundoptionsdialog.py +++ b/pysollib/tile/soundoptionsdialog.py @@ -41,7 +41,7 @@ import Tile as Tkinter import traceback # PySol imports -from pysollib.mfxutil import destruct, kwdefault, KwStruct, Struct, spawnvp +from pysollib.mfxutil import destruct, kwdefault, KwStruct, Struct from pysollib.settings import PACKAGE from pysollib.pysolaudio import pysolsoundserver diff --git a/pysollib/tile/tkhtml.py b/pysollib/tile/tkhtml.py index 6edc07f4..3c06825f 100644 --- a/pysollib/tile/tkhtml.py +++ b/pysollib/tile/tkhtml.py @@ -496,7 +496,8 @@ to open the following URL: def errorDialog(self, msg): d = MfxMessageDialog(self.parent, title=PACKAGE+" HTML Problem", - text=msg, bitmap="warning", + text=msg, + ##bitmap="warning", # FIXME: this interp don't have images strings=(_("&OK"),), default=0) def getImage(self, fn): diff --git a/pysollib/tk/soundoptionsdialog.py b/pysollib/tk/soundoptionsdialog.py index 19f7247e..da9fdcc6 100644 --- a/pysollib/tk/soundoptionsdialog.py +++ b/pysollib/tk/soundoptionsdialog.py @@ -41,7 +41,7 @@ import Tkinter import traceback # PySol imports -from pysollib.mfxutil import destruct, kwdefault, KwStruct, Struct, spawnvp +from pysollib.mfxutil import destruct, kwdefault, KwStruct, Struct from pysollib.settings import PACKAGE from pysollib.pysolaudio import pysolsoundserver diff --git a/pysollib/tk/tkhtml.py b/pysollib/tk/tkhtml.py index d5be640d..ab968c83 100644 --- a/pysollib/tk/tkhtml.py +++ b/pysollib/tk/tkhtml.py @@ -495,7 +495,8 @@ to open the following URL: def errorDialog(self, msg): d = MfxMessageDialog(self.parent, title=PACKAGE+" HTML Problem", - text=msg, bitmap="warning", + text=msg, + ##bitmap="warning", # FIXME: this interp don't have images strings=(_("&OK"),), default=0) def getImage(self, fn):