-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
124 lines (100 loc) · 4.1 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
__author__ = 'onebit0fme'
__foreword__ = "Started in the last week of the contest, so please don't judge to harsh the coding. All the best! =)"
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.stacklayout import StackLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.graphics import Color, Rectangle, Line, Ellipse, Rotate
from kivy.uix.label import Label
from kivy.uix.scatterlayout import Scatter
from kivy.uix.slider import Slider
from kivy.uix.scrollview import ScrollView
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget, EventLoop
from kivy.uix.button import Button
from kivy.uix.bubble import Bubble, BubbleButton
from kivy.properties import NumericProperty, ReferenceListProperty, ObjectProperty, ListProperty, BooleanProperty, StringProperty
from kivy.clock import Clock
from functools import partial
from kivy.event import EventDispatcher
from kivy.uix.screenmanager import Screen, ScreenManager, SlideTransition, FadeTransition, SwapTransition, WipeTransition, FallOutTransition, RiseInTransition, NoTransition
from kivy.animation import Animation
from kivy.metrics import dp
from kivy.uix.popup import Popup
from kivy.uix.carousel import Carousel
from kivy.uix.settings import SettingsWithSidebar, SettingsWithSpinner, SettingsWithTabbedPanel, SettingsWithNoMenu, Settings, SettingsPanel
import datetime
from kivy.config import ConfigParser
import webbrowser
from pprint import pprint
import re
from datetime import datetime
from Chessnut.game import Game, InvalidMove
from scorebook.chessboard import ChessboardUI
from scorebook.reviewui import GameWidgetScreen, GameWidget
from scorebook.store import ScorebookGame, get_games
from scorebook.record import GameRecorderScreen
from scorebook.menu import MenuLayoutScreen
import types
from random import choice
class GamesListScreen(Screen):
def __init__(self, **kwargs):
super(GamesListScreen, self).__init__(**kwargs)
self.games = GamesList()
self.add_widget(self.games)
def on_enter(self, *args):
self.games.read_games()
class GamesList(BoxLayout):
def __init__(self, **kwargs):
super(GamesList, self).__init__(**kwargs)
self.games = get_games()
for game in self.games:
name = '{} vs {} ({})'.format(game.white, game.black, game.date)
self.ids.games.add_widget(GameButton(text=name))
def go_to(self, where):
self.parent.parent.current = where
def open_game(self, obj):
for game in self.games:
if game.id == obj.game_id:
self.parent.parent.switch_to(GameWidgetScreen(game=game))
def read_games(self):
self.ids.games.clear_widgets()
self.games = get_games()
for game in self.games:
name = '{} vs {} ({})'.format(game.white, game.black, datetime.strptime(game.date, "%Y-%m-%d %H:%M:%S").strftime('%Y.%m.%d'))
b = GameButton(text=name, game_id=game.id)
b.bind(on_release=self.open_game)
self.ids.games.add_widget(b)
class GameButton(Button):
game_id = NumericProperty()
class ScorebookApp(App):
def build(self):
self.sm = ScreenManager(transition=FadeTransition())
# MENU SCREEN
menu_screen = MenuLayoutScreen(name='menu')
self.sm.add_widget(menu_screen)
# GAME RECORDER SCREEN
recorder = GameRecorderScreen(name='recorder')
self.sm.add_widget(recorder)
# GAME LIST
games = GamesListScreen(name='games')
self.sm.add_widget(games)
self.sm.current = 'menu'
return self.sm
def on_pause(self):
return True
def on_resume(self):
pass
def get_color(self, color, opacity=None):
if opacity:
return self.colors[color]
else:
return self.colors[color]+(opacity,)
Window.clearcolor = (1,1,1,1)
if __name__ == '__main__':
ScorebookApp().run()