From: <aut...@us...> - 2012-09-12 00:29:17
|
Revision: 375 http://upstage.svn.sourceforge.net/upstage/?rev=375&view=rev Author: aut-upstage Date: 2012-09-12 00:29:09 +0000 (Wed, 12 Sep 2012) Log Message: ----------- copy 2.4.2 to 2.4.3 Added Paths: ----------- branches/2.4.3/AS3.client/ branches/2.4.3/Changelog branches/2.4.3/DEBIAN/ branches/2.4.3/README branches/2.4.3/chownme.sh branches/2.4.3/client/ branches/2.4.3/compile-swf.sh branches/2.4.3/config/ branches/2.4.3/html/ branches/2.4.3/img2swf.py branches/2.4.3/install.py branches/2.4.3/speaker.py branches/2.4.3/structure.txt branches/2.4.3/uninstall.sh branches/2.4.3/upstage/ branches/2.4.3/upstage-admin branches/2.4.3/upstage-admin.conf branches/2.4.3/upstage-backup branches/2.4.3/upstage-server Copied: branches/2.4.3/Changelog (from rev 374, branches/2.4.2/Changelog) =================================================================== --- branches/2.4.3/Changelog (rev 0) +++ branches/2.4.3/Changelog 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,137 @@ +Changelog + +30-04-2011 (Heath & Henry) +-Made several changes to syntax. +-Added missing functions and configuration information. + +04-05-2011 (Heath, Vibhu, Henry) +-Fixed Login bug (74-75) Logs in correctly first attempt on all browsers. +05-05-2011 (Vibhu, Heath) +-Added new redirect to home page. + +06-05-2011 (Heath, Vibhu) +-Fixed text-to-speech audio bug so text-to-speech works and the sound slots get re-assigned. + +08-05-2011 (Heath) +-Made some alterations to the install.py namely fixed a bug which caused the script to fail when generating the deb file. +-The install.py now removes all .svn files till I can figure out how to ignore them. Also fixed the bug with permissions for the debian package scripts. +-The install.py script can now compile the client if the flex compiler is present on the users system. REFER to README file for instructions. + +17-05-2011 (Heath, Moh, Vibhu) +-Fixed media filter. Now correctly filters media and all names remain in tact. +-Media upload works correctly in all browsers (including firefox 4). + +18-05-2011 (Heath, Moh) +-Fixed change own password, now correctly changes own password(server side). +-Added checks to user.js which ensure an empty password cannot be entered. + +20-05-2011 (Heath) +-Fixed Bubble now fades after some time which is calculated based on the length of the message. +-Fixed the Bubble is removed from the stage when the avatar is dropped. + +07-06-2011 (Heath & Mohammed) +-Fix for duplicate footer in pages stageedit and media edit. Edited file masterpage.js function fillpage line 297. + +12-06-2011(Heath & Mohammed) +-Moved the code to remove duplicated footer into stageEdit() in stageedit.js. Also added the version info +in master_b.inc to the div. + +13-06-2011(Vibhu, Moh, Heath, Henry, JR) +-Various html layout bugs fixed, the entire website has been revamped using a new template and layout. +-Fixed image scrolling. Images are now spaced correctly and names do not overlap. Improved look and feel. +-Fixed server responses which where breaking html layout within tables. +-Changed versioning information to reflect current version (2.4.1). + +15-06-2011 (Vibhu, Heath & Mohammed) +-Backdrop resizing, so it remains only in stage +-Centered the stage display +-Backdrop remains behind avatar + +17-06-2011 (Heath Behrens) +-Fixed updating voices, changing a voice will not require a server restart. +-Fixed bubble fading, the alpha value now slowly decreases (this can be modified very easily to fade slower or faster, for now its just a static fade duration). + +18/06/2011 (Heath Behrens) +-Increased width of speech bubble and also slightly modified the duration of the speech bubble on stage, to further take into account the length of the text. +-Fixed 2 errors that prevented audio files from being selected and tested on the mediaedit page. Changes namely made to pages.py. Also removed another log.msg that printed the bytes of audio files to the log file (Twice!). + +26/06/2011 (Heath) +-Fixed error on speech bubble timer which threw an exception, due to not stopping all timers correctly. + +05/07/2011 (Heath Behrens) +-Fix for exception loading audio files, namely null objects. Still no music playback though. +-Removed the icon from Audio.as as a temporary fix for it covering the play buttons. + +28/07/2011 (Heath Behrens / Vibhu Patel) +-Merged 2.1 client (stage) back into 2.4.1 codebase. +-removed .pyproject files. +-Fixed an error when uploading media with more than 1 . character in the name. +-Changed the layout of stageedit page and removed previous buttons replacing them with radio buttons. +-Switched assign to stages boxes on the media upload page. + +08/08/2011 (Heath Behrens / Vibhu Patel) +-Fixed Avatar scaling in client, avatars now scale correctly in Actionscript 2 client. +-Also added the actionscript 2 compile script to the source as it is required. +-On a side note the AS3.client can be renamed to client. In which case the actionscript 3 client will be used instead of AS2 client. +-Fixed prop so it scales on stage. + +09/08/2011 (Heath Behrens & Vibhu Patel) +-Merged avatar menu into 2.1 all functions working. +-Fixed modifying colours in media managment system namely changing the background colour of chat,prop etc. +The fix is part of an html issue which only changed the background colour of the prop bar. +-Radio buttons removed from the stage edit page, instead images are used as it looks more flashy and the requests are sent correctly. +-compileswf was modified to use the current directory opposed to the home directory. + +10/08/2011 (Heath Behrens) +-Fixed parsing of xml file on server, now the stage access options options are extracted correctly. + However the stageedit page needs some tweaking. + +12/08/2011 (Heath Behrens / Vibhu Patel) +-Reworked retrieving media info on the server side, this was part of a fix which did not show unassigned stages in the workshop. Instead all stages where shown as assigned even if that was not the case. +-Added session tracking to masterpage.js so a user stays logged in for 24hrs provided cookies are allowed with their browser. + +16/08/2011 (Heath Behrens / Vibhu Patel) +-Completed fixes for assign and unassign stages, so all is working. +-Added a patch to the request sent in masterpage to correctly send the request to the server for assigning and unassigning stages. +-Audience and player counters for each stage are displayed on each web page. + +19/08/2011 (Heath Behrens / Vibhu Patel) +-Filtering optimized and allows multiple filters of the same type. There are two different types of filtering are available. Namely media can be filtering by removing items not matching the filtering criteria. The other method includes all media matching only the filter options. +-Fixed media scrolling the position is remebered an returned to when selecting an item. +-Layout of media edit page works cross all browsers (tested browsers). +-swf files now have a thumbnail which is the actual swf clip. However the audio embedded within the movie clip plays which is annoying (working on a workaround to stop audio playing in a movieclip). +-Removed a number of unnecessary log messages in the server code. + +24/08/2011 (Heath Behrens / Vibhu Patel / Nessa / Craig / Corey / Karena) +-Added media tagging on server, along with some display fixes when generating html pages in pages.py. +-Added fix for silly display error and a fix for the previous commit which caused the server to throw and error and not run. +-Media tagging complete on both client and server side and ready for testing. + +26/08/2011 (Heath Behrens / Vibhu Patel / Nessa / Corey / Karena) +-Added remove tags for media within media edit view. +-Players can now tag media before uploading a media file. +-Players can edit names of media such as prop/audio/avatar and backdrop. +-Fix for IE which caused the edit media button to break. + +31/08/2011 (Vibhu Patel / Heath Behrens / Corey / Karena) +-Deleted media is removed from the list on media edit page. +-Edit player page does not show popup message if change password is not selected. +-Fixed media tagging. +-Added change audio type feature. +-Added change background color feature for page and toolbox on stage. + +18/09/2011 (Heath Behrens) +-Added fix for emb voices which did not work on main server. The scripts now use a temporary file. +instead of reading from stdin. + +26/04/2012 (Daniel Han, Corey Robb, Karena Goh) +-Added fix for img2swf, that is required for UpStage to run on Debian 6.0.4. + +09/07/2012 (Daniel Han) +- Login does not use cookie to check logged in user. It uses session to be more secure. However, it is only a workaround to fix "unable to log out" bug. +- Player has "Last Logged in Date" field. +- Player can edit emails now. +- Player is now searchable. +- Testing Voices on Media Edit does not redirect to new page. +- Cosmetic Changes for Media Edit, Stage Edit, Non Admin Page, and Stage Lists. +- Page Edit mode enables Admin to edit pages. \ No newline at end of file Copied: branches/2.4.3/README (from rev 374, branches/2.4.2/README) =================================================================== --- branches/2.4.3/README (rev 0) +++ branches/2.4.3/README 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,66 @@ +####################################################################### +# AUT UpStage Team 2011 +# Author: Heath Behrens (2011) +# +# ChangeLog: +# Updated Dependencies (Heath Behrens 13-04-2011) +# Updated Instructions and added note on dependencies. (Heath Behrens 05-05-2011) +# Updated Compiling of the client. +# +####################################################################### + +List of dependencies + +####################################################################### + +espeak +festival +gif2png +libgif4 +netpbm +python-twisted <= 8.1.0-4 +lame >= 3.97-0.0 +libgdbmg >= 1.7.3-28 +rsynth >= 2.0-6 +mbrola >= 3.01h-6 +swftools >= 0.9.0-0ubuntu1 +python <= 2.5.2 + +####################################################################### + +Install Instructions: + +As root run: + +1) apt-get install espeak festival gif2png libgif4 netpbm python-twisted timeout + +If you have downloaded the other dependencies as deb files, run: + +2) Extract the dependency.tar.gz file + +3) Cd to the dependency folder and run as root: + dpkg -i *.deb + +-NOTE. You will need to install: swftools, lame, libgdbmg, mbrola and rsynth using your distributions package manager. + + swftools: wget http://archive.canonical.com/ubuntu/pool/partner/s/swftools/swftools_0.9.0-0ubuntu2_i386.deb + rsynth: wget http://archive.debian.org/debian-archive/debian/pool/non-free/r/rsynth/rsynth_2.0-6_i386.deb + +If Pulled from svn skip to step 5. + +4) Extract UpStage-2.x.x.zip or .tar.gz + +5) open a terminal and cd to 2.x.x directory. + Run: + python install.py (NOTE this will install upstage. Refer to below instructions for other options) + +If you prefer to use the deb file there is a built in deb creater but you need to have the following installed: + +apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder + +Once the above build tools are installed run: + 'python install.py deb' (without quotes to create a deb package) + +To compile the client if you made changes or just want to make sure the latest client in included, use: + python install.py cc /path/to/flex +If you do not have the flex compiler 2. Then this will not work. \ No newline at end of file Copied: branches/2.4.3/chownme.sh (from rev 374, branches/2.4.2/chownme.sh) =================================================================== --- branches/2.4.3/chownme.sh (rev 0) +++ branches/2.4.3/chownme.sh 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,18 @@ +#!/bin/sh + +# Title: chownme.sh +# Description: Changes ownerships of certain UpStage folders to the current user. +# Notes: +# Author: AUT 2007 team: Endre Bernhardt +# Modification History: +# Version Date Person Description +# 1.0 ??/??/?? EB Started +# 1.1 12/09/07 PQ Changed hard-coded "upstageuser" to dynamically get +# the username with "$USER". Added this header. +# 1.2 14/09/07 PQ Changed $USER to $USERNAME otherwise it will only get +# the username of the currently logged in terminal user. +# + +chown -R $USERNAME /var/local/log/upstage/ +chown -R $USERNAME /var/local/run/upstage/ +chown -R $USERNAME /usr/local/share/upstage/ Copied: branches/2.4.3/compile-swf.sh (from rev 374, branches/2.4.2/compile-swf.sh) =================================================================== --- branches/2.4.3/compile-swf.sh (rev 0) +++ branches/2.4.3/compile-swf.sh 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,28 @@ +#!/bin/sh +# Heath Behrens 09/08/2011 - updated to work from current directory not hardcoded home directory +DEBUG=upstage.client.App.debug +#DEBUG=no + +BASE_DIR=. + +cd $BASE_DIR/client/src +mtasc -version 10 -msvc -wimp -strict -frame 1 -header 320:200:30 \ + -trace $DEBUG -swf classes.swf upstage/client/App.as \ + || exit + + +echo '*** compiled OK ***' + +# Link classes.swf to symbol in client.swf +# Also embedd fonts to client.swf +echo +echo '*** Linking with swfmill ***' +echo +swfmill simple upstage/client/application.xml client.swf +echo 'Classes size is:' +ls -s --block-size=1 classes.swf +echo 'Client size is:' +ls -s --block-size=1 client.swf +echo +cd ../../ +cp client/src/classes.swf client/src/client.swf html/swf/ \ No newline at end of file Copied: branches/2.4.3/img2swf.py (from rev 374, branches/2.4.2/img2swf.py) =================================================================== --- branches/2.4.3/img2swf.py (rev 0) +++ branches/2.4.3/img2swf.py 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,231 @@ +#!/usr/bin/python +#Copyright (C) 2003-2006 Douglas Bagnall (do...@pa...) +# +#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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Module : img2swf.py +# Author : Douglas Bagnall +# Purpose: Convert images to swf (uses shell calls to external files) +# Modified By: +# Student Upstage Team (Wise Wang, Beau Hardy, Francis Palma, Lucy Chu) +# Short Commings: - +# Modified History : +# Version Date Person Desc +# 1.1 24/Sept/2004 BD Upstage-2004-09-28.tar.gz +# 1.2 05/May/2006 FP, BH Used doxygen to comment code +# BH Turned on jpg2swf -z switch for quality +# Made png thumbnails mask to white background properly +# 1.9 07/Sep/2006 BH,FP,WW Fix 'little' problem where files not upload +# +"""img2swf -- convert image files to swf format +Usage: + + img2swf NEW.SWF THUMBNAIL.JPG ORIGINAL.JPG [ ORIG2.JPG [ ORIG3.JPG [...]]] + +ORIGINAL.JPG (or PNG, GIF) will be converted to SWF and saved as NEW.SWF. +If more than one image is given, they are set up as consecutive frames in the +swf, and the thumbnail will show the first one. +A thumbnail version will be placed in THUMBNAIL.JPG. (if possible) + + img2swf --help for this text. +""" +## @brief Script to convert a file into SWF. NOT imported into twisted framework - +# runs as separate process. +# +# file type is identified by file -ib, not file extension. +# +# $ img2swf.py /tmp/tempfile media/outfile.swf +# +# Should return exit code 0 on success. + +import os, sys, tempfile +import shutil +import time + +from upstage.config import IMG2SWF_LOG, LOG_ROTATE_SIZE +from upstage.util import redirect_to_log + + +## @brief Raise an IOError +# @param tfn ignored +# @param swf ignored +def do_nothing(tfn, swf): + raise IOError('bad file type!') + + +## @brief Convert from gif to swf +# calls gif2png with filter and optimise options (-f0) +# @param swf output file name +# @param tfn input file name +# FIXED BY VISHAAL 01/06/09, straight gif2wf converter +# instead of gif->png->swf +def do_gif(tfn, swf): + #png = tempfile.mkstemp('.png')[1] + #cmd = 'cat %s | gif2png -n -fO > %s ; png2swf -o %s %s' % (tfn, png, swf, png) + cmd = 'gif2swf -o %s %s' % (swf, tfn) + err = os.system(cmd) + #os.remove(png) + return (err, cmd) + +## @brief Convert from png to swf +# @param swf output file name +# @param tfn input file name +def do_png(tfn, swf): + #cmd = 'png2swf -o %s %s' % (swf, tfn) + cmd = 'png2swf -o %s %s' % (swf, tfn) + err = os.system(cmd) + return (err, cmd) + + +## @brief Convert from jpg to swf +# @param swf output file name +# @param tfn input file name +def do_jpg(tfn, swf): + # BH 23-Jun-2006 -z instead of -m for flash player 6 + # Gives better image quality using swftools 0.7.0 + #cmd = 'jpeg2swf -m -o %s %s' % (swf, tfn) + cmd = 'jpeg2swf -z -q85 -o %s %s' % (swf, tfn) + err = os.system(cmd) + return (err, cmd) + + +## @brief Dummy conversion for swf files. +# @param swf output file name +# @param tfn input file name +def do_swf(tfn, swf): + cmd = 'cp %s %s' % (tfn, swf) + err = os.system(cmd) + return (err, cmd) + + +## @brief Make a thumbnail from the supplied image +# @param filetype image/png, image/jpeg, image/gif, application/x-shockwave-flash +# @param tfn input file name +# @param thumb output filename for thumbnail (20 pixels high) +# @param log handle to error log file +# 01/06/09 Vishaal adjusted image/jpeg so it will allow the loading of JPEG images correctly +def thumbnailer(filetype, tfn, thumb): + # These could probably be improved. Especially the swf one! + types = { + # BH 23-Jun-2006 Added pngtopnm -background to force background to white + #Shaun Narayan (02/22/10) - change thumbnail scale res to account for new larger images. + 'image/png' : 'pngtopnm -mix -background "#ffffff" %s | pnmscale -height=80 -width=70 | pnmtojpeg > %s', + 'image/jpeg' : 'jpegtopnm %s | pnmscale -height=80 -width=70 | pnmtojpeg > %s', + #'image/jpeg' : 'djpeg %s | pnmscale -height=20 | pnmtojpeg > %s', #commented out as fixed in above line Vishaal 01/06/09 + 'application/x-shockwave-flash' : 'cp %s %s', #utterly wrong thing to do -- wants jpg not swf + 'image/gif' : 'giftopnm %s | pnmscale -height=80 -width=70 | pnmtojpeg > %s' + } + tempf = tempfile.mkstemp('.jpg')[1] + cmd = types[filetype] % (tfn, tempf) + err = os.system(cmd) + print cmd + + if err or not os.path.exists(tempf): + print "%s %s %s %s" % (tempf, thumb, filetype, err) + raise RuntimeError("Couldn't make tempfile for thumbnail") + + try: + shutil.move(tempf, thumb) + except IOError, e: + print "%s\n%s\nrenaming error: %s" % (tempf, thumb, e) + + +## @brief Convert an image to a swf +# @param tfn input file name +# @param swf output file name +# @param thumb output file name for the thumbnail + +def convert(files, swf, thumb): + # it's all here + # 'file -ib' says which conversion function to use. + # Break string back down into an array + print "Files are: %s\n" % files + + prevtype = None + for f in files: + if not os.path.exists(f): + raise IOError('No such file: "%s"' % f) + if os.path.exists(swf): + raise IOError('Overwriting existing file: "%s"' % swf) + + filepipe = os.popen('file --mime-type --brief %s' % f) + filetype = filepipe.read().strip() + print "filetype: %s" %(filetype) + filepipe.close() + # if there is more than one file, they must all be the same type. + if prevtype not in (None, filetype): + raise RuntimeError("differing types in multifile conversion (%s and %s)" % (prevtype, filetype)) + prevtype = filetype + + types = { + 'image/png' : do_png, + 'image/jpeg' : do_jpg, + 'application/x-shockwave-flash' : do_swf, + 'image/gif' : do_gif, + } + + convertor = types.get(filetype, do_nothing) + # multi image conversions only work for some functions. + if len(files) > 1 and convertor not in (do_jpg, do_png): + raise RuntimeError("can't convert %s into a multi-image swf, its type is %s" % (f, filetype)) + + print "Filetype is '%s', convertor is %s\n" %(filetype, convertor) + filestr = ' '.join(files) + err, cmd = convertor(filestr, swf) + print "Done SWF, got %s, %s\n" %(err, cmd) + if err: + raise IOError('Command "%s" apparently failed: returned "%s"' % (cmd, err)) + print "no errors yet!" + + if not os.path.exists(swf): + raise IOError('Command "%s" apparently failed: "%s" does not exist!' % (cmd, swf)) + + thumbnailer(filetype, files[0], thumb) + + # delete temporary files. + try: + for f in files: + os.remove(f) + print "removing %s" % f + except (OSError, IOError ), e: + print ("Error removing temp file %s: %s" % (f, e)) + raise + return swf + + + +## @brief Process entry point +# Commandline parameters: +# output filename, output filename for thumbnail, input file name[s] +def main(): + if '--help' in sys.argv or '-h' in sys.argv: + print __doc__ + sys.exit() + + redirect_to_log(IMG2SWF_LOG) + print '-' * 72 + print time.strftime('%Y-%m-%d %H:%M:%S') + print "arguments are:\n %s" %'\n '.join(sys.argv[1:]) + + swf, thumb = sys.argv[1: 3] + files = sys.argv[3:] + if not files: + raise RuntimeError("no files to convert (got '%s'" % ' '.join(sys.argv)) + + x = convert(files, swf, thumb) + print "worked, or at least failed to complain." + +if __name__ == '__main__': + main() Copied: branches/2.4.3/install.py (from rev 374, branches/2.4.2/install.py) =================================================================== --- branches/2.4.3/install.py (rev 0) +++ branches/2.4.3/install.py 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,211 @@ +#!/usr/bin/env python +#-*- coding:utf-8 -*- +""" +# A very simple script used to install upstage to the appropriate +# directories. Ensure that the Server folder is present. +# Usage: copy install.py to the directory containing Server folder +# execute using python install.py +# ensure you are root! +# To generate a deb file simply type: python install.py deb +# or if you want to give your package another name: python install.py deb packagename +# @author: Heath Behrens (AUT UpStage Team) +# Changelog: Created on 09-April-2011 +# Modified: 11/04/2011 - Added function to parse_control_file so deb can now be generated +# without the user naming the package +# -Added compiling of the client, generates the flex-config file (needs some work though) +# -Fixed silly bug with permissions. Added more descriptive comments to the functions. +# -Added removal of .svn directories which do not play nicely with the script for now. Also added changing of permissions for DEBIAN files. +# -Completed the compiling of the client which now works. Usage is: python install.py cc /path/to/flex +""" + +import os +import sys +from distutils import dir_util +from distutils import file_util +import shutil +import tarfile +import fileinput + +baseDir = '/usr/local/share/' +serverDir = '/usr/local/' +config_path = '/usr/local/etc/' +backup_location = '/etc/cron.weekly/' +workingDir = os.path.abspath('.') +control_file_location = workingDir+'/DEBIAN/control' +system_calls = ['chmod +x /usr/local/upstage/*', 'chmod +x /etc/cron.weekly/upstage-backup', 'ln -s /usr/local/upstage/* /usr/local/bin/', 'ln -s /etc/cron.weekly/upstage-backup /usr/local/bin/'] +server_files = ['chownme.sh','img2swf.py','speaker.py','upstage-admin','upstage-admin.conf','upstage-backup','upstage-server'] + +""" +Replaces a line of text with another line of text in a file. Just a simple helper method. +""" +def replaceAll(file,searchExp,replaceExp): + for line in fileinput.input(file, inplace=1): + if searchExp in line: + line = line.replace(searchExp,replaceExp) + sys.stdout.write(line) + +""" +Compiles the client, Actionscript 3 into swf file. The path to the compiler must be +provided. +""" +def compile_client(compiler_path): + print "Compiling Client..." + current_path = os.path.abspath('') + os.system('cp '+current_path+'/client/upstage/org/flex-config.xml '+current_path+'/') + flex_config_path = current_path + '/flex-config.xml' + print flex_config_path + #replace expression + replaceAll(flex_config_path,'<source-path></source-path>','\t<source-path><path-element>'+current_path+'/client/upstage/'+'</path-element></source-path>\n') + + os.system('cp '+flex_config_path +' '+ compiler_path+'/frameworks/') + os.system(compiler_path+'/bin/mxmlc' +' '+current_path+'/client/upstage/org/main.mxml') + file_util.copy_file(current_path+'/client/upstage/org/main.swf', current_path+'/html/swf/classes.swf') + +""" +Parses the control file to extract the user +""" +def parse_control_file(): + version = '' + name = '' + if(os.path.exists(control_file_location)): + print control_file_location + f = open(control_file_location, 'r') + for line in f: + if('Version' in line): + version = line.split(':')[1].strip() + print version + if('Package' in line): + name = line.split(':')[1].strip(); + return name+'-'+version + +""" +Generates a deb file from the source code. The package name +can be ommitted. In which case it uses the name and version number +in the control file. +""" +def generate_deb(packagename): + if(not len(packagename)>0): + packagename = parse_control_file() + print packagename + os.system('rm -rf `find . -type d -name .svn`') + rootpath = workingDir+'/'+packagename; + os.makedirs(rootpath) #create root direction + #copy the directory tree to the root of the destination + dir_util.copy_tree(workingDir+'/html', rootpath+baseDir+'upstage/DEFAULT/html/') + dir_util.copy_tree(workingDir+'/config', rootpath+baseDir+'upstage/DEFAULT/config/') + dir_util.copy_tree(workingDir+'/upstage', rootpath+serverDir+'/upstage/upstage/') + dir_util.copy_tree(workingDir+'/DEBIAN', rootpath+'/DEBIAN') + for file in server_files: + if(file == 'upstage-admin.conf'): + if(not os.path.exists(rootpath+config_path+'upstage/')): + print 'Creating: '+rootpath+config_path+'upstage/' + os.makedirs(rootpath+config_path) + os.makedirs(rootpath+config_path+'upstage/') + file_util.copy_file(workingDir+'/'+file, rootpath+config_path+'upstage/'+file) + print 'Copied: '+workingDir+'/'+file+ ' -to- '+ rootpath+config_path+'upstage/'+file + if(file == 'upstage-backup'): + os.makedirs(rootpath+'/etc') + os.makedirs(rootpath+'/etc/cron.weekly') + file_util.copy_file(workingDir+'/'+file, rootpath+backup_location+file) + print 'copied: '+ workingDir+'/'+file+' -to- '+ rootpath+backup_location+file + shutil.copyfile(workingDir+'/'+file, rootpath+serverDir+'upstage/'+file) + print 'copied: '+ workingDir+'/'+file+' -to- '+ rootpath+serverDir+'upstage/' + os.system('dpkg -b '+packagename) #create the deb package + os.system('rm -r '+packagename) #cleanup + +""" +Cleans up etc. +""" +def finalizeSetup(): + print '\n' + print 'Finalizing Setup.' + print '\n' + for call in system_calls: + os.system(call) + print '***************************************************************' + print '\n' + print 'Thank you for choosing to use UpStage!' + print 'Visit upstage.org.nz for more information on UpStage' + print '\n' + print '***************************************************************' + print '\n' + print 'To Create a new server run as root: upstage-admin create' + print 'To Start a server run as root: upstage-admin start servername' + print 'To See if any servers are active run as root: upstage-admin ls' + print 'AUT upstage development team (2011)' + print '\n' + print '***************************************************************' + +""" +Copies files and folders to the installed paths +""" +def copyFiles(location, noargs): + if(noargs): + if(os.path.exists(location+'/config')): + dir_util.copy_tree(location+'/config', baseDir+'/upstage/DEFAULT/config/') + print 'Copying Directory: '+location+'/config' + ' -to- '+ baseDir+'/upstage/DEFAULT/config/' + if(os.path.exists(location+'/html')): + dir_util.copy_tree(location+'/html', baseDir+'/upstage/DEFAULT/html/') + print 'Copying Directory: '+location+'/html' + ' -to- '+ baseDir+'/upstage/DEFAULT/html/' + if(os.path.exists(location+'/upstage')) : + dir_util.copy_tree(location+'/upstage', serverDir+'/upstage/upstage/') + print 'Copying Directory: '+location+'/upstage' + ' -to- '+ serverDir+'/upstage/upstage/' + for file in server_files: + if(file == 'upstage-admin.conf'): + if(not os.path.exists(config_path+'upstage/')): + print 'Creating: '+config_path+'upstage/' + os.makedirs(config_path+'upstage/') + file_util.copy_file(location+'/'+file, config_path+'upstage/'+file) + print 'Copied: '+location+'/'+file+ ' -to- '+ config_path+'upstage/'+file + if(file == 'upstage-backup'): + file_util.copy_file(location+'/'+file, backup_location+file) + print 'copied: '+ location+'/'+file+' -to- '+ backup_location+file + shutil.copyfile(location+'/'+file, serverDir+'upstage/'+file) + print 'copied: '+ location+'/'+file+' -to- '+ serverDir+'upstage/'+file + + +""" + +Execute the script. + +""" +if(len(sys.argv) >= 2): + if(sys.argv[1] == 'cc'): + if(sys.argv[2] == None): + print "Usage: python install.py cc /path/to/flex/compiler/" + else: + compile_client(sys.argv[2]) + print 'Client compiled Sucessfully! You can now create a deb file or install from source using:' + print 'To create a deb file: ' + print 'sudo python install.py deb' + print 'To install from source: ' + print 'sudo python install.py' + elif(sys.argv[1] == 'deb' and len(sys.argv) > 2): + print "Changing permissions for install scripts." + os.system('chmod 755 '+workingDir+'/DEBIAN/*') + generate_deb(sys.argv[2]) + elif(sys.argv[1] == 'deb'): + print "Changing permissions for install scripts." + os.system('chmod 755 '+workingDir+'/DEBIAN/*') + generate_deb('')# usage python install.py deb + + +else: + print "Removing .svn files from current directory and all subdirectories..." + os.system('rm -rf `find . -type d -name .svn`') + copyFiles(workingDir, True) + finalizeSetup() + + +#print "flex-config.xml created. Please copy the file to <flex compile location><frameworks>" + + #<source-path><path-element>/home/heath/upstage/client/upstage/</path-element></source-path> + +#elif (len(sys.argv) == 3): +# if(sys.argv[1] == 'deb' and len(sys.argv[2]) >1): +# generate_deb(sys.argv[2]) +#else: +# print workingDir +# copyFiles(workingDir, True) +# finalizeSetup() + Copied: branches/2.4.3/speaker.py (from rev 374, branches/2.4.2/speaker.py) =================================================================== --- branches/2.4.3/speaker.py (rev 0) +++ branches/2.4.3/speaker.py 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,110 @@ +#!/usr/bin/python +#Copyright (C) 2003-2006 Douglas Bagnall (do...@pa...) +# +#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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +""" Festival process wrapper +Was going to be a festival client in it's own right, +but time withered away. Now just a pathetic wrapper +around bash script - this would be better all done is bash. + +see http://festvox.org/docs/manual-1.4.3/festival_28.html#SEC129 + +-------------------------------------------------------------------- +festival protocol goes like so: +while ack != "OK\n": + ack = read three character acknowledgemnt + if (ack == "WV\n"): + read a waveform + elif (ack == "LP\n"): + read an s-expression + elif (ack == "ER\n"): + an error occurred, break; + +errors are logged in to ./speech.log file""" + +import os, sys, re + +from upstage.config import VOICES, SPEECH_LOG + + + + +#voices['default'] = voices['us1'] +def _get_translation_table(): + """return table to help clean up speech for command line""" + t = [" "] * 256 + for x in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0987654321.,/?:;!@$%&*()_-+=\"'": + t[ord(x)] = x + return ''.join(t) + +_TRANSLATOR = _get_translation_table() + +def cleanse_msg(msg): + """Make the text suitable for a double-quoted command line call. Dodgy characters + will be turned to spaces and never pronounced""" + msg = str(msg) # deUnicodify + msg = msg.translate(_TRANSLATOR) # turns naughty characters (notably '\') into spaces + msg = re.sub('(["$])', r"\\\1", msg) # escape the double quotes. + msg = msg.replace('*', ' star ') + msg = msg.replace('@', ' at ') + msg = msg.replace('&', ' and ') + msg = re.sub(' +',' ', msg) # be rid of excessive spaces. + return msg + + +def speak(message, filename, voice): + """Connects to festival process to make speak""" + c = VOICES.get(voice, VOICES['default']) + c = ' '.join(c) + cmd = 'echo "%s" %s %s 2>> %s' % (message, c, filename, SPEECH_LOG) + + os.system(cmd) + log("doing " + cmd) + +## @brief Copies a test mp3 file to the given filename +def test_speak(message, filename, voice): + """Testing""" + os.system('cp /home/douglas/della.mp3 %s' %filename) + +def main(): + """Main commandline arguments (speech filename voice) + Calls speak() function""" + #print sys.argv + #assert len(sys.argv) == 4 + speech = cleanse_msg(sys.argv[1])# dodgy command line rinsing. + filename = sys.argv[2] + voice = sys.argv[3] + + if os.path.exists(filename): + log('removing ' + filename) + os.unlink(filename) # get rid of the file first, so upstage can detect it's non-readiness + + speak(speech, filename, voice) + + + +def log(*args): + """Logs any error in to ./speech.log file""" + if not os.path.exists(SPEECH_LOG): + f = open(SPEECH_LOG, 'w') + else: + f = open(SPEECH_LOG, 'a') + f.write('\n'.join([ str(x) for x in args ]) +'\n') + f.close() + + + +if __name__ == '__main__': + main() Copied: branches/2.4.3/structure.txt (from rev 374, branches/2.4.2/structure.txt) =================================================================== --- branches/2.4.3/structure.txt (rev 0) +++ branches/2.4.3/structure.txt 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,26 @@ + + + + +Basic structure of upstage. + + + config + matter + misc + + globe, things + / + world player stage + | \ / | + | \ / | + | \/ | + | /\ | + | / \ | + | / \ | _pages, widgets, waiters + transport server web + \ / + \ / + \ / + \ / + glue app Copied: branches/2.4.3/uninstall.sh (from rev 374, branches/2.4.2/uninstall.sh) =================================================================== --- branches/2.4.3/uninstall.sh (rev 0) +++ branches/2.4.3/uninstall.sh 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,48 @@ +#!/bin/bash + +################################################################### +# A very simple script used to unistall upstage +# Usage: +# execute as root using sh uninstall.sh +# +#@author: Heath Behrens (AUT) +#Changelog: Created on 13-April-2011 +################################################################### + +echo "######################################################################" +echo "Killing processes" +#find the process id's associated with upstage-server +export out=`ps ux | awk '/upstage-server/ && !/awk/ {print $2}'` +#loop through the processes and kill each one. +echo "Processes found." +for pid in $out +do + echo "Stopping $pid" + kill $pid + echo "$pid stopped." +done +echo "" +echo "Complete!" +echo "######################################################################" + +echo "Cleaning up." +echo "######################################################################" +echo "" +echo "Removing /usr/local/etc/upstage/" +rm -r /usr/local/etc/upstage/ +echo "Removing /var/local/run/upstage/" +rm -r /var/local/run/upstage/ +echo "Removing /var/local/log/upstage/" +rm -r /var/local/log/upstage/ +echo "Removing /usr/local/upstage/" +rm -r /usr/local/upstage/ +echo "Removing /usr/local/bin/upstage" +rm -r /usr/local/bin/upstage +echo "Removing /usr/local/share/upstage/" +rm -r /usr/local/share/upstage/ +echo "Removing /etc/cron.weekly/upstage-backup.sh" +rm /etc/cron.weekly/upstage-backup.sh + +echo "" +echo "Thank you for using UpStage!" +echo "######################################################################" Copied: branches/2.4.3/upstage-admin (from rev 374, branches/2.4.2/upstage-admin) =================================================================== --- branches/2.4.3/upstage-admin (rev 0) +++ branches/2.4.3/upstage-admin 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,356 @@ +#!/usr/bin/python + +""" +This script is used to stop and start upstage server instances. + +upstage-admin stop [server-name] +upstage-admin start [server-name] +upstage-admin restart [server-name] + +upstage-admin create [server-name] + create a new server. + +upstage-admin ls +upstage-admin list + list the configured servers (and indicate whether they are running) + +upstage-admin rm [server-name] +upstage-admin remove [server-name] + delete a server's configuration + +""" + +import os, sys, shutil, termios, subprocess +from cStringIO import StringIO +from ConfigParser import SafeConfigParser, NoOptionError +from md5 import md5 + +from upstage.config import HTDOCS, ADMIN_DIR, TEMPLATE_DIR, \ + CONFIG_DIR, PLAYERS_XML, SWF_DIR, POLICY_FILE_PORT + +#helper functions for input. + +def word(msg, default=''): + """restricts to alphanumeric""" + while True: + a = raw_input("%s [%s]" %(msg, default)).lower() or default + if a.isalnum(): + return a + print "no spaces or funny characters, sorry" + +def password(msg1, msg2='again:', msg3="that didn't match"): + """does not echo, asks twice""" + fd = sys.stdin.fileno() + old = termios.tcgetattr(fd) + new = termios.tcgetattr(fd) + new[3] = new[3] & ~termios.ECHO # magic term flags + try: + termios.tcsetattr(fd, termios.TCSADRAIN, new) + while True: + p1 = raw_input(msg1) + p2 = raw_input('\n' + msg2) + if p1 == p2: + break + print '\n' + msg3 + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old) + return p1 + + +def yesno(msg, default='y/n'): + """yes/y => True, no/n => False""" + while True: + a = raw_input("%s [%s]" %(msg, default)).lower() or default + if a in ('y', 'yes', 'n', 'no'): + return a in ('y', 'yes') + print "yes or no?" + + +def port_no(msg, default=''): + while True: + a = raw_input("%s [%s]" %(msg, default)).lower() or default + if a.isdigit() and int(a) > 1024 and int(a) < 65354: + return int(a) + print "pick a number between 1024 and 65354" + + +def filepath(msg, default='', type='file'): + while True: + a = raw_input("%s [%s]" %(msg, default)) or default + a = os.path.abspath(a) + if os.path.exists(a): + if type == 'file' and not os.path.isfile(a): + print "not a proper file!" + continue + elif type == 'dir' and not os.path.isdir(a): + print "not a directory!" + continue + elif type == 'dir' and not yesno("directory exists -- reuse it?"): + continue + + d, f = os.path.split(a) + if not os.path.isdir(d): + try: + os.makedirs(d, 0755) + except IOError, e: + print e + continue + return a + + + +##################################### + +class Conf(SafeConfigParser): + def __init__(self, filename): + SafeConfigParser.__init__(self) + self.filename = filename + self.read(filename) + + + def find_next_ports(self): + """Finds likely port numbers to offer as defaults.""" + wp, sp = 8080, 7229 + for section in self.sections(): + if self.has_option(section, 'webport') and self.has_option(section, 'webport'): + wp = max(wp, self.getint(section, 'webport')) + sp = max(sp, self.getint(section, 'swfport')) + return (wp + 1, sp + 1) + + def save(self): + #re-write the conf file + f = open(self.filename, 'w') + self.write(f) + f.close() + + + def start(self, name): + webport = self.get(name, 'webport') + swfport = self.get(name, 'swfport') + policyport = self.get(name, 'policyport') + logfile = self.get(name, 'logfile') + pidfile = self.get(name, 'pidfile') + basedir = self.get(name, 'basedir') + + cmd = 'upstage-server -p %s -w %s -o %s -l %s -P %s -b %s' \ + %(swfport, webport, policyport, logfile, pidfile, basedir) + print cmd + err = os.system(cmd) + if err: + print "an error occured (%s)" % err + + + def stop(self, name): + pidfile = self.get(name, 'pidfile') + try: + f = open(pidfile) + pid = int(f.read()) + f.close() + os.kill(pid, 15) + #os.remove(pidfile) #upstage-server does this itself + except (IOError, OSError), e: + print "couldn't find process to kill -is it running?", e + + def cmd_create(self, name=None): + """Set up a new server""" + print "Setting up a new server" + wp, sp = [str(x) for x in self.find_next_ports()] + + while name is None or name == 'DEFAULT' or name in self.sections(): + if name is not None: + print "sorry, the name '%s' is taken or reserved" % name + name = word("What name should the server have?", wp) + + webport = port_no("Which port should the web server listen on? (1024-65534)", wp or '') + swfport = port_no("Which port should the flash sockets use? (1024-65534)", sp or '') + + # AC - Added to allow the selection of the policy file server port + policyport = port_no("Which port should policy files be served over? (1024-65534)", str(POLICY_FILE_PORT) or '') + + lf = os.path.abspath("%s/upstage-%s.log" % (self.get('DEFAULT', 'log_dir'), name)) + logfile = filepath("Where should the logs go? [%s]" % lf, lf) + + bd = os.path.abspath("%s/%s" % (self.get('DEFAULT', 'data_dir'), name)) + basedir = filepath("Where should the server's data go? [%s]" % bd, bd, type='dir') + + pf = os.path.abspath("%s/upstage-%s.pid" % (self.get('DEFAULT', 'pid_dir'), name)) + pidfile = filepath("Where should the process identifier (PID) file go? [%s] (just press enter)" % pf, pf) + + for p in (logfile, pidfile, basedir + '/xx'): + d, f = os.path.split(p) + if not os.path.isdir(d): + print "making directory %s" % d + os.makedirs(d, 0755) + + self.add_section(name) + self.set(name, 'webport', str(webport)) + self.set(name, 'swfport', str(swfport)) + self.set(name, 'policyport', str(policyport)) + self.set(name, 'logfile', logfile) + self.set(name, 'pidfile', pidfile) + self.set(name, 'basedir', basedir) + + if not os.listdir(basedir) or yesno("The server's data directory already exists.\n " + "Should this data be replaced?"): + default_data = self.get('DEFAULT', 'default_data') + for x in (HTDOCS, CONFIG_DIR): + dest = os.path.join(basedir, x) + src = os.path.join(default_data, x) + if os.path.exists(dest): + os.system('rm -r %s' % dest) + shutil.copytree(src, dest) + + self.set_admin(name) + + self.save() + + print "NOTE: these files and directories need to be writeable by the user that will be running the server:" + for x in (logfile, pidfile, basedir): + print x + ##print "you might want to chown -R them" #PQ: Old: Before it didnt't chown the folders for you + #PQ: Added 5/8/07 + print "Let me chown the UpStage folders for you!" + #PQ: Chown the upstage folders + os.system("chownme.sh") + + + def set_admin(self, name): + print "You'll need to set up an admin user for this server (you can add more later)" + user = word("what is the admin's username?") + pw = password("enter the admin password", "the same password again") + #XXX should be using upstage libraries for this + xml = '<players><player password="%s" name="%s" rights="act,admin,su" date="forever" email="notset" /></players>' + xmlpath = os.path.join(self.get(name, 'basedir'), PLAYERS_XML) + f = open(xmlpath, 'w') + f.write(xml %(md5(pw).hexdigest(), user)) + f.close() + + def cmd_rm(self, name=None): + """Remove a server from the list""" + if name is None: + print "no server specified" + elif name in self.sections() and \ + yesno("delete configuration for the server '%s'? this is irreversible.", 'n'): + if yesno("should I try to stop the server (is it running?)"): + self.stop(name) + basedir = self.get(name, 'basedir') + self.remove_section(name) + print "data remains in the directory '%s'" % basedir + self.save() + + def cmd_start(self, name=None): + """Start a server""" + servers = self.sections() + if name in servers: + self.start(name) + elif name is None and len(servers) > 1: + print "don't know which server to start" + elif name is None and len(servers) == 1: + self.start(servers[0]) + elif yesno('Do you want to set up a server? (y/n)'): + self.cmd_create(name) + + + def cmd_stop(self, name=None): + """Stop a running server""" + servers = self.sections() + if name in servers: + self.stop(name) + elif name is None and len(servers) > 1: + print "don't know which server to stop" + elif name is None and len(servers) == 1: + self.stop(servers[0]) + else: + print "no upstage servers appear to be configured" + + + def cmd_restart(self, name=None): + """Stops and starts the server""" + servers = self.sections() + if name in servers: + self.stop(name) + self.start(name) + elif name is None and len(servers) > 1: + print "don't know which server to restart" + elif name is None and len(servers) == 1: + self.stop(servers[0]) + self.start(servers[0]) + else: + print "no upstage servers appear to be configured" + + + def cmd_ls(self): + """list running servers""" + for name in self.sections(): + pidfile = self.get(name, 'pidfile') + try: + f = open(pidfile) + pid = int(f.read()) + f.close() + except IOError: + print name + continue + s = os.popen4('kill -0 %s' %pid, 'r')[1].read() + #patched for python 2.6 + #s = subprocess.Popen('kill -0 ' + str(pid), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True) + if s: + print '%-18s stopped?' % name + else: + print '%-18s running' %name + + + def cmd_reset(self, name=None): + """Reset a servers templates or configuration files""" + servers = self.sections() + if name is None: + if len(servers) != 1: + name = servers[0] + else: + name = word("reset which server? %s" % servers) + + opj = os.path.join + + if name in servers: + self.stop(name) + defaults = self.get('DEFAULT', 'default_data') + basedir = self.get(name, 'basedir') + for question, d, exc in (("reset the html templates?", TEMPLATE_DIR, []), + ("reset the admin html?", ADMIN_DIR, []), + ("reset backdrops, props and avatars?", CONFIG_DIR, + ['stages', 'templates', 'players.xml', 'stages.xml']), + ("reset swf files?", SWF_DIR, []), + ): + if yesno(question): + src = opj(defaults, d) + dest = opj(basedir, d) + for fn in os.listdir(src): + if fn not in exc: + shutil.copy(opj(src, fn), opj(dest, fn)) + + + self.start(name) + else: + print "unknown server, doing nothing" + + + cmd_list = cmd_ls + cmd_delete = cmd_rm + cmd_remove = cmd_rm + +if __name__ == '__main__': + if len(sys.argv) < 2 or '--help' in sys.argv: + print __doc__ + print "Commands:" + cmdl = [ (v.__doc__, k[4:]) for k, v in Conf.__dict__.items() if k.startswith('cmd_') ] + cmdd = {} + for doc, cmd in cmdl: + cmdd[doc] = cmdd.get(doc, []) + cmdd[doc].append(cmd) + for doc, cmds in cmdd.items(): + print "\n %s\n %s" %('\n '.join(cmds), doc) + sys.exit() + + conf = Conf('/usr/local/etc/upstage/upstage-admin.conf') + fn = 'cmd_' + sys.argv[1] + if hasattr(conf, fn): + getattr(conf,fn)(*sys.argv[2:]) Copied: branches/2.4.3/upstage-admin.conf (from rev 374, branches/2.4.2/upstage-admin.conf) =================================================================== --- branches/2.4.3/upstage-admin.conf (rev 0) +++ branches/2.4.3/upstage-admin.conf 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,9 @@ +# +# UpStage server configuration file. +# + +[DEFAULT] +default_data=%(data_dir)s/DEFAULT +log_dir=/var/local/log/upstage/ +data_dir=/usr/local/share/upstage/ +pid_dir=/var/local/run/upstage/ \ No newline at end of file Copied: branches/2.4.3/upstage-backup (from rev 374, branches/2.4.2/upstage-backup) =================================================================== --- branches/2.4.3/upstage-backup (rev 0) +++ branches/2.4.3/upstage-backup 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,23 @@ +#!/bin/bash + +# UpStage Backup Script +# Author: Paul Rohrlach (aut...@gm...) +# Backups up all media from every server on system and archives it in /home/ +# Should be placed in /usr/local/bin and added to crontab + +cd /usr/local/share/upstage/ + +FILENAME=$(date +"%d-%m-%Y").tar + +tar -cv -f $FILENAME * +gzip -v9 $FILENAME + +FILENAME=($FILENAME.gz) + +if [ -d /home/UpStage\ Media\ Backups/ ]; +then + mv $FILENAME /home/UpStage\ Media\ Backups/ +else + mkdir /home/UpStage\ Media\ Backups/ + mv $FILENAME /home/UpStage\ Media\ Backups/ +fi \ No newline at end of file Copied: branches/2.4.3/upstage-server (from rev 374, branches/2.4.2/upstage-server) =================================================================== --- branches/2.4.3/upstage-server (rev 0) +++ branches/2.4.3/upstage-server 2012-09-12 00:29:09 UTC (rev 375) @@ -0,0 +1,169 @@ +#!/usr/bin/python +#Copyright (C) 2003-2006 Douglas Bagnall (douglas * paradise-net-nz) +# +#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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +""" +If executed as a script, the upstage.config module is imported and +updated according to commandline arguments. + +Then, normally, the script will daemonised, and start up an upstage +server. + +Use --help on the commandline to see other options. +""" + +import os, sys + +from upstage import config +from upstage.policyfileserver import policy_server + +#twisted +from twisted.python import usage, log + +class Options(usage.Options): + """ + Instances parse commandline options, and appear to python as a + dictionary-like thing. + """ + optParameters = [["swfport", "p", config.SWF_PORT, "Port to use"], + ["webport", "w", config.WEB_PORT, "web server's port"], + ["policyport", "o", config.POLICY_FILE_PORT, + "policy file server's port"], + ["logfile", "l", config.LOG_FILE, "where to log"], + ["pidfile", "P", config.PID_FILE, "process id file"], + ["basedir", "b", config.BASE_DIR, + "directory from which to find files"]] + + optFlags = [["no-daemon", "n", "do not daemonise."], + ["kill", "k", "kill the process in PIDFILE"]] + +def daemonise(pidfile, errlog, outlog=None): + if os.path.exists(pidfile): + print "WARNING: PID file exists" + sys.stdout.flush() + sys.stderr.flush() + if os.fork(): # launch child and... + os._exit(0) # kill off parent + os.setsid() + if os.fork(): # launch child and... + os._exit(0) # kill off parent again. + os.umask(0033) + print 'creating daemon' + try: + err = open(errlog, 'a+', 0) + if outlog: + out = open(outlog, 'a+', 0) + else: + out = err + os.dup2(out.fileno(), sys.stdout.fileno()) + os.dup2(err.fileno(), sys.stderr.fileno()) + os.close(sys.__stdin__.fileno()) + + except IOError: + #not much to usefully do, except print all over the console + #and hope someone notices + sys.stderr = sys.__stderr__ + sys.stdout = sys.__stdout__ + print 'Epic fail line 64' + #print_exc() + + pid = os.getpid() + print str(pid) #hmm does not even get here... + f = open(pidfile, 'w') + f.write(str(pid)) + f.close() + +def port_int(s): + n = int(s) + if n < 1024 or n > 65234: + raise ValueError("%s is out of range for a port number" % n) + return n + + +def main(): + """poke any command line options into upstage.config before + importing and calling the upstage modules""" + options = Options() + try: + options.parseOptions() + config.WEB_PORT = port_int(options["webport"]) + config.SWF_PORT = port_int(options["swfport"]) + config.POLICY_FILE_PORT = port_int(options["policyport"]) + config.LOG_FILE = options["logfile"] + config.BASE_DIR = options["basedir"] + config.PID_FILE = options["pidfile"] + + except usage.UsageError, e: + print "Sorry, I don't understand: %s\n\n %s" % (e, options) + sys.exit() + except ValueError, e: + print "\nERROR: ports have to be integers between 1024 and 65354\n\n%s" % options + sys.exit() + + if options['kill']: + try: + f = open(config.PID_FILE) + pid = int(f.read()) + f.close() + except IOError,e: + print "%s\ncan't read PID file." %(e) + pid = None + try: + os.kill(pid, 15) + except (IOError, TypeError, OSError), e: + print "%s\n\ncan't kill process %s, continuing anyway." %(e, pid) + sys.exit() + + if not options['no-daemon']: + daemonise(config.PID_FILE, config.LOG_FILE) + + + #change into base dir so all the relative paths work. XXX better to fix the paths? + os.chdir(config.BASE_DIR) + + #don't start logging before sys.stderr is pointed to logfile. + #XXX should use twisted.python.logfile to get rotation. + log.startLogging(sys.stderr) + + + ############ Policy File Server - Startup ############ + + pid = os.fork() + if pid == 0: + try: + # Starts the server for serving policy files (for latest version of flash player) + policy_server(config.POLICY_FILE_PORT, config.POLICY_FILE).run() + except Exception, e: + log.msg('Error Policy FILE SERVER!') + print >> sys.stderr, e + sys.exit(1) + sys.exit() + + ############ Policy File Server - Startup ############ + + + #don't import the upstage modules until config is settled. + from upstage.app import do_it + + try: + do_it() + finally: + if not options['no-daemon']: + os.remove(config.PID_FILE) + #XXX add calls to save state? + +if __name__ == '__main__': + main() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-12 02:27:10
|
Revision: 377 http://upstage.svn.sourceforge.net/upstage/?rev=377&view=rev Author: aut-upstage Date: 2012-09-12 02:27:03 +0000 (Wed, 12 Sep 2012) Log Message: ----------- - Daniel Fixed players not showing up on Stage edit, also, enabled stage access Modified Paths: -------------- branches/2.4.3/config/templates/master_b.inc branches/2.4.3/config/templates/stageedit.xhtml branches/2.4.3/upstage/pages.py branches/2.4.3/upstage/stage.py Modified: branches/2.4.3/config/templates/master_b.inc =================================================================== --- branches/2.4.3/config/templates/master_b.inc 2012-09-12 00:46:46 UTC (rev 376) +++ branches/2.4.3/config/templates/master_b.inc 2012-09-12 02:27:03 UTC (rev 377) @@ -1,9 +1,7 @@ </div> <div id="footer"> - <!-- PR (09/11/2010) Thought this was a more usable place to put version info --> - <!-- Mohammed Al-Timimi (9/06/2011) - Moved because it was placed so very badly --> - <p>UpStage V2.4.2 (11/09/2012)</p> + <p>UpStage V2.4.3 unstable (12/09/2012)</p> </div> <div id="status" style="display:none;"> </div> Modified: branches/2.4.3/config/templates/stageedit.xhtml =================================================================== --- branches/2.4.3/config/templates/stageedit.xhtml 2012-09-12 00:46:46 UTC (rev 376) +++ branches/2.4.3/config/templates/stageedit.xhtml 2012-09-12 02:27:03 UTC (rev 377) @@ -80,11 +80,6 @@ </div> <div id="editStageAccess"> <h1>Users who can access and edit this stage</h1> - <div id="wrapAccess"> - <p> - Sorry, This section is still under development, and not implemented to the stage. - </p> - </div> <table> <tr> <td> Modified: branches/2.4.3/upstage/pages.py =================================================================== --- branches/2.4.3/upstage/pages.py 2012-09-12 00:46:46 UTC (rev 376) +++ branches/2.4.3/upstage/pages.py 2012-09-12 02:27:03 UTC (rev 377) @@ -72,6 +72,7 @@ - current_stage = self.collection.stages.getStage(k) line added Modified by: Daniel 11/09/2012 - Added Non-Admin Page, Stages Edit mode. (editing page for guest-player) +Modified by: Daniel 12/09/2012 - modified stage edit so it does not use "remove_al_three" method """ #standard lib @@ -318,8 +319,8 @@ def allows_player(self, x): """Always return true""" return True + - """ Added by: Daniel Han (29/06/2012) basically same as CreateDir but it can render it self. @@ -735,7 +736,7 @@ def text_cant_access(self, request): if self.stage: table = [] - players = self.stage.get_al_three() + players = self.stage.get_al_three(self.collection.players) if not players is None: players.sort() for p in players: @@ -823,13 +824,15 @@ ### Modified by Daniel, 27/06/2012 ### - added for loop to make multiple selects possible + ### Modified by Daniel, 12/09/2012 + ### - removed remove_al_three from being called. (al_three not used) ##one to two elif action=='one_to_two': items = request.args.get('cantaccess',['']) for i in range(0, len(items)): pname = items[i] if self.stagename and pname: - self.stage.remove_al_three(pname) + #self.stage.remove_al_three(pname) self.stage.add_al_two(pname) self.message+='Changed rights. ' Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-12 00:46:46 UTC (rev 376) +++ branches/2.4.3/upstage/stage.py 2012-09-12 02:27:03 UTC (rev 377) @@ -33,6 +33,7 @@ functions edited are load() and save() Modified by: Daniel Han 11/09/2012 - Added Stage Access Checking. +Modified by: Daniel Han 12/09/2012 - Changed get_al_three method. """ #std lib @@ -554,8 +555,13 @@ def get_al_two(self): return self.access_level_two - def get_al_three(self): - return self.access_level_three + #Modified: Daniel Han (12/09/2012) - does not use access_level_three any more, as it causes player loading problem. + def get_al_three(self, players={}): + audiences = [] + for p in players: + if not p in self.access_level_one and not p in self.access_level_two: + audiences.append(p) + return audiences def add_al_one(self, person): self.access_level_one.append(person) @@ -678,16 +684,8 @@ break self.sockets[client.ID] = client - - if client.player.can_act(): - self.player_sockets[client.ID] = client - if client.player.can_su(): - self.admin_sockets[client.ID] = client + - #Added checking if user is player access or admin access - #admin needs to be added to player as well. - #Disabling it for now. - """ if client.player.name in self.access_level_two or client.player.name in self.access_level_one: self.player_sockets[client.ID] = client else: @@ -696,7 +694,7 @@ #Added checking if user is player access or admin access if client.player.name in self.access_level_one: self.admin_sockets[client.ID] = client - """ + return True @@ -1030,9 +1028,7 @@ """Add a stage to the dictionary""" s = _Stage(ID, name, self) s.add_al_one(playerName) - for p in collection: - if not p == playerName: - s.add_al_three(p) + self[ID] = s #log.msg("TRYING TO GET STAGE ID: %s" % self['id']) s.wake() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-13 01:38:30
|
Revision: 379 http://upstage.svn.sourceforge.net/upstage/?rev=379&view=rev Author: aut-upstage Date: 2012-09-13 01:38:23 +0000 (Thu, 13 Sep 2012) Log Message: ----------- - Daniel Player Stage Access. When player has audience access to certain stage, they only get audience mode on stage. Modified Paths: -------------- branches/2.4.3/client/UpstageClient.as2proj branches/2.4.3/client/src/Auth.as branches/2.4.3/client/src/Client.as branches/2.4.3/config/templates/stage.xhtml branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/pages.py branches/2.4.3/upstage/stage.py Added Paths: ----------- branches/2.4.3/client/copyoutput.bat Modified: branches/2.4.3/client/UpstageClient.as2proj =================================================================== --- branches/2.4.3/client/UpstageClient.as2proj 2012-09-12 10:03:23 UTC (rev 378) +++ branches/2.4.3/client/UpstageClient.as2proj 2012-09-13 01:38:23 UTC (rev 379) @@ -50,7 +50,8 @@ <!-- Executed before build --> <preBuildCommand /> <!-- Executed after build --> - <postBuildCommand alwaysRun="True">"$(ToolsDir)\swfmill\swfmill.exe" simple "$(ProjectDir)\src\application.xml" "$(OutputDir)\client.swf"</postBuildCommand> + <postBuildCommand alwaysRun="True">"$(ToolsDir)\swfmill\swfmill.exe" simple "$(ProjectDir)\src\application.xml" "$(OutputDir)\client.swf" +"$(ProjectDir)\copyoutput.bat"</postBuildCommand> <!-- Other project options --> <options> <option showHiddenPaths="True" /> Added: branches/2.4.3/client/copyoutput.bat =================================================================== --- branches/2.4.3/client/copyoutput.bat (rev 0) +++ branches/2.4.3/client/copyoutput.bat 2012-09-13 01:38:23 UTC (rev 379) @@ -0,0 +1 @@ +COPY /Y "bin\*" "..\html\swf\" \ No newline at end of file Modified: branches/2.4.3/client/src/Auth.as =================================================================== --- branches/2.4.3/client/src/Auth.as 2012-09-12 10:03:23 UTC (rev 378) +++ branches/2.4.3/client/src/Auth.as 2012-09-13 01:38:23 UTC (rev 379) @@ -22,8 +22,8 @@ */ import Client; +import flash.external.ExternalInterface; - class Auth { private var loaded :Boolean; // .load() completed successfully @@ -50,9 +50,22 @@ this.canAct = false; this.canAdmin = false; } + + /** + * @author Daniel Han + * @usage getCurrentURI() + * @return current address in string + */ + function getCurrentURI() + { + ExternalInterface.call('currentUri()'); + //var uri:String = String(ExternalInterface.call('alert("helo")')); + //trace("current uri from javascript: " + uri); + //return uri; + } function load(drawer: Object){//draweer used for callback - trace(' Auth about to load ' + Client.AUTH_URL); + var auth: Auth = this; var decode: LoadVars = new LoadVars(); decode.onLoad = function(worked:Boolean){ @@ -60,31 +73,68 @@ if (worked){ trace(' auth is: ' + this.toString()); auth.loaded = true; - auth.canAct = (this.canAct == 'True'); - auth.canSu = (this.canSu == 'True'); - auth.canAdmin = (this.canAdmin == 'True'); + //auth.canAct = (this.canAct == 'True'); + //auth.canSu = (this.canSu == 'True'); + //auth.canAdmin = (this.canAdmin == 'True'); auth.key = this.key; auth.player = this.player; - trace("calling " + drawer.drawScreen); - drawer.drawScreen(); + //trace("calling " + drawer.drawScreen); + //drawer.drawScreen(); } else { trace('auth failed to load!'); auth.tries++; if (auth.tries <= Client.MAX_AUTH_ATTEMPTS) - { - trace('retry number ' + auth.tries); - auth.load(); - } + { + trace('retry number ' + auth.tries); + auth.load(); + } else - { - trace('continuing with audience rights'); - } + { + trace('continuing with audience rights'); + } } } - decode.load( Client.AUTH_URL); + + var stageAuth: LoadVars = new LoadVars(); + stageAuth.onLoad = function(success:Boolean) + { + + trace("stageAuthCheck: " + success); + trace("StageAuthData: " + this.toString()); + if (success) + { + auth.canAct = (this.canAct == 'True'); + auth.canAdmin = auth.canAct; + auth.canSu = auth.canAct; + trace("Going to draw screen"); + drawer.drawScreen(); + } + else + { + trace('auth failed to load!'); + auth.tries++; + if (auth.tries <= Client.MAX_AUTH_ATTEMPTS) + { + trace('retry number ' + auth.tries); + auth.load(); + } + else + { + trace('continuing with audience rights'); + auth.tries = 0; + } + } + } + trace(' Auth about to load ' + Client.AUTH_URL); + decode.load(Client.AUTH_URL); + + var uri:String = Client.ADMIN_STAGE_URL + drawer.stageID + "/auth" + + trace(' Auth about to load ' + uri); + stageAuth.load(uri); }; Modified: branches/2.4.3/client/src/Client.as =================================================================== --- branches/2.4.3/client/src/Client.as 2012-09-12 10:03:23 UTC (rev 378) +++ branches/2.4.3/client/src/Client.as 2012-09-13 01:38:23 UTC (rev 379) @@ -26,6 +26,7 @@ * Modules should never modify a value here. * Modified by: Heath Behrens & Vibhu Patel 08/08/2011 - Added lines 38-41 which are used to scale * avatars and props. + * Modified by: Daniel Han 13/09/2012 - Added ADMIN_STAGE_URL */ class Client { @@ -557,6 +558,9 @@ //---------------------strings ------------------// + // Daniel: Added 13/09/2012 + public static var ADMIN_STAGE_URL :String = '/admin/stages/'; + public static var AUTH_URL :String = '/admin/id'; // PQ & LK: Added 31.10.07 public static var APPLAUSE_URL :String = 'applause.mp3'; Modified: branches/2.4.3/config/templates/stage.xhtml =================================================================== --- branches/2.4.3/config/templates/stage.xhtml 2012-09-12 10:03:23 UTC (rev 378) +++ branches/2.4.3/config/templates/stage.xhtml 2012-09-13 01:38:23 UTC (rev 379) @@ -1,8 +1,8 @@ <html> <head> <title>%(stagename)s</title> +<link rel="stylesheet" type="text/css" href="/style/main.css" /> -<link rel="stylesheet" type="text/css" href="/style/main.css" /> </head> <body class="full"> @@ -11,7 +11,8 @@ </div> <object width="100%%" height="100%%" scale="showAll" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" - codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" + codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" + class="stageswf" > <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="/swf/client.swf?%(vars)s" /> Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/pages.py =================================================================== --- branches/2.4.3/upstage/pages.py 2012-09-12 10:03:23 UTC (rev 378) +++ branches/2.4.3/upstage/pages.py 2012-09-13 01:38:23 UTC (rev 379) @@ -1667,6 +1667,7 @@ self.html = html % {'stagename': stage.name, 'vars': vars} self.player = player self.stage = stage + print "init Stage: %s" % self.player.name def render(self, request): no_cache(request) @@ -1678,12 +1679,25 @@ return StageLog(self.stage) if path == 'debug': return StagePage(self.player, None, self.stage, 'DEBUG') - + if path == 'auth': + return StageAuth(self.player, self.stage) return self def allows_player(self, x): return True +class StageAuth(Resource): + def __init__(self, player, stage): + Resource.__init__(self) + isPlayer = (stage.isPlayerAudience(player)) != True + self.html = 'canAct=%s' % isPlayer + + def render(self, request): + no_cache(request) + request.setHeader('Content-length', len(self.html)) + return self.html + + """ Renders a userpage. Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-12 10:03:23 UTC (rev 378) +++ branches/2.4.3/upstage/stage.py 2012-09-13 01:38:23 UTC (rev 379) @@ -607,6 +607,7 @@ # Added by Daniel (11/09/2012) - check if player is audience def isPlayerAudience(self, player): + print "checking if audience: %s " % player.name if player.name in self.access_level_one or player.name in self.access_level_two: return False else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-13 06:06:46
|
Revision: 384 http://upstage.svn.sourceforge.net/upstage/?rev=384&view=rev Author: aut-upstage Date: 2012-09-13 06:06:39 +0000 (Thu, 13 Sep 2012) Log Message: ----------- - Daniel 2.4.3 Added Movable Drawings (attached to Avatar) It does what it says to do, but at the moment, it cannot be cleared out. Modified Paths: -------------- branches/2.4.3/client/src/Client.as branches/2.4.3/client/src/Sender.as branches/2.4.3/client/src/Transport.as branches/2.4.3/client/src/application.xml branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/client/src/model/ModelDrawing.as branches/2.4.3/client/src/thing/Avatar.as branches/2.4.3/client/src/util/LayerPicker.as branches/2.4.3/config/templates/mediaedit.xhtml branches/2.4.3/config/templates/stageedit.xhtml branches/2.4.3/html/mediaedit.js branches/2.4.3/html/stageedit.js branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/config.py branches/2.4.3/upstage/pages.py branches/2.4.3/upstage/server.py branches/2.4.3/upstage/stage.py Modified: branches/2.4.3/client/src/Client.as =================================================================== --- branches/2.4.3/client/src/Client.as 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/Client.as 2012-09-13 06:06:39 UTC (rev 384) @@ -594,10 +594,19 @@ type: 'layer', description: 'front', layer: Client.L_DRAW_3 - } + }, + { + type: 'label', + description: 'on avatar' + }, + { + type: 'layer', + description: 'on avatar', + layer:0 + } ]; - public static var DRAWING_LAYERS_N :Number = 4; + public static var DRAWING_LAYERS_N :Number = 5; public static var PALETTE_FIXED :Array = [0xffffff, 0x000000]; Modified: branches/2.4.3/client/src/Sender.as =================================================================== --- branches/2.4.3/client/src/Sender.as 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/Sender.as 2012-09-13 06:06:39 UTC (rev 384) @@ -406,7 +406,6 @@ } - /** * @brief Client finished loading images */ Modified: branches/2.4.3/client/src/Transport.as =================================================================== --- branches/2.4.3/client/src/Transport.as 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/Transport.as 2012-09-13 06:06:39 UTC (rev 384) @@ -918,20 +918,60 @@ /**-------------drawing tools ----------------**/ - function DRAW_LINE(msg:Object){ - this.modelDrawing.GET_DRAW_LINE(Number(msg.layer), - Number(msg.x), - Number(msg.y)); + function DRAW_LINE(msg:Object) { + var layer:Number = Number(msg.layer); + var x_pos:Number = Number(msg.x); + var y_pos:Number = Number(msg.y); + var AVid:Number; + + + if (layer == 4) + { + AVid = Number(msg.AV); + + this.modelDrawing.GET_DRAW_LINE(layer, + x_pos, + y_pos, + modelAvatars.avatars[AVid] + ); + } + else + { + + this.modelDrawing.GET_DRAW_LINE(layer, + x_pos, + y_pos); //clear the trace markers //this.modelAvatars.GET_DRAW_LINE(Number(msg.x), // Number(msg.y)); + } } - function DRAW_MOVE(msg:Object){ - this.modelDrawing.GET_DRAW_MOVE(Number(msg.layer), - Number(msg.x), - Number(msg.y)); + function DRAW_MOVE(msg:Object) { + var layer:Number = Number(msg.layer); + var x_pos:Number = Number(msg.x); + var y_pos:Number = Number(msg.y); + var AVid:Number; + + if (layer == 4) + { + AVid = Number(msg.AV); + + this.modelDrawing.GET_DRAW_MOVE(layer, + x_pos, + y_pos, + modelAvatars.avatars[AVid] + ); + } + else + { + this.modelDrawing.GET_DRAW_MOVE(layer, + x_pos, + y_pos + ); + + } //clear the trace markers //this.modelAvatars.GET_DRAW_LINE(Number(msg.x), // Number(msg.y)); @@ -956,7 +996,7 @@ } - function DRAW_VIS(msg:Object){ + function DRAW_VIS(msg:Object) { this.modelDrawing.GET_DRAW_VIS(Number(msg.layer), msg.visible == 'True', Number(msg.alpha)); Modified: branches/2.4.3/client/src/application.xml =================================================================== --- branches/2.4.3/client/src/application.xml 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/application.xml 2012-09-13 06:06:39 UTC (rev 384) @@ -29,7 +29,7 @@ //////////////////////////////////////////////////////////////////////////////// --> -<movie width="320" height="200" framerate="5"> +<movie width="320" height="200" framerate="25"> <background color="#ffffff"/> <!-- Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-13 06:06:39 UTC (rev 384) @@ -466,6 +466,7 @@ function SET_DRAW_LAYER(layer:Number) { + this.sender.DRAW_LAYER(layer); /* send the draw style. due to bad separation this is a bit hacky Another way would be to actually adopt the settings Modified: branches/2.4.3/client/src/model/ModelDrawing.as =================================================================== --- branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-13 06:06:39 UTC (rev 384) @@ -17,6 +17,7 @@ */ import Client; +import thing.Avatar; //import util.Construct; import Sender; import model.TransportInterface; @@ -57,13 +58,32 @@ } - function GET_DRAW_LINE(layer:Number, x:Number, y:Number){ + function GET_DRAW_LINE(layer:Number, x:Number, y:Number, avatar:Avatar){ trace('in ModelDrawing.GET_DRAW_LINE with layer ' + layer + ' x ' + x + ' y ' + y); - this.layers[layer].lineTo(x, y); + if(layer != 4) + this.layers[layer].lineTo(x, y); + else + { + + var xnew:Number = x - avatar._x; + var ynew:Number = y - avatar._y; + trace('drawing line on avatars: x: ' + x + ' y: ' + y); + + avatar.drawable.lineTo(xnew , ynew); + } } - function GET_DRAW_MOVE(layer:Number, x:Number, y:Number){ - this.layers[layer].moveTo(x, y); + function GET_DRAW_MOVE(layer:Number, x:Number, y:Number, avatar:Avatar){ + if(layer != 4) + this.layers[layer].moveTo(x, y); + else + { + trace('drawing on avatar'); + avatar.drawable.lineStyle(this.lineStyles[4][0], this.lineStyles[4][1], this.lineStyles[4][2]); + var xnew:Number = x - avatar._x; + var ynew:Number = y - avatar._y; + avatar.drawable.moveTo(xnew, ynew); + } } function GET_DRAW_STYLE(layer:Number, thickness:Number, colour:Number, alpha:Number){ Modified: branches/2.4.3/client/src/thing/Avatar.as =================================================================== --- branches/2.4.3/client/src/thing/Avatar.as 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/thing/Avatar.as 2012-09-13 06:06:39 UTC (rev 384) @@ -68,6 +68,8 @@ private var nameY :Number; private var frameNumber :Number; + // Daniel 13/09/2012 - For drawable avatar. + public var drawable:MovieClip; private static var symbolName:String = "__Packages.thing.Avatar"; private static var symbolLinked:Boolean = Object.registerClass(symbolName, Avatar); @@ -136,6 +138,9 @@ //XXX goto first frame; breaks animated avatars. this.frame(this.frameNumber); this.tfBG._visibility = false; + this.drawable = this.createEmptyMovieClip(this.tfName + "_drawable", this.getNextHighestDepth()); + + super.finalise(); } @@ -274,6 +279,8 @@ this.stepping = setInterval(Avatar.avatarStep, Client.AV_STEP_TIME, this); trace("duration: " + duration + " steps " + steps +" dx " + dx +" dy " + dy); }; + + /** Modified: branches/2.4.3/client/src/util/LayerPicker.as =================================================================== --- branches/2.4.3/client/src/util/LayerPicker.as 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/client/src/util/LayerPicker.as 2012-09-13 06:06:39 UTC (rev 384) @@ -96,7 +96,7 @@ * server should send somthing back that triggers setActiveLayer*/ function askForLayer(layer:Number){ - this.ti.SET_DRAW_LAYER(layer); + this.ti.SET_DRAW_LAYER(layer); } Modified: branches/2.4.3/config/templates/mediaedit.xhtml =================================================================== --- branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-13 06:06:39 UTC (rev 384) @@ -116,7 +116,7 @@ <br /> <table> <tr> - <td><input type="button" onclick="warn(4);" value="Save Changes" style="width:100px;"></input></td> + <td><input type="button" onclick="saveMedia();" value="Save Changes" style="width:100px;"></input></td> <td><input type="button" onclick="warn(5);" value="Delete Media" style="width:100px;"></input></td> </tr> <tr> Modified: branches/2.4.3/config/templates/stageedit.xhtml =================================================================== --- branches/2.4.3/config/templates/stageedit.xhtml 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/config/templates/stageedit.xhtml 2012-09-13 06:06:39 UTC (rev 384) @@ -36,7 +36,7 @@ <table> <tr> <td>Full Name:</td> - <td><input type="text" name="longName" value="%(name)s" size="20" /></td> + <td><input type="text" name="longName" id = "longName" value="%(name)s" size="20" /></td> </tr> <tr> <td>Short name for URL:</td> @@ -132,7 +132,7 @@ <input type="hidden" name="action" value=""></input> <table> <tr> - <td style="width:10%"><input type="button" onclick="warn(0);" value="Save"></input></td> + <td style="width:10%"><input type="button" onclick="saveStage();" value="Save"></input></td> <td style="width:40%">Save your stage.</td> <td style="width:10%"><input type="button" onclick="warn(1);" value="Revert Changes"></input></td> <td style="width:40%">Get rid of any changes you've made.</td> Modified: branches/2.4.3/html/mediaedit.js =================================================================== --- branches/2.4.3/html/mediaedit.js 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/html/mediaedit.js 2012-09-13 06:06:39 UTC (rev 384) @@ -27,6 +27,7 @@ * 1.3 Vibhu, Corey and Karena (31/08/2011) - Added function to allow to change audio type. * 1.4 Vibhu (31/08/2011) - Modified getMedia function to send type of audio media is, whether music or sfx. 1.5 Heath / Vibhu (01/09/2011) - added functions searchTags to search through media by tag. + 1.6 Gavin (12/09/2012) - changed the save media into a function that allows invaild characters that are found to be removed in the tag name */ //General instance style variables var mediaSelected = false; @@ -787,3 +788,23 @@ } } } + /** + * Added by Gavin 12/09/2012 + * Save the changes made to the media and also remove invaild characters "&","#" in the tag name + @return - none + */ + function saveMedia() + { + var tagName = ""; + var tagReplace = ""; + tagName = document.getElementById('tagName').value; + if(tagName.match('&') || tagName.match('#') ) + { + tagReplace = tagName.replace(/&/g,""); + tagReplace = tagReplace.replace(/#/g,""); + document.getElementById('tagName').value = tagReplace; + } + + warn(4); + } + Modified: branches/2.4.3/html/stageedit.js =================================================================== --- branches/2.4.3/html/stageedit.js 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/html/stageedit.js 2012-09-13 06:06:39 UTC (rev 384) @@ -14,6 +14,11 @@ * Modified by Daniel Han 27/06/2012 - Changes to ColorPicker to have an ID so it can be styled. (Easy to change size) - Changes to removal of proptd id and change it to colProp which I have reduced the number of rows and columns. - Added Resize Event handler + + * Modified by Gavin Chan 12/09/2012 - Modified StageChooseSubmit() method to trim the name values and + add a validator for the "#" key that removes "#" when the user enters it in the stage name + + - Created a function saveStage() that is called when the user edits the stage page and confirms, it trims the stage name value and add a alert for the "#" key */ //Instance based variables @@ -210,11 +215,44 @@ */ function stageChooseSubmit() { + try + { + document.getElementById('name').value = trim(document.getElementById('name').value); + document.getElementById('urlname').value = trim(document.getElementById('urlname').value); + if(document.getElementById('name').value.match('#')) + { + document.getElementById('name').value = document.getElementById('name').value.replace(/#/g,""); + } + } + catch(ex) + {} document.getElementById("status").innerHTML = 'Sending to server, please wait...'; document.getElementById("status").style.display = "inline"; requestPage("POST", buildRequest(1), fillPage);//'/admin/workshop/stage?shortName='+document.shaun.shortName.value, fillPage); } + /** + * Saves the stage edited by the user + * @return - none + */ + function saveStage() + { + try + { + document.getElementById('longName').value = trim(document.getElementById('longName').value); + if(document.getElementById('longName').value.match('#')) + { + document.getElementById('longName').value = document.getElementById('longName').value.replace(/#/g,""); + } + warn(0); + + } + catch(ex) + {} + + } + +/** * Save the state of form elements so that changed are not lost while editing * (Will change to only request certain bits of info from server as opposed to whole page). * @return none Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/config.py =================================================================== --- branches/2.4.3/upstage/config.py 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/upstage/config.py 2012-09-13 06:06:39 UTC (rev 384) @@ -112,7 +112,7 @@ SAVE_DELETED_MEDIA=True # how many drawing layers (has to match client, where UI is the restraint) -DRAW_LAYERS = 4 +DRAW_LAYERS = 5 ## @brief LONGEST_NAME arbitrary limit on av names LONGEST_NAME = 200 Modified: branches/2.4.3/upstage/pages.py =================================================================== --- branches/2.4.3/upstage/pages.py 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/upstage/pages.py 2012-09-13 06:06:39 UTC (rev 384) @@ -802,7 +802,7 @@ return errorpage(request, e) elif 'new_stage' in self.stagename: #Modified by: Daniel, Gavin - Made the message to contain a <form> as well so it shows on the popup box. - self.message = '<form action="/admin/workshop/stage"> Full name:<input type="text" name="name" />Short name for url:<input type="text" name="ID" size="12" />(no spaces).<button onclick="javascript:stageChooseSubmit(); return false;">Create Stage</button></form>' + self.message = '<form action="/admin/workshop/stage"> Full name:<input type="text" name="name" id="name" />Short name for url:<input type="text" name="ID" id="urlname" size="12" />(no spaces).<button onclick="javascript:stageChooseSubmit(); return false;">Create Stage</button></form>' elif action=='save': if self.stage: self.stage.update_from_form(form, self.player); @@ -1164,7 +1164,7 @@ html_editable_info += ''.join('<tr><td>%s</td></tr>' % self.no_media) #Added by Vibhu, Nessa, Craig 24/08/2011 - Displays tags within mediaedit.xhtml - mediaTags_html = '<tr><td><b>Add Tags:</b></td><td colspan="%s"><input type="text" name="tags" class="mediafield" /></td></tr>' % colspan + mediaTags_html = '<tr><td><b>Add Tags:</b></td><td colspan="%s"><input type="text" name="tags" class="mediafield" id="tagName" /></td></tr>' % colspan html_editable_info += mediaTags_html return html_editable_info Modified: branches/2.4.3/upstage/server.py =================================================================== --- branches/2.4.3/upstage/server.py 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/upstage/server.py 2012-09-13 06:06:39 UTC (rev 384) @@ -22,6 +22,9 @@ Shaun Narayan (01/29/10) - Modified Client_Setup & HANDLE_PLAY_CLIP to allow for audio position. (Aut Upstage 09/10) Natasha Pullan - 12/04/10 - Added function to handle persistant messages + +Modified by: Daniel Han 13/09/2012 - on handle_DRAW... it checks if it is avatar drawing. (layer 4) and if it is + it sends attached avatar id. Notes: """ @@ -592,12 +595,18 @@ def handle_DRAW_LINE(self, x=None, y=None): """draw a line on the stage""" - if self.drawlayer is not None: + #Daniel (13/09/2012) if drawlayer = 4, it is draw on avatar. + if self.drawlayer == 4: + self.stage.draw_layer_action('DRAW_LINE', self.drawlayer, x, y, self.avatar.ID) + elif self.drawlayer is not None: self.stage.draw_layer_action('DRAW_LINE', self.drawlayer, x, y) def handle_DRAW_MOVE(self, x=None, y=None): """lift the pen, and move it""" - if self.drawlayer is not None: + #Daniel (13/09/2012) if drawlayer = 4, it is draw on avatar. + if self.drawlayer == 4: + self.stage.draw_layer_action('DRAW_MOVE', self.drawlayer, x, y, self.avatar.ID) + elif self.drawlayer is not None: self.stage.draw_layer_action('DRAW_MOVE', self.drawlayer, x, y) def handle_DRAW_STYLE(self, colour=None, thickness=None, alpha=None): Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-13 03:32:10 UTC (rev 383) +++ branches/2.4.3/upstage/stage.py 2012-09-13 06:06:39 UTC (rev 384) @@ -34,6 +34,8 @@ Modified by: Daniel Han 11/09/2012 - Added Stage Access Checking. Modified by: Daniel Han 12/09/2012 - Changed get_al_three method. +Modified by: Daniel Han 13/09/2012 - on handle_DRAW... it checks if it is avatar drawing. (layer 4) and if it is + it sends attached avatar id. """ #std lib @@ -853,6 +855,7 @@ except IndexError, e: log.msg('got asked to clear bad layer %s' % layer) + def draw_pick_layer(self, socket, layer): """keep a record of who is using what layer""" for p in self.player_sockets.values(): @@ -877,12 +880,16 @@ self.player_broadcast('DRAW_LAYER_STATE', **dp) - def draw_layer_action(self, action, layer, x, y): + def draw_layer_action(self, action, layer, x, y, avid=None): """clear the recorded drawing for a layer""" try: assert (action in ('DRAW_MOVE', 'DRAW_LINE')) self.draw_stacks[layer].append((action, x, y)) - self.broadcast(action, x=x, y=y, layer=layer) + if layer == 4: + self.broadcast(action, x=x, y=y, layer=layer, AV=avid) + else: + self.broadcast(action, x=x, y=y, layer=layer) + except (IndexError, AssertionError): log.msg('action on bad layer %s or bad action %' % (layer, action)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-13 10:45:37
|
Revision: 385 http://upstage.svn.sourceforge.net/upstage/?rev=385&view=rev Author: aut-upstage Date: 2012-09-13 10:45:26 +0000 (Thu, 13 Sep 2012) Log Message: ----------- - Daniel LayerPicker.as/LayerPickerSet.as : Added visibility (so some Layer UI does not show.) Avatar Drawing now works in ContextMenu which makes more sense. Modified Paths: -------------- branches/2.4.3/client/src/Client.as branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/client/src/util/LayerPicker.as branches/2.4.3/client/src/util/LayerPickerSet.as branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf Modified: branches/2.4.3/client/src/Client.as =================================================================== --- branches/2.4.3/client/src/Client.as 2012-09-13 06:06:39 UTC (rev 384) +++ branches/2.4.3/client/src/Client.as 2012-09-13 10:45:26 UTC (rev 385) @@ -26,7 +26,7 @@ * Modules should never modify a value here. * Modified by: Heath Behrens & Vibhu Patel 08/08/2011 - Added lines 38-41 which are used to scale * avatars and props. - * Modified by: Daniel Han 13/09/2012 - Added ADMIN_STAGE_URL + * Modified by: Daniel Han 13/09/2012 - Added ADMIN_STAGE_URL, visibility property for DrawingLayers */ class Client { @@ -570,39 +570,47 @@ { type: 'layer', description: 'back', - layer: Client.L_DRAW_0 + layer: Client.L_DRAW_0, + visibility: true }, { type: 'label', - description: 'backdrops' + description: 'backdrops', + visibility: true }, { type: 'layer', description: 'middle1', - layer: Client.L_DRAW_1 + layer: Client.L_DRAW_1, + visibility: true }, { type: 'layer', description: 'middle2', - layer: Client.L_DRAW_2 + layer: Client.L_DRAW_2, + visibility: true }, { type: 'label', - description: 'avatars' + description: 'avatars', + visibility: true }, { type: 'layer', description: 'front', - layer: Client.L_DRAW_3 + layer: Client.L_DRAW_3, + visibility: true }, { type: 'label', - description: 'on avatar' + description: 'on avatar', + visibility: false }, { type: 'layer', description: 'on avatar', - layer:0 + layer:0, + visibility: false } ]; Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-13 06:06:39 UTC (rev 384) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-13 10:45:26 UTC (rev 385) @@ -39,6 +39,7 @@ * Notes: * Modified by: Vibhu Patel 08/08/2011 - Added makemenu which creates a right click menu. * Modified by: Vibhu Patel 31/08/2011 - Added field and function to store and set the background color of tool box items. + * Modified by: Daniel han 13/09/2012 - Added contextmenu for drawables. */ class model.ModelAvatars implements TransportInterface { @@ -551,7 +552,24 @@ }); renameMenuItem.separatorBefore = true; - myMenu.customItems.push(moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, renameMenuItem); + /** + * Daniel Han 13/09/2012 + */ + + var drawAvatarMenuItem:ContextMenuItem = new ContextMenuItem("Draw On Avatar", function(){ + modelAv.setDrawMode(true); + modelAv.SET_DRAW_LAYER(4); + + }); + + var clearDrawingMenuItem:ContextMenuItem = new ContextMenuItem("Clear Draw On Avatar", function(){ + modelAv.SET_DRAW_CLEAR(4); + }); + + + drawAvatarMenuItem.separatorBefore = true; + + myMenu.customItems.push(moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); av.menu = myMenu; } Modified: branches/2.4.3/client/src/util/LayerPicker.as =================================================================== --- branches/2.4.3/client/src/util/LayerPicker.as 2012-09-13 06:06:39 UTC (rev 384) +++ branches/2.4.3/client/src/util/LayerPicker.as 2012-09-13 10:45:26 UTC (rev 385) @@ -68,7 +68,7 @@ var x:Object = Client.DRAWING_LAYERS[i]; if (x.type == 'layer'){ //add another set of buttons. - this.layers.push(LayerPickerSet.factory(this, this.offX, top, this.layers.length)); + this.layers.push(LayerPickerSet.factory(this, this.offX, top, this.layers.length, x.visibility)); top -= Client.LPICKER_LAYER_H; } else if (x.type == 'label'){ @@ -77,6 +77,7 @@ this.offX, top + 3, this.width - 1, Client.LPICKER_LABEL_H, 0.9); tf.text = x.description; + tf._visible = x.visibility; top -= Client.LPICKER_LABEL_H; } } Modified: branches/2.4.3/client/src/util/LayerPickerSet.as =================================================================== --- branches/2.4.3/client/src/util/LayerPickerSet.as 2012-09-13 06:06:39 UTC (rev 384) +++ branches/2.4.3/client/src/util/LayerPickerSet.as 2012-09-13 10:45:26 UTC (rev 385) @@ -30,7 +30,7 @@ private var baseLayer :Number; private var borderLayer :Number; private var takenLayer :Number; - + public var index :Number; public var visible :Boolean; public var alphaSlider :Slider; @@ -57,14 +57,16 @@ /** * @brief Messy constructor override required to extend MovieClip + * modified by: Daniel Han (13/09/2012) - Added visibility parameter */ - static public function factory(parent :MovieClip, offX:Number, offY:Number, index:Number) :LayerPickerSet + static public function factory(parent :MovieClip, offX:Number, offY:Number, index:Number, visibility:Boolean) :LayerPickerSet { var layer: Number = ButtonMc.nextButtonLayer(); var name :String = 'button' + layer; var mc:MovieClip = parent.attachMovie(LayerPickerSet.symbolName, name, layer); var set :LayerPickerSet = LayerPickerSet(mc); + set._visible = visibility; set.index = index; set.visible = true; set.baseLayer = layer; Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-13 12:38:00
|
Revision: 386 http://upstage.svn.sourceforge.net/upstage/?rev=386&view=rev Author: aut-upstage Date: 2012-09-13 12:37:49 +0000 (Thu, 13 Sep 2012) Log Message: ----------- - Daniel Cosmetic fix for Media Edit page. It is more stable now. Modified Paths: -------------- branches/2.4.3/config/templates/master_a.inc branches/2.4.3/config/templates/mediaedit.xhtml branches/2.4.3/html/style/main.css branches/2.4.3/upstage/pages.py Modified: branches/2.4.3/config/templates/master_a.inc =================================================================== --- branches/2.4.3/config/templates/master_a.inc 2012-09-13 10:45:26 UTC (rev 385) +++ branches/2.4.3/config/templates/master_a.inc 2012-09-13 12:37:49 UTC (rev 386) @@ -16,7 +16,6 @@ <script language="javascript" type="text/javascript" src="/mediaedit.js"></script> <script language="javascript" type="text/javascript" src="/user.js"></script> <script language="javascript" type="text/javascript" src="/md5.js" ></script> -<script language="javascript" type="text/javascript" src="/image-slideshow.js"></script> </head> Modified: branches/2.4.3/config/templates/mediaedit.xhtml =================================================================== --- branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-13 10:45:26 UTC (rev 385) +++ branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-13 12:37:49 UTC (rev 386) @@ -10,6 +10,7 @@ Vibhu Patel (31/08/2011): Modified to include type of filtering option. Vibhu / Heath (01/08/2011): Made layout changes. Daniel / Gavin (24/08/2012): Made divMessage to make popup postback + Daniel Han (13/09/2012): Removed SlideShow type display of gallery. changed to CSS use rather than using js. --> <script type="text/javascript">document.title='Workshop - Media';</script> @@ -57,22 +58,19 @@ </div> %(attr:message)s <hr /> -<div id="dhtmlgoodies_slideshow"> - <div id="galleryContainer"> - <div id="arrow_left"><br /><img src="/style/arrow_left.gif"></div> - <div id="arrow_right"><br /><img src="/style/arrow_right.gif"></div> - <!-- Vibhu Patel (31/08/2011) added tags used to get the updated media list --> - <div id="theImages"><!--imagesDIVStart--> - %(list_media)s - <!--imagesDIVEnd--></div> - <div id="slideEnd"></div> - </div> - <div id="backupdiv" style="display:none;"> +<div id="theImages"> +<!--imagesDIVStart--> %(list_media)s - </div><!-- Added by Vibhu Patel / Nessa (17/08/2011)--> - <script type="text/javascript">initSlideShow();</script> -</div><!--seperator--> +<!--imagesDIVEnd--> +</div> +<!-- Without this backup.. Click doesn't show the media info atm. please remove this later. --> +<div id="backupdiv" style="display:none;"> + %(list_media)s +</div><!-- Added by Vibhu Patel / Nessa (17/08/2011)--> + +<!--seperator--> + <form name="rupert" action="%(req:path)s"><!--sperator_2--> <!--sperator_3--><input type="hidden" name="mediaName" value="%(attr:medianame)s"></input><!--sperator_4--> <!--sperator_5--><input type="hidden" name="mediaType" value="%(attr:mediatype)s"></input><!--sperator_6--> Modified: branches/2.4.3/html/style/main.css =================================================================== --- branches/2.4.3/html/style/main.css 2012-09-13 10:45:26 UTC (rev 385) +++ branches/2.4.3/html/style/main.css 2012-09-13 12:37:49 UTC (rev 386) @@ -476,62 +476,64 @@ /* Added by - Vibhu & Nessa (17/08/2011): new Style for image slide show. - + Modified by - Daniel (13/09/2012): Removed prev style and is using overflow as slideshows are buggy. */ - #dhtmlgoodies_slideshow{ - width:100%; /* Total width of slideshow */ - } - - #galleryContainer{ - - height:140px; /* Height of the images + 2 */ - border:1px solid #CCCCCC; - position:relative; - overflow:hidden; - padding:1px; - - /* CSS HACK */ - height: 160px; /* IE 5.x - Added 2 pixels for border left and right */ - height/* */:/**/160px; /* Other browsers */ - height: /**/160px; - - } - #arrow_left{ - position:absolute; - left:0px; - z-index:10; - background-color: #FFF; - padding:1px; - } - #arrow_right{ - position:absolute; - right:0px; - z-index:10; - background-color: #FFF; - padding:1px; - } #theImages{ - position:absolute; - height:300px; + left:40px; - width:200000px; + width:100%; + max-height: 500px; + + overflow-x: auto; + overflow-y: auto; } - #theImages #slideEnd{ - float:left; - } + + #theImages img{ - float:left; - padding:1px; - filter: alpha(opacity=10); - opacity: 0.5; - cursor:pointer; - border:0px; + border:0px; } + #theImages table{ - float:left; + border-radius: 5px; + display: table-cell; + float: left; + opacity: 0.8; + filter: alpha(opacity=10); + text-align: center; + padding: 10px; + margin: 10px; + + transition: + background-color 0.2s ease-in-out, + box-shadow 0.2s ease-in-out, + opacity 0.2s ease-in-out; + + -moz-transition: + background-color 0.2s ease-in-out, + box-shadow 0.2s ease-in-out, + opacity 0.2s ease-in-out; /* Firefox 4 */ + + -webkit-transition: + background-color 0.2s ease-in-out, + box-shadow 0.2s ease-in-out, + opacity 0.2s ease-in-out; /* Safari and Chrome */ + + -o-transition: + background-color 0.2s ease-in-out, + box-shadow 0.2s ease-in-out, + opacity 0.2s ease-in-out; /* Opera */ } + #theImages table:hover + { + cursor: pointer; + opacity: 1; + filter: alpha(opacity=100); + background-color: #DDD; + box-shadow: 0px 1px 2px #000; + } + #theImages .imageCaption{ display:none; } Modified: branches/2.4.3/upstage/pages.py =================================================================== --- branches/2.4.3/upstage/pages.py 2012-09-13 10:45:26 UTC (rev 385) +++ branches/2.4.3/upstage/pages.py 2012-09-13 12:37:49 UTC (rev 386) @@ -73,6 +73,7 @@ Modified by: Daniel 11/09/2012 - Added Non-Admin Page, Stages Edit mode. (editing page for guest-player) Modified by: Daniel 12/09/2012 - modified stage edit so it does not use "remove_al_three" method +Modified by: Daniel 13/09/2012 - removed unnecessary <a> links on MediaEditpage. replaced with onclick call on table. """ #standard lib @@ -906,7 +907,7 @@ #Vibhu Patel (18/08/2011) Added links to media #Vibhu Patel (31/08/2011) Added one more parameter to the getmedia function call that tells wabout the type of audio (music/sfx) and blank in other cases #Vibhu and Heath (01/09/2011) Added tags to the media list, that will be used during the search. - add = '<table id="%s_%s_%s_%s"><tr><td width="20px"></td><td><a href="javascript:getMedia(\'%s\',\'%s\',\'%s\')">' %(v['media'], v['typename'], v['uploader'], v['stages'], v['media'], v['typename'], v['type'])+tag+'</a></td><td width="20px"></td></tr><tr><td width="20px"></td><td class="disableLink"><a href="javascript:getMedia(\'%s\',\'%s\',\'%s\')"><b>Name: </b>%s</a></td><td width="20px"></td></tr><tr><td width="20px"></td><td class="disableLink"><a href="javascript:getMedia(\'%s\',\'%s\',\'%s\')"><b>Uploader: </b>%s</a></td><td width="20px"></td></tr></tr><tr><td width="20px"></td><td class="disableLink"><a href="javascript:getMedia(\'%s\',\'%s\',\'%s\')"><b>Type: </b>%s</a></td><td width="20px"><input name="hidden%s" type="hidden" value="%s" /></td></tr></table>' % (v['media'], v['typename'], v['type'], v['name'], v['media'], v['typename'], v['type'], v['uploader'], v['media'], v['typename'], v['type'], v['typename'], v['media'], v['tags']) + add = '<table id="%s_%s_%s_%s" onclick="getMedia(\'%s\',\'%s\',\'%s\')"><tr><td>' %(v['media'], v['typename'], v['uploader'], v['stages'], v['media'], v['typename'], v['type'])+tag+'</td></tr><tr><td class="disableLink"><b>Name: </b>%s</td></tr><tr><td class="disableLink"><b>Uploader: </b>%s</td></tr></tr><tr><td class="disableLink"><b>Type: </b>%s</td></tr></table><input name="hidden%s" type="hidden" value="%s" />' % (v['name'], v['uploader'], v['typename'], v['media'], v['tags']) msg += add num += 1 return msg This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-14 02:02:06
|
Revision: 387 http://upstage.svn.sourceforge.net/upstage/?rev=387&view=rev Author: aut-upstage Date: 2012-09-14 02:01:59 +0000 (Fri, 14 Sep 2012) Log Message: ----------- - Daniel Avatar Drawing - Clear works, also, drawing on position works perfectly. However, any first drawing does not show up on reloads. also, somehow when player reloads, drawing does not show up as well. Modified Paths: -------------- branches/2.4.3/client/src/Transport.as branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/client/src/model/ModelDrawing.as branches/2.4.3/client/src/view/DrawTools.as branches/2.4.3/html/style/main.css branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/server.py branches/2.4.3/upstage/stage.py Modified: branches/2.4.3/client/src/Transport.as =================================================================== --- branches/2.4.3/client/src/Transport.as 2012-09-13 12:37:49 UTC (rev 386) +++ branches/2.4.3/client/src/Transport.as 2012-09-14 02:01:59 UTC (rev 387) @@ -979,12 +979,32 @@ } - function DRAW_STYLE(msg:Object){ - this.modelDrawing.GET_DRAW_STYLE(Number(msg.layer), - Number(msg.thickness), - Number(msg.colour), - Number(msg.alpha) - ); + function DRAW_STYLE(msg:Object) { + var layer:Number = Number(msg.layer); + var thickness:Number = Number(msg.thickness); + var colour:Number = Number(msg.colour); + var alpha:Number = Number(msg.alpha); + var AVid:Number; + + if (layer == 4) + { + AVid = Number(msg.AV); + this.modelDrawing.GET_DRAW_STYLE(layer, + thickness, + colour, + alpha, + modelAvatars.avatars[AVid] + ); + + } + else + { + this.modelDrawing.GET_DRAW_STYLE(layer, + thickness, + colour, + alpha + ); + } } /* set the style of the users tools XXX unused*/ @@ -1007,8 +1027,16 @@ Number(msg.alpha)); } - function DRAW_CLEAR(msg:Object){ - this.modelDrawing.GET_DRAW_CLEAR(Number(msg.layer)); + function DRAW_CLEAR(msg:Object) { + var layer:Number = Number(msg.layer); + var avID:Number; + if (layer == 4) + { + avID = Number(msg.AV); + this.modelDrawing.GET_DRAW_CLEAR(layer, modelAvatars.avatars[avID]); + } + else + this.modelDrawing.GET_DRAW_CLEAR(layer); } function DRAW_LAYER_STATE(msg:Object){ Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-13 12:37:49 UTC (rev 386) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-14 02:01:59 UTC (rev 387) @@ -40,6 +40,7 @@ * Modified by: Vibhu Patel 08/08/2011 - Added makemenu which creates a right click menu. * Modified by: Vibhu Patel 31/08/2011 - Added field and function to store and set the background color of tool box items. * Modified by: Daniel han 13/09/2012 - Added contextmenu for drawables. + * Modified by: Daniel Han 14/09/2012 - Added layer parameter under draw_line draw_move methods to calculate and send avatar relational position of drawing. */ class model.ModelAvatars implements TransportInterface { @@ -438,13 +439,25 @@ /** Drawing functions */ - function SET_DRAW_LINE(x:Number, y:Number) + function SET_DRAW_LINE(x:Number, y:Number, layer:Number) { + if (layer == 4) + { + var av: Avatar = this.avatar; + x -= av._x; + y -= av._y; + } this.sender.DRAW_LINE(x, y); } - function SET_DRAW_MOVE(x:Number, y:Number) + function SET_DRAW_MOVE(x:Number, y:Number, layer:Number) { + if (layer == 4) + { + var av: Avatar = this.avatar; + x -= av._x; + y -= av._y; + } this.sender.DRAW_MOVE(x, y); } @@ -554,6 +567,7 @@ /** * Daniel Han 13/09/2012 + * #MENU */ var drawAvatarMenuItem:ContextMenuItem = new ContextMenuItem("Draw On Avatar", function(){ Modified: branches/2.4.3/client/src/model/ModelDrawing.as =================================================================== --- branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-13 12:37:49 UTC (rev 386) +++ branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-14 02:01:59 UTC (rev 387) @@ -65,11 +65,9 @@ else { - var xnew:Number = x - avatar._x; - var ynew:Number = y - avatar._y; trace('drawing line on avatars: x: ' + x + ' y: ' + y); - avatar.drawable.lineTo(xnew , ynew); + avatar.drawable.lineTo(x , y); } } @@ -79,20 +77,26 @@ else { trace('drawing on avatar'); - avatar.drawable.lineStyle(this.lineStyles[4][0], this.lineStyles[4][1], this.lineStyles[4][2]); - var xnew:Number = x - avatar._x; - var ynew:Number = y - avatar._y; - avatar.drawable.moveTo(xnew, ynew); + + avatar.drawable.moveTo(x, y); } } - function GET_DRAW_STYLE(layer:Number, thickness:Number, colour:Number, alpha:Number){ + function GET_DRAW_STYLE(layer:Number, thickness:Number, colour:Number, alpha:Number, avatar:Avatar){ var i:Number; trace('in ModelDrawing.GET_DRAW_STYLE with thickness ' + thickness + ' colour ' + colour + ' alpha ' + alpha + ' layer ' + layer); - this.layers[layer].lineStyle(thickness, colour, alpha); - //save the numbers for after a layer is cleared. - this.lineStyles[layer] = [thickness, colour, alpha]; + + if (layer != 4) + { + this.layers[layer].lineStyle(thickness, colour, alpha); + } + else + { + avatar.drawable.lineStyle(thickness, colour, alpha); + } + //save the numbers for after a layer is cleared. + this.lineStyles[layer] = [thickness, colour, alpha]; } @@ -102,12 +106,20 @@ this.layers[layer]._visible = visible; } - function GET_DRAW_CLEAR(layer:Number){ - this.layers[layer].clear(); - //restore line style - var ls: Array = this.lineStyles[layer]; - if (ls){ - this.layers[layer].lineStyle(ls[0], ls[1], ls[2]); - } + function GET_DRAW_CLEAR(layer:Number, avatar:Avatar){ + if (layer != 4) + { + this.layers[layer].clear(); + //restore line style + } + else + { + avatar.drawable.clear(); + } + + var ls: Array = this.lineStyles[layer]; + if (ls){ + this.layers[layer].lineStyle(ls[0], ls[1], ls[2]); + } } } Modified: branches/2.4.3/client/src/view/DrawTools.as =================================================================== --- branches/2.4.3/client/src/view/DrawTools.as 2012-09-13 12:37:49 UTC (rev 386) +++ branches/2.4.3/client/src/view/DrawTools.as 2012-09-14 02:01:59 UTC (rev 387) @@ -33,6 +33,7 @@ * A set of controls to draw on the screen. * Shown alternately with acting tools. * Modified by: Vibhu Patel 31/08/2011 - Changed create function to take one more parameter for the color value. + * Modified by: Daniel Han 14/09/2012 - added layer number as a parameter of drawings. */ class view.DrawTools extends MovieClip { @@ -143,7 +144,7 @@ that._y + that._ymouse); that.ti.SET_DRAW_LINE(that._x + that._xmouse, - that._y + that._ymouse); + that._y + that._ymouse, that.layerPicker.activeLayer); } } this.onMouseUp = function(){ @@ -160,7 +161,7 @@ that.leaveTrace(that._x + that._xmouse, that._y + that._ymouse); that.ti.SET_DRAW_LINE(that._x + that._xmouse - 0.001, - that._y + that._ymouse - 0.001); + that._y + that._ymouse - 0.001, that.layerPicker.activeLayer); } } } @@ -179,11 +180,11 @@ //shift key makes strait line from previous point if (Key.isDown(Key.SHIFT)){ that.ti.SET_DRAW_LINE(that._x + that._xmouse, - that._y + that._ymouse); + that._y + that._ymouse, that.layerPicker.activeLayer); } else{ that.ti.SET_DRAW_MOVE(that._x + that._xmouse, - that._y + that._ymouse); + that._y + that._ymouse, that.layerPicker.activeLayer); } } } Modified: branches/2.4.3/html/style/main.css =================================================================== --- branches/2.4.3/html/style/main.css 2012-09-13 12:37:49 UTC (rev 386) +++ branches/2.4.3/html/style/main.css 2012-09-14 02:01:59 UTC (rev 387) @@ -26,6 +26,8 @@ 1.8 27/06/12 Daniel Han From line 557 1.9 29/08/12 Daniel Han/Gavin Chan line 696 - scroller for edit player form & line 828 custom exit button + 13/09/2012 Daniel Removed prev style of Edit Media Page and is using overflow as slideshows are buggy. + 14/09/2012 Daniel - Added min-width in #masterpage so it doesn't mess up the layout. */ @@ -168,6 +170,7 @@ } /*Shaun Narayan (01/30/10) - Folowing rules apply to master page for consistency.*/ /* Mohammed Al-Timimi (9/06/2011) - Added bottom/top margins to allign the page correctly */ +/* Daniel Han (14/09/2012) - Added min-width so it doesn't mess up the layout. */ #masterpage { margin-left:10%; @@ -177,6 +180,7 @@ background-color : #FFFFFF; margin-top: 40px; margin-bottom: 40px; + min-width: 970px; } #header { Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/server.py =================================================================== --- branches/2.4.3/upstage/server.py 2012-09-13 12:37:49 UTC (rev 386) +++ branches/2.4.3/upstage/server.py 2012-09-14 02:01:59 UTC (rev 387) @@ -613,7 +613,10 @@ """change the style of drawing""" self.drawstyle = (colour, thickness, alpha) if self.drawlayer is not None: - self.stage.draw_style(self.drawlayer, colour, thickness, alpha) + if self.drawlayer == 4: + self.stage.draw_style(self.drawlayer, colour, thickness, alpha, self.avatar.ID) + else: + self.stage.draw_style(self.drawlayer, colour, thickness, alpha) def handle_DRAW_VIS(self, visible=None, layer=None, alpha=None): """alter the visibility of a layer""" @@ -621,7 +624,7 @@ def handle_DRAW_CLEAR(self, layer=None): """clear a layer of drawing""" - self.stage.draw_clear_layer(int(layer)) + self.stage.draw_clear_layer(int(layer), self.avatar.ID) def handle_DRAW_LAYER(self, layer=None): """User want's to use the specified layer""" Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-13 12:37:49 UTC (rev 386) +++ branches/2.4.3/upstage/stage.py 2012-09-14 02:01:59 UTC (rev 387) @@ -34,8 +34,12 @@ Modified by: Daniel Han 11/09/2012 - Added Stage Access Checking. Modified by: Daniel Han 12/09/2012 - Changed get_al_three method. -Modified by: Daniel Han 13/09/2012 - on handle_DRAW... it checks if it is avatar drawing. (layer 4) and if it is +Modified by: Daniel Han 13/09/2012 - on draw_...function it checks if it is avatar drawing. (layer 4) and if it is it sends attached avatar id. + +Modified by: Daniel Han 14/09/2012 - changed all avatar drawing related in regards of storing for "replay" method. + previously it was stored in an array for stage layer, but now have created dict object to store. + it's key is avatarID and values are array of actions. """ #std lib @@ -124,6 +128,7 @@ """[re-]initialises the stage """ self.wake() self.draw_stacks = [[] for x in range(config.DRAW_LAYERS)] + self.draw_avatar_stacks = {} self.draw_vis = [(True, 100) for x in range(config.DRAW_LAYERS)] self.draw_styles = [None] * config.DRAW_LAYERS self.chat = [] # chat strings build up here. @@ -847,11 +852,17 @@ self.log_chat(log_msg) # save up done chat) #----------------------------- Drawing Functions. --------------------- - def draw_clear_layer(self, layer): + def draw_clear_layer(self, layer, avid=None): """clear the recorded drawing for a layer""" try: - self.draw_stacks[layer] = [] - self.broadcast('DRAW_CLEAR', layer=layer) + if layer == 4: + if avid in self.draw_avatar_stacks: + self.draw_avatar_stacks[avid] = [] + + self.broadcast('DRAW_CLEAR', layer=layer, AV=avid) + else: + self.draw_stacks[layer] = [] + self.broadcast('DRAW_CLEAR', layer=layer) except IndexError, e: log.msg('got asked to clear bad layer %s' % layer) @@ -884,10 +895,18 @@ """clear the recorded drawing for a layer""" try: assert (action in ('DRAW_MOVE', 'DRAW_LINE')) - self.draw_stacks[layer].append((action, x, y)) + + if layer == 4: + #Daniel (14/09/2012) - Check if draw_avatar_stacks contains avid, if it does, add action. + if avid in self.draw_avatar_stacks: + self.draw_avatar_stacks[avid].append((action, x, y)) + else: + self.draw_avatar_stacks[avid] = [(action, x, y)] + self.broadcast(action, x=x, y=y, layer=layer, AV=avid) else: + self.draw_stacks[layer].append((action, x, y)) self.broadcast(action, x=x, y=y, layer=layer) except (IndexError, AssertionError): @@ -901,7 +920,7 @@ log.msg('vis action on bad layer %s' % layer) - def draw_style(self, layer, colour, thickness, alpha): + def draw_style(self, layer, colour, thickness, alpha, avid=None): """Set the style for the layer""" try: stack = self.draw_stacks[layer] @@ -911,21 +930,50 @@ if stack and stack[-1][0] == 'DRAW_STYLE': stack.pop() - stack.append(('DRAW_STYLE', colour, thickness, alpha)) - self.broadcast('DRAW_STYLE', colour=colour, + + + + if layer == 4: + #Daniel (14/09/2012) - Check if draw_avatar_stacks contains avid, if it does, add action. + if avid in self.draw_avatar_stacks: + self.draw_avatar_stacks[avid].append(('DRAW_STYLE', colour, thickness, alpha)) + else: + self.draw_avatar_stacks[avid] = [('DRAW_STYLE', colour, thickness, alpha)] + + self.broadcast('DRAW_STYLE', colour=colour, + thickness=thickness, alpha=alpha, layer=layer, AV=avid) + else: + stack.append(('DRAW_STYLE', colour, thickness, alpha)) + self.broadcast('DRAW_STYLE', colour=colour, thickness=thickness, alpha=alpha, layer=layer) + + + """ + Daniel Han - 14/09/2012 : Added if layer = 4, send AvatarID. + """ def draw_replay(self, socket): + print "DRAW REPLAY" for i in range(config.DRAW_LAYERS): vis, alpha = self.draw_vis[i] socket.send('DRAW_VIS', visible=vis, layer=i, alpha=alpha) - stack = self.draw_stacks[i] - for x in stack: - if x[0] in ('DRAW_MOVE', 'DRAW_LINE'): - socket.send(x[0], x=x[1], y=x[2], layer=i) - elif x[0] == 'DRAW_STYLE': - socket.send('DRAW_STYLE', colour=x[1], + + if i == 4: + for k in iter(self.draw_avatar_stacks): + for x in self.draw_avatar_stacks[k]: + if x[0] in ('DRAW_MOVE', 'DRAW_LINE'): + socket.send(x[0], x=x[1], y=x[2], layer=i, AV=k) + elif x[0] == 'DRAW_STYLE': + socket.send('DRAW_STYLE', colour=x[1], + thickness=x[2], alpha=x[3], layer=i, AV=k) + else: + stack = self.draw_stacks[i] + for x in stack: + if x[0] in ('DRAW_MOVE', 'DRAW_LINE'): + socket.send(x[0], x=x[1], y=x[2], layer=i) + elif x[0] == 'DRAW_STYLE': + socket.send('DRAW_STYLE', colour=x[1], thickness=x[2], alpha=x[3], layer=i) if socket.ID in self.player_sockets: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-14 04:32:06
|
Revision: 388 http://upstage.svn.sourceforge.net/upstage/?rev=388&view=rev Author: aut-upstage Date: 2012-09-14 04:32:00 +0000 (Fri, 14 Sep 2012) Log Message: ----------- - Daniel Avatar drawing fix on loading. still has issue with clear. Modified Paths: -------------- branches/2.4.3/client/src/Sender.as branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/client/src/model/ModelDrawing.as branches/2.4.3/client/src/thing/Avatar.as branches/2.4.3/client/src/view/DrawTools.as branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/server.py branches/2.4.3/upstage/stage.py Modified: branches/2.4.3/client/src/Sender.as =================================================================== --- branches/2.4.3/client/src/Sender.as 2012-09-14 02:01:59 UTC (rev 387) +++ branches/2.4.3/client/src/Sender.as 2012-09-14 04:32:00 UTC (rev 388) @@ -383,7 +383,7 @@ this.send('DRAW_MOVE', 'x', x, 'y', y); } - function DRAW_STYLE(thickness:Number, colour:Number, alpha:Number) + function DRAW_STYLE(thickness:Number, colour:Number, alpha:Number, layer:Number) { this.send('DRAW_STYLE', 'thickness', thickness, 'colour', colour, 'alpha', alpha); Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-14 02:01:59 UTC (rev 387) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-14 04:32:00 UTC (rev 388) @@ -461,9 +461,9 @@ this.sender.DRAW_MOVE(x, y); } - function SET_DRAW_STYLE(thickness:Number, colour:Number, alpha:Number, layer:Number) + function SET_DRAW_STYLE(thickness:Number, colour:Number, alpha:Number) { - this.sender.DRAW_STYLE(thickness, colour, alpha, layer); + this.sender.DRAW_STYLE(thickness, colour, alpha); } function SET_DRAW_VIS(layer:Number, alpha:Number, visible:Boolean) @@ -578,6 +578,7 @@ var clearDrawingMenuItem:ContextMenuItem = new ContextMenuItem("Clear Draw On Avatar", function(){ modelAv.SET_DRAW_CLEAR(4); + modelAv.setLastStyle(); }); @@ -588,6 +589,11 @@ av.menu = myMenu; } + function setLastStyle() + { + this.drawTools.setLastStyle(); + } + /* * Vibhu Patel 08/08/2011 - Used to hide a right click menu for a selected avatar. */ Modified: branches/2.4.3/client/src/model/ModelDrawing.as =================================================================== --- branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-14 02:01:59 UTC (rev 387) +++ branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-14 04:32:00 UTC (rev 388) @@ -66,7 +66,6 @@ { trace('drawing line on avatars: x: ' + x + ' y: ' + y); - avatar.drawable.lineTo(x , y); } } @@ -76,8 +75,7 @@ this.layers[layer].moveTo(x, y); else { - trace('drawing on avatar'); - + trace('DRAW_MOVE on avatars: x: ' + x + ' y: ' + y); avatar.drawable.moveTo(x, y); } } @@ -93,7 +91,9 @@ } else { + avatar.drawable.lineStyle(thickness, colour, alpha); + } //save the numbers for after a layer is cleared. this.lineStyles[layer] = [thickness, colour, alpha]; Modified: branches/2.4.3/client/src/thing/Avatar.as =================================================================== --- branches/2.4.3/client/src/thing/Avatar.as 2012-09-14 02:01:59 UTC (rev 387) +++ branches/2.4.3/client/src/thing/Avatar.as 2012-09-14 04:32:00 UTC (rev 388) @@ -70,7 +70,7 @@ // Daniel 13/09/2012 - For drawable avatar. public var drawable:MovieClip; - + private static var symbolName:String = "__Packages.thing.Avatar"; private static var symbolLinked:Boolean = Object.registerClass(symbolName, Avatar); @@ -491,6 +491,7 @@ return this.tf._visible; } + /** * @brief Constuctor, empty, but not removable. dumb actionscript. */ Modified: branches/2.4.3/client/src/view/DrawTools.as =================================================================== --- branches/2.4.3/client/src/view/DrawTools.as 2012-09-14 02:01:59 UTC (rev 387) +++ branches/2.4.3/client/src/view/DrawTools.as 2012-09-14 04:32:00 UTC (rev 388) @@ -226,8 +226,7 @@ this.lastSize != this.sizeSlider.value){ this.ti.SET_DRAW_STYLE(this.sizeSlider.value, - this.colourPicker.colour, this.alphaSlider.value, - this.layerPicker.activeLayer); + this.colourPicker.colour, this.alphaSlider.value); if (this.lastColour != this.colourPicker.colour){ this.colourPalette.tryColour(this.colourPicker.colour); @@ -238,6 +237,12 @@ this.lastSize = this.sizeSlider.value; } } + + function setLastStyle() + { + this.ti.SET_DRAW_STYLE(this.lastSize, + this.lastColour, this.lastAlpha); + } /*cueStyleResend -- make sure the style is going to be resent */ function cueStyleResend() Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/server.py =================================================================== --- branches/2.4.3/upstage/server.py 2012-09-14 02:01:59 UTC (rev 387) +++ branches/2.4.3/upstage/server.py 2012-09-14 04:32:00 UTC (rev 388) @@ -25,6 +25,9 @@ Modified by: Daniel Han 13/09/2012 - on handle_DRAW... it checks if it is avatar drawing. (layer 4) and if it is it sends attached avatar id. + +Modified by: Daniel Han 14/09/2012 on handle_loaded, added self.stage.draw_avatar_replay(self) so it draws avatar drawing "AFTER" it is fully loaded + Notes: """ @@ -565,8 +568,10 @@ #set the name visibility self.send('AVPROPERTIES', ID=av.ID, showName=av.show_name) self.send('AVLAYER', ID=av.ID, newLayer = av.layer) + + #load avatar drawings - Daniel (14/09/2012) + self.stage.draw_avatar_replay(self) - # Tell late clients about previous prop binds for prop in self.stage.get_prop_list(): if prop.holder is not None: Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-14 02:01:59 UTC (rev 387) +++ branches/2.4.3/upstage/stage.py 2012-09-14 04:32:00 UTC (rev 388) @@ -40,6 +40,7 @@ Modified by: Daniel Han 14/09/2012 - changed all avatar drawing related in regards of storing for "replay" method. previously it was stored in an array for stage layer, but now have created dict object to store. it's key is avatarID and values are array of actions. + added draw_avatar_replay() so it is possible to draw avatar drawing "AFTER" it is fully loaded """ #std lib @@ -858,7 +859,6 @@ if layer == 4: if avid in self.draw_avatar_stacks: self.draw_avatar_stacks[avid] = [] - self.broadcast('DRAW_CLEAR', layer=layer, AV=avid) else: self.draw_stacks[layer] = [] @@ -928,14 +928,16 @@ print "can't modify style of layer '%s'" % layer return - if stack and stack[-1][0] == 'DRAW_STYLE': - stack.pop() + if layer == 4: #Daniel (14/09/2012) - Check if draw_avatar_stacks contains avid, if it does, add action. if avid in self.draw_avatar_stacks: + if self.draw_avatar_stacks[avid][-1][0] == 'DRAW_STYLE': + self.draw_avatar_stacks[avid].pop() + self.draw_avatar_stacks[avid].append(('DRAW_STYLE', colour, thickness, alpha)) else: self.draw_avatar_stacks[avid] = [('DRAW_STYLE', colour, thickness, alpha)] @@ -943,42 +945,44 @@ self.broadcast('DRAW_STYLE', colour=colour, thickness=thickness, alpha=alpha, layer=layer, AV=avid) else: + if stack and stack[-1][0] == 'DRAW_STYLE': + stack.pop() + stack.append(('DRAW_STYLE', colour, thickness, alpha)) self.broadcast('DRAW_STYLE', colour=colour, thickness=thickness, alpha=alpha, layer=layer) - """ - Daniel Han - 14/09/2012 : Added if layer = 4, send AvatarID. - """ + def draw_replay(self, socket): - print "DRAW REPLAY" for i in range(config.DRAW_LAYERS): vis, alpha = self.draw_vis[i] socket.send('DRAW_VIS', visible=vis, layer=i, alpha=alpha) - - if i == 4: - for k in iter(self.draw_avatar_stacks): - for x in self.draw_avatar_stacks[k]: - if x[0] in ('DRAW_MOVE', 'DRAW_LINE'): - socket.send(x[0], x=x[1], y=x[2], layer=i, AV=k) - elif x[0] == 'DRAW_STYLE': - socket.send('DRAW_STYLE', colour=x[1], - thickness=x[2], alpha=x[3], layer=i, AV=k) - else: - stack = self.draw_stacks[i] - for x in stack: - if x[0] in ('DRAW_MOVE', 'DRAW_LINE'): - socket.send(x[0], x=x[1], y=x[2], layer=i) - elif x[0] == 'DRAW_STYLE': - socket.send('DRAW_STYLE', colour=x[1], - thickness=x[2], alpha=x[3], layer=i) + stack = self.draw_stacks[i] + for x in stack: + if x[0] in ('DRAW_MOVE', 'DRAW_LINE'): + socket.send(x[0], x=x[1], y=x[2], layer=i) + elif x[0] == 'DRAW_STYLE': + socket.send('DRAW_STYLE', colour=x[1], + thickness=x[2], alpha=x[3], layer=i) if socket.ID in self.player_sockets: self.draw_send_layer_state(socket) + """ + Daniel Han - 14/09/2012 : Added if layer = 4, send AvatarID. + """ + def draw_avatar_replay(self, socket): + for k in iter(self.draw_avatar_stacks): + for x in self.draw_avatar_stacks[k]: + if x[0] in ('DRAW_MOVE', 'DRAW_LINE'): + socket.send(x[0], x=x[1], y=x[2], layer=4, AV=k) + elif x[0] == 'DRAW_STYLE': + socket.send('DRAW_STYLE', colour=x[1], + thickness=x[2], alpha=x[3], layer=4, AV=k) + def broadcast_numbers(self): """Broadcast player, audience count to players""" p = len(self.player_sockets) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-14 15:57:31
|
Revision: 389 http://upstage.svn.sourceforge.net/upstage/?rev=389&view=rev Author: aut-upstage Date: 2012-09-14 15:57:24 +0000 (Fri, 14 Sep 2012) Log Message: ----------- - Daniel On Stage Avatar Rotation. at the moment, it does not stack up. so when new guest or player joins they won't see the rotated image. Modified Paths: -------------- branches/2.4.3/client/UpstageClient.as2proj branches/2.4.3/client/src/Sender.as branches/2.4.3/client/src/Transport.as branches/2.4.3/client/src/application.xml branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/client/src/thing/Avatar.as branches/2.4.3/client/src/util/Construct.as branches/2.4.3/config/templates/stage.xhtml branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/server.py branches/2.4.3/upstage/stage.py Modified: branches/2.4.3/client/UpstageClient.as2proj =================================================================== --- branches/2.4.3/client/UpstageClient.as2proj 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/client/UpstageClient.as2proj 2012-09-14 15:57:24 UTC (rev 389) @@ -8,7 +8,7 @@ <movie fps="5" /> <movie width="320" /> <movie height="200" /> - <movie version="8" /> + <movie version="9" /> <movie minorVersion="0" /> <movie platform="Flash Player" /> <movie background="#000000" /> Modified: branches/2.4.3/client/src/Sender.as =================================================================== --- branches/2.4.3/client/src/Sender.as 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/client/src/Sender.as 2012-09-14 15:57:24 UTC (rev 389) @@ -405,6 +405,10 @@ this.send('DRAW_LAYER', 'layer', layer); } + function ROTATE_AVATAR() + { + this.send('ROTATE_AVATAR'); + } /** * @brief Client finished loading images Modified: branches/2.4.3/client/src/Transport.as =================================================================== --- branches/2.4.3/client/src/Transport.as 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/client/src/Transport.as 2012-09-14 15:57:24 UTC (rev 389) @@ -918,6 +918,12 @@ /**-------------drawing tools ----------------**/ + function ROTATE_AVATAR(msg:Object) + { + var AVid:Number = Number(msg.AV); + this.modelAvatars.GET_ROTATE_AVATAR(AVid); + } + function DRAW_LINE(msg:Object) { var layer:Number = Number(msg.layer); var x_pos:Number = Number(msg.x); Modified: branches/2.4.3/client/src/application.xml =================================================================== --- branches/2.4.3/client/src/application.xml 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/client/src/application.xml 2012-09-14 15:57:24 UTC (rev 389) @@ -29,7 +29,7 @@ //////////////////////////////////////////////////////////////////////////////// --> -<movie width="320" height="200" framerate="25"> +<movie width="320" height="200" framerate="25" version="8"> <background color="#ffffff"/> <!-- Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-14 15:57:24 UTC (rev 389) @@ -238,6 +238,11 @@ // Messages sent from Views to server + function SET_ROTATE_AVATAR() + { + this.sender.ROTATE_AVATAR(); + } + //------------------------------------------------------------------------- // Messages from ActorButtons /** @@ -563,6 +568,8 @@ modelAv.renaming = false; } }); + + renameMenuItem.separatorBefore = true; /** @@ -581,10 +588,14 @@ modelAv.setLastStyle(); }); + var rotateAvatarMenuItem:ContextMenuItem = new ContextMenuItem("Rotate Avatar", function(){ + modelAv.SET_ROTATE_AVATAR(); + }); + drawAvatarMenuItem.separatorBefore = true; - myMenu.customItems.push(moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); + myMenu.customItems.push(rotateAvatarMenuItem, moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); av.menu = myMenu; } @@ -824,6 +835,15 @@ av.holdProp(prop); } + /** + * @author Daniel Han (15/09/2012) + * @param avID + * @brief Sets the rotation of avatar + */ + function GET_ROTATE_AVATAR(avID:Number) + { + avatars[avID].setRotation(90); + } //------------------------------------------------------------------------- // Utility functions Modified: branches/2.4.3/client/src/thing/Avatar.as =================================================================== --- branches/2.4.3/client/src/thing/Avatar.as 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/client/src/thing/Avatar.as 2012-09-14 15:57:24 UTC (rev 389) @@ -17,6 +17,11 @@ */ import Client; +import flash.display.BitmapData; +import flash.geom.Matrix; +import flash.geom.Point; +import flash.geom.Rectangle; +import flash.geom.Transform; import thing.Thing; import thing.Prop; import view.Bubble; @@ -68,6 +73,8 @@ private var nameY :Number; private var frameNumber :Number; + private var rotation:Number = 0; + private var scale:Number = 1; // Daniel 13/09/2012 - For drawable avatar. public var drawable:MovieClip; @@ -171,7 +178,8 @@ { trace('calculating size for ' + this); //Added by heath & vibhu 08/08/2011 - used to scale the avatar on stage - Construct.constrainSize(this.image, Client.AVATAR_MAX_WIDTH, Client.AVATAR_MAX_HEIGHT); + this.scale = Construct.constrainSize(this.image, Client.AVATAR_MAX_WIDTH, Client.AVATAR_MAX_HEIGHT); + var im :MovieClip = this.image; this.centreX = im._width * 0.5; this.centreY = im._height * 0.5; @@ -473,8 +481,31 @@ av.stopWalk(); } } + + /** + * @author Daniel Han (15/09/2012) + * @param angle + * @brief Rotation function which only rotates actual image not MovieClip object. + */ + function setRotation(angle:Number) + { + trace("ROTATING"); + + rotation = (rotation + angle) % 360; + var myMat:Matrix = new Matrix(); + + myMat.translate( -centreX / scale, -centreY / scale); + myMat.rotate((rotation / 180) * Math.PI); + myMat.translate((centreX / scale), (centreY / scale)); + myMat.scale(scale, scale); + + + image.transform.matrix = myMat; + } + + /** * @brief Is the avatar on stage */ Modified: branches/2.4.3/client/src/util/Construct.as =================================================================== --- branches/2.4.3/client/src/util/Construct.as 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/client/src/util/Construct.as 2012-09-14 15:57:24 UTC (rev 389) @@ -269,17 +269,20 @@ /** * @brief constrainSize, resizes downwards only, and maintain aspect ratio + * Modified by Daniel Han (15/09/2012) to return scale */ - static function constrainSize(mc: MovieClip, maxw: Number, maxh: Number):Void + static function constrainSize(mc: MovieClip, maxw: Number, maxh: Number):Number { // Do we need to scale var scale :Number = Math.min(maxw / mc._width, maxh / mc._height); if (scale < 1.0) - { - mc._width *= scale; - mc._height *= scale; - } + { + mc._width *= scale; + mc._height *= scale; + } + + return scale; } Modified: branches/2.4.3/config/templates/stage.xhtml =================================================================== --- branches/2.4.3/config/templates/stage.xhtml 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/config/templates/stage.xhtml 2012-09-14 15:57:24 UTC (rev 389) @@ -11,7 +11,7 @@ </div> <object width="100%%" height="100%%" scale="showAll" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" - codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" + codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" class="stageswf" > <param name="allowScriptAccess" value="sameDomain" /> Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/server.py =================================================================== --- branches/2.4.3/upstage/server.py 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/upstage/server.py 2012-09-14 15:57:24 UTC (rev 389) @@ -638,9 +638,11 @@ raise ValueError("bad number in handle_DRAW_LAYER! %s" % layer) self.stage.draw_pick_layer(self, layer) + + def handle_ROTATE_AVATAR(self): + self.stage.rotate_avatar(self.avatar.ID) - class SocketFactory(Factory): """Produces _UpstageSocket instances""" def __init__(self, data): Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-14 04:32:00 UTC (rev 388) +++ branches/2.4.3/upstage/stage.py 2012-09-14 15:57:24 UTC (rev 389) @@ -853,6 +853,10 @@ self.log_chat(log_msg) # save up done chat) #----------------------------- Drawing Functions. --------------------- + def rotate_avatar(self, avid=None): + self.broadcast('ROTATE_AVATAR', AV=avid); + + def draw_clear_layer(self, layer, avid=None): """clear the recorded drawing for a layer""" try: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-15 02:55:05
|
Revision: 390 http://upstage.svn.sourceforge.net/upstage/?rev=390&view=rev Author: aut-upstage Date: 2012-09-15 02:54:59 +0000 (Sat, 15 Sep 2012) Log Message: ----------- - Daniel Avatar drawing, Avatar rotation is fully implemented, just requires testing. Modified Paths: -------------- branches/2.4.3/client/src/Client.as branches/2.4.3/client/src/model/ModelDrawing.as branches/2.4.3/client/src/thing/Avatar.as branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/stage.py Modified: branches/2.4.3/client/src/Client.as =================================================================== --- branches/2.4.3/client/src/Client.as 2012-09-14 15:57:24 UTC (rev 389) +++ branches/2.4.3/client/src/Client.as 2012-09-15 02:54:59 UTC (rev 390) @@ -244,7 +244,7 @@ public static var UI_BUTTON_HEIGHT :Number = 8; public static var UI_BUTTON_SPACE_W :Number = 16; public static var UI_BUTTON_SPACE_H :Number = 9; - public static var UI_BUTTON_TEXT_SCALE :Number = 0.9; + public static var UI_BUTTON_TEXT_SCALE :Number = 0.7; //LK added 15/10/07 for audience applause button public static var APPLA_UI_BUTTON_POINTS :Array = [01,02, 01,01, 02,01, Modified: branches/2.4.3/client/src/model/ModelDrawing.as =================================================================== --- branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-14 15:57:24 UTC (rev 389) +++ branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-15 02:54:59 UTC (rev 390) @@ -106,20 +106,24 @@ this.layers[layer]._visible = visible; } - function GET_DRAW_CLEAR(layer:Number, avatar:Avatar){ + function GET_DRAW_CLEAR(layer:Number, avatar:Avatar) { + + var ls: Array = this.lineStyles[layer]; if (layer != 4) { this.layers[layer].clear(); //restore line style + + if (ls){ + this.layers[layer].lineStyle(ls[0], ls[1], ls[2]); + } } else { avatar.drawable.clear(); + avatar.drawable.lineStyle(ls[0], ls[1], ls[2]); } - var ls: Array = this.lineStyles[layer]; - if (ls){ - this.layers[layer].lineStyle(ls[0], ls[1], ls[2]); - } + } } Modified: branches/2.4.3/client/src/thing/Avatar.as =================================================================== --- branches/2.4.3/client/src/thing/Avatar.as 2012-09-14 15:57:24 UTC (rev 389) +++ branches/2.4.3/client/src/thing/Avatar.as 2012-09-15 02:54:59 UTC (rev 390) @@ -485,7 +485,7 @@ /** * @author Daniel Han (15/09/2012) * @param angle - * @brief Rotation function which only rotates actual image not MovieClip object. + * @brief Rotation function which only rotates actual images not MovieClip object. */ function setRotation(angle:Number) { @@ -502,7 +502,13 @@ image.transform.matrix = myMat; + + var drawMat:Matrix = new Matrix(); + drawMat.translate( -centreX, -centreY); + drawMat.rotate((rotation / 180) * Math.PI); + drawMat.translate((centreX), (centreY)); + drawable.transform.matrix = drawMat; } Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-14 15:57:24 UTC (rev 389) +++ branches/2.4.3/upstage/stage.py 2012-09-15 02:54:59 UTC (rev 390) @@ -41,6 +41,10 @@ previously it was stored in an array for stage layer, but now have created dict object to store. it's key is avatarID and values are array of actions. added draw_avatar_replay() so it is possible to draw avatar drawing "AFTER" it is fully loaded + +Modified by: Daniel Han 15/09/2012 - ROTATE_AVATAR is added. + - When avatar rotation is called, it is stored in draw_avatar_stacks for replay. + """ #std lib @@ -854,7 +858,15 @@ #----------------------------- Drawing Functions. --------------------- def rotate_avatar(self, avid=None): - self.broadcast('ROTATE_AVATAR', AV=avid); + if avid is None: + log.msg('Avatar ID cannot be None type') + else: + if avid in self.draw_avatar_stacks: + self.draw_avatar_stacks[avid].append(('ROTATE_AVATAR', avid)) + else: + self.draw_avatar_stacks[avid] = [('ROTATE_AVATAR', avid)] + + self.broadcast('ROTATE_AVATAR', AV=avid); def draw_clear_layer(self, layer, avid=None): @@ -939,8 +951,7 @@ if layer == 4: #Daniel (14/09/2012) - Check if draw_avatar_stacks contains avid, if it does, add action. if avid in self.draw_avatar_stacks: - if self.draw_avatar_stacks[avid][-1][0] == 'DRAW_STYLE': - self.draw_avatar_stacks[avid].pop() + self.draw_avatar_stacks[avid].append(('DRAW_STYLE', colour, thickness, alpha)) else: @@ -986,6 +997,8 @@ elif x[0] == 'DRAW_STYLE': socket.send('DRAW_STYLE', colour=x[1], thickness=x[2], alpha=x[3], layer=4, AV=k) + elif x[0] == 'ROTATE_AVATAR': + socket.send('ROTATE_AVATAR', AV=x[1]) def broadcast_numbers(self): """Broadcast player, audience count to players""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-15 11:29:33
|
Revision: 391 http://upstage.svn.sourceforge.net/upstage/?rev=391&view=rev Author: aut-upstage Date: 2012-09-15 11:29:27 +0000 (Sat, 15 Sep 2012) Log Message: ----------- - Daniel When Rotate then Draw, there was a defect which wasn't drawn in proper location. It is now fixed. Rotations are stored in "draw" stack which means when user clears drawing on avatar, rotation will be removed as well. this should be saved somewhere else later with "resize" avatar. On stage list, user can just click the row rather than clicking the name. Modified Paths: -------------- branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/client/src/model/ModelDrawing.as branches/2.4.3/client/src/thing/Avatar.as branches/2.4.3/config/templates/stage_item_set.inc branches/2.4.3/html/masterpage.js branches/2.4.3/html/style/main.css branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-15 02:54:59 UTC (rev 390) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-15 11:29:27 UTC (rev 391) @@ -17,6 +17,7 @@ */ import Client; +import flash.geom.Point; //import util.Construct; import Sender; import thing.Avatar; @@ -446,24 +447,26 @@ function SET_DRAW_LINE(x:Number, y:Number, layer:Number) { + var dPoint:Point = new Point(x, y); if (layer == 4) { var av: Avatar = this.avatar; - x -= av._x; - y -= av._y; + av.drawable.globalToLocal(dPoint); + } - this.sender.DRAW_LINE(x, y); + this.sender.DRAW_LINE(dPoint.x, dPoint.y); } function SET_DRAW_MOVE(x:Number, y:Number, layer:Number) { + var dPoint:Point = new Point(x, y); if (layer == 4) { var av: Avatar = this.avatar; - x -= av._x; - y -= av._y; + av.drawable.globalToLocal(dPoint); } - this.sender.DRAW_MOVE(x, y); + + this.sender.DRAW_MOVE(dPoint.x, dPoint.y); } function SET_DRAW_STYLE(thickness:Number, colour:Number, alpha:Number) Modified: branches/2.4.3/client/src/model/ModelDrawing.as =================================================================== --- branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-15 02:54:59 UTC (rev 390) +++ branches/2.4.3/client/src/model/ModelDrawing.as 2012-09-15 11:29:27 UTC (rev 391) @@ -65,6 +65,7 @@ else { + trace('drawing line on avatars: x: ' + x + ' y: ' + y); avatar.drawable.lineTo(x , y); } Modified: branches/2.4.3/client/src/thing/Avatar.as =================================================================== --- branches/2.4.3/client/src/thing/Avatar.as 2012-09-15 02:54:59 UTC (rev 390) +++ branches/2.4.3/client/src/thing/Avatar.as 2012-09-15 11:29:27 UTC (rev 391) @@ -485,33 +485,34 @@ /** * @author Daniel Han (15/09/2012) * @param angle - * @brief Rotation function which only rotates actual images not MovieClip object. + * @brief Rotation function which only rotates actual images not Avatar object. */ function setRotation(angle:Number) { trace("ROTATING"); + rotation = (rotation + angle) % 360; - rotation = (rotation + angle) % 360; + // Rotate Image var myMat:Matrix = new Matrix(); - myMat.translate( -centreX / scale, -centreY / scale); myMat.rotate((rotation / 180) * Math.PI); myMat.translate((centreX / scale), (centreY / scale)); myMat.scale(scale, scale); - - image.transform.matrix = myMat; + // Rotate Drawing var drawMat:Matrix = new Matrix(); + drawMat.identity(); drawMat.translate( -centreX, -centreY); drawMat.rotate((rotation / 180) * Math.PI); drawMat.translate((centreX), (centreY)); drawable.transform.matrix = drawMat; + } + - /** * @brief Is the avatar on stage */ Modified: branches/2.4.3/config/templates/stage_item_set.inc =================================================================== --- branches/2.4.3/config/templates/stage_item_set.inc 2012-09-15 02:54:59 UTC (rev 390) +++ branches/2.4.3/config/templates/stage_item_set.inc 2012-09-15 11:29:27 UTC (rev 391) @@ -1,4 +1,4 @@ - <tr> + <tr onclick="openStage('%(ID)s')" class="stageRow"> <td><a href="/stages/%(ID)s">%(name)s</a></td> <td>%(pcount)s</td> <td>%(acount)s</td> Modified: branches/2.4.3/html/masterpage.js =================================================================== --- branches/2.4.3/html/masterpage.js 2012-09-15 02:54:59 UTC (rev 390) +++ branches/2.4.3/html/masterpage.js 2012-09-15 11:29:27 UTC (rev 391) @@ -292,6 +292,11 @@ window.location = '/signup'; } +function openStage(id) +{ + window.location = '/stages/' + id; +} + function login() { if(document.hidden_form.can_signup.value=='true') Modified: branches/2.4.3/html/style/main.css =================================================================== --- branches/2.4.3/html/style/main.css 2012-09-15 02:54:59 UTC (rev 390) +++ branches/2.4.3/html/style/main.css 2012-09-15 11:29:27 UTC (rev 391) @@ -762,9 +762,10 @@ width: 50%; } -.stage_list tr:hover +.stage_list .stageRow:hover { background-color: #eee; + cursor: pointer; } .stage_list td Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-15 12:01:26
|
Revision: 393 http://upstage.svn.sourceforge.net/upstage/?rev=393&view=rev Author: aut-upstage Date: 2012-09-15 12:01:20 +0000 (Sat, 15 Sep 2012) Log Message: ----------- - Daniel 2.4.3 - editable page fix Modified Paths: -------------- branches/2.4.3/config/templates/edit.xhtml branches/2.4.3/html/style/main.css Modified: branches/2.4.3/config/templates/edit.xhtml =================================================================== --- branches/2.4.3/config/templates/edit.xhtml 2012-09-15 11:58:23 UTC (rev 392) +++ branches/2.4.3/config/templates/edit.xhtml 2012-09-15 12:01:20 UTC (rev 393) @@ -23,7 +23,7 @@ } CKEDITOR.replace( 'editor' , { - extraPlugins : 'devtools', + on:{ instanceReady: function(e) {resizeEditor();} } Modified: branches/2.4.3/html/style/main.css =================================================================== --- branches/2.4.3/html/style/main.css 2012-09-15 11:58:23 UTC (rev 392) +++ branches/2.4.3/html/style/main.css 2012-09-15 12:01:20 UTC (rev 393) @@ -26,6 +26,8 @@ 1.8 27/06/12 Daniel Han From line 557 1.9 29/08/12 Daniel Han/Gavin Chan line 696 - scroller for edit player form & line 828 custom exit button + + 15/09/12 Daniel Han - Added #workshopnav infront of all ul/li 13/09/2012 Daniel Removed prev style of Edit Media Page and is using overflow as slideshows are buggy. 14/09/2012 Daniel - Added min-width in #masterpage so it doesn't mess up the layout. */ @@ -306,28 +308,28 @@ z-index:1; } /*Shaun Narayan (02/04/10) - Workshop nav*/ -ul +#workshopnav ul { list-style-type:none; padding:0px; margin:0px; } -li +#workshopnav li { display:inline; } -li a:link +#workshopnav li a:link { text-decoration:none; padding-right:8px; } -li a:active +#workshopnav li a:active { color:#FFFFFF; background-color:#000000; text-align:center; } -li a:hover +#workshopnav li a:hover { background-color:#7A991A; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-16 08:35:02
|
Revision: 396 http://upstage.svn.sourceforge.net/upstage/?rev=396&view=rev Author: aut-upstage Date: 2012-09-16 08:34:55 +0000 (Sun, 16 Sep 2012) Log Message: ----------- - Daniel Gavin 2.4.3 merge with 2.4.2 on Media Edit/Upload voice test. Modified Paths: -------------- branches/2.4.3/config/templates/master_a.inc branches/2.4.3/config/templates/mediaupload.xhtml branches/2.4.3/html/mediaedit.js branches/2.4.3/html/mediaupload.js branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/html/user.js Added Paths: ----------- branches/2.4.3/html/jwplayer.js branches/2.4.3/html/player.swf Modified: branches/2.4.3/config/templates/master_a.inc =================================================================== --- branches/2.4.3/config/templates/master_a.inc 2012-09-16 08:05:28 UTC (rev 395) +++ branches/2.4.3/config/templates/master_a.inc 2012-09-16 08:34:55 UTC (rev 396) @@ -16,6 +16,7 @@ <script language="javascript" type="text/javascript" src="/mediaedit.js"></script> <script language="javascript" type="text/javascript" src="/user.js"></script> <script language="javascript" type="text/javascript" src="/md5.js" ></script> +<script language="javascript" type="text/javascript" src="/jwplayer.js"></script> </head> Modified: branches/2.4.3/config/templates/mediaupload.xhtml =================================================================== --- branches/2.4.3/config/templates/mediaupload.xhtml 2012-09-16 08:05:28 UTC (rev 395) +++ branches/2.4.3/config/templates/mediaupload.xhtml 2012-09-16 08:34:55 UTC (rev 396) @@ -41,8 +41,8 @@ <hr /> <div id="muLeftContent" style="display: none;"> <div id=leftHeading></div> -<div id=voicediv></div> + <div id="avatarBits" style="display: none;"> <!-- <div id="avatarBits" style="display: none:">--> <!--<form name="voiceform" method="post"> <!-- target="popup" onsubmit="testVoice(popup);" > @@ -65,11 +65,16 @@ </select> </p> <p> - <input type="text" name="text" id="text" maxlength="40" value="This is a text to voice test"/> - <button onclick="voiceTest(); return shallContinue();">Test voice</button> + <input type="text" name="text" id="text" maxlength="40" value="This is a text to voice test"/> + <input type="button" onclick="voiceTest(); return false;" value="Test Voice" /> + + <tr> + <td colspan="2"> + <div id="voicediv"></div> + </td> + </tr> </p> - - + <p> <label id="numframe">Number of frames: </label> <select name="avframecount" size="1" id="avframecount" onchange="displayFields('avframecount', 'av');"> Added: branches/2.4.3/html/jwplayer.js =================================================================== --- branches/2.4.3/html/jwplayer.js (rev 0) +++ branches/2.4.3/html/jwplayer.js 2012-09-16 08:34:55 UTC (rev 396) @@ -0,0 +1 @@ @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-17 05:17:31
|
Revision: 400 http://upstage.svn.sourceforge.net/upstage/?rev=400&view=rev Author: aut-upstage Date: 2012-09-17 05:17:25 +0000 (Mon, 17 Sep 2012) Log Message: ----------- - Daniel 2.4.3 Added Splash screen for "loading" and "splash message" Modified Paths: -------------- branches/2.4.3/client/src/Transport.as branches/2.4.3/config/templates/edit.xhtml branches/2.4.3/config/templates/mediaedit.xhtml branches/2.4.3/config/templates/stage.xhtml branches/2.4.3/html/mediaedit.js branches/2.4.3/html/style/main.css branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/pages.py Added Paths: ----------- branches/2.4.3/html/stage.js branches/2.4.3/html/style/loading.gif Modified: branches/2.4.3/client/src/Transport.as =================================================================== --- branches/2.4.3/client/src/Transport.as 2012-09-17 04:20:12 UTC (rev 399) +++ branches/2.4.3/client/src/Transport.as 2012-09-17 05:17:25 UTC (rev 400) @@ -18,6 +18,7 @@ import Auth; import Client; +import flash.external.ExternalInterface; import Sender; import util.Construct; import model.ModelChat; @@ -855,6 +856,8 @@ */ private function PAGE_COLOUR(col: Object) :Void { + + this.stage.beginFill(col.bgcolour, 100); this.stage.moveTo(0, 0); this.stage.lineTo(this.stage._width, 0); @@ -862,6 +865,7 @@ this.stage.lineTo(0, this.stage._height); this.stage.lineTo(0, 0); this.stage.endFill(); + } /** @@ -913,6 +917,7 @@ this.modelSplashScreen.GET_CONFIRM_LOADED(); this.modelChat.GET_CONFIRM_LOADED(); trace('Server Confirmed ready'); + ExternalInterface.call("stage_loaded()"); } Modified: branches/2.4.3/config/templates/edit.xhtml =================================================================== --- branches/2.4.3/config/templates/edit.xhtml 2012-09-17 04:20:12 UTC (rev 399) +++ branches/2.4.3/config/templates/edit.xhtml 2012-09-17 05:17:25 UTC (rev 400) @@ -23,7 +23,6 @@ } CKEDITOR.replace( 'editor' , { - on:{ instanceReady: function(e) {resizeEditor();} } Modified: branches/2.4.3/config/templates/mediaedit.xhtml =================================================================== --- branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-17 04:20:12 UTC (rev 399) +++ branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-17 05:17:25 UTC (rev 400) @@ -84,14 +84,14 @@ <h1>Media info</h1> <table> <tr> - <td> - <div id="mediaimagediv" style="width:45%; margin-top: 20px; border: 2px; z-index:0"> + <td style="display: %(attr:mediaDisplay)s"> + <div id="mediaimagediv" style="z-index:0;"> <!include swf.inc> </div> </td> <td width="20px"></td> <td> - <div id="mediainformationdiv" style="width:45%;dispaly:block;"> + <div id="mediainformationdiv" style="width:45%;display:block;"> <table height="100px" style="width:100%" id="editable_info"> %(editable_info)s </table> Modified: branches/2.4.3/config/templates/stage.xhtml =================================================================== --- branches/2.4.3/config/templates/stage.xhtml 2012-09-17 04:20:12 UTC (rev 399) +++ branches/2.4.3/config/templates/stage.xhtml 2012-09-17 05:17:25 UTC (rev 400) @@ -1,32 +1,46 @@ <html> <head> <title>%(stagename)s</title> + <link rel="stylesheet" type="text/css" href="/style/main.css" /> +<script language="javascript" type="text/javascript" src="/stage.js"></script> </head> <body class="full"> -<div class="stagePopUp"> - Stage Message +<div id="stagePopUp"> + <div class="loadingBox"> + <h2> %(stagename)s </h2> + + <p style="font-size: 12px"> + %(stage_message)s + </p> + + + <img src="/style/loading.gif" /> + <p> + Loading... + </p> + </div> + </div> -<object width="100%%" height="100%%" scale="showAll" - classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" - codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" - class="stageswf" - > - <param name="allowScriptAccess" value="sameDomain" /> - <param name="movie" value="/swf/client.swf?%(vars)s" /> - <param name="quality" value="high" /> - <param name="bgcolor" value="#ffffff" /> - <param name="wmode" value="opaque" /> - <embed src="/swf/client.swf?%(vars)s" - width="100%%" height="100%%" scale="showAll" - type="application/x-shockwave-flash" - allowScriptAccess="sameDomain" - pluginspage="http://www.macromedia.com/go/getflashplayer" - wmode="opaque" - /> -</object> - +<div style="background-color:%(bgcolor)s"> + <object width="100%%" height="100%%" scale="showAll" + classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" + codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" + > + <param name="allowScriptAccess" value="sameDomain" /> + <param name="movie" value="/swf/client.swf?%(vars)s" /> + <param name="quality" value="high" /> + <param name="wmode" value="transparent" /> + <embed src="/swf/client.swf?%(vars)s" + width="100%%" height="100%%" scale="showAll" + type="application/x-shockwave-flash" + allowScriptAccess="sameDomain" + pluginspage="http://www.macromedia.com/go/getflashplayer" + wmode="transparent" + /> + </object> +</div> </body> </html> Modified: branches/2.4.3/html/mediaedit.js =================================================================== --- branches/2.4.3/html/mediaedit.js 2012-09-17 04:20:12 UTC (rev 399) +++ branches/2.4.3/html/mediaedit.js 2012-09-17 05:17:25 UTC (rev 400) @@ -632,13 +632,17 @@ function redirect_submit(action) { actionlocation = action + '?voice='+ document.rupert.voice.value + '&text=' + document.rupert.text.value; - // document.getElementById("speech").innerHTML="<embed src='"+actionlocation+"' type='audio/mpeg' autostart=true loop=false height='70'>"; - jwplayer("speech").setup({ + playmp3(actionlocation, "speech"); +} + +function playmp3(action, player) +{ + jwplayer(player).setup({ flashplayer: "/player.swf", - file: actionlocation, + file: action, height: 70, }); - jwplayer("speech").play(); + jwplayer(player).play(); } /** Added: branches/2.4.3/html/stage.js =================================================================== --- branches/2.4.3/html/stage.js (rev 0) +++ branches/2.4.3/html/stage.js 2012-09-17 05:17:25 UTC (rev 400) @@ -0,0 +1,20 @@ +/** + * Functions for Stage page. + * + * @author Daniel Han. + * @history 17/09/2012 Initial version created. + * @note + * @version 0.1 + **/ + + function stage_loaded() + { + setOpacity(0); + + } + + function setOpacity(opacity) + { + document.getElementById('stagePopUp').style.opacity = 0; + document.getElementById('stagePopUp').style.display = 'none'; + } \ No newline at end of file Added: branches/2.4.3/html/style/loading.gif =================================================================== (Binary files differ) Property changes on: branches/2.4.3/html/style/loading.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: branches/2.4.3/html/style/main.css =================================================================== --- branches/2.4.3/html/style/main.css 2012-09-17 04:20:12 UTC (rev 399) +++ branches/2.4.3/html/style/main.css 2012-09-17 05:17:25 UTC (rev 400) @@ -719,18 +719,7 @@ background-color: #EEE; } -.stagePopUp -{ - display: none; - padding: 15px; - box-shadow: #AAA 1px 1px 10px; - border-radius: 5px; - border: #888 2px solid; - top: 655px; - background-color: #EEE; -} - .edit_player input[type="button"]:hover { background: #EEE; border: 1px solid #CCC; @@ -904,3 +893,37 @@ left: 0px; z-index: 9998; } + +#stagePopUp +{ + display: block; + padding:0px; + margin:0px; + position: fixed; + height: 100%; + width: 100%; + background-color: #6a9; + + top: 0px; + left: 0px; + z-index: 9998; + + opacity: 1; +} + + +.loadingBox +{ + position: absolute; + margin-left: 50%; + left: -150px; + background-color: #fff; + color: #000; + border-radius: 20px; + border: #eee 2px inset; + width: 300px; + text-align: center; + margin-top: 40%; + padding: 20px; + +} Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/pages.py =================================================================== --- branches/2.4.3/upstage/pages.py 2012-09-17 04:20:12 UTC (rev 399) +++ branches/2.4.3/upstage/pages.py 2012-09-17 05:17:25 UTC (rev 400) @@ -74,6 +74,8 @@ Modified by: Daniel 11/09/2012 - Added Non-Admin Page, Stages Edit mode. (editing page for guest-player) Modified by: Daniel 12/09/2012 - modified stage edit so it does not use "remove_al_three" method Modified by: Daniel 13/09/2012 - removed unnecessary <a> links on MediaEditpage. replaced with onclick call on table. +Modified by: Daniel 17/09/2012 - Added bgcolor and stage_message on stage page to display. + """ #standard lib @@ -885,6 +887,7 @@ stage = '' media = '' postback = '' + mediaDisplay = 'block' def __init__(self, player, collection): AdminBase.__init__(self, player, collection) @@ -1115,7 +1118,7 @@ self.selectedMedia = self.collection.avatars.get(self.medianame) selectList_html = self.get_stage_info(self.mediatype, self.medianame) html_editable_info = '<tr><td><b>Name:</b></td>' - html_editable_info += '<td><input name="name" type="text" value="%s" class="mediafield"/></td></tr>' % self.selectedMedia.name + html_editable_info += '<td><input name="name" type="text" value="%s" class="mediafield" id = "name"/></td></tr>' % self.selectedMedia.name html_editable_info += '<tr><td><b>Voice:</b></td><td><select name="voice" class="mediafield"><option value="">--select one--</option> %s </select></td></tr> \ <tr><td><input type="button" name="test" value="Test Voice"onclick="redirect_submit(\'/admin/test.mp3\'); return false" /></td>\ <td><input type="text" name="text" value="This is what i will say if you ask for a test" class="mediafield" /></td> \ @@ -1143,8 +1146,8 @@ #Modified by: Heath Behrens - switched the values in %( , ) because the first one should be type. html_editable_info = '<tr><td><b>Name:</b></td> <td colspan="2"><input name="name" type="text" value="%s" class="mediafield" /></td></tr>' % self.selectedMedia.name # Heath / Vibhu (01/09/2011) - Added code to embedd a media player within the media edit page - html_editable_info += '<tr><td><b>Audio Type:</b></td><td><input id="audio_type" name="audio_type" type="hidden" readonly="readonly" value="%s" /></td><td><select id="audioTypeSelect" onclick="javascript:changeAudioType();" onchange="javascript:changeAudioType();" onkeypress="javascript:changeAudioType();" class="mediafield"><option value="music">Music</option><option value="sfx">Sound Effects</option><select></td></tr>\ - <tr><td colspan="3"><embed type="audio/mpeg" src="/media/audio/%s" width="300" height="70" autostart="false" loop="false"></embed></td></tr>' %(self.selectedMedia.medium, self.medianame) + html_editable_info += '<tr><td><b>Audio Type:</b></td><td><input id="audio_type" name="audio_type" type="hidden" readonly="readonly" value="%s" /></td><td><select id="audioTypeSelect" onclick="javascript:changeAudioType();" onchange="javascript:changeAudioType();" onkeypress="javascript:changeAudioType();" class="mediafield"><option value="music">Music</option><option value="sfx">Sound Effects</option><select></td></tr><tr><td><input type="button" value="Test Audio" onclick="playmp3(\'/media/audio/%s\', \'audioplayer\');"/></td></tr>\ + <tr><td colspan="3"><div id="audioplayer"></div> </td></tr>' %(self.selectedMedia.medium, self.medianame) html_editable_info += '<tr> \ <td colspan="3"> \ <table> %s </table> \ @@ -1192,8 +1195,10 @@ self.audio_type = request.args.get('audio_type',[''])[0] if self.audio_type == 'music': self.url = '/media/thumb/music.jpg' + self.mediaDisplay = 'none' elif self.audio_type == 'sfx': self.url = '/media/thumb/sfx.jpg' + self.mediaDisplay = 'none' self.audio_type = '' log.msg("URL = %s" % self.url) except: @@ -1665,7 +1670,12 @@ #Shaun Narayan (02/16/10) - Removed reference to URLEncode to build the URL as it input ampersands without escaping. vars = 'stageID=%s&policyport=%d&mode=%s&swfport=%d' %(stage.ID, config.POLICY_FILE_PORT, mode, config.SWF_PORT) - self.html = html % {'stagename': stage.name, 'vars': vars} + #Daniel Han (17/09/2012) - Added bgcolor and stage_message for page to display. + self.html = html % {'stagename': stage.name, + 'vars': vars, + 'bgcolor': stage.pageBgColour.replace('0x','#'), + 'stage_message': stage.splash_message + } self.player = player self.stage = stage print "init Stage: %s" % self.player.name This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-17 07:40:46
|
Revision: 401 http://upstage.svn.sourceforge.net/upstage/?rev=401&view=rev Author: aut-upstage Date: 2012-09-17 07:40:39 +0000 (Mon, 17 Sep 2012) Log Message: ----------- - Daniel 2.4.3 Fading out Stage description. Modified Paths: -------------- branches/2.4.3/config/templates/stage.xhtml branches/2.4.3/config/templates/stages_editable.inc branches/2.4.3/html/stage.js branches/2.4.3/html/style/main.css Modified: branches/2.4.3/config/templates/stage.xhtml =================================================================== --- branches/2.4.3/config/templates/stage.xhtml 2012-09-17 05:17:25 UTC (rev 400) +++ branches/2.4.3/config/templates/stage.xhtml 2012-09-17 07:40:39 UTC (rev 401) @@ -7,7 +7,7 @@ </head> -<body class="full"> +<body class="full" onload="onStageLoad()"> <div id="stagePopUp"> <div class="loadingBox"> <h2> %(stagename)s </h2> Modified: branches/2.4.3/config/templates/stages_editable.inc =================================================================== --- branches/2.4.3/config/templates/stages_editable.inc 2012-09-17 05:17:25 UTC (rev 400) +++ branches/2.4.3/config/templates/stages_editable.inc 2012-09-17 07:40:39 UTC (rev 401) @@ -1,4 +1,12 @@ <h1> - UpStage Stage List</h1> + <u><strong><span style="color:#00ff00;">UpStage </span><span style="color:#006400;">Stage </span><span style="color:#ff0000;">List</span></strong></u></h1> +<ul> + <li> + What the</li> + <li> + Why?</li> + <li> + Test</li> +</ul> <p> The following stages are viewable on this UpStage server:</p> Modified: branches/2.4.3/html/stage.js =================================================================== --- branches/2.4.3/html/stage.js 2012-09-17 05:17:25 UTC (rev 400) +++ branches/2.4.3/html/stage.js 2012-09-17 07:40:39 UTC (rev 401) @@ -4,17 +4,36 @@ * @author Daniel Han. * @history 17/09/2012 Initial version created. * @note + onStageLoad() - called by <body> tag pageload. initializes opacity to 1 + stage_loaded() - called by the stage (swf). + setOpacity() - called by stage_loaded. sets opacity of a popup div by 0.05 every 10 millisec. + * @version 0.1 **/ + function onStageLoad() + { + document.getElementById('stagePopUp').style.opacity = 1; + } + + function stage_loaded() { - setOpacity(0); - + setTimeout(setOpacity, 10); } - function setOpacity(opacity) + + function setOpacity() { - document.getElementById('stagePopUp').style.opacity = 0; - document.getElementById('stagePopUp').style.display = 'none'; + var popUpStyle = document.getElementById('stagePopUp').style; + if(popUpStyle.opacity >= 0.05) + { + popUpStyle.opacity -= 0.05; + setTimeout(setOpacity, 10); + } + else + { + popUpStyle.opacity = 0; + popUpStyle.display = 'none'; + } } \ No newline at end of file Modified: branches/2.4.3/html/style/main.css =================================================================== --- branches/2.4.3/html/style/main.css 2012-09-17 05:17:25 UTC (rev 400) +++ branches/2.4.3/html/style/main.css 2012-09-17 07:40:39 UTC (rev 401) @@ -907,8 +907,6 @@ top: 0px; left: 0px; z-index: 9998; - - opacity: 1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-17 23:49:14
|
Revision: 403 http://upstage.svn.sourceforge.net/upstage/?rev=403&view=rev Author: aut-upstage Date: 2012-09-17 23:49:08 +0000 (Mon, 17 Sep 2012) Log Message: ----------- - Daniel 2.4.3 merged from 2.4.2 Modified Paths: -------------- branches/2.4.3/config/templates/stageedit.xhtml branches/2.4.3/html/stageedit.js Added Paths: ----------- branches/2.4.3/html/style/radioNonSelect.jpg branches/2.4.3/html/style/radioselect.jpg Modified: branches/2.4.3/config/templates/stageedit.xhtml =================================================================== --- branches/2.4.3/config/templates/stageedit.xhtml 2012-09-17 07:42:56 UTC (rev 402) +++ branches/2.4.3/config/templates/stageedit.xhtml 2012-09-17 23:49:08 UTC (rev 403) @@ -49,13 +49,19 @@ <input type="hidden" name="displayaccess" value="%(display_access)s"></input> <div id="editStageColor"> + <h1>Debug Message</h1> + <input type="checkbox" id="debug" name="debug" onclick="if (this.checked) {debugChecked()}else{debugUnChecked()}"/> + Print debug messages on the backdrop? + <br /> <br /> <h1>Background Color</h1> <table style="padding:5px"> <tr> - <th style="width:72px"> <a href='javascript:selectColoring("Prop");'><img id="propIm" alt="" src="/style/tick.jpg" width="20" height="20" /> Props </a> </th> - <th style="width:72px"> <a href='javascript:selectColoring("Chat");'><img id="chatIm" alt="" src="/style/cross.jpg" width="20" height="20" /> Chat </a> </th> - <th style="width:72px"> <a href='javascript:selectColoring("Tools");'><img id="toolsIm" alt="" src="/style/cross.jpg" width="20" height="20" /> Toolbar </a> </th> - <th style="width:72px"> <a href='javascript:selectColoring("Page");'><img id="pageIm" alt="" src="/style/cross.jpg" width="20" height="20" /> Page </a> </th> + <th style="width:80px"> <a href='javascript:selectColoring("Prop");'><img id="propIm" alt="" src="/style/radioSelect.jpg" width="15" height="15" /> Props & Backdrops </a> </th> + <th style="width:80px"> <a href='javascript:selectColoring("Chat");'><img id="chatIm" alt="" src="/style/radioNonSelect.jpg" width="15" height="15" /> Chat Window </a> + </th> + <th style="width:80px"> <a href='javascript:selectColoring("Tools");'><img id="toolsIm" alt="" src="/style/radioNonSelect.jpg" width="15" height="15" /> Tool Palette </a> + </th> + <th style="width:80px"> <a href='javascript:selectColoring("Page");'><img id="pageIm" alt="" src="/style/radioNonSelect.jpg" width="15" height="15" /> Stage Background </a> </th> </tr> <tr> <td id="colProp" style="border:black 1px solid;"> <input type="hidden" name="colourNumProp" id="colourNumProp" maxlength="8" size="8" class="bgPropBgColour" value="" /> </td> @@ -117,8 +123,6 @@ </tr> <tr> <td> - <input type="checkbox" id="debug" name="debug" onclick="if (this.checked) {debugChecked()}else{debugUnChecked()}"/> - Print debug messages on the backdrop? <input type="hidden" name="debugTextMsg" id="debugTextMsg" class="debugMsg" value="%(debugMessages)s" /> <input type="hidden" name="colors" id="colorvals" value="%(colours)s"></input> </td> Modified: branches/2.4.3/html/stageedit.js =================================================================== --- branches/2.4.3/html/stageedit.js 2012-09-17 07:42:56 UTC (rev 402) +++ branches/2.4.3/html/stageedit.js 2012-09-17 23:49:08 UTC (rev 403) @@ -153,33 +153,32 @@ // 09/08/2011 Vibhu Patel - Changed from radio buttons to images. if(select == "Prop") { - document.getElementById("propIm").src = "/style/tick.jpg"; - document.getElementById("chatIm").src = "/style/cross.jpg"; - document.getElementById("toolsIm").src = "/style/cross.jpg"; - document.getElementById("pageIm").src = "/style/cross.jpg"; + document.getElementById("propIm").src = "/style/radioSelect.jpg"; + document.getElementById("chatIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("toolsIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("pageIm").src = "/style/radioNonSelect.jpg"; } if(select == "Chat") { - document.getElementById("propIm").src = "/style/cross.jpg"; - document.getElementById("chatIm").src = "/style/tick.jpg"; - document.getElementById("toolsIm").src = "/style/cross.jpg"; - document.getElementById("pageIm").src = "/style/cross.jpg"; + document.getElementById("propIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("chatIm").src = "/style/radioSelect.jpg"; + document.getElementById("toolsIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("pageIm").src = "/style/radioNonSelect.jpg"; } if(select == "Tools") { - document.getElementById("propIm").src = "/style/cross.jpg"; - document.getElementById("chatIm").src = "/style/cross.jpg"; - document.getElementById("toolsIm").src = "/style/tick.jpg"; - document.getElementById("pageIm").src = "/style/cross.jpg"; + document.getElementById("propIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("chatIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("toolsIm").src = "/style/radioSelect.jpg"; + document.getElementById("pageIm").src = "/style/radioNonSelect.jpg"; } if(select == "Page") { - document.getElementById("propIm").src = "/style/cross.jpg"; - document.getElementById("chatIm").src = "/style/cross.jpg"; - document.getElementById("toolsIm").src = "/style/cross.jpg"; - document.getElementById("pageIm").src = "/style/tick.jpg"; + document.getElementById("propIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("chatIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("toolsIm").src = "/style/radioNonSelect.jpg"; + document.getElementById("pageIm").src = "/style/radioSelect.jpg"; } - selector = select; clearAllColors(); document.getElementById(select.toLowerCase()+"td").bgColor='#FFFFFF'; Added: branches/2.4.3/html/style/radioNonSelect.jpg =================================================================== (Binary files differ) Property changes on: branches/2.4.3/html/style/radioNonSelect.jpg ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/2.4.3/html/style/radioselect.jpg =================================================================== (Binary files differ) Property changes on: branches/2.4.3/html/style/radioselect.jpg ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-09-18 10:19:54
|
Revision: 420 http://upstage.svn.sourceforge.net/upstage/?rev=420&view=rev Author: aut-upstage Date: 2012-09-18 10:19:43 +0000 (Tue, 18 Sep 2012) Log Message: ----------- - Daniel 2.4.3 Merged from 2.4.2 fixes Modified Paths: -------------- branches/2.4.3/client/src/application.xml branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/client/src/thing/Avatar.as branches/2.4.3/config/templates/mediaedit.xhtml branches/2.4.3/config/templates/stageedit.xhtml branches/2.4.3/config/templates/swf.inc branches/2.4.3/html/masterpage.js branches/2.4.3/html/mediaedit.js branches/2.4.3/html/stageedit.js branches/2.4.3/html/style/main.css branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf branches/2.4.3/upstage/pages.py branches/2.4.3/upstage/stage.py Modified: branches/2.4.3/client/src/application.xml =================================================================== --- branches/2.4.3/client/src/application.xml 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/client/src/application.xml 2012-09-18 10:19:43 UTC (rev 420) @@ -30,7 +30,6 @@ --> <movie width="320" height="200" framerate="25" version="8"> - <background color="#ffffff"/> <!-- The Application classes have been compiled into the classes.swf file, Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-09-18 10:19:43 UTC (rev 420) @@ -595,10 +595,9 @@ modelAv.SET_ROTATE_AVATAR(); }); - drawAvatarMenuItem.separatorBefore = true; - myMenu.customItems.push(rotateAvatarMenuItem, moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); + myMenu.customItems.push(scaleAvatarMenuItem, moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); av.menu = myMenu; } Modified: branches/2.4.3/client/src/thing/Avatar.as =================================================================== --- branches/2.4.3/client/src/thing/Avatar.as 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/client/src/thing/Avatar.as 2012-09-18 10:19:43 UTC (rev 420) @@ -73,8 +73,10 @@ private var nameY :Number; private var frameNumber :Number; + // Added by Daniel private var rotation:Number = 0; private var scale:Number = 1; + // Daniel 13/09/2012 - For drawable avatar. public var drawable:MovieClip; @@ -120,6 +122,7 @@ //XXX could call finalise here. }; av.loadImage(av.url, av.baseLayer + av.layerOffset, listener); + return av; } @@ -511,7 +514,6 @@ drawable.transform.matrix = drawMat; } - /** * @brief Is the avatar on stage Modified: branches/2.4.3/config/templates/mediaedit.xhtml =================================================================== --- branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/config/templates/mediaedit.xhtml 2012-09-18 10:19:43 UTC (rev 420) @@ -11,6 +11,7 @@ Vibhu / Heath (01/08/2011): Made layout changes. Daniel / Gavin (24/08/2012): Made divMessage to make popup postback Daniel Han (13/09/2012): Removed SlideShow type display of gallery. changed to CSS use rather than using js. + Craig Farrell (18/09/2012) : made search text by pressing enter --> <script type="text/javascript">document.title='Workshop - Media';</script> @@ -24,28 +25,7 @@ <b>Display:</b> </div> <div style="float:right;margin-top:-30px;"> - <table> - <tr> - <td> - <input type="text" id="serachText" style="width:100%;" /> - </td> - <td> - <button type="button" onclick="javascript:searchTags();return false;"><b>Search by TAGS</b></button> - </td> - </tr> - <tr> - <td> - <label><b>Type of filtering: </b></label> - <select id="typeofFiltering" onchange="javascript:applyFilters();"> - <option value="Type 1">Type 1</option> - <option value="Type 2">Type 2</option> - </select> - </td> - <td> - <button type="button" onclick="javascript:getFilteringInfo(); return false;" style="width:100%;"><b>Help</b></button> - </td> - </tr> - </table> + </div> <input type="hidden" name="stages" value="%(list_stages)s"></input> <input type="hidden" name="users" value="%(list_users)s"></input> @@ -53,9 +33,13 @@ <span id="filters"> </span> <br /> - <input type="button" onclick="javascript:addFilter();" value="Add Filter"></input> + <input type="button" onclick="javascript:addFilter();" value="Add Filter"></input> </form> </div> +<div> + <button type="button" id="searchButton" onclick="javascript:searchTags();return false;"><b>Search by TAGS</b></button> + <input type="text" id="serachText" style="width:20%;" onkeyup="searchTagsEnterKey(event);"/> +</div> %(attr:message)s <hr /> <div id="theImages"> Modified: branches/2.4.3/config/templates/stageedit.xhtml =================================================================== --- branches/2.4.3/config/templates/stageedit.xhtml 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/config/templates/stageedit.xhtml 2012-09-18 10:19:43 UTC (rev 420) @@ -42,6 +42,9 @@ <td>Short name for URL:</td> <td><input type="text" name="shortName" value="%(ID)s" size="20" readonly="readonly"/>(Used for URL)</td> </tr> + <tr> + <td colspan="2"> %(attr:stage_link)s </td> + </tr> </table> </div> <!-- --> @@ -56,7 +59,7 @@ <h1>Background Color</h1> <table style="padding:5px"> <tr> - <th style="width:80px"> <a href='javascript:selectColoring("Prop");'><img id="propIm" alt="" src="/style/radioSelect.jpg" width="15" height="15" /> Props & Backdrops </a> </th> + <th style="width:80px"> <a href='javascript:selectColoring("Prop");'><img id="propIm" alt="" src="/style/radioselect.jpg" width="15" height="15" /> Props & Backdrops </a> </th> <th style="width:80px"> <a href='javascript:selectColoring("Chat");'><img id="chatIm" alt="" src="/style/radioNonSelect.jpg" width="15" height="15" /> Chat Window </a> </th> <th style="width:80px"> <a href='javascript:selectColoring("Tools");'><img id="toolsIm" alt="" src="/style/radioNonSelect.jpg" width="15" height="15" /> Tool Palette </a> @@ -136,24 +139,22 @@ <input type="hidden" name="action" value=""></input> <table> <tr> - <td style="width:10%"><input type="button" onclick="saveStage();" value="Save"></input></td> - <td style="width:40%">Save your stage.</td> - <td style="width:10%"><input type="button" onclick="warn(1);" value="Revert Changes"></input></td> - <td style="width:40%">Get rid of any changes you've made.</td> + <td style="width:10%;"><input type="button" onclick="saveStage(0);" value="Save and Reload Stage"></input></td> + <td style="width:10%;">Save and reload</td> + <td style="width:10%;"><input type="button" onclick="saveStage(6);" value="Save Stage"></input></td> + <td style="width:10%;">Save</td> </tr> <tr> - <td> </td> + <td style="width:10%;" ><input type="button" onclick="warn(1);" value="Revert Changes"></input></td> + <td style="width:10%;">Get rid of changes.</td> + <td style="width:10%;"><input type="button" onclick="warn(3);" value="Clear Stage"></input></td> + <td style="width:10%;">Reset to original configuration.</td> </tr> + <td style="width:10%;"><input type="button" onclick="warn(5);" value="Delete"></input></td> + <td style="width:10%;" colspan="3">Delete stage.</td> + </tr> <tr> - <td style="width:10%"><input type="button" onclick="warn(5);" value="Delete"></input></td> - <td style="width:40%">Delete the stage.</td> - <td style="width:10%"><input type="button" onclick="warn(3);" value="Set to Default"></input></td> - <td style="width:40%">Reset the stage to its original configuration.</td> - </tr> - <tr> - <td></td> - <td></td> - <td colspan="2"><span id="warning">Warning: This will cause the stage to reload for everyone currently on it, and you will loose the chat log.</span></td> + <td colspan="4"><span id="warning">Warning: This will cause the stage to reload for everyone currently on it, and you will loose the chat log.</span></td> </tr> </table> </div> Modified: branches/2.4.3/config/templates/swf.inc =================================================================== --- branches/2.4.3/config/templates/swf.inc 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/config/templates/swf.inc 2012-09-18 10:19:43 UTC (rev 420) @@ -8,7 +8,7 @@ <param name="bgcolor" value="#ffffff" /> <param name="wmode" value="opaque" /> <embed src="%(attr:url)s" - width="400px" height="400px" scale="showAll" + width="200px" height="200px" scale="showAll" type="application/x-shockwave-flash" allowScriptAccess="sameDomain" wmode="opaque" Modified: branches/2.4.3/html/masterpage.js =================================================================== --- branches/2.4.3/html/masterpage.js 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/html/masterpage.js 2012-09-18 10:19:43 UTC (rev 420) @@ -42,13 +42,15 @@ var signup = '<a href="javascript:navSignup()">Request an Account</a> or '; var loginLinks= '<a href="javascript:login()">Sign In</a>'; var signup_html = '<a href="javascript:navSignup();">Dont have an account? Find out how to get involved.</a>'; -var warningMessages = ['This will save the stage, losing any previous settings. Do you wish to proceed?', +var warningMessages = ['This will save the stage, losing any previous settings and Reload the stage. Do you wish to proceed?', 'You will loose any chages you have made. Do you wish to proceed?', 'This will delete the selected stage. Do you wish to proceed?', 'Warning: This will cause the stage to reload for everyone currently on it, and you will loose the chat log. Do you wish to proceed?', 'Any changes you have made will be saved, overwriting prevoius settings. Do you wish to proceed?', - 'The selected media item will be permanantly deleted. Do you wish to proceed?'] -var actions = ['save', 'cancel', 'delete', 'reset', 'save', 'delete']; //Dont really need these, just makes server code more readable. + 'The selected media item will be permanantly deleted. Do you wish to proceed?', + 'This will save the stage, losing any previous settings without reloading the stage. Do you wish to proceed?' + ] +var actions = ['save', 'cancel', 'delete', 'reset', 'save', 'delete', 'saveonly']; //Dont really need these, just makes server code more readable. /** * Initialization. Modified: branches/2.4.3/html/mediaedit.js =================================================================== --- branches/2.4.3/html/mediaedit.js 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/html/mediaedit.js 2012-09-18 10:19:43 UTC (rev 420) @@ -28,7 +28,9 @@ * 1.4 Vibhu (31/08/2011) - Modified getMedia function to send type of audio media is, whether music or sfx. * 1.5 Heath / Vibhu (01/09/2011) - added functions searchTags to search through media by tag. * 1.6 Gavin (13/09/2012) - changed the save media into a function that allows invaild characters that are found to be removed in the media and tag name. - * 1.7 Daniel / Gavin (16/09/12) - Converted the audio player in test voice into jwplayer in which allow multiple browsers such as IE to test the voice audio. + * 1.7 Daniel / Gavin (16/09/12) - Converted the audio player in test voice into jwplayer in which allow multiple browsers such as IE to test the voice audio. \ + * 1.8 Scott Riddell / Gavin Chan (18/09/2012 - Removed the getFilteringInfo() function, as we removed the type1 and type2 filters from the webpage + 1.9 Craig Farrell (13/09/2012) - added searchTagEnterKey, so when you press enter in text box it will activate search button. */ //General instance style variables var mediaSelected = false; @@ -236,32 +238,9 @@ */ function applyFilters() { - var selected = document.getElementById("typeofFiltering").value; - if(selected == 'Type 1') - { - applyTypeOneFilters(); - } - else if(selected == 'Type 2') - { - applyTypeTwoFilters(); - } + applyTypeOneFilters(); } -/** - * Vibhu (31/08/2011) - Show information about particular filtering type. - */ -function getFilteringInfo() -{ - var selected = document.getElementById("typeofFiltering").value; - if(selected == 'Type 1') - { - alert('Excludes media that do not exclusively match each filter. For Example, Filters: Type = avatar User = bob Displays all avatars uploaded by "bob" ignoring all other media types'); - } - else if(selected == 'Type 2') - { - alert('Include all media that match the filter parameters. For Example, Filters: Type = avatar User = bob Displays all items matching each case. Therefore all avatars and all media uploaded by "bob" would be included.'); - } -} /** * Vibhu, Heath and Nessa (19/08/2011) @@ -765,6 +744,26 @@ applySearch(); //apply the search } } + + /** + added by Craig Farrell 13/09/12 + - checks if enter key was pressed while in search textbox + */ + function searchTagsEnterKey(opEvent) + { + if (window.event) + { + opEvent = window.event; + } + var key = opEvent.keyCode; + var eKey = 13; + if(key == eKey) + { + document.getElementById('searchButton').click(); + } + + //document.getElementById('searchButton').click(); + } /** Modified: branches/2.4.3/html/stageedit.js =================================================================== --- branches/2.4.3/html/stageedit.js 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/html/stageedit.js 2012-09-18 10:19:43 UTC (rev 420) @@ -19,8 +19,12 @@ add a validator for the "#" key that removes "#" when the user enters it in the stage name - Created a function saveStage() that is called when the user edits the stage page and confirms, it trims the stage name value and add a alert for the "#" key - */ + + Modified by Daniel Han 18/09/2012 - added stateNum parameter on saveStage for refresh stage or not. + +*/ + //Instance based variables var selector; var nocolor; @@ -153,7 +157,7 @@ // 09/08/2011 Vibhu Patel - Changed from radio buttons to images. if(select == "Prop") { - document.getElementById("propIm").src = "/style/radioSelect.jpg"; + document.getElementById("propIm").src = "/style/radioselect.jpg"; document.getElementById("chatIm").src = "/style/radioNonSelect.jpg"; document.getElementById("toolsIm").src = "/style/radioNonSelect.jpg"; document.getElementById("pageIm").src = "/style/radioNonSelect.jpg"; @@ -161,7 +165,7 @@ if(select == "Chat") { document.getElementById("propIm").src = "/style/radioNonSelect.jpg"; - document.getElementById("chatIm").src = "/style/radioSelect.jpg"; + document.getElementById("chatIm").src = "/style/radioselect.jpg"; document.getElementById("toolsIm").src = "/style/radioNonSelect.jpg"; document.getElementById("pageIm").src = "/style/radioNonSelect.jpg"; } @@ -169,7 +173,7 @@ { document.getElementById("propIm").src = "/style/radioNonSelect.jpg"; document.getElementById("chatIm").src = "/style/radioNonSelect.jpg"; - document.getElementById("toolsIm").src = "/style/radioSelect.jpg"; + document.getElementById("toolsIm").src = "/style/radioselect.jpg"; document.getElementById("pageIm").src = "/style/radioNonSelect.jpg"; } if(select == "Page") @@ -177,7 +181,7 @@ document.getElementById("propIm").src = "/style/radioNonSelect.jpg"; document.getElementById("chatIm").src = "/style/radioNonSelect.jpg"; document.getElementById("toolsIm").src = "/style/radioNonSelect.jpg"; - document.getElementById("pageIm").src = "/style/radioSelect.jpg"; + document.getElementById("pageIm").src = "/style/radioselect.jpg"; } selector = select; clearAllColors(); @@ -232,9 +236,10 @@ /** * Saves the stage edited by the user + * Modified by: Daniel Han (18/09/2012) - added stateNum parameter for refresh stage or not. * @return - none */ - function saveStage() + function saveStage(stateNum) { try { @@ -243,7 +248,7 @@ { document.getElementById('longName').value = document.getElementById('longName').value.replace(/#/g,""); } - warn(0); + warn(stateNum); } catch(ex) Modified: branches/2.4.3/html/style/main.css =================================================================== --- branches/2.4.3/html/style/main.css 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/html/style/main.css 2012-09-18 10:19:43 UTC (rev 420) @@ -918,10 +918,10 @@ background-color: #fff; color: #000; border-radius: 20px; - border: #eee 2px inset; + border: #eee 2px solid; width: 300px; text-align: center; margin-top: 40%; padding: 20px; - + box-shadow: #333 1px 1px 10px; } Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/upstage/pages.py =================================================================== --- branches/2.4.3/upstage/pages.py 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/upstage/pages.py 2012-09-18 10:19:43 UTC (rev 420) @@ -322,8 +322,8 @@ def allows_player(self, x): """Always return true""" return True - + """ Added by: Daniel Han (29/06/2012) basically same as CreateDir but it can render it self. @@ -669,7 +669,8 @@ message = None stage = None no_stage = 'No stage selected' - + stage_link = '' + def __init__(self, player, collection): AdminBase.__init__(self, player, collection) self.player = player @@ -775,11 +776,11 @@ form = request.args self.message = '' action = request.args.get('action',[''])[0] - stage_link= '' + self.stage_link= '' try: self.stagename = request.args.get('shortName',[''])[0] self.stage = self.collection.stages.get(self.stagename) - stage_link="<a href=\"../../../stages/%s\">Go directly to stage. </a>" %self.stage.ID + self.stage_link="<a href=\"../../../stages/%s\">Go directly to stage. </a>" %self.stage.ID except: self.message+='No stage selected. ' if 'ID' in form: @@ -810,7 +811,13 @@ if self.stage: self.stage.update_from_form(form, self.player); self.message+='Stage saved! ' - + + #added by Daniel (18/09/2012): Save only + elif action=='saveonly': + if self.stage: + self.stage.update_from_form(form, self.player, {}, False); + self.message+='Stage saved! ' + elif action=='reset': if self.stage: self.stage.set_default() Modified: branches/2.4.3/upstage/stage.py =================================================================== --- branches/2.4.3/upstage/stage.py 2012-09-18 04:38:07 UTC (rev 419) +++ branches/2.4.3/upstage/stage.py 2012-09-18 10:19:43 UTC (rev 420) @@ -45,6 +45,7 @@ Modified by: Daniel Han 15/09/2012 - ROTATE_AVATAR is added. - When avatar rotation is called, it is stored in draw_avatar_stacks for replay. +Modified by: Daniel 18/09/2012 - Added Save only without refreshing. """ #std lib @@ -439,7 +440,7 @@ self.broadcast('SHOW_BACKDROP', ID=bg.ID) - def update_from_form(self, form, player, uploaders={}): + def update_from_form(self, form, player, uploaders={}, refresh_stage = True): """Put ticked thingies into stage, remove unticked""" log.msg("Stage update from form called.") if not player.can_admin(): @@ -506,8 +507,9 @@ if name not in collection.media: collection.add_mediafile(k) - - self.soft_reset() + if refresh_stage == True: + self.soft_reset() + self.save() """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2012-11-08 14:06:26
|
Revision: 460 http://upstage.svn.sourceforge.net/upstage/?rev=460&view=rev Author: aut-upstage Date: 2012-11-08 14:06:20 +0000 (Thu, 08 Nov 2012) Log Message: ----------- Modified Paths: -------------- branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2012-10-24 03:26:15 UTC (rev 459) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2012-11-08 14:06:20 UTC (rev 460) @@ -597,7 +597,7 @@ drawAvatarMenuItem.separatorBefore = true; - myMenu.customItems.push(scaleAvatarMenuItem, moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); + myMenu.customItems.push(rotateAvatarMenuItem, moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); av.menu = myMenu; } Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aut...@us...> - 2013-04-11 02:09:49
|
Revision: 498 http://upstage.svn.sourceforge.net/upstage/?rev=498&view=rev Author: aut-upstage Date: 2013-04-11 02:09:42 +0000 (Thu, 11 Apr 2013) Log Message: ----------- 11/04/2013 Craig Farrell - added left rotate for avatars . Modified Paths: -------------- branches/2.4.3/client/src/model/ModelAvatars.as branches/2.4.3/html/swf/classes.swf branches/2.4.3/html/swf/client.swf Modified: branches/2.4.3/client/src/model/ModelAvatars.as =================================================================== --- branches/2.4.3/client/src/model/ModelAvatars.as 2013-04-09 00:34:21 UTC (rev 497) +++ branches/2.4.3/client/src/model/ModelAvatars.as 2013-04-11 02:09:42 UTC (rev 498) @@ -42,6 +42,10 @@ * Modified by: Vibhu Patel 31/08/2011 - Added field and function to store and set the background color of tool box items. * Modified by: Daniel han 13/09/2012 - Added contextmenu for drawables. * Modified by: Daniel Han 14/09/2012 - Added layer parameter under draw_line draw_move methods to calculate and send avatar relational position of drawing. + * Modified by: Craig Farrell 11/04/2013 - added new varible 'rotateClockWise' boolean. + * - added rotate left(ani-clockwise) + * - added new right click 'rotate avatar left' menu item. + * */ class model.ModelAvatars implements TransportInterface { @@ -65,6 +69,8 @@ public var avatars :Array; private var userID :String; public var moveFast :Boolean; + public var rotateClockWise :Boolean;//(11/04/2013) Craig + private var drawing :Boolean; private var bAudioing :Boolean; // PQ: Added @@ -85,6 +91,7 @@ this.avatar = null; this.avatars = new Array(); this.moveFast = false; + this.rotateClockWise = true;//(11/04/2013) Craig this.modelsounds = modelSounds; this.avscrollBarColor = Client.UI_BACKGROUND; }; @@ -238,11 +245,24 @@ //------------------------------------------------------------------------- // Messages sent from Views to server - - function SET_ROTATE_AVATAR() + /** + * @Modified Craig Farrell (11/04/2013) + * @param clockwise:boolean + * @brief sends a message to server to rotate avatar. + */ + function SET_ROTATE_AVATAR(clockwise:Boolean)//(11/04/2013) Craig { + if (clockwise)//(11/04/2013) Craig + { + this.rotateClockWise = true; + } + else + { + this.rotateClockWise = false; + } this.sender.ROTATE_AVATAR(); } + //------------------------------------------------------------------------- // Messages from ActorButtons @@ -591,13 +611,17 @@ modelAv.setLastStyle(); }); - var rotateAvatarMenuItem:ContextMenuItem = new ContextMenuItem("Rotate Avatar", function(){ - modelAv.SET_ROTATE_AVATAR(); + var rotateAvatarRightMenuItem:ContextMenuItem = new ContextMenuItem("Rotate Avatar Right", function(){ + modelAv.SET_ROTATE_AVATAR(true);//(11/04/2013) Craig }); + + var rotateAvatarLeftMenuItem:ContextMenuItem = new ContextMenuItem("Rotate Avatar Left", function(){//(11/04/2013) Craig + modelAv.SET_ROTATE_AVATAR(false); + }); drawAvatarMenuItem.separatorBefore = true; - myMenu.customItems.push(rotateAvatarMenuItem, moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); + myMenu.customItems.push(rotateAvatarRightMenuItem,rotateAvatarLeftMenuItem, moveupMenuItem, movedownMenuItem, movefastMenuItem, moveSlowMenuItem, drawAvatarMenuItem, clearDrawingMenuItem, renameMenuItem); av.menu = myMenu; } @@ -838,15 +862,24 @@ } /** - * @author Daniel Han (15/09/2012) + * @modified Craig Farrell (11/04/2013) * @param avID - * @brief Sets the rotation of avatar + * @brief Sets the rotation of avatar clockwise or ani clockwise */ function GET_ROTATE_AVATAR(avID:Number) { - avatars[avID].setRotation(90); + if (rotateClockWise) + { + avatars[avID].setRotation(90); + } + else + { + avatars[avID].setRotation(-90);//(11/04/2013) Craig + } + } + //------------------------------------------------------------------------- // Utility functions /** Modified: branches/2.4.3/html/swf/classes.swf =================================================================== (Binary files differ) Modified: branches/2.4.3/html/swf/client.swf =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |