From 6dd4b5cd9d773ed7d036b1864c5059158d4023cb Mon Sep 17 00:00:00 2001
From: skomoroh <skomoroh@39dd0a4e-7c14-0410-91b3-c4f2d318f732>
Date: Sun, 1 Oct 2006 21:09:18 +0000
Subject: [PATCH] + 2 new games * updated translation * misc. improvements and
 bugs fixes

git-svn-id: https://pysolfc.svn.sourceforge.net/svnroot/pysolfc/PySolFC/trunk@75 39dd0a4e-7c14-0410-91b3-c4f2d318f732
---
 po/ru_games.po             | 98 +++++++++++++++-----------------------
 pysollib/games/golf.py     | 56 ++++++++++++++++++++--
 pysollib/games/gypsy.py    | 10 ++--
 pysollib/games/klondike.py |  2 +
 pysollib/stack.py          |  1 +
 5 files changed, 99 insertions(+), 68 deletions(-)

diff --git a/po/ru_games.po b/po/ru_games.po
index 208b853a..3558ae23 100644
--- a/po/ru_games.po
+++ b/po/ru_games.po
@@ -6,7 +6,7 @@ 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-17 17:05+0400\n"
+"PO-Revision-Date: 2006-09-30 18:19+0400\n"
 "Last-Translator: Скоморох <skomoroh@gmail.com>\n"
 "Language-Team: Russian <ru@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -47,13 +47,11 @@ msgstr "8 x 8"
 msgid "Abacus"
 msgstr "Абак"
 
-#, fuzzy
 msgid "Accordion"
-msgstr "Скорпион"
+msgstr "Аккордеон"
 
-#, fuzzy
 msgid "Aces High"
-msgstr "Тузы вверх"
+msgstr "Тузы сверху"
 
 msgid "Aces Up"
 msgstr "Тузы вверх"
@@ -211,11 +209,10 @@ msgid "Balance"
 msgstr "Баланс"
 
 msgid "Balarama"
-msgstr ""
+msgstr "Баларама"
 
-#, fuzzy
 msgid "Baroness"
-msgstr "Основа"
+msgstr "Баронесса"
 
 msgid "Bastille Day"
 msgstr "День Бастилии"
@@ -244,7 +241,6 @@ msgstr "Клюв и ласты"
 msgid "Beatle"
 msgstr "Жук"
 
-#, fuzzy
 msgid "Beetle"
 msgstr "Жук"
 
@@ -272,9 +268,8 @@ msgstr "Большой Внутренний двор"
 msgid "Big Deal"
 msgstr "Большая Расдача"
 
-#, fuzzy
 msgid "Big Divorce"
-msgstr "Большая дыра"
+msgstr "Большой разрыв"
 
 #, fuzzy
 msgid "Big Easy"
@@ -283,9 +278,8 @@ msgstr "Большая арфа"
 msgid "Big Flying Dragon"
 msgstr "Большой Летящий Дракон"
 
-#, fuzzy
 msgid "Big Forty"
-msgstr "Форт"
+msgstr "Большие сорок"
 
 msgid "Big Harp"
 msgstr "Большая арфа"
@@ -383,12 +377,11 @@ msgstr "Мост"
 msgid "Bridge 2"
 msgstr "Мост 2"
 
-#, fuzzy
 msgid "Bridget's Game"
-msgstr "Мост 2"
+msgstr "Пасьянс Бриджит"
 
 msgid "Bridget's Game Doubled"
-msgstr ""
+msgstr "Двойной Пасьянс Бриджит"
 
 msgid "Brigade"
 msgstr "Бригада"
@@ -518,7 +511,7 @@ msgid "Chelicera"
 msgstr "Хелицера"
 
 msgid "Cheops"
-msgstr ""
+msgstr "Хеопс"
 
 msgid "Chequers"
 msgstr "Шахматный порядок"
@@ -596,9 +589,8 @@ msgstr "Виток"
 msgid "Corkscrew"
 msgstr "Штопор"
 
-#, fuzzy
 msgid "Corner Card"
-msgstr "Углы"
+msgstr "Угловая карта"
 
 msgid "Corner Suite"
 msgstr "Угловые масти"
@@ -907,9 +899,8 @@ msgstr "Восемь квадратов"
 msgid "Eight Times Eight"
 msgstr "Восемь раз по восемь"
 
-#, fuzzy
 msgid "Eight by Eight"
-msgstr "Восемь раз по восемь"
+msgstr "Восемь на восемь"
 
 msgid "Elba"
 msgstr "Ельба"
@@ -991,12 +982,11 @@ msgstr "Очаровательный веер"
 msgid "Fastness"
 msgstr "Крепость"
 
-#, fuzzy
 msgid "Fatimeh's Game"
-msgstr "Бабушкина игра"
+msgstr "Пасьянс Фатимы"
 
 msgid "Fatimeh's Game Relaxed"
-msgstr ""
+msgstr "Облегчённый Пасьянс Фатимы"
 
 #, fuzzy
 msgid "Fifteen Puzzle"
@@ -1030,9 +1020,8 @@ msgstr "Маджонг Fish face"
 msgid "Five Aces"
 msgstr "Пять тузов"
 
-#, fuzzy
 msgid "Five Piles"
-msgstr "Пять тузов"
+msgstr "Пять кучек"
 
 msgid "Five Pyramids"
 msgstr "Пять пирамид"
@@ -1043,9 +1032,8 @@ msgstr "Фламенко"
 msgid "Floating City"
 msgstr "Плавающий город"
 
-#, fuzzy
 msgid "Floradora"
-msgstr "Колорадо"
+msgstr "Флорадора"
 
 msgid "Flower Arrangement"
 msgstr "Аранжировка цветов"
@@ -1392,9 +1380,8 @@ msgstr "Дурацкое удовольствие"
 msgid "Idle Aces"
 msgstr "Свободные тузы"
 
-#, fuzzy
 msgid "Idle Year"
-msgstr "Свободные тузы"
+msgstr "Свободный год"
 
 msgid "IloveU"
 msgstr "IloveU"
@@ -1498,26 +1485,25 @@ msgid "K for Kyodai"
 msgstr "Маджонг K for Kyodai"
 
 msgid "Kali's Game"
-msgstr ""
+msgstr "Пасьянс Кали"
 
 msgid "Kali's Game Doubled"
-msgstr ""
+msgstr "Двойной Пасьянс Кали"
 
 msgid "Kali's Game Relaxed"
-msgstr ""
+msgstr "Облегчённый Пасьянс Кали"
 
 msgid "Kansas"
 msgstr "Канзас"
 
-#, fuzzy
 msgid "Katrina's Game"
-msgstr "Бабушкина игра"
+msgstr "Пасьянс Катрины"
 
 msgid "Katrina's Game Doubled"
-msgstr ""
+msgstr "Двойной Пасьянс Катрины"
 
 msgid "Katrina's Game Relaxed"
-msgstr ""
+msgstr "Облегчённый Пасьянс Катрины"
 
 msgid "Khadga"
 msgstr "Khadga"
@@ -1546,9 +1532,8 @@ msgstr ""
 msgid "Klondike"
 msgstr "Клондайк"
 
-#, fuzzy
 msgid "Klondike Plus 16"
-msgstr "Клондайк"
+msgstr "Клондайк Плюс 16"
 
 msgid "Klondike by Threes"
 msgstr "Клондайк по три"
@@ -1660,15 +1645,14 @@ msgstr "Ленивая леди"
 msgid "Lanes"
 msgstr "Тропинки"
 
-#, fuzzy
 msgid "Lara's Game"
-msgstr "Бабушкина игра"
+msgstr "Пасьянс Лары"
 
 msgid "Lara's Game Doubled"
-msgstr ""
+msgstr "Двойной Пасьянс Лары"
 
 msgid "Lara's Game Relaxed"
-msgstr ""
+msgstr "Облегчённый Пасьянс Лары"
 
 msgid "Last Chance"
 msgstr "Последний шанс"
@@ -1713,9 +1697,8 @@ msgstr "Малыш Билли"
 msgid "Little Easy"
 msgstr "Малые ворота"
 
-#, fuzzy
 msgid "Little Forty"
-msgstr "Малые ворота"
+msgstr "Малые сорок"
 
 msgid "Little Gate"
 msgstr "Малые ворота"
@@ -1753,9 +1736,8 @@ msgstr "Счастливые Тринадцать"
 msgid "Madame"
 msgstr "Мадам"
 
-#, fuzzy
 msgid "Mage's Game"
-msgstr "Бабушкина игра"
+msgstr "Пасьянс Меги"
 
 msgid "Mahjongg Altar"
 msgstr "Маджонг Алтарь"
@@ -2701,9 +2683,8 @@ msgstr "Настойчивость"
 msgid "Phantom Blockade"
 msgstr "Призрачная блокада"
 
-#, fuzzy
 msgid "Pharaohs"
-msgstr "Патриархи"
+msgstr "Фараоны"
 
 msgid "Phoenix"
 msgstr "Феникс"
@@ -3042,7 +3023,7 @@ msgid "Senate +"
 msgstr "Сенат +"
 
 msgid "Senior Wrangler"
-msgstr ""
+msgstr "Сеньор Врангель"
 
 msgid "Serpent"
 msgstr "Змея"
@@ -3149,7 +3130,7 @@ msgid "Sixes and Sevens"
 msgstr "Шестёрки и семёрки"
 
 msgid "Skippy"
-msgstr ""
+msgstr "Попрыгунчик"
 
 msgid "Skiz"
 msgstr ""
@@ -3303,7 +3284,7 @@ msgid "Storehouse"
 msgstr "Сокровищница"
 
 msgid "Straight Up"
-msgstr ""
+msgstr "Прямолинейный"
 
 msgid "Strata"
 msgstr "Пласт"
@@ -3326,7 +3307,7 @@ msgstr "Улицы и аллеи"
 
 #, fuzzy
 msgid "Striptease"
-msgstr "Пласт"
+msgstr "Стриптиз"
 
 msgid "Stronghold"
 msgstr "Твердыня"
@@ -3349,9 +3330,8 @@ msgstr "Турецкий султан"
 msgid "Sumo"
 msgstr "Сумо"
 
-#, fuzzy
 msgid "SunMoon"
-msgstr "Голубая луна"
+msgstr "СолнцеЛуна"
 
 msgid "Super Challenge FreeCell"
 msgstr "Очень Сложная Свободная ячейка"
@@ -3502,9 +3482,8 @@ msgstr "Маджонг Totally Random-Made"
 msgid "Tournament"
 msgstr "Турнир"
 
-#, fuzzy
 msgid "Tower of Babel"
-msgstr "Ханойская башня"
+msgstr "Вавилонская башня"
 
 msgid "Tower of Hanoy"
 msgstr "Ханойская башня"
@@ -3622,9 +3601,8 @@ msgstr ""
 msgid "Vamana"
 msgstr ""
 
-#, fuzzy
 msgid "Vanishing Cross"
-msgstr "Маджонг Крест"
+msgstr "Исчезающий Крест"
 
 #, fuzzy
 msgid "Varaha"
@@ -3643,7 +3621,7 @@ msgid "Vertical"
 msgstr "Вертикаль"
 
 msgid "Very Big Divorce"
-msgstr ""
+msgstr "Очень большой разрыв"
 
 msgid "Vi"
 msgstr ""
diff --git a/pysollib/games/golf.py b/pysollib/games/golf.py
index 51eb939a..1e77d66f 100644
--- a/pysollib/games/golf.py
+++ b/pysollib/games/golf.py
@@ -506,9 +506,6 @@ class Robert(Game):
 
 DIAMOND = 3
 
-class DiamondMine_Foundation(AbstractFoundationStack):
-    pass
-
 class DiamondMine_RowStack(RK_RowStack):
     def acceptsCards(self, from_stack, cards):
         if not RK_RowStack.acceptsCards(self, from_stack, cards):
@@ -558,6 +555,55 @@ class DiamondMine(Game):
     shallHighlightMatch = Game._shallHighlightMatch_RK
 
 
+# /***********************************************************************
+# // Dolphin
+# ************************************************************************/
+
+class Dolphin(Game):
+
+    def createGame(self, rows=8, reserves=4, playcards=6):
+        l, s = Layout(self), self.s
+        self.setSize(l.XM+rows*l.XS, l.YM+3*l.YS+playcards*l.YOFFSET)
+
+        dx = (self.width-l.XM-(reserves+1)*l.XS)/3
+        x, y = l.XM+dx, l.YM
+        for i in range(reserves):
+            s.reserves.append(ReserveStack(x, y, self))
+            x += l.XS
+        x += dx
+        max_cards = 52*self.gameinfo.decks
+        s.foundations.append(RK_FoundationStack(x, y, self,
+                             base_rank=ANY_RANK, mod=13, max_cards=max_cards))
+        x, y = l.XM, l.YM+l.YS
+        for i in range(rows):
+            s.rows.append(BasicRowStack(x, y, self))
+            x += l.XS
+        s.talon = InitialDealTalonStack(l.XM, self.height-l.YS, self)
+
+        l.defaultAll()
+
+    def startGame(self):
+        for i in range(5):
+            self.s.talon.dealRow(frames=0)
+        self.startDealSample()
+        self.s.talon.dealRow()
+        self.s.talon.dealRowAvail()
+
+
+class DoubleDolphin(Dolphin):
+
+    def createGame(self):
+        Dolphin.createGame(self, rows=10, reserves=5, playcards=10)
+
+    def startGame(self):
+        for i in range(9):
+            self.s.talon.dealRow(frames=0)
+        self.startDealSample()
+        self.s.talon.dealRow()
+        self.s.talon.dealRowAvail()
+
+
+
 # register the game
 registerGame(GameInfo(36, Golf, "Golf",
                       GI.GT_GOLF, 1, 0, GI.SL_BALANCED))
@@ -580,4 +626,8 @@ registerGame(GameInfo(432, Robert, "Robert",
                       GI.GT_GOLF, 1, 2, GI.SL_LUCK))
 registerGame(GameInfo(551, DiamondMine, "Diamond Mine",
                       GI.GT_1DECK_TYPE, 1, 0, GI.SL_BALANCED))
+registerGame(GameInfo(661, Dolphin, "Dolphin",
+                      GI.GT_GOLF, 1, 0, GI.SL_MOSTLY_SKILL | GI.GT_ORIGINAL))
+registerGame(GameInfo(662, DoubleDolphin, "Double Dolphin",
+                      GI.GT_GOLF, 2, 0, GI.SL_MOSTLY_SKILL | GI.GT_ORIGINAL))
 
diff --git a/pysollib/games/gypsy.py b/pysollib/games/gypsy.py
index 718cf761..bf59c31a 100644
--- a/pysollib/games/gypsy.py
+++ b/pysollib/games/gypsy.py
@@ -233,7 +233,7 @@ class MissMilligan(Gypsy):
         l, s = Layout(self), self.s
 
         # set window
-        self.setSize(l.XM + (1+max(8,rows))*l.XS, l.YM + (1+max(4, reserves))*l.YS)
+        self.setSize(l.XM + (1+max(8,rows))*l.XS, l.YM + (1+max(4, reserves))*l.YS+l.TEXT_HEIGHT)
 
         # create stacks
         x, y = l.XM, l.YM
@@ -242,14 +242,14 @@ class MissMilligan(Gypsy):
             x = x + l.XS
             s.foundations.append(self.Foundation_Class(x, y, self, suit=i/2))
         x, y = l.XM, y + l.YS
-        rx, ry = x + l.XS - l.XM/2, y - l.YM/2
+        rx, ry = x + l.XS - l.CW/2, y - l.CH/2
         for i in range(reserves):
-            s.reserves.append(self.ReserveStack_Class(x, y, self))
+            s.reserves.append(self.ReserveStack_Class(x, y+l.TEXT_HEIGHT, self))
             y = y + l.YS
+        l.createText(s.talon, "s")
         if s.reserves:
-            self.setRegion(s.reserves, (-999, ry, rx - 1, 999999))
+            self.setRegion(s.reserves, (-999, ry+l.TEXT_HEIGHT, rx-1, 999999))
         else:
-            l.createText(s.talon, "s")
             rx = -999
         x, y = l.XM + (8-rows)*l.XS/2, l.YM + l.YS
         for i in range(rows):
diff --git a/pysollib/games/klondike.py b/pysollib/games/klondike.py
index 155845a5..149912f1 100644
--- a/pysollib/games/klondike.py
+++ b/pysollib/games/klondike.py
@@ -168,6 +168,8 @@ class Chinaman(ThumbAndPouch):
 class Whitehead_RowStack(SS_RowStack):
     def _isAcceptableSequence(self, cards):
         return isSameColorSequence(cards, self.cap.mod, self.cap.dir)
+    def getHelp(self):
+        return _('Tableau. Build down by color.')
 
 class Whitehead(Klondike):
     RowStack_Class = Whitehead_RowStack
diff --git a/pysollib/stack.py b/pysollib/stack.py
index 46099155..8a3c900a 100644
--- a/pysollib/stack.py
+++ b/pysollib/stack.py
@@ -937,6 +937,7 @@ class Stack:
         self.game.event_handled = True # for Game.undoHandler
         if self.game.demo:
             self.game.stopDemo(event)
+            return  EVENT_HANDLED
         self.game.interruptSleep()
         if self.game.busy: return EVENT_HANDLED
         if self.game.drag.stack and cancel_drag: