Mercurial > traipse
diff orpg/mapper/background_handler.py @ 0:4385a7d0efd1 grumpy-goblin
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author | sirebral |
---|---|
date | Tue, 14 Jul 2009 16:41:58 -0500 |
parents | |
children | 33582ce538b5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orpg/mapper/background_handler.py Tue Jul 14 16:41:58 2009 -0500 @@ -0,0 +1,150 @@ +# Copyright (C) 2000-2001 The OpenRPG Project +# +# openrpg-dev@lists.sourceforge.net +# +# 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 2 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, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# -- +# +# File: mapper/background_handler.py +# Author: OpenRPG Team +# Maintainer: +# Version: +# $Id: background_handler.py,v 1.23 2007/03/09 14:17:15 digitalxero Exp $ +# +# Description: Background layer handler +# +__version__ = "$Id: background_handler.py,v 1.23 2007/03/09 14:17:15 digitalxero Exp $" + +import thread +from threading import Lock +from background import * +from base_handler import * +import mimetypes + +from base import * + +class background_handler(base_layer_handler): + def __init__(self, parent, id, canvas): + base_layer_handler.__init__(self, parent, id, canvas) + self.settings = self.canvas.settings + + def build_ctrls(self): + base_layer_handler.build_ctrls(self) + self.lock = Lock() + self.bg_type = wx.Choice(self, wx.ID_ANY, choices = ["Texture", "Image", "Color" ]) + self.bg_type.SetSelection(2) + self.localBrowse = wx.Button(self, wx.ID_ANY, 'Browse') + self.localBrowse.Hide() + self.url_path = wx.TextCtrl(self, wx.ID_ANY,"http://") + self.color_button = wx.Button(self, wx.ID_ANY, "Color", style=wx.BU_EXACTFIT) + self.color_button.SetBackgroundColour(wx.BLACK) + self.color_button.SetForegroundColour(wx.WHITE) + self.apply_button = wx.Button(self, wx.ID_ANY, "Apply", style=wx.BU_EXACTFIT) + self.sizer.Add(self.bg_type, 0, wx.EXPAND) + self.sizer.Add(self.url_path, 1, wx.EXPAND) + self.sizer.Add(self.color_button, 0, wx.EXPAND) + self.sizer.Add(self.localBrowse, 0, wx.EXPAND) + self.sizer.Add(self.apply_button, 0, wx.EXPAND) + self.Bind(wx.EVT_BUTTON, self.on_bg_color, self.color_button) + self.Bind(wx.EVT_BUTTON, self.on_apply, self.apply_button) + self.Bind(wx.EVT_BUTTON, self.on_browse, self.localBrowse) + self.Bind(wx.EVT_CHOICE, self.on_bg_type, self.bg_type) + self.update_info() + + def on_browse(self, evt): + if self.bg_type.GetStringSelection() == 'Texture' or self.bg_type.GetStringSelection() == 'Image': + dlg = wx.FileDialog(None, "Select a Miniature to load", orpg.dirpath.dir_struct["user"]+'webfiles/', wildcard="Image files (*.bmp, *.gif, *.jpg, *.png)|*.bmp;*.gif;*.jpg;*.png", style=wx.OPEN) + if not dlg.ShowModal() == wx.ID_OK: + dlg.Destroy() + return + file = open(dlg.GetPath(), "rb") + imgdata = file.read() + file.close() + filename = dlg.GetFilename() + (imgtype,j) = mimetypes.guess_type(filename) + postdata = urllib.urlencode({'filename':filename, 'imgdata':imgdata, 'imgtype':imgtype}) + + if self.settings.get_setting('LocalorRemote') == 'Remote': + thread.start_new_thread(self.canvas.layers['bg'].upload, (postdata, dlg.GetPath(), self.bg_type.GetStringSelection())) + else: + url = self.settings.get_setting('LocalImageBaseURL') + print dlg.GetDirectory() + print orpg.dirpath.dir_struct["user"] + if dlg.GetDirectory() == orpg.dirpath.dir_struct["user"]+'webfiles/Textures' or dlg.GetDirectory() == orpg.dirpath.dir_struct["user"]+'webfiles\Textures': url = self.settings.get_setting('LocalImageBaseURL') + 'Textures/' + if dlg.GetDirectory() == orpg.dirpath.dir_struct["user"]+'webfiles/Maps' or dlg.GetDirectory() == orpg.dirpath.dir_struct["user"]+'webfiles\Maps': url = self.settings.get_setting('LocalImageBaseURL') + 'Maps/' + if dlg.GetDirectory() == orpg.dirpath.dir_struct["user"]+'webfiles/Miniatures' or dlg.GetDirectory() == orpg.dirpath.dir_struct["user"]+'webfiles\Miniatures': url = self.settings.get_setting('LocalImageBaseURL') + 'Miniatures/' + path = url + filename + if self.bg_type.GetStringSelection() == 'Texture': + self.canvas.layers['bg'].set_texture(path) + elif self.bg_type.GetStringSelection() == 'Image': + self.size = self.canvas.layers['bg'].set_image(path,1) + self.update_info() + self.canvas.send_map_data() + self.canvas.Refresh(False) + + def update_info(self): + bg_type = self.canvas.layers['bg'].get_type() + session=self.canvas.frame.session + if (session.my_role() != session.ROLE_GM): + self.url_path.Hide() + else: + self.url_path.Show() + self.url_path.Enable(BG_COLOR!=bg_type) + self.color_button.SetBackgroundColour(self.canvas.layers['bg'].get_color()) + self.url_path.SetValue(self.canvas.layers['bg'].get_img_path()) + + def build_menu(self,label = "Background"): + base_layer_handler.build_menu(self,label) + + def on_bg_color(self,evt): + data = wx.ColourData() + data.SetChooseFull(True) + dlg = wx.ColourDialog(self.canvas, data) + if dlg.ShowModal() == wx.ID_OK: + data = dlg.GetColourData() + data = data.GetColour() + r = data.Red() + g = data.Green() + b = data.Blue() + fgcolor = wx.Colour(r^255, g^255, b^255) + bgcolor = wx.Colour(r, g, b) + self.color_button.SetBackgroundColour(bgcolor) + self.color_button.SetForegroundColour(fgcolor) + dlg.Destroy() + + def on_bg_type(self, evt): + if self.bg_type.GetStringSelection() == 'Texture' or self.bg_type.GetStringSelection() == 'Image': + self.localBrowse.Show() + self.url_path.Enable() + else: + self.localBrowse.Hide() + self.url_path.Disable() + self.Layout() + + def on_apply(self, evt): + session=self.canvas.frame.session + if (session.my_role() != session.ROLE_GM) and (session.use_roles()): + open_rpg.get_component("chat").InfoPost("You must be a GM to use this feature") + return + self.canvas.layers['bg'].set_color(self.color_button.GetBackgroundColour()) + + if self.bg_type.GetStringSelection() == 'Texture': + self.canvas.layers['bg'].set_texture(self.url_path.GetValue()) + elif self.bg_type.GetStringSelection() == 'Image': + self.size = self.canvas.layers['bg'].set_image(self.url_path.GetValue(),1) + + self.update_info() + self.canvas.send_map_data() + self.canvas.Refresh(False)