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

flake8 and other tests.

This commit is contained in:
Shlomi Fish 2017-09-18 16:37:02 +03:00
parent e0efb8a02c
commit de93df2de7
26 changed files with 123 additions and 127 deletions

View file

@ -58,7 +58,7 @@ from pysollib.pysoltk import SelectCardsetDialogWithPreview
from pysollib.pysoltk import SelectDialogTreeData from pysollib.pysoltk import SelectDialogTreeData
from pysollib.pysoltk import HTMLViewer from pysollib.pysoltk import HTMLViewer
from pysollib.pysoltk import destroy_find_card_dialog from pysollib.pysoltk import destroy_find_card_dialog
from pysollib.pysoltk import destroy_solver_dialog from pysollib.ui.tktile.solverdialog import destroy_solver_dialog
from pysollib.actions import PysolMenubar from pysollib.actions import PysolMenubar
from pysollib.actions import PysolToolbar from pysollib.actions import PysolToolbar

View file

@ -52,7 +52,7 @@ from pysollib.pysoltk import after, after_idle, after_cancel
from pysollib.pysoltk import MfxMessageDialog, MfxExceptionDialog from pysollib.pysoltk import MfxMessageDialog, MfxExceptionDialog
from pysollib.pysoltk import MfxCanvasText, MfxCanvasLine, MfxCanvasRectangle from pysollib.pysoltk import MfxCanvasText, MfxCanvasLine, MfxCanvasRectangle
from pysollib.pysoltk import Card from pysollib.pysoltk import Card
from pysollib.pysoltk import reset_solver_dialog from pysollib.ui.tktile.solverdialog import reset_solver_dialog
from pysollib.move import AMoveMove, AFlipMove, AFlipAndMoveMove from pysollib.move import AMoveMove, AFlipMove, AFlipAndMoveMove
from pysollib.move import ASingleFlipMove, ATurnStackMove from pysollib.move import ASingleFlipMove, ATurnStackMove
from pysollib.move import ANextRoundMove, ASaveSeedMove, AShuffleStackMove from pysollib.move import ANextRoundMove, ASaveSeedMove, AShuffleStackMove

View file

@ -62,6 +62,7 @@ from pysollib.stack import \
# * Flower Clock # * Flower Clock
# ***********************************************************************/ # ***********************************************************************/
class FlowerClock(AbstractFlowerGame): class FlowerClock(AbstractFlowerGame):
# #
@ -212,13 +213,13 @@ class Gaji(AbstractFlowerGame):
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
if stack1 in self.s.foundations: if stack1 in self.s.foundations:
return (card1.rank == card2.rank return (card1.rank == card2.rank and
and ((((card1.suit + 1) % 12) == card2.suit) ((((card1.suit + 1) % 12) == card2.suit) or
or (((card1.suit - 1) % 12) == card2.suit))) (((card1.suit - 1) % 12) == card2.suit)))
else: else:
return ((card1.suit == card2.suit) return ((card1.suit == card2.suit) and
and ((card1.rank + 1 == card2.rank) ((card1.rank + 1 == card2.rank) or
or (card1.rank - 1 == card2.rank))) (card1.rank - 1 == card2.rank)))
# ************************************************************************ # ************************************************************************
@ -270,8 +271,8 @@ class Oonsoo(AbstractFlowerGame):
if len(self.s.talon.cards): if len(self.s.talon.cards):
return 0 return 0
for s in self.s.rows: for s in self.s.rows:
if (len(s.cards) != 4 or not cardsFaceUp(s.cards) if (len(s.cards) != 4 or not cardsFaceUp(s.cards) or
or not s.isHanafudaSequence(s.cards, self.Strictness)): not s.isHanafudaSequence(s.cards, self.Strictness)):
return 0 return 0
return 1 return 1
@ -557,12 +558,12 @@ class GreatWall(AbstractFlowerGame):
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
if stack1 in self.s.foundations: if stack1 in self.s.foundations:
return (card1.rank == card2.rank return (card1.rank == card2.rank and
and ((((card1.suit + 1) % 12) == card2.suit) ((((card1.suit + 1) % 12) == card2.suit) or
or (((card1.suit - 1) % 12) == card2.suit))) (((card1.suit - 1) % 12) == card2.suit)))
else: else:
return (card1.rank + 1 == card2.rank return (card1.rank + 1 == card2.rank or
or card1.rank - 1 == card2.rank) card1.rank - 1 == card2.rank)
# ************************************************************************ # ************************************************************************

View file

@ -473,8 +473,7 @@ class HanafudaFourSeasons(AbstractFlowerGame):
cards = r.cards cards = r.cards
if not len(cards) == 4: if not len(cards) == 4:
return 0 return 0
if not (cards[0].suit == r.id if not (cards[0].suit == r.id and r.isHanafudaSequence(cards)):
and r.isHanafudaSequence(cards)):
return 0 return 0
return 1 return 1
@ -617,8 +616,8 @@ class FlowerArrangement_TableauStack(Flower_OpenStack):
return 0 return 0
# check that the base card is correct # check that the base card is correct
suits = list(range(self.cap.mod, (self.cap.mod + 4))) suits = list(range(self.cap.mod, (self.cap.mod + 4)))
if self.cards and (self.cards[0].rank == 3 if self.cards and (self.cards[0].rank == 3 and
and self.cards[-1].suit in suits): self.cards[-1].suit in suits):
return self.isHanafudaSequence([self.cards[-1], cards[0]]) return self.isHanafudaSequence([self.cards[-1], cards[0]])
return not self.cards and cards[0].rank == 3 and cards[0].suit in suits return not self.cards and cards[0].rank == 3 and cards[0].suit in suits

View file

@ -48,9 +48,9 @@ class AbstractFlowerGame(Game):
_("Chrysanthemum"), _("Maple"), _("Willow"), _("Paulownia")) _("Chrysanthemum"), _("Maple"), _("Willow"), _("Paulownia"))
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
return ((card1.suit == card2.suit) return ((card1.suit == card2.suit) and
and ((card1.rank + 1 == card2.rank) ((card1.rank + 1 == card2.rank) or
or (card1.rank - 1 == card2.rank))) (card1.rank - 1 == card2.rank)))
class Queue_Hint(DefaultHint): class Queue_Hint(DefaultHint):
@ -139,8 +139,8 @@ class Gaji_Foundation(Flower_FoundationStack):
if not self.basicAcceptsCards(from_stack, cards): if not self.basicAcceptsCards(from_stack, cards):
return 0 return 0
stackcards = self.cards stackcards = self.cards
return ((((stackcards[-1].suit + 1) % 12) == cards[0].suit) return ((((stackcards[-1].suit + 1) % 12) == cards[0].suit) and
and (stackcards[-1].rank == cards[0].rank)) (stackcards[-1].rank == cards[0].rank))
def getBottomImage(self): def getBottomImage(self):
return self.game.app.images.getLetter(self.cap.base_rank) return self.game.app.images.getLetter(self.cap.base_rank)
@ -199,8 +199,8 @@ class GreatWall_FoundationStack(Flower_FoundationStack):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if stackcards: if stackcards:
return ((stackcards[-1].suit + 1) % 12 == cards[0].suit return ((stackcards[-1].suit + 1) % 12 == cards[0].suit and
and cards[0].rank == self.cap.base_rank) cards[0].rank == self.cap.base_rank)
else: else:
return cards[0].suit == 0 return cards[0].suit == 0
@ -322,9 +322,9 @@ class Gaji_RowStack(Flower_OpenStack):
if not self.basicAcceptsCards(from_stack, cards): if not self.basicAcceptsCards(from_stack, cards):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if ((not len(stackcards)) if ((not len(stackcards)) or
or ((stackcards[-1].suit == 10) and (stackcards[-1].rank == 3)) ((stackcards[-1].suit == 10) and (stackcards[-1].rank == 3)) or
or ((cards[0].suit == 10) and (cards[0].rank == 3))): ((cards[0].suit == 10) and (cards[0].rank == 3))):
return 1 return 1
elif stackcards[-1].suit != cards[0].suit: elif stackcards[-1].suit != cards[0].suit:
return 0 return 0
@ -445,8 +445,8 @@ class Queue_ReserveStack(ReserveStack):
class JapaneseGarden_RowStack(Flower_OpenStack): class JapaneseGarden_RowStack(Flower_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or from_stack not in self.game.s.rows): from_stack not in self.game.s.rows):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if not len(stackcards): if not len(stackcards):
@ -457,8 +457,8 @@ class JapaneseGarden_RowStack(Flower_OpenStack):
class HanafudaRK_RowStack(Flower_OpenStack): class HanafudaRK_RowStack(Flower_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not isRankSequence(cards, dir=1)): not isRankSequence(cards, dir=1)):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if not len(stackcards): if not len(stackcards):

View file

@ -114,8 +114,8 @@ class HexADeck_OpenStack(OpenStack):
dir = self.cap.dir dir = self.cap.dir
c1 = cards[0] c1 = cards[0]
for c2 in cards[1:]: for c2 in cards[1:]:
if (c1.color < 2 and c1.color == c2.color if (c1.color < 2 and c1.color == c2.color or
or not c1.rank + dir == c2.rank): not c1.rank + dir == c2.rank):
return 0 return 0
c1 = c2 c1 = c2
return 1 return 1
@ -125,9 +125,8 @@ class HexADeck_OpenStack(OpenStack):
dir = self.cap.dir dir = self.cap.dir
c1 = cards[0] c1 = cards[0]
for c2 in cards[1:]: for c2 in cards[1:]:
if not ((c1.color == 2 or c2.color == 2 if not ((c1.color == 2 or c2.color == 2 or c1.suit == c2.suit) and
or c1.suit == c2.suit) c1.rank + dir == c2.rank):
and c1.rank + dir == c2.rank):
return 0 return 0
c1 = c2 c1 = c2
return 1 return 1
@ -136,46 +135,44 @@ class HexADeck_OpenStack(OpenStack):
class HexADeck_RK_RowStack(HexADeck_OpenStack): class HexADeck_RK_RowStack(HexADeck_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isRankSequence(cards)): not self.isRankSequence(cards)):
return 0 return 0
if not self.cards: if not self.cards:
return cards[0].rank == 15 or self.cap.base_rank == ANY_RANK return cards[0].rank == 15 or self.cap.base_rank == ANY_RANK
return self.isRankSequence([self.cards[-1], cards[0]]) return self.isRankSequence([self.cards[-1], cards[0]])
def canMoveCards(self, cards): def canMoveCards(self, cards):
return (self.basicCanMoveCards(cards) return (self.basicCanMoveCards(cards) and self.isRankSequence(cards))
and self.isRankSequence(cards))
class HexADeck_AC_RowStack(HexADeck_OpenStack): class HexADeck_AC_RowStack(HexADeck_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isAlternateColorSequence(cards)): not self.isAlternateColorSequence(cards)):
return 0 return 0
if not self.cards: if not self.cards:
return cards[0].rank == 15 or self.cap.base_rank == ANY_RANK return cards[0].rank == 15 or self.cap.base_rank == ANY_RANK
return self.isAlternateColorSequence([self.cards[-1], cards[0]]) return self.isAlternateColorSequence([self.cards[-1], cards[0]])
def canMoveCards(self, cards): def canMoveCards(self, cards):
return (self.basicCanMoveCards(cards) return (self.basicCanMoveCards(cards) and
and self.isAlternateColorSequence(cards)) self.isAlternateColorSequence(cards))
class HexADeck_SS_RowStack(HexADeck_OpenStack): class HexADeck_SS_RowStack(HexADeck_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isSuitSequence(cards)): not self.isSuitSequence(cards)):
return 0 return 0
if not self.cards: if not self.cards:
return cards[0].rank == 15 or self.cap.base_rank == ANY_RANK return cards[0].rank == 15 or self.cap.base_rank == ANY_RANK
return self.isSuitSequence([self.cards[-1], cards[0]]) return self.isSuitSequence([self.cards[-1], cards[0]])
def canMoveCards(self, cards): def canMoveCards(self, cards):
return (self.basicCanMoveCards(cards) return (self.basicCanMoveCards(cards) and self.isSuitSequence(cards))
and self.isSuitSequence(cards))
class Bits_RowStack(ReserveStack): class Bits_RowStack(ReserveStack):
@ -190,8 +187,8 @@ class Bits_RowStack(ReserveStack):
for r in self.game.s.rows[i * 4:self.id]: for r in self.game.s.rows[i * 4:self.id]:
if not r.cards: if not r.cards:
return 0 return 0
return ((self.game.s.foundations[i].cards[-1].rank + 1 return ((self.game.s.foundations[i].cards[-1].rank + 1 >>
>> (self.id % 4)) % 2 == (cards[0].rank + 1) % 2) (self.id % 4)) % 2 == (cards[0].rank + 1) % 2)
class Bytes_RowStack(ReserveStack): class Bytes_RowStack(ReserveStack):

View file

@ -197,8 +197,8 @@ class Matrix3(Game):
return 1 return 1
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
return ((card1.rank + 1 == card2.rank) return ((card1.rank + 1 == card2.rank) or
or (card1.rank - 1 == card2.rank)) (card1.rank - 1 == card2.rank))
# ************************************************************************ # ************************************************************************

View file

@ -116,8 +116,7 @@ class Mughal_OpenStack(OpenStack):
dir = self.cap.dir dir = self.cap.dir
c1 = cards[0] c1 = cards[0]
for c2 in cards[1:]: for c2 in cards[1:]:
if not ((c1.suit + c2.suit) % 2 if not ((c1.suit + c2.suit) % 2 and c1.rank + dir == c2.rank):
and c1.rank + dir == c2.rank):
return 0 return 0
c1 = c2 c1 = c2
return 1 return 1
@ -127,9 +126,9 @@ class Mughal_OpenStack(OpenStack):
dir = self.cap.dir dir = self.cap.dir
c1 = cards[0] c1 = cards[0]
for c2 in cards[1:]: for c2 in cards[1:]:
if not ((c1.suit < 4 and c2.suit > 3 if not ((c1.suit < 4 and c2.suit > 3 or
or c1.suit > 3 and c2.suit < 4) c1.suit > 3 and c2.suit < 4) and
and c1.rank + dir == c2.rank): c1.rank + dir == c2.rank):
return 0 return 0
c1 = c2 c1 = c2
return 1 return 1
@ -139,8 +138,7 @@ class Mughal_OpenStack(OpenStack):
dir = self.cap.dir dir = self.cap.dir
c1 = cards[0] c1 = cards[0]
for c2 in cards[1:]: for c2 in cards[1:]:
if not (c1.suit == c2.suit if not (c1.suit == c2.suit and c1.rank + dir == c2.rank):
and c1.rank + dir == c2.rank):
return 0 return 0
c1 = c2 c1 = c2
return 1 return 1
@ -149,8 +147,8 @@ class Mughal_OpenStack(OpenStack):
class Mughal_AC_RowStack(Mughal_OpenStack): class Mughal_AC_RowStack(Mughal_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isAlternateColorSequence(cards)): not self.isAlternateColorSequence(cards)):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if not len(stackcards): if not len(stackcards):
@ -161,8 +159,8 @@ class Mughal_AC_RowStack(Mughal_OpenStack):
class Mughal_AF_RowStack(Mughal_OpenStack): class Mughal_AF_RowStack(Mughal_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isAlternateForceSequence(cards)): not self.isAlternateForceSequence(cards)):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if not len(stackcards): if not len(stackcards):
@ -173,8 +171,8 @@ class Mughal_AF_RowStack(Mughal_OpenStack):
class Mughal_RK_RowStack(Mughal_OpenStack): class Mughal_RK_RowStack(Mughal_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isRankSequence(cards)): not self.isRankSequence(cards)):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if not len(stackcards): if not len(stackcards):
@ -185,8 +183,8 @@ class Mughal_RK_RowStack(Mughal_OpenStack):
class Mughal_SS_RowStack(Mughal_OpenStack): class Mughal_SS_RowStack(Mughal_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isSuitSequence(cards)): not self.isSuitSequence(cards)):
return 0 return 0
stackcards = self.cards stackcards = self.cards
if not len(stackcards): if not len(stackcards):
@ -273,8 +271,7 @@ class AbstractMughalGame(Game):
pass pass
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
return (card1.rank + 1 == card2.rank return (card1.rank + 1 == card2.rank or card2.rank + 1 == card1.rank)
or card2.rank + 1 == card1.rank)
class Triumph_Hint(DefaultHint): class Triumph_Hint(DefaultHint):
@ -367,9 +364,9 @@ class MughalCircles(AbstractMughalGame):
self.s.talon.dealCards() self.s.talon.dealCards()
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
return ((card1.suit == card2.suit) return ((card1.suit == card2.suit) and
and ((card1.rank + 1 == card2.rank) ((card1.rank + 1 == card2.rank) or
or (card1.rank - 1 == card2.rank))) (card1.rank - 1 == card2.rank)))
# ************************************************************************ # ************************************************************************
@ -532,9 +529,9 @@ class Ghulam(Shamsher):
Shamsher.createGame(self) Shamsher.createGame(self)
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
return ((card1.suit == card2.suit) return ((card1.suit == card2.suit) and
and ((card1.rank + 1 == card2.rank) ((card1.rank + 1 == card2.rank) or
or (card1.rank - 1 == card2.rank))) (card1.rank - 1 == card2.rank)))
# ************************************************************************ # ************************************************************************
@ -612,9 +609,9 @@ class Ashwapati(Tipati):
Tipati.createGame(self, max_rounds=-1, num_deal=1) Tipati.createGame(self, max_rounds=-1, num_deal=1)
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
return ((card1.suit == card2.suit) return ((card1.suit == card2.suit) and
and ((card1.rank + 1 == card2.rank) ((card1.rank + 1 == card2.rank) or
or (card1.rank - 1 == card2.rank))) (card1.rank - 1 == card2.rank)))
# ************************************************************************ # ************************************************************************
@ -634,9 +631,9 @@ class Gajapati(Tipati):
Tipati.createGame(self, max_rounds=-1, num_deal=3) Tipati.createGame(self, max_rounds=-1, num_deal=3)
def shallHighlightMatch(self, stack1, card1, stack2, card2): def shallHighlightMatch(self, stack1, card1, stack2, card2):
return ((card1.suit == card2.suit) return ((card1.suit == card2.suit) and
and ((card1.rank + 1 == card2.rank) ((card1.rank + 1 == card2.rank) or
or (card1.rank - 1 == card2.rank))) (card1.rank - 1 == card2.rank)))
# ************************************************************************ # ************************************************************************
@ -1003,8 +1000,8 @@ class Dikapala_ReserveStack(ReserveStack):
OpenStack.__init__(self, x, y, game, **cap) OpenStack.__init__(self, x, y, game, **cap)
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
return (ReserveStack.acceptsCards(self, from_stack, cards) return (ReserveStack.acceptsCards(self, from_stack, cards) and
and self.game.s.talon.cards) self.game.s.talon.cards)
class Dikapala_RowStack(BasicRowStack): class Dikapala_RowStack(BasicRowStack):

View file

@ -71,8 +71,8 @@ class Tarock_OpenStack(OpenStack):
dir = self.cap.dir dir = self.cap.dir
c1 = cards[0] c1 = cards[0]
for c2 in cards[1:]: for c2 in cards[1:]:
if (c1.color < 2 and c1.color == c2.color if (c1.color < 2 and c1.color == c2.color or
or not c1.rank + dir == c2.rank): not c1.rank + dir == c2.rank):
return 0 return 0
c1 = c2 c1 = c2
return 1 return 1
@ -82,8 +82,7 @@ class Tarock_OpenStack(OpenStack):
dir = self.cap.dir dir = self.cap.dir
c1 = cards[0] c1 = cards[0]
for c2 in cards[1:]: for c2 in cards[1:]:
if not (c1.suit == c2.suit if not (c1.suit == c2.suit and c1.rank + dir == c2.rank):
and c1.rank + dir == c2.rank):
return 0 return 0
c1 = c2 c1 = c2
return 1 return 1
@ -98,31 +97,29 @@ class Tarock_OpenStack(OpenStack):
class Tarock_RK_RowStack(Tarock_OpenStack): class Tarock_RK_RowStack(Tarock_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isRankSequence(cards)): not self.isRankSequence(cards)):
return 0 return 0
if not self.cards: if not self.cards:
return self.isHighRankCard(cards[0]) return self.isHighRankCard(cards[0])
return self.isRankSequence([self.cards[-1], cards[0]]) return self.isRankSequence([self.cards[-1], cards[0]])
def canMoveCards(self, cards): def canMoveCards(self, cards):
return (self.basicCanMoveCards(cards) return (self.basicCanMoveCards(cards) and self.isRankSequence(cards))
and self.isRankSequence(cards))
class Tarock_SS_RowStack(Tarock_OpenStack): class Tarock_SS_RowStack(Tarock_OpenStack):
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if (not self.basicAcceptsCards(from_stack, cards) if (not self.basicAcceptsCards(from_stack, cards) or
or not self.isSuitSequence(cards)): not self.isSuitSequence(cards)):
return 0 return 0
if not self.cards: if not self.cards:
return self.isHighRankCard(cards[0]) return self.isHighRankCard(cards[0])
return self.isSuitSequence([self.cards[-1], cards[0]]) return self.isSuitSequence([self.cards[-1], cards[0]])
def canMoveCards(self, cards): def canMoveCards(self, cards):
return (self.basicCanMoveCards(cards) return (self.basicCanMoveCards(cards) and self.isSuitSequence(cards))
and self.isSuitSequence(cards))
class Tarock_AC_RowStack(Tarock_OpenStack): class Tarock_AC_RowStack(Tarock_OpenStack):
@ -136,8 +133,8 @@ class Tarock_AC_RowStack(Tarock_OpenStack):
return self.isAlternateColorSequence([self.cards[-1], cards[0]]) return self.isAlternateColorSequence([self.cards[-1], cards[0]])
def canMoveCards(self, cards): def canMoveCards(self, cards):
return (self.basicCanMoveCards(cards) return (self.basicCanMoveCards(cards) and
and self.isAlternateColorSequence(cards)) self.isAlternateColorSequence(cards))
# ************************************************************************ # ************************************************************************
# * # *

View file

@ -111,10 +111,10 @@ class FontsDialog:
fd = pango.FontDescription(font) fd = pango.FontDescription(font)
family = fd.get_family() family = fd.get_family()
size = fd.get_size()/pango.SCALE size = fd.get_size()/pango.SCALE
style = (fd.get_style() == pango.STYLE_NORMAL style = ('roman' if fd.get_style() == pango.STYLE_NORMAL
and 'roman' or 'italic') else 'italic')
weight = (fd.get_weight() == pango.WEIGHT_NORMAL weight = ('normal' if fd.get_weight() == pango.WEIGHT_NORMAL
and 'normal' or 'bold') else 'bold')
font = (family, size, style, weight) font = (family, size, style, weight)
self._setFont(name, font) self._setFont(name, font)

View file

@ -21,6 +21,7 @@
# #
# ---------------------------------------------------------------------------## # ---------------------------------------------------------------------------##
def create_solver_dialog(parent, game): def create_solver_dialog(parent, game):
pass pass

View file

@ -53,8 +53,8 @@ class PysolToolbarTk:
# #
def _busy(self): def _busy(self):
return not (self.side and self.game and not self.game.busy return not (self.side and self.game and not self.game.busy and
and self.menubar) self.menubar)
def destroy(self): def destroy(self):
self.toolbar.destroy() self.toolbar.destroy()

View file

@ -126,7 +126,7 @@ class ResourceManager:
dir = os.path.normpath(dir) dir = os.path.normpath(dir)
if dir and os.path.isdir(dir) and dir not in result: if dir and os.path.isdir(dir) and dir not in result:
result.append(dir) result.append(dir)
except EnvironmentError as ex: except EnvironmentError:
pass pass
def getSearchDirs(self, app, search, env=None): def getSearchDirs(self, app, search, env=None):
@ -153,7 +153,7 @@ class ResourceManager:
self._addDir(result, d) self._addDir(result, d)
else: else:
self._addDir(result, os.path.join(dir, s)) self._addDir(result, os.path.join(dir, s))
except EnvironmentError as ex: except EnvironmentError:
traceback.print_exc() traceback.print_exc()
pass pass
if DEBUG >= 6: if DEBUG >= 6:

View file

@ -2275,8 +2275,8 @@ class SS_FoundationStack(AbstractFoundationStack):
return False return False
if self.cards: if self.cards:
# check the rank # check the rank
if ((self.cards[-1].rank + self.cap.dir) % self.cap.mod if ((self.cards[-1].rank + self.cap.dir) % self.cap.mod !=
!= cards[0].rank): cards[0].rank):
return False return False
return True return True
@ -2603,8 +2603,8 @@ class Yukon_AC_RowStack(BasicRowStack):
BasicRowStack.__init__(self, x, y, game, **cap) BasicRowStack.__init__(self, x, y, game, **cap)
def _isSequence(self, c1, c2): def _isSequence(self, c1, c2):
return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank and
and c1.color != c2.color) c1.color != c2.color)
def acceptsCards(self, from_stack, cards): def acceptsCards(self, from_stack, cards):
if not self.basicAcceptsCards(from_stack, cards): if not self.basicAcceptsCards(from_stack, cards):
@ -2633,8 +2633,8 @@ class Yukon_AC_RowStack(BasicRowStack):
# but can move any face-up cards regardless of sequence. # but can move any face-up cards regardless of sequence.
class Yukon_SS_RowStack(Yukon_AC_RowStack): class Yukon_SS_RowStack(Yukon_AC_RowStack):
def _isSequence(self, c1, c2): def _isSequence(self, c1, c2):
return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank and
and c1.suit == c2.suit) c1.suit == c2.suit)
def getHelp(self): def getHelp(self):
if self.cap.dir > 0: if self.cap.dir > 0:

View file

@ -36,7 +36,7 @@ from .soundoptionsdialog import SoundOptionsDialog
from .selecttile import SelectTileDialogWithPreview from .selecttile import SelectTileDialogWithPreview
from pysollib.ui.tktile.findcarddialog import connect_game_find_card_dialog, \ from pysollib.ui.tktile.findcarddialog import connect_game_find_card_dialog, \
destroy_find_card_dialog destroy_find_card_dialog
from .solverdialog import connect_game_solver_dialog from pysollib.ui.tktile.solverdialog import connect_game_solver_dialog
from pysollib.ui.tktile.menubar import MfxMenu, PysolMenubarTkCommon from pysollib.ui.tktile.menubar import MfxMenu, PysolMenubarTkCommon
# ************************************************************************ # ************************************************************************

View file

@ -36,8 +36,9 @@ from pysollib.resource import CSI
from pysollib.ui.tktile.tkutil import loadImage from pysollib.ui.tktile.tkutil import loadImage
from .tkwidget import MfxDialog, MfxScrolledCanvas, PysolScale from .tkwidget import MfxDialog, MfxScrolledCanvas, PysolScale
from pysollib.ui.tktile.tkcanvas import MfxCanvasImage from pysollib.ui.tktile.tkcanvas import MfxCanvasImage
from pysollib.ui.tktile.selecttree import SelectDialogTreeData
from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from .selecttree import SelectDialogTreeData, SelectDialogTreeCanvas from .selecttree import SelectDialogTreeCanvas
# ************************************************************************ # ************************************************************************

View file

@ -36,9 +36,10 @@ from pysollib.resource import CSI
# Toolkit imports # Toolkit imports
from pysollib.ui.tktile.tkutil import unbind_destroy from pysollib.ui.tktile.tkutil import unbind_destroy
from pysollib.ui.tktile.selecttree import SelectDialogTreeData
from .tkwidget import MfxDialog, MfxScrolledCanvas from .tkwidget import MfxDialog, MfxScrolledCanvas
from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from .selecttree import SelectDialogTreeData, SelectDialogTreeCanvas from .selecttree import SelectDialogTreeCanvas
# ************************************************************************ # ************************************************************************

View file

@ -33,9 +33,10 @@ from pysollib.mygettext import _
from pysollib.mfxutil import KwStruct from pysollib.mfxutil import KwStruct
# Toolkit imports # Toolkit imports
from pysollib.ui.tktile.selecttree import SelectDialogTreeData
from .tkwidget import MfxDialog, MfxScrolledCanvas from .tkwidget import MfxDialog, MfxScrolledCanvas
from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from .selecttree import SelectDialogTreeData, SelectDialogTreeCanvas from .selecttree import SelectDialogTreeCanvas
if sys.version_info > (3,): if sys.version_info > (3,):

View file

@ -25,8 +25,7 @@
from .tktree import MfxTreeLeaf, MfxTreeNode, MfxTreeInCanvas from .tktree import MfxTreeLeaf, MfxTreeNode, MfxTreeInCanvas
from pysollib.ui.tktile.selecttree import BaseSelectDialogTreeLeaf, \ from pysollib.ui.tktile.selecttree import BaseSelectDialogTreeLeaf, \
BaseSelectDialogTreeNode, SelectDialogTreeData, \ BaseSelectDialogTreeNode, BaseSelectDialogTreeCanvas
BaseSelectDialogTreeCanvas
# ************************************************************************ # ************************************************************************
# * Nodes # * Nodes

View file

@ -31,8 +31,7 @@ from pysollib.mfxutil import KwStruct
from pysollib.tile.basetilemfxdialog import BaseTileMfxDialog from pysollib.tile.basetilemfxdialog import BaseTileMfxDialog
from .tkwidget import PysolCombo from .tkwidget import PysolCombo
from pysollib.ui.tktile.solverdialog import BaseSolverDialog, \ from pysollib.ui.tktile.solverdialog import BaseSolverDialog, \
connect_game_solver_dialog, destroy_solver_dialog, solver_dialog, \ solver_dialog
reset_solver_dialog
# ************************************************************************ # ************************************************************************

View file

@ -36,7 +36,7 @@ from .selectcardset import SelectCardsetDialogWithPreview
from .selecttile import SelectTileDialogWithPreview from .selecttile import SelectTileDialogWithPreview
from pysollib.ui.tktile.findcarddialog import connect_game_find_card_dialog, \ from pysollib.ui.tktile.findcarddialog import connect_game_find_card_dialog, \
destroy_find_card_dialog destroy_find_card_dialog
from .solverdialog import connect_game_solver_dialog from pysollib.ui.tktile.solverdialog import connect_game_solver_dialog
from pysollib.ui.tktile.menubar import PysolMenubarTkCommon from pysollib.ui.tktile.menubar import PysolMenubarTkCommon
# ************************************************************************ # ************************************************************************

View file

@ -36,7 +36,8 @@ from pysollib.ui.tktile.tkutil import loadImage
from .tkwidget import MfxDialog, MfxScrolledCanvas from .tkwidget import MfxDialog, MfxScrolledCanvas
from pysollib.ui.tktile.tkcanvas import MfxCanvasImage from pysollib.ui.tktile.tkcanvas import MfxCanvasImage
from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from .selecttree import SelectDialogTreeData, SelectDialogTreeCanvas from pysollib.ui.tktile.selecttree import SelectDialogTreeData
from .selecttree import SelectDialogTreeCanvas
# ************************************************************************ # ************************************************************************

View file

@ -39,7 +39,8 @@ from pysollib.resource import CSI
from pysollib.ui.tktile.tkutil import unbind_destroy from pysollib.ui.tktile.tkutil import unbind_destroy
from .tkwidget import MfxDialog, MfxScrolledCanvas from .tkwidget import MfxDialog, MfxScrolledCanvas
from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from .selecttree import SelectDialogTreeData, SelectDialogTreeCanvas from .selecttree import SelectDialogTreeCanvas
from pysollib.ui.tktile.selecttree import SelectDialogTreeData
# ************************************************************************ # ************************************************************************

View file

@ -33,7 +33,8 @@ from pysollib.mfxutil import KwStruct
# Toolkit imports # Toolkit imports
from .tkwidget import MfxDialog, MfxScrolledCanvas from .tkwidget import MfxDialog, MfxScrolledCanvas
from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from .selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode
from .selecttree import SelectDialogTreeData, SelectDialogTreeCanvas from .selecttree import SelectDialogTreeCanvas
from pysollib.ui.tktile.selecttree import SelectDialogTreeData
if sys.version_info > (3,): if sys.version_info > (3,):

View file

@ -27,8 +27,7 @@
from .tktree import MfxTreeLeaf, MfxTreeNode, MfxTreeInCanvas from .tktree import MfxTreeLeaf, MfxTreeNode, MfxTreeInCanvas
from pysollib.ui.tktile.selecttree import BaseSelectDialogTreeLeaf, \ from pysollib.ui.tktile.selecttree import BaseSelectDialogTreeLeaf, \
BaseSelectDialogTreeNode, SelectDialogTreeData, \ BaseSelectDialogTreeNode, BaseSelectDialogTreeCanvas
BaseSelectDialogTreeCanvas
# ************************************************************************ # ************************************************************************
# * Nodes # * Nodes

View file

@ -20,6 +20,7 @@ my %skip = (
pysollib/games/special/__init__.py pysollib/games/special/__init__.py
pysollib/games/ultra/__init__.py pysollib/games/ultra/__init__.py
pysollib/htmllib2.py pysollib/htmllib2.py
pysollib/mfxutil.py
pysollib/pysoltk.py pysollib/pysoltk.py
pysollib/tile/ttk.py pysollib/tile/ttk.py
pysollib/ui/tktile/Canvas2.py pysollib/ui/tktile/Canvas2.py