1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00
PySolFC/pysollib/pysolgtk/selecttile.py
Shlomi Fish a76c85e71f Ran 2to3 and did some other conversions.
Trying to port PySol to Python 3 - this is time consuming.
2015-07-11 19:52:43 +03:00

215 lines
6.6 KiB
Python

#!/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 <http://www.gnu.org/licenses/>.
##
##---------------------------------------------------------------------------##
# 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()