From 9b5c6711edd39ef5719da0f91c46dacba838fbe4 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Mon, 13 Jul 2009 20:38:41 +0000 Subject: Move initial resize of cardtable to do_expose_event and do not play with different sizes in allocation event --- (limited to 'cardtable.py') diff --git a/cardtable.py b/cardtable.py index a96f7f0..0ba55e3 100644 --- a/cardtable.py +++ b/cardtable.py @@ -41,10 +41,6 @@ class CardTable(gtk.EventBox): self.cards_data = None self._workspace_size = 0 - # set request size to 100x100 to skip first time sizing in _allocate_cb - self.set_size_request(100, 100) - self.connect('size-allocate', self._allocate_cb) - # Set table settings self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#000000')) self.table = gtk.Table() @@ -65,18 +61,18 @@ class CardTable(gtk.EventBox): self.dict = None self.show_all() - def _allocate_cb(self, widget, allocation): - size = allocation.height - if size == 100: - # skip first time sizing - return - if self._workspace_size == 0: + def do_expose_event(self, event): + if self._workspace_size: # do it once - self.set_size_request(size, size) - self._workspace_size = size - if self.data: - self.load_game(None, self.data, self.cards_data) - + return + + size = self.allocation.height + self.set_size_request(size, size) + self._workspace_size = size + + if self.data: + self.load_game(None, self.data, self.cards_data) + def load_game(self, widget, data, grid): self.data = data self.cards_data = grid @@ -105,12 +101,12 @@ class CardTable(gtk.EventBox): else: text1 = str(self.data.get('face', '')) text2 = str(self.data.get('face', '')) - + x = 0 y = 0 id = 0 - - for card in self.cards_data: + + for card in self.cards_data: if card.get('img', None): jpg = os.path.join(self.data['pathimg'], card['img']) else: @@ -132,9 +128,9 @@ class CardTable(gtk.EventBox): self.cd2id[card] = id self.id2cd[id] = card self.cards[(x, y)] = card - self.dict[id] = (x, y) - self.table.attach(card, x, x+1, y, y+1) - + self.dict[id] = (x, y) + self.table.attach(card, x, x+1, y, y+1, gtk.SHRINK, gtk.SHRINK) + x += 1 if x == self.size: x = 0 @@ -145,7 +141,7 @@ class CardTable(gtk.EventBox): self._set_load_mode(False) self.show_all() gc.collect() - + def change_game(self, widget, data, grid): if not self.first_load: for card in self.cards.values(): @@ -153,35 +149,36 @@ class CardTable(gtk.EventBox): del card gc.collect() self.load_game(None, data, grid) - + def get_card_size(self, size_table): - x = self._workspace_size/size_table - theme.CARD_PAD*2 + x = (self._workspace_size+theme.CARD_PAD*(size_table-1)) / size_table \ + - theme.CARD_PAD*2 return x - + def mouse_event(self, widget, event, coord): #self.table.grab_focus() card = self.cards[coord[0], coord[1]] id = self.cd2id.get(card) self.emit('card-highlighted', id, True) self.selected_card = (coord[0], coord[1]) - + def key_press_event(self, widget, event): #self.table.grab_focus() x= self.selected_card[0] y= self.selected_card[1] - + if event.keyval in (gtk.keysyms.Left, gtk.keysyms.KP_Left): if self.table_positions.has_key((x-1, y)): card = self.cards[x-1, y] id = self.cd2id.get(card) self.emit('card-highlighted', id, False) - + elif event.keyval in (gtk.keysyms.Right, gtk.keysyms.KP_Right): if self.table_positions.has_key((x+1, y)): card = self.cards[x+1, y] id = self.cd2id.get(card) self.emit('card-highlighted', id, False) - + elif event.keyval in (gtk.keysyms.Up, gtk.keysyms.KP_Up): if self.table_positions.has_key((x, y-1)): card = self.cards[x, y-1] @@ -218,13 +215,16 @@ class CardTable(gtk.EventBox): def flip_card(self, widget, id): self.id2cd.get(id).flip() - + + def cement_card(self, widget, id): + self.id2cd.get(id).cement() + def highlight_card(self, widget, id, status): if self.dict != None: self.selected_card = self.dict.get(id) self.id2cd.get(id).set_highlight(status) - - def reset(self, widget): + + def reset(self, widget): for id in self.id2cd.keys(): self.id2cd[id].reset() -- cgit v0.9.1