#!/usr/bin/env python # -*- mode: python; coding: utf-8; -*- ##---------------------------------------------------------------------------## ## ## Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer ## Copyright (C) 2003 Mt. Hood Playing Card Co. ## Copyright (C) 2005-2009 Skomoroh ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . ## ##---------------------------------------------------------------------------## # imports ## import os, string, sys, types import gobject, gtk from gtk import gdk # PySol imports ## from pysollib.mfxutil import destruct, Struct, KwStruct from pysollib.mygettext import _, n_ from pysollib.resource import CSI from pysollib.mfxutil import kwdefault # Toolkit imports ## from tkutil import loadImage from .tkwidget import MfxDialog from .tkcanvas import MfxCanvas from .tkutil import setTransient from .pysoltree import PysolTreeView class SelectTileDialogWithPreview(MfxDialog): def __init__(self, parent, title, app, manager, key=None, **kw): kw = self.initKw(kw) MfxDialog.__init__(self, parent, title, **kw) # top_box, bottom_box = self.createHBox() # if key is None: key = manager.getSelected() self.app = app self.manager = manager self.key = key self.preview_key = -1 self.all_keys = [] self.table_color = app.opt.colors['table'] # paned hpaned = gtk.HPaned() self.hpaned = hpaned hpaned.show() top_box.pack_start(hpaned, expand=True, fill=True) # model = self._createStore(manager, key) treeview = PysolTreeView(self, model) self.treeview = treeview hpaned.pack1(treeview.scrolledwindow, True, True) treeview.treeview.expand_all() # self.preview = MfxCanvas(top_box) # width=w2 hpaned.pack2(self.preview, True, True) self.preview.show() hpaned.set_position(240) self.createButtons(bottom_box, kw) self.updatePreview(key) self.show_all() gtk.main() def rowActivated(self, w, row, col): # FIXME print('row-activated-event', row, col) def getSelected(self): index = self.treeview.getSelected() if index < 0: return None return self.all_keys[index] def showSelected(self, w): key = self.getSelected() self.updatePreview(key) def _createStore(self, manager, key): self.all_keys = [] index = 0 # model = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_INT) # iter = model.append(None) model.set(iter, 0, _('Solid color'), 1, -1) for color, value in ((_('Blue'), '#0082df'), (_('Green'), '#008200'), (_('Navy'), '#000086'), (_('Olive'), '#868200'), (_('Orange'), '#f79600'), (_('Teal'), '#008286'),): child_iter = model.append(iter) model.set(child_iter, 0, color, 1, index) self.all_keys.append(value) index += 1 # tiles = manager.getAllSortedByName() tiles = [obj for obj in tiles if not obj.error] tiles = [tile for tile in tiles if tile.index > 0 and tile.filename] # iter = model.append(None) model.set(iter, 0, _('All Backgrounds'), 1, -1) if tiles: for tile in tiles: child_iter = model.append(iter) model.set(child_iter, 0, tile.name, 1, index) self.all_keys.append(tile.index) index += 1 else: child_iter = model.append(iter) model.set(child_iter, 0, _('(no tiles)'), 1, -1) return model def updatePreview(self, key): ##print 'updatePreview:', key, type(key) if key is None: return if key == self.preview_key: return canvas = self.preview ##canvas.deleteAllItems() if isinstance(key, str): # solid color canvas.setTile(self.app, 0, force=True) canvas.config(bg=key) ##canvas.setTextColor(None) self.preview_key = key self.table_color = key else: # image if self.preview.setTile(self.app, key): self.preview_key = key else: self.preview_key = -1 def initKw(self, kw): kwdefault(kw, strings=(_('&OK'), _('&Solid color...'), _('&Cancel'),), default=0, resizable=1, padx=10, pady=10, width=600, height=400, ) return MfxDialog.initKw(self, kw) def _colorselOkClicked(self, w, d): c = d.colorsel.get_current_color() c = '#%02x%02x%02x' % (c.red/256, c.green/256, c.blue/256) d.destroy() self.updatePreview(c) self.treeview.unselectAll() def createColorsel(self): win = gtk.ColorSelectionDialog(_('Select table color')) win.help_button.destroy() win.set_position(gtk.WIN_POS_CENTER_ON_PARENT) if isinstance(self.preview_key, str): color = self.preview_key else: color = self.app.opt.colors['table'] win.colorsel.set_current_color(gdk.color_parse(color)) win.connect('delete_event', lambda w, e: win.destroy()) win.ok_button.connect('clicked', self._colorselOkClicked, win) win.cancel_button.connect('clicked', lambda w: win.destroy()) setTransient(win, self) win.show() def done(self, button): b = button.get_data('user_data') if b == 1: self.createColorsel() return if b == 0: self.key = self.getSelected() if not self.key: self.key = self.preview_key self.status = 0 self.button = b ##self.hide() self.quit()