예제 #1
0
 def Magic(self):
     self.magicpop = Magic(df=self.model._df)
     try:
         self.magicpop.Magic()
         self.magicpop.show()
     except (KeyError):
         self.ErrorEvent()
	def useMagic(self):
		'''
		When space bar is pressed, magic is thrown towards the mouse pointer
		Or infront of the character *Choice*
		'''
		pos = self.rect.center
		self.magi = Magic(pos[0], pos[1], self.dirVec, self)

		self.magi.add(self.gameState.weaponGroup)
예제 #3
0
def main(loglevel=logging.INFO):
    Magic(loglevel=loglevel)._dump()
    SmkmStoreMgr(loglevel=loglevel)._dump()
    Smkm(loglevel=loglevel)._dump()
    SmkmStoreMetadata(loglevel=loglevel)._dump()
    SmkmStore(loglevel=loglevel)._dump()
    StStore(loglevel=loglevel)._dump()
    StDataMgr(loglevel=loglevel)._dump()

    return
예제 #4
0
 def on_touch_down(self, touch):
     target_x = touch.x + 25 / 2  #so that the middle of the magic hits the cursor
     target_y = touch.y + 25 / 2  #same as above
     #dammmmn son lookit that trig
     #and you thought high school math was worthless
     hyp = math.sqrt((target_y - self.player.center_y)**2 +
                     (target_x - self.player.center_x)**2)
     r = math.asin((target_x - self.player.center_x) / hyp)
     x = math.sin(r)
     y = math.cos(r)
     if target_y - self.player.y < 0:  #makes sure it goes in the right direction, screws up for some reason if i do the x axis too
         y *= -1
     self.add_widget(
         Magic(pos=self.player.pos, size=(25, 25), x_comp=x, y_comp=y))
예제 #5
0
def get_channels():
    subs = request.form
    subs.to_dict()
    try:
        for subs_id in subs["subscriber"].split(","):
            subs_id = int(subs_id) if subs_id else None
    except ValueError:
        logging.error("{}: {}".format(sys.exc_info()[0], sys.exc_info()[1]))
        logging.error("".join(traceback.format_tb(sys.exc_info()[2])))
        return "Incorrect subscriber ID: '{}'! Consider to use another one!".format(
            subs_id)
    else:
        result = Magic().reformat_chains(subs["subscriber"],
                                         subs.get("reason", 0))
        return render_template(
            "do_the_thing.html",
            channels=result) if result else "Nothing was found!"
class Player(Collider.Collider):
	'''
		Player class. images is a list of images for each direction. We may need
		to alter this to support animation.
	'''

	def __init__(self, gameState):
		super(Player,self).__init__()

		# load all images
		# up, down, left, right
		self.images = [0] * 4
		self.images[UP],    self.rect = util.loadImage(PLAYER_IDLE_UP)
		self.images[DOWN],  self.rect = util.loadImage(PLAYER_IDLE_DOWN)
		self.images[LEFT],  self.rect = util.loadImage(PLAYER_IDLE_LEFT)
		self.images[RIGHT], self.rect = util.loadImage(PLAYER_IDLE_RIGHT)

		self.direction = UP

		# assign image and position
		self.setImage(self.images[self.direction])
		self.setPos(START_X, START_Y)

		# load sword
		self.swordLeft = pygame.sprite.Sprite()
		self.swordLeft.image, self.swordLeft.rect  = util.loadImage(SWORD_LEFT)
		self.swordUp = pygame.sprite.Sprite()
		self.swordUp.image, self.swordUp.rect = util.loadImage(SWORD_UP)
		self.swordRight = pygame.sprite.Sprite()
		self.swordRight.image, self.swordRight.rect = util.loadImage(SWORD_RIGHT)
		self.swordDown = pygame.sprite.Sprite()
		self.swordDown.image, self.swordDown.rect = util.loadImage(SWORD_DOWN)

		self.gameState = gameState

		#health
		self.health = 10
		self.alive = True

	# Orient player with mouse
	def orient(self, mousePos):
		self.dirVec = mousePos - Vector2(self.getPos())
		angle = math.atan2(self.dirVec.x, self.dirVec.y)
		mag = math.fabs(angle)

		# if we're facing to the right
		if mag < math.pi / 4:
			self.setDir(DOWN)
		# move left
		elif mag > 3 * math.pi / 4:
			self.setDir(UP)
		# either up or down
		else:
			if angle < 0:
				self.setDir(LEFT)
			else:
				self.setDir(RIGHT)

	def setDir(self, newDir):
		self.direction = newDir
		self.image = self.images[self.direction]

	# TODO: FIX THIS
	def swingSword(self):
		'''
			When left mouse is pressed, sword is pushed out
		'''

		if self.direction == UP:
			self.swordUp.rect.bottomleft = self.rect.topleft
			self.swordUp.add(self.gameState.playerGroup)
		elif self.direction == DOWN:
			self.swordDown.rect.topleft = self.rect.bottomleft
			self.swordDown.add(self.gameState.playerGroup)
		elif self.direction == LEFT:
			self.swordLeft.rect.topright = self.rect.topleft
			self.swordLeft.add(self.gameState.playerGroup)
		elif self.direction == RIGHT:
			self.swordRight.rect.topleft = self.rect.topright
			self.swordRight.add(self.gameState.playerGroup)

	# TODO: Add to this
	def shootBow(self):
		'''
		When right mouse is pressed, arrow is fire infront of character
	'''
		print "Arrow Fired"

	# TODO: Add to this
	def useMagic(self):
		'''
		When space bar is pressed, magic is thrown towards the mouse pointer
		Or infront of the character *Choice*
		'''
		pos = self.rect.center
		self.magi = Magic(pos[0], pos[1], self.dirVec, self)

		self.magi.add(self.gameState.weaponGroup)

	def update(self, clock, player, enemies, surfaces):
		from config import keyboard, keymap

		#am i alive?
		if (self.health <= 0):
			self.alive = False

		vel = Vector2(0, 0);
		if keyboard.down(keymap.UP):
			vel.y -= 1
		elif keyboard.down(keymap.DOWN):
			vel.y += 1
		if keyboard.down(keymap.LEFT):
			vel.x -= 1
		elif keyboard.down(keymap.RIGHT):
			vel.x += 1
		self.vel = vel.normalized() * PLAYER_SPEED

		super(Player, self).update(clock, player, enemies, surfaces)

		if keyboard.downup(keymap.MAGIC):
			self.useMagic()

		# Check to see if we have touched edge of the screen
		if self.rect.left < config.TILEX * 2:
			self.gameState.nextMap("left", self.getPos())
		elif self.rect.right > config.WIDTH - config.TILEX * 2:
			self.gameState.nextMap("right", self.getPos())
		elif self.rect.top < 0:
			self.gameState.nextMap("up", self.getPos())
		elif self.rect.bottom > config.HEIGHT:
			self.gameState.nextMap("down", self.getPos())

	def getHealth(self):
		return self.health

	def damaged(self, damage):
		self.health -= damage

	def attack(self, target, damage):
		target.damaged(damage)
예제 #7
0
from Person import Person
from Magic import Magic

print("This is the instruction.........")

# Magic
fire = Magic("Fire", 10, 30, "dark")
wind = Magic("Wind", 15, 50, "dark")
ice = Magic("Ice", 20, 70, "dark")

magic_list = [fire, wind, ice]

player = Person("Daniel", 500, 100, 50, magic_list)
enemy = Person("Vampire", 1000, 100, 20, magic_list)

player.stats()
enemy.stats()
print("______________________")

running = True
while running:
    # PLAYER'S TURN
    print(player.name)
    print("Choose your action: ")
    player.choose_action()
    try:
        choice = int(input(">>>: "))
    except ValueError:
        print("Choose a number !")
        continue
    action_index = choice - 1
예제 #8
0
    def __init__(self,
                 name,
                 usage=None,
                 rc=Struct(opts=None, args=None),
                 user_ns=None):

        # Put a reference to self in builtins so that any form of embedded or
        # imported code can test for being inside IPython.
        __builtin__.__dict__['__IPYTHON__'] = self

        # Keep in the builtins a flag for when IPython is active.  We set it
        # with setdefault so that multiple nested IPythons don't clobber one
        # another.  Each will increase its value by one upon being activated,
        # which also gives us a way to determine the nesting level.
        __builtin__.__dict__.setdefault('__IPYTHON__active', 0)

        # Create the namespace where the user will operate:

        # FIXME. For some strange reason, __builtins__ is showing up at user
        # level as a dict instead of a module. This is a manual fix, but I
        # should really track down where the problem is coming from. Alex
        # Schmolck reported this problem first.
        if user_ns is None:
            self.user_ns = {
                '__name__': '__IPYTHON__main__',
                name: self,
                '__builtins__': __builtin__,
            }
        else:
            self.user_ns = user_ns

        # We need to insert into sys.modules something that looks like a
        # module but which accesses the IPython namespace, for shelve and
        # pickle to work interatctively. Normally they rely on getting
        # everything out of __main__, but for embedding purposes each IPython
        # instance has its own private namespace, so we can't go shoving
        # everything into __main__.

        try:
            main_name = self.user_ns['__name__']
        except KeyError:
            raise KeyError, 'user_ns dictionary MUST have a "__name__" key'
        else:
            sys.modules[main_name] = _FakeModule(self.user_ns)

        # List of input with multi-line handling.
        # Fill its zero entry, user counter starts at 1
        self.input_hist = InputList(['\n'])

        # list of visited directories
        self.dir_hist = [os.getcwd()]

        # dict of output history
        self.output_hist = {}

        # make global variables for user access to these
        self.user_ns['_ih'] = self.input_hist
        self.user_ns['_oh'] = self.output_hist
        self.user_ns['_dh'] = self.dir_hist

        # user aliases to input and output histories
        self.user_ns['In'] = self.user_ns['_ih']
        self.user_ns['Out'] = self.user_ns['_oh']

        # class initializations
        code.InteractiveConsole.__init__(self, locals=self.user_ns)
        Logger.__init__(self, log_ns=self.user_ns)
        Magic.__init__(self)
        # an ugly hack to get a pointer to the shell, so I can start writing magic
        # code via this pointer instead of the current mixin salad.
        Magic.set_shell(self, self)

        # hooks is a Struct holding pointers to various system hooks, and will
        # be used for further user-side customizations in the future
        #self.hooks = Struct(ps1 = sys.ps1,ps2 = sys.ps2,display = sys.displayhook)
        self.hooks = Struct()

        self.name = name
        self.usage_min = """\
        An enhanced console for Python.
        Features are:
        - Readline support if present
        - Completion in the local namespace, eg. type TAB twice at the prompt.
        - Logging of input, see command-line options.
        - Systemshell escape by the ! , eg !ls
        - Magic commands, starting with a @ (like @ls, @pwd, @cd, etc.)
        - Keeps track of locally defined variables @who, @whos
        - Show object information with a ? eg ?x or x? (use ?? for more info).
        """
        if usage: self.usage = usage
        else: self.usage = self.usage_min

        # Storage
        self.rc = rc  # This will hold all configuration information
        self.inputcache = []
        self._boundcache = []
        self.pager = 'less'
        # temporary files used for various purposes.  Deleted at exit.
        self.tempfiles = []

        # for pushd/popd management
        try:
            self.home_dir = get_home_dir()
        except HomeDirError:
            if os.name == 'dos':  # final, desperate hack for Win9x
                self.home_dir = os.path.join('C:', 'Program Files', 'IPython')
            else:
                print 'Unsupported operating system:', os.name
                print 'Exiting...'
                sys.exit()
        self.dir_stack = [os.getcwd().replace(self.home_dir, '~')]

        # escapes for automatic behavior on the command line
        self.ESC_SHELL = '!'
        self.ESC_HELP = '?'
        self.ESC_MAGIC = '@'
        self.ESC_QUOTE = ','
        self.ESC_PAREN = '/'

        # RegExp for splitting line contents into pre-char//first word-method//rest
        # update the regexp if the above escapes are changed
        self.line_split = re.compile(
            r'(^[\s*!\?@,/]?)([\?\w\.]+\w*\s*)(\(?.*$)')
        # RegExp to identify potential function names

        self.fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) ?$')

        # try to catch also methods for stuff in lists/tuples/dicts:
        # off (experimental). For this to work, the line_split regexp would
        # need to be modified so it wouldn't break things at '['. That line
        # is nasty enough that I shouldn't change it until I can test it _well_.
        #self.fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')

        # keep track of where we started running (mainly for crash post-mortem)
        self.starting_dir = os.getcwd()

        # Attributes for Logger mixin class, make defaults here
        self._dolog = 0
        self.LOG = ''
        self.LOGDEF = '.InteractiveShell.log'
        self.LOGMODE = 'over'
        self.LOGHEAD = Itpl(
            """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
#log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
#log# opts = $self.rc.opts
#log# args = $self.rc.args
#log# It is safe to make manual edits below here.
#log#-----------------------------------------------------------------------
""")
        # Various switches which can be set
        self.CACHELENGTH = 5000  # this is cheap, it's just text
        self.BANNER = itpl("Python $sys.version on $sys.platform\n"
                           "$sys.copyright\nIPP\nType ? for more help\n")
        # TraceBack handlers:
        # Need two, one for syntax errors and one for other exceptions.
        # plain/color
        self.SyntaxTB = ultraTB.ListTB(color_scheme='NoColor')
        # This one is initialized with an offset, meaning we always want to
        # remove the topmost item in the traceback, which is our own internal
        # code. Valid modes: plain/color/verbose
        self.InteractiveTB = ultraTB.AutoFormattedTB(mode='Plain',
                                                     color_scheme='NoColor',
                                                     tb_offset=1)

        # Object inspector
        ins_colors = OInspect.InspectColors
        code_colors = PyColorize.ANSICodeColors
        self.inspector = OInspect.Inspector(ins_colors, code_colors, 'NoColor')
        # List of shell commands to auto-define
        if os.name == 'posix':
            auto_shell = {
                'ls': 'ls -F',
                'mkdir': 'mkdir',
                'rmdir': 'rmdir',
                'mv': 'mv',
                'rm': 'rm -i',
                'rmf': 'rm -f',
                'less': 'less',
                'cat': 'cat',
                'clear': 'clear',
                'lc': 'ls -F -o --color'
            }
        elif os.name == 'nt':
            auto_shell = {
                'dir': 'dir /on',
                'ls': 'dir /on',
                'ddir': 'dir /ad /on',
                'ld': 'dir /ad /on',
                'mkdir': 'mkdir',
                'rmdir': 'rmdir',
                'ren': 'ren',
                'cls': 'cls',
                'more': 'type',
                'type': 'type'
            }
        else:
            auto_shell = {}
        for name, cmd in auto_shell.items():
            self.magic_alias(name + ' ' + cmd)
예제 #9
0
from easymode_game import Person
from Magic import Magic

print("This is the instruction")

#magic
fire = Magic("Fire",10,30,"red")
water = Magic("Water",20,10,"nocolor")
magic_list = [fire,water]

player=Person("Edward",500,100,50,magic_list)
enemy=Person("Vampire",1000,100,20,magic_list)

player.get_stats()
enemy.get_stats()

running=True
while running:

    #PLAYER TURN
    print(player.name)
    print("Choose your action")
    player.choose_action()

    try:
        choice=int(input(">>>:"))
    except ValueError:
        print("Choose a proper number!")
        continue

    action_index=choice - 1
예제 #10
0
class Ui_MainWindow(QtWidgets.QMainWindow):
    # raw=0
    raw = pd.DataFrame(index=[],
                       columns=[])  # raw is initialized as a blank dataframe

    Language = ''

    app = QtWidgets.QApplication(sys.argv)
    myStyle = MyProxyStyle(
        'Fusion')  # The proxy style should be based on an existing style,
    # like 'Windows', 'Motif', 'Plastique', 'Fusion', ...
    app.setStyle(myStyle)

    trans = QtCore.QTranslator()

    talk = ''

    targetversion = '0'

    def __init__(self):

        super(Ui_MainWindow, self).__init__()
        self.setObjectName('MainWindow')
        self.resize(800, 600)

        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate('MainWindow', u'GeoPython'))
        self.setWindowIcon(QIcon(LocationOfMySelf + '/geopython.png'))
        self.talk = _translate(
            'MainWindow',
            'You are using GeoPython ') + version + '\n' + _translate(
                'MainWindow', 'released on ') + date

        self.model = PandasModel(self.raw)

        self.main_widget = QWidget(self)

        self.centralwidget = QtWidgets.QWidget()
        self.centralwidget.setObjectName('centralwidget')
        self.setCentralWidget(self.centralwidget)

        self.tableView = CustomQTableView(self.centralwidget)

        self.tableView.setObjectName('tableView')
        self.tableView.setSortingEnabled(True)

        self.pushButtonOpen = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonOpen.setObjectName('pushButtonOpen')

        self.pushButtonSave = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonSave.setObjectName('pushButtonSave')

        self.pushButtonSort = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonSort.setObjectName('pushButtonSort')

        self.pushButtonQuit = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonQuit.setObjectName('pushButtonQuit')

        self.pushButtonUpdate = QtWidgets.QPushButton(self.centralwidget)
        self.pushButtonUpdate.setObjectName('pushButtonUpdate')

        w = self.width()
        h = self.height()

        if h < 360:
            h = 360
            self.resize(w, h)

        if w < 640:
            w = 640
            self.resize(w, h)

        step = (w * 94 / 100) / 5
        foot = h * 3 / 48

        #if foot<=10: foot=10

        self.tableView.setGeometry(
            QtCore.QRect(w / 100, h / 48, w * 98 / 100, h * 38 / 48))

        self.pushButtonOpen.setGeometry(
            QtCore.QRect(w / 100, h * 40 / 48, step, foot))

        self.pushButtonSave.setGeometry(
            QtCore.QRect(2 * w / 100 + step, h * 40 / 48, step, foot))

        self.pushButtonSort.setGeometry(
            QtCore.QRect(3 * w / 100 + step * 2, h * 40 / 48, step, foot))

        self.pushButtonQuit.setGeometry(
            QtCore.QRect(4 * w / 100 + step * 3, h * 40 / 48, step, foot))

        self.pushButtonUpdate.setGeometry(
            QtCore.QRect(5 * w / 100 + step * 4, h * 40 / 48, step, foot))

        self.menubar = QtWidgets.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 22))
        self.menubar.setNativeMenuBar(True)
        self.menubar.setObjectName('menubar')

        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName('menuFile')

        self.menuGeoChem = QtWidgets.QMenu(self.menubar)
        self.menuGeoChem.setObjectName('menuGeoChem')

        self.menuStructure = QtWidgets.QMenu(self.menubar)
        self.menuStructure.setObjectName('menuStructure')

        self.menuCalc = QtWidgets.QMenu(self.menubar)
        self.menuCalc.setObjectName('menuCalc')

        self.menuStat = QtWidgets.QMenu(self.menubar)
        self.menuStat.setObjectName('menuStat')

        self.menuMore = QtWidgets.QMenu(self.menubar)
        self.menuMore.setObjectName('menuMore')

        self.menuHelp = QtWidgets.QMenu(self.menubar)
        self.menuHelp.setObjectName('menuHelp')

        self.menuLanguage = QtWidgets.QMenu(self.menubar)
        self.menuLanguage.setObjectName('menuLanguage')

        self.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(self)
        self.statusbar.setObjectName('statusbar')
        self.setStatusBar(self.statusbar)

        self.actionOpen = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/open.png'), u'Open', self)
        self.actionOpen.setObjectName('actionOpen')
        self.actionOpen.setShortcut('Ctrl+O')

        self.actionSave = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/save.png'), u'Save', self)
        self.actionSave.setObjectName('actionSave')
        self.actionSave.setShortcut('Ctrl+S')

        self.actionCnWeb = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/forum.png'), u'Chinese Forum', self)
        self.actionCnWeb.setObjectName('actionCnWeb')

        self.actionEnWeb = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/forum.png'), u'English Forum', self)
        self.actionEnWeb.setObjectName('actionEnWeb')

        self.actionGoGithub = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/github.png'), u'GitHub', self)
        self.actionGoGithub.setObjectName('actionGoGithub')

        self.actionVersionCheck = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/update.png'), u'Version', self)
        self.actionVersionCheck.setObjectName('actionVersionCheck')

        self.actionCnS = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/cns.png'), u'Simplified Chinese', self)
        self.actionCnS.setObjectName('actionCnS')

        self.actionCnT = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/cnt.png'), u'Traditional Chinese', self)
        self.actionCnT.setObjectName('actionCnT')

        self.actionEn = QtWidgets.QAction(QIcon(LocationOfMySelf + '/en.png'),
                                          u'English', self)
        self.actionEn.setObjectName('actionEn')

        self.actionLoadLanguage = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/lang.png'), u'Load Language', self)
        self.actionLoadLanguage.setObjectName('actionLoadLanguage')

        self.actionTAS = QtWidgets.QAction(QIcon(LocationOfMySelf + '/xy.png'),
                                           u'TAS', self)
        self.actionTAS.setObjectName('actionTAS')

        self.actionTrace = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/spider2.png'), u'Trace', self)
        self.actionTrace.setObjectName('actionTrace')

        self.actionRee = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/spider2.png'), u'Ree', self)
        self.actionRee.setObjectName('actionRee')

        self.actionPearce = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/spider.png'), u'Pearce', self)
        self.actionPearce.setObjectName('actionPearce')

        self.actionHarker = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/spider.png'), u'Harker', self)
        self.actionHarker.setObjectName('actionHarker')

        self.actionStereo = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/structure.png'), u'Stereo', self)
        self.actionStereo.setObjectName('actionStereo')

        self.actionRose = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/rose.png'), u'Rose', self)
        self.actionRose.setObjectName('actionRose')

        self.actionQFL = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/triangular.png'), u'QFL', self)
        self.actionQFL.setObjectName('actionQFL')

        self.actionQmFLt = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/triangular.png'), u'QmFLt', self)
        self.actionQmFLt.setObjectName('actionQmFLt')

        self.actionCIPW = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/calc.png'), u'CIPW', self)
        self.actionCIPW.setObjectName('actionCIPW')

        self.actionZirconCe = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/calc.png'), u'ZirconCe', self)
        self.actionZirconCe.setObjectName('actionZirconCe')

        self.actionZirconTiTemp = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/temperature.png'), u'ZirconTiTemp',
            self)
        self.actionZirconTiTemp.setObjectName('actionZirconTiTemp')

        self.actionRutileZrTemp = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/temperature.png'), u'RutileZrTemp',
            self)
        self.actionRutileZrTemp.setObjectName('actionRutileZrTemp')

        self.actionCluster = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/cluster.png'), u'Cluster', self)
        self.actionCluster.setObjectName('actionCluster')

        self.actionMultiDimention = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/multiple.png'), u'MultiDimention', self)
        self.actionMultiDimention.setObjectName('actionMultiDimention')

        self.actionQAPF = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/qapf.png'), u'QAPF', self)
        self.actionQAPF.setObjectName('actionQAPF')

        self.actionMudStone = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/triangular.png'), u'MudStone', self)
        self.actionMudStone.setObjectName('actionMudStone')

        self.actionXY = QtWidgets.QAction(QIcon(LocationOfMySelf + '/xy.png'),
                                          u'X-Y', self)
        self.actionXY.setObjectName('actionXY')

        self.actionXYZ = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/triangular.png'), u'Triangular', self)
        self.actionXYZ.setObjectName('actionXYZ')

        self.actionMagic = QtWidgets.QAction(
            QIcon(LocationOfMySelf + '/magic.png'), u'Magic', self)
        self.actionMagic.setObjectName('actionMagic')

        self.menuFile.addAction(self.actionOpen)
        self.menuFile.addAction(self.actionSave)

        self.menuGeoChem.addAction(self.actionTAS)
        self.menuGeoChem.addAction(self.actionTrace)
        self.menuGeoChem.addAction(self.actionRee)
        self.menuGeoChem.addAction(self.actionPearce)
        self.menuGeoChem.addAction(self.actionHarker)

        self.menuStructure.addAction(self.actionStereo)
        self.menuStructure.addAction(self.actionRose)
        self.menuStructure.addAction(self.actionQFL)
        self.menuStructure.addAction(self.actionQmFLt)

        self.menuCalc.addAction(self.actionCIPW)
        self.menuCalc.addAction(self.actionZirconCe)
        self.menuCalc.addAction(self.actionZirconTiTemp)
        self.menuCalc.addAction(self.actionRutileZrTemp)

        self.menuStat.addAction(self.actionCluster)
        self.menuStat.addAction(self.actionMultiDimention)

        self.menuMore.addAction(self.actionMudStone)
        self.menuMore.addAction(self.actionQAPF)

        self.menuMore.addAction(self.actionXY)
        self.menuMore.addAction(self.actionXYZ)
        self.menuMore.addAction(self.actionMagic)

        self.menuHelp.addAction(self.actionCnWeb)
        self.menuHelp.addAction(self.actionEnWeb)

        self.menuHelp.addAction(self.actionGoGithub)
        self.menuHelp.addAction(self.actionVersionCheck)

        self.menuLanguage.addAction(self.actionCnS)
        self.menuLanguage.addAction(self.actionCnT)
        self.menuLanguage.addAction(self.actionEn)
        self.menuLanguage.addAction(self.actionLoadLanguage)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addSeparator()

        self.menubar.addAction(self.menuGeoChem.menuAction())
        self.menubar.addSeparator()

        self.menubar.addAction(self.menuStructure.menuAction())
        self.menubar.addSeparator()

        self.menubar.addAction(self.menuCalc.menuAction())
        self.menubar.addSeparator()

        self.menubar.addAction(self.menuStat.menuAction())
        self.menubar.addSeparator()

        self.menubar.addAction(self.menuMore.menuAction())
        self.menubar.addSeparator()

        self.menubar.addAction(self.menuHelp.menuAction())
        self.menubar.addSeparator()

        self.menubar.addAction(self.menuLanguage.menuAction())
        self.menubar.addSeparator()

        self.actionTAS.triggered.connect(self.TAS)
        self.actionTrace.triggered.connect(self.Trace)
        self.actionRee.triggered.connect(self.REE)
        self.actionPearce.triggered.connect(self.Pearce)
        self.actionHarker.triggered.connect(self.Harker)
        self.actionQAPF.triggered.connect(self.QAPF)

        self.actionStereo.triggered.connect(self.Stereo)
        self.actionRose.triggered.connect(self.Rose)
        self.actionQFL.triggered.connect(self.QFL)
        self.actionQmFLt.triggered.connect(self.QmFLt)

        self.actionCIPW.triggered.connect(self.CIPW)
        self.actionZirconCe.triggered.connect(self.ZirconCe)
        self.actionZirconTiTemp.triggered.connect(self.ZirconTiTemp)
        self.actionRutileZrTemp.triggered.connect(self.RutileZrTemp)
        self.actionCluster.triggered.connect(self.Cluster)
        self.actionMultiDimention.triggered.connect(self.MultiDimension)

        self.actionOpen.triggered.connect(self.getDataFile)
        self.actionSave.triggered.connect(self.saveDataFile)

        self.actionCnWeb.triggered.connect(self.goCnBBS)
        self.actionEnWeb.triggered.connect(self.goEnBBS)
        self.actionGoGithub.triggered.connect(self.goGitHub)
        self.actionVersionCheck.triggered.connect(self.checkVersion)

        self.actionCnS.triggered.connect(self.to_ChineseS)
        self.actionCnT.triggered.connect(self.to_ChineseT)
        self.actionEn.triggered.connect(self.to_English)
        self.actionLoadLanguage.triggered.connect(self.to_LoadLanguage)

        self.actionXY.triggered.connect(self.XY)
        self.actionXYZ.triggered.connect(self.XYZ)
        self.actionMagic.triggered.connect(self.Magic)
        self.actionMudStone.triggered.connect(self.Mud)

        self.pushButtonOpen.clicked.connect(self.getDataFile)
        self.pushButtonSave.clicked.connect(self.saveDataFile)
        self.pushButtonSort.clicked.connect(self.SetUpDataFile)
        self.pushButtonQuit.clicked.connect(qApp.quit)
        self.pushButtonUpdate.clicked.connect(self.checkVersion)

        self.actionQuit = QtWidgets.QAction('Quit', self)
        self.actionQuit.setShortcut('Ctrl+Q')
        self.actionQuit.setObjectName('actionQuit')
        self.actionQuit.triggered.connect(qApp.quit)

        self.pushButtonOpen.setText(_translate('MainWindow', u'Open Data'))
        self.pushButtonSave.setText(_translate('MainWindow', u'Save Data'))
        self.pushButtonSort.setText(_translate('MainWindow', u'Set Format'))
        self.pushButtonQuit.setText(_translate('MainWindow', u'Quit App'))
        self.pushButtonUpdate.setText(_translate('MainWindow',
                                                 u'Check Update'))

        self.pushButtonOpen.setIcon(QtGui.QIcon(LocationOfMySelf +
                                                '/open.png'))
        self.pushButtonSave.setIcon(QtGui.QIcon(LocationOfMySelf +
                                                '/save.png'))
        self.pushButtonSort.setIcon(QtGui.QIcon(LocationOfMySelf + '/set.png'))
        self.pushButtonQuit.setIcon(QtGui.QIcon(LocationOfMySelf +
                                                '/quit.png'))
        self.pushButtonUpdate.setIcon(
            QtGui.QIcon(LocationOfMySelf + '/update.png'))

        self.menuFile.setTitle(_translate('MainWindow', u'Data File'))

        self.menuGeoChem.setTitle(_translate('MainWindow', u'Geochemistry'))

        self.menuStructure.setTitle(_translate('MainWindow', u'Structure'))

        self.menuCalc.setTitle(_translate('MainWindow', u'Calculation'))

        self.menuStat.setTitle(_translate('MainWindow', u'Statistics'))

        self.menuMore.setTitle(_translate('MainWindow', u'Others'))

        self.menuHelp.setTitle(_translate('MainWindow', u'Help'))

        self.menuLanguage.setTitle(_translate('MainWindow', u'Language'))

        self.actionOpen.setText(_translate('MainWindow', u'Open Data'))
        self.actionSave.setText(_translate('MainWindow', u'Save Data'))

        self.actionTAS.setText(_translate('MainWindow', u'TAS'))
        self.actionTrace.setText(_translate('MainWindow', u'Trace'))
        self.actionRee.setText(_translate('MainWindow', u'REE'))
        self.actionPearce.setText(_translate('MainWindow', u'Pearce'))
        self.actionHarker.setText(_translate('MainWindow', u'Harker'))

        self.actionQAPF.setText(_translate('MainWindow', u'QAPF'))

        self.actionStereo.setText(_translate('MainWindow', u'Stereo'))
        self.actionRose.setText(_translate('MainWindow', u'Rose'))
        self.actionQFL.setText(_translate('MainWindow', u'QFL'))
        self.actionQmFLt.setText(_translate('MainWindow', u'QmFLt'))

        self.actionCIPW.setText(_translate('MainWindow', u'CIPW'))

        self.actionZirconCe.setText(_translate('MainWindow', u'ZirconCe'))
        self.actionZirconTiTemp.setText(
            _translate('MainWindow', u'ZirconTiTemp'))
        self.actionRutileZrTemp.setText(
            _translate('MainWindow', u'RutileZrTemp'))
        self.actionCluster.setText(_translate('MainWindow', u'Cluster'))
        self.actionMultiDimention.setText(
            _translate('MainWindow', u'MultiDimention'))

        self.actionXY.setText(_translate('MainWindow', u'X-Y plot'))
        self.actionXYZ.setText(_translate('MainWindow', u'X-Y-Z plot'))

        self.actionMagic.setText(_translate('MainWindow', u'Magic'))

        self.actionMudStone.setText(_translate('MainWindow', u'Sand-Silt-Mud'))

        self.actionVersionCheck.setText(_translate('MainWindow', u'Version'))
        self.actionCnWeb.setText(_translate('MainWindow', u'Chinese Forum'))
        self.actionEnWeb.setText(_translate('MainWindow', u'English Forum'))
        self.actionGoGithub.setText(_translate('MainWindow', u'Github'))

        self.actionCnS.setText(_translate('MainWindow', u'Simplified Chinese'))
        self.actionCnT.setText(_translate('MainWindow',
                                          u'Traditional Chinese'))
        self.actionEn.setText(_translate('MainWindow', u'English'))
        self.actionLoadLanguage.setText(
            _translate('MainWindow', u'Load Language'))

        self.ReadConfig()

        self.trans.load(LocationOfMySelf + '/' + self.Language)
        self.app.installTranslator(self.trans)
        self.retranslateUi()

    def retranslateUi(self):

        _translate = QtCore.QCoreApplication.translate

        self.talk = _translate(
            'MainWindow',
            'You are using GeoPython ') + version + '\n' + _translate(
                'MainWindow', 'released on ') + date + '\n'

        self.pushButtonOpen.setText(_translate('MainWindow', u'Open Data'))
        self.pushButtonSave.setText(_translate('MainWindow', u'Save Data'))
        self.pushButtonSort.setText(_translate('MainWindow', u'Set Format'))
        self.pushButtonQuit.setText(_translate('MainWindow', u'Quit App'))
        self.pushButtonUpdate.setText(_translate('MainWindow',
                                                 u'Check Update'))

        self.menuFile.setTitle(_translate('MainWindow', u'Data File'))

        self.menuGeoChem.setTitle(_translate('MainWindow', u'Geochemistry'))

        self.menuStructure.setTitle(_translate('MainWindow', u'Structure'))

        self.menuCalc.setTitle(_translate('MainWindow', u'Calculation'))

        self.menuStat.setTitle(_translate('MainWindow', u'Statistics'))

        self.menuMore.setTitle(_translate('MainWindow', u'Others'))

        self.menuHelp.setTitle(_translate('MainWindow', u'Help'))
        self.menuLanguage.setTitle(_translate('MainWindow', u'Language'))

        self.actionOpen.setText(_translate('MainWindow', u'Open Data'))
        self.actionSave.setText(_translate('MainWindow', u'Save Data'))

        self.actionTAS.setText(_translate('MainWindow', u'TAS'))
        self.actionTrace.setText(_translate('MainWindow', u'Trace'))
        self.actionRee.setText(_translate('MainWindow', u'REE'))
        self.actionPearce.setText(_translate('MainWindow', u'Pearce'))
        self.actionHarker.setText(_translate('MainWindow', u'Harker'))

        self.actionQAPF.setText(_translate('MainWindow', u'QAPF'))

        self.actionStereo.setText(_translate('MainWindow', u'Stereo'))
        self.actionRose.setText(_translate('MainWindow', u'Rose'))
        self.actionQFL.setText(_translate('MainWindow', u'QFL'))
        self.actionQmFLt.setText(_translate('MainWindow', u'QmFLt'))

        self.actionCIPW.setText(_translate('MainWindow', u'CIPW'))

        self.actionZirconCe.setText(_translate('MainWindow', u'ZirconCe'))
        self.actionZirconTiTemp.setText(
            _translate('MainWindow', u'ZirconTiTemp'))
        self.actionRutileZrTemp.setText(
            _translate('MainWindow', u'RutileZrTemp'))
        self.actionCluster.setText(_translate('MainWindow', u'Cluster'))
        self.actionMultiDimention.setText(
            _translate('MainWindow', u'MultiDimention'))

        self.actionXY.setText(_translate('MainWindow', u'X-Y plot'))
        self.actionXYZ.setText(_translate('MainWindow', u'X-Y-Z plot'))

        self.actionMagic.setText(_translate('MainWindow', u'Magic'))

        self.actionMudStone.setText(_translate('MainWindow', u'Sand-Silt-Mud'))

        self.actionVersionCheck.setText(
            _translate('MainWindow', u'Check Update'))
        self.actionCnWeb.setText(_translate('MainWindow', u'Chinese Forum'))
        self.actionEnWeb.setText(_translate('MainWindow', u'English Forum'))
        self.actionGoGithub.setText(_translate('MainWindow', u'Github'))

        self.actionCnS.setText(_translate('MainWindow', u'Simplified Chinese'))
        self.actionCnT.setText(_translate('MainWindow',
                                          u'Traditional Chinese'))
        self.actionEn.setText(_translate('MainWindow', u'English'))
        self.actionLoadLanguage.setText(
            _translate('MainWindow', u'Load Language'))

    def resizeEvent(self, evt=None):

        w = self.width()
        h = self.height()
        '''
        if h<=360:
            h=360
            self.resize(w,h)
        if w<=640:
            w = 640
            self.resize(w, h)
        '''

        step = (w * 94 / 100) / 5
        foot = h * 3 / 48

        #if foot<=10: foot=10

        self.tableView.setGeometry(
            QtCore.QRect(w / 100, h / 48, w * 98 / 100, h * 38 / 48))

        self.pushButtonOpen.setGeometry(
            QtCore.QRect(w / 100, h * 40 / 48, step, foot))

        self.pushButtonSave.setGeometry(
            QtCore.QRect(2 * w / 100 + step, h * 40 / 48, step, foot))

        self.pushButtonSort.setGeometry(
            QtCore.QRect(3 * w / 100 + step * 2, h * 40 / 48, step, foot))

        self.pushButtonUpdate.setGeometry(
            QtCore.QRect(4 * w / 100 + step * 3, h * 40 / 48, step, foot))

        self.pushButtonQuit.setGeometry(
            QtCore.QRect(5 * w / 100 + step * 4, h * 40 / 48, step, foot))

    def getfile(self):
        _translate = QtCore.QCoreApplication.translate
        fileName, filetype = QFileDialog.getOpenFileName(
            self, _translate('MainWindow', u'Choose Data File'), '~/',
            'All Files (*);;Text Files (*.txt)')  # 设置文件扩展名过滤,注意用双分号间隔

    def goGitHub(self):
        webbrowser.open('https://github.com/chinageology/GeoPython/wiki')

    def goCnBBS(self):
        webbrowser.open('http://bbs.geopython.com/-f2.html')

    def goEnBBS(self):
        webbrowser.open('http://bbs.geopython.com/English-Forum-f3.html')

    def checkVersion(self):

        #reply = QMessageBox.information(self, 'Version', self.talk)

        _translate = QtCore.QCoreApplication.translate

        url = 'https://raw.githubusercontent.com/chinageology/GeoPython/master/SourceCode/CustomClass.py'

        r = 0
        try:
            r = requests.get(url, allow_redirects=True)
            r.raise_for_status()
            NewVersion = 'self.target' + r.text.splitlines()[0]

        except requests.exceptions.ConnectionError as err:
            print(err)
            r = 0
            buttonReply = QMessageBox.information(
                self, _translate('MainWindow', u'NetWork Error'),
                _translate('MainWindow', u'Net work unavailable.'))
            NewVersion = "targetversion = '0'"

        except requests.exceptions.HTTPError as err:
            print(err)
            r = 0
            buttonReply = QMessageBox.information(
                self, _translate('MainWindow', u'NetWork Error'),
                _translate('MainWindow', u'Net work unavailable.'))
            NewVersion = "targetversion = '0'"

        exec(NewVersion)
        print('web is', self.targetversion)
        print(NewVersion)

        self.talk = _translate(
            'MainWindow',
            'Version Online is ') + self.targetversion + '\n' + _translate(
                'MainWindow',
                'You are using GeoPython ') + version + '\n' + _translate(
                    'MainWindow', 'released on ') + date + '\n'

        if r != 0:

            print('now is', version)
            if (version < self.targetversion):

                buttonReply = QMessageBox.question(
                    self, _translate('MainWindow', u'Version'),
                    self.talk + _translate(
                        'MainWindow',
                        'New version available.\n Download and update?'),
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                if buttonReply == QMessageBox.Yes:
                    print('Yes clicked.')
                    webbrowser.open(
                        'https://github.com/chinageology/GeoPython/blob/master/Download.md'
                    )
                else:
                    print('No clicked.')
            else:
                buttonReply = QMessageBox.information(
                    self, _translate('MainWindow', u'Version'), self.talk +
                    _translate('MainWindow', 'This is the latest version.'))

    def Update(self):
        webbrowser.open(
            'https://github.com/chinageology/GeoPython/wiki/Download')

    def ReadConfig(self):
        if (os.path.isfile('config.ini')):

            try:
                with open('config.ini', 'rt') as f:
                    try:
                        data = f.read()
                    except:
                        data = 'Language = \'en\''
                        pass

                    print(data)
                    try:
                        print("self." + data)
                        exec("self." + data)
                    except:
                        pass
                    print(self.Language)

            except ():
                pass

    def WriteConfig(self, text=LocationOfMySelf + '/en'):
        try:
            with open('config.ini', 'wt') as f:
                f.write(text)
        except ():
            pass

    def to_ChineseS(self):

        self.trans.load(LocationOfMySelf + '/cns')
        self.app.installTranslator(self.trans)
        self.retranslateUi()

        self.WriteConfig('Language = \'cns\'')

    def to_ChineseT(self):

        self.trans.load(LocationOfMySelf + '/cnt')
        self.app.installTranslator(self.trans)
        self.retranslateUi()

        self.WriteConfig('Language = \'cnt\'')

    def to_English(self):

        self.trans.load(LocationOfMySelf + '/en')
        self.app.installTranslator(self.trans)
        self.retranslateUi()
        self.WriteConfig('Language = \'en\'')

    def to_LoadLanguage(self):

        _translate = QtCore.QCoreApplication.translate
        fileName, filetype = QFileDialog.getOpenFileName(
            self, _translate('MainWindow', u'Choose Language File'), '~/',
            'Language Files (*.qm)')  # 设置文件扩展名过滤,注意用双分号间隔

        print(fileName)

        self.trans.load(fileName)
        self.app.installTranslator(self.trans)
        self.retranslateUi()

    def ErrorEvent(self):

        reply = QMessageBox.information(
            self, _translate('MainWindow', 'Warning'),
            _translate(
                'MainWindow',
                'Your Data mismatch this Plot.\n Some Items missing?\n Or maybe there are blanks in items names?\n Or there are nonnumerical value?'
            ))

    def SetUpDataFile(self):

        flag = 0
        ItemsAvalibale = self.model._df.columns.values.tolist()

        ItemsToTest = [
            'Label', 'Marker', 'Color', 'Size', 'Alpha', 'Style', 'Width'
        ]

        LabelList = []
        MarkerList = []
        ColorList = []
        SizeList = []
        AlphaList = []
        StyleList = []
        WidthList = []

        for i in range(len(self.model._df)):
            LabelList.append('Group1')
            MarkerList.append('o')
            ColorList.append('red')
            SizeList.append(10)
            AlphaList.append(0.6)
            StyleList.append('-')
            WidthList.append(1)

        data = {
            'Label': LabelList,
            'Marker': MarkerList,
            'Color': ColorList,
            'Size': SizeList,
            'Alpha': AlphaList,
            'Style': StyleList,
            'Width': WidthList
        }

        for i in ItemsToTest:
            if i not in ItemsAvalibale:
                # print(i)
                flag = flag + 1
                tmpdftoadd = pd.DataFrame({i: data[i]})

                self.model._df = pd.concat([tmpdftoadd, self.model._df],
                                           axis=1)

        self.model = PandasModel(self.model._df)

        self.tableView.setModel(self.model)

        if flag == 0:
            reply = QMessageBox.information(
                self, _translate('MainWindow', 'Ready'),
                _translate('MainWindow',
                           'Everything fine and no need to set up.'))

        else:
            reply = QMessageBox.information(
                self, _translate('MainWindow', 'Ready'),
                _translate(
                    'MainWindow',
                    'Items added, Modify in the Table to set up details.'))

    def getDataFile(self):
        _translate = QtCore.QCoreApplication.translate
        DataFileInput, filetype = QFileDialog.getOpenFileName(
            self, _translate('MainWindow', u'Choose Data File'), '~/',
            'Excel Files (*.xlsx);;Excel 2003 Files (*.xls);;CSV Files (*.csv)'
        )  # 设置文件扩展名过滤,注意用双分号间隔

        # #print(DataFileInput,filetype)

        if ('csv' in DataFileInput):
            self.raw = pd.read_csv(DataFileInput)
        elif ('xls' in DataFileInput):
            self.raw = pd.read_excel(DataFileInput)
        # #print(self.raw)

        self.model = PandasModel(self.raw)
        self.tableView.setModel(self.model)

    def saveDataFile(self):

        # if self.model._changed == True:
        # print('changed')
        # print(self.model._df)

        DataFileOutput, ok2 = QFileDialog.getSaveFileName(
            self, _translate('MainWindow', u'Save Data File'), 'C:/',
            'Excel Files (*.xlsx);;CSV Files (*.csv)')  # 数据文件保存输出

        if (DataFileOutput != ''):

            if ('csv' in DataFileOutput):
                self.model._df.to_csv(DataFileOutput,
                                      sep=',',
                                      encoding='utf-8')

            elif ('xls' in DataFileOutput):
                self.model._df.to_excel(DataFileOutput, encoding='utf-8')

    def CIPW(self):
        self.cipwpop = CIPW(df=self.model._df)
        try:
            self.cipwpop.CIPW()
            self.cipwpop.show()
        except (KeyError):
            self.ErrorEvent()

    def ZirconTiTemp(self):
        self.ztpop = ZirconTiTemp(df=self.model._df)
        try:
            self.ztpop.ZirconTiTemp()
            self.ztpop.show()
        except (KeyError):
            self.ErrorEvent()

    def RutileZrTemp(self):
        self.rzpop = RutileZrTemp(df=self.model._df)
        try:
            self.rzpop.RutileZrTemp()
            self.rzpop.show()
        except (KeyError):
            self.ErrorEvent()

    def Cluster(self):

        self.clusterpop = Cluster(df=self.model._df)
        self.clusterpop.Cluster()
        self.clusterpop.show()

        try:
            self.clusterpop.Cluster()
            self.clusterpop.show()
        except (KeyError):
            pass
            # self.ErrorEvent()

    def TAS(self):

        self.pop = TAS(df=self.model._df)
        try:
            self.pop.TAS()
            self.pop.show()
        except (KeyError):
            self.ErrorEvent()

    def REE(self):
        self.reepop = REE(df=self.model._df)
        try:
            self.reepop.REE()
            self.reepop.show()
        except (KeyError):
            self.ErrorEvent()

    def Trace(self):
        self.tracepop = Trace(df=self.model._df)
        try:
            self.tracepop.Trace()
            self.tracepop.show()
        except (KeyError):
            self.ErrorEvent()

    def Pearce(self):
        self.pearcepop = Pearce(df=self.model._df)

        try:
            self.pearcepop.Pearce()
            self.pearcepop.show()
        except (KeyError):
            self.ErrorEvent()

    def Harker(self):
        self.harkerpop = Harker(df=self.model._df)
        try:
            self.harkerpop.Harker()
            self.harkerpop.show()
        except (KeyError):
            self.ErrorEvent()

    def Stereo(self):
        self.stereopop = Stereo(df=self.model._df)
        try:
            self.stereopop.Stereo()
            self.stereopop.show()
        except (KeyError):
            self.ErrorEvent()

    def Rose(self):
        self.rosepop = Rose(df=self.model._df)
        try:
            self.rosepop.Rose()
            self.rosepop.show()
        except (KeyError):
            self.ErrorEvent()

    def QFL(self):
        self.qflpop = QFL(df=self.model._df)
        try:
            self.qflpop.Tri()
            self.qflpop.show()
        except (KeyError):
            self.ErrorEvent()

    def QmFLt(self):
        self.qmfltpop = QmFLt(df=self.model._df)
        try:
            self.qmfltpop.Tri()
            self.qmfltpop.show()
        except (KeyError):
            self.ErrorEvent()

    def QAPF(self):
        self.qapfpop = QAPF(df=self.model._df)
        try:
            self.qapfpop.QAPF()
            self.qapfpop.show()
        except (KeyError):
            self.ErrorEvent()

    def Mud(self):
        self.mudpop = MudStone(df=self.model._df)
        try:
            self.mudpop.Tri()
            self.mudpop.show()
        except (KeyError):
            self.ErrorEvent()

    def ZirconCe(self):
        # print('Opening a new popup window...')
        self.zirconpop = ZirconCe(df=self.model._df)
        try:
            self.zirconpop.MultiBallard()
            self.zirconpop.show()
        except (KeyError, ValueError):
            self.ErrorEvent()

    def XY(self):
        self.xypop = XY(df=self.model._df)
        try:
            self.xypop.Magic()
            self.xypop.show()
        except (KeyError):
            self.ErrorEvent()

    def XYZ(self):
        self.xyzpop = XYZ(df=self.model._df)
        try:
            self.xyzpop.Magic()
            self.xyzpop.show()
        except (KeyError):
            self.ErrorEvent()

    def Magic(self):
        self.magicpop = Magic(df=self.model._df)
        try:
            self.magicpop.Magic()
            self.magicpop.show()
        except (KeyError):
            self.ErrorEvent()

    def MultiDimension(self):
        self.mdpop = MultiDimension(df=self.model._df)
        try:
            self.mdpop.Magic()
            self.mdpop.show()
        except (KeyError):
            self.ErrorEvent()

    def Tri(self):
        pass

    def Auto(self):
        pass
class Player(Actor.Actor):
	'''
		Player class. images is a list of images for each direction. We may need
		to alter this to support animation.
	'''
	def __init__(self,gameState):
		super(Player,self).__init__()
		
		# load all images
		# up, down, left, right
		self.images = [0] * 4
		self.images[0], self.rect = util.loadImage(PLAYER_IDLE_UP, -1)
		self.images[1], self.rect = util.loadImage(PLAYER_IDLE_DOWN, -1)
		self.images[2], self.rect = util.loadImage(PLAYER_IDLE_LEFT, -1)
		self.images[3], self.rect = util.loadImage(PLAYER_IDLE_RIGHT, -1)
		
		# 0 = up, 1 = down, 2 = left, 3 = right
		self.direction = 0
		
		# assign image and position
		self.setImage(self.images[self.direction])
		self.setPos(START_X, START_Y)

		# load sword
		self.swordLeft        = pygame.sprite.Sprite()
		self.swordLeft.image,self.swordLeft.rect  = util.loadImage("swordSwingLeft.png")
		self.swordUp          = pygame.sprite.Sprite()
		self.swordUp.image,self.swordUp.rect    = util.loadImage("swordSwingUp.png")
		self.swordRight       = pygame.sprite.Sprite()
		self.swordRight.image,self.swordRight.rect = util.loadImage("swordSwingRight.png")
		self.swordDown        = pygame.sprite.Sprite()
		self.swordDown.image,self.swordDown.rect  = util.loadImage("swordSwingDown.png")
	
		self.gameState = gameState
	
	# Orient player with mouse
	def orient(self, mousePos):
		loc = mousePos - Vector2(self.getPos())
		angle = math.atan2(loc[1],loc[0])
		mag = math.fabs(angle)
		
		# if we're facing to the right
		if mag < math.pi / 4:
			self.setDir(3)
		# move left
		elif mag > 3*math.pi / 4:
			self.setDir(2)
		# either up or down
		else:
			if angle < 0:
				self.setDir(0)
			else:
				self.setDir(1)
	
	def setDir(self, newDir):
		self.direction = newDir
		self.image = self.images[self.direction]
	
	def collideWall(self, wall):
		# collision on the top of charcter
		if self.rect.top < wall.rect.bottom and self.rect.bottom > wall.rect.top and self.vel[1]<0:
			self.vel -= Vector2(0,0)
			self.rect.top = wall.rect.bottom
		# collision on the bottom of character
		if self.rect.bottom > wall.rect.top and self.rect.top < wall.rect.bottom and self.vel[1]>0:
                        self.vel -= Vector2(0,0)
                        self.rect.bottom = wall.rect.top
                # collision on the right side of character
                if self.rect.right > wall.rect.left and self.rect.left < wall.rect.right and self.vel[0]>0:
                        self.vel -= Vector2(0,0)
                        self.rect.right = wall.rect.left
                # collision on the left side of character
                if self.rect.left < wall.rect.right and self.rect.right > wall.rect.left and self.vel[0]<0:
                        self.vel -= Vector2(0,0)
                        self.rect.left = wall.rect.right
	
	def move(self, m):
		'''
			Press a key and add to our velocity vector
		'''
		if m == -1:
			self.vel = Vector2(0,0)
		elif m == 0:
			self.vel += Vector2(0,-1) * PLAYER_SPEED
		elif m == 1:
			self.vel += Vector2(0,1) * PLAYER_SPEED
		elif m == 2:
			self.vel += Vector2(-1,0) * PLAYER_SPEED
		elif m == 3:
			self.vel += Vector2(1,0) * PLAYER_SPEED
	
	def unMove(self, m):
		'''
			Once a key is released, remove that from velocity vector.
		'''
		if m == 0:
			self.vel -= Vector2(0,-1) * PLAYER_SPEED
		elif m == 1:
			self.vel -= Vector2(0,1) * PLAYER_SPEED
		elif m == 2:
			self.vel -= Vector2(-1,0) * PLAYER_SPEED
		elif m == 3:
			self.vel -= Vector2(1,0) * PLAYER_SPEED
	
	# TODO: FIX THIS
	def swingSword(self):
		'''
			When left mouse is pressed, sword is pushed out
		'''
		if self.direction == 0:
		 	self.swordUp.rect.bottomleft = self.rect.topleft
			self.swordUp.add(self.gameState.playerGroup)
		elif self.direction == 1:
		 	self.swordDown.rect.topleft = self.rect.bottomleft
			self.swordDown.add(self.gameState.playerGroup)
		elif self.direction == 2:
		 	self.swordLeft.rect.topright = self.rect.topleft
			self.swordLeft.add(self.gameState.playerGroup)
		elif self.direction == 3:
		 	self.swordRight.rect.topleft = self.rect.topright
			self.swordRight.add(self.gameState.playerGroup)

    	# TODO: Add to this
    	def shootBow(self):
        	'''
        	When right mouse is pressed, arrow is fire infront of character
		'''
        	print "Arrow Fired"
        
   	# TODO: Add to this
   	def useMagic(self):
        	'''
        	When space bar is pressed, magic is thrown towards the mouse pointer
        	Or infront of the character *Choice*
        	'''
        	pos = self.rect.center
        	self.magi = Magic(pos[0],pos[1])

        	self.magi.add(self.gameState.playerGroup)
        	
	
	def update(self):
		super(Player,self).update()

		# Check to see if we have touched edge of the screen
		if self.rect.left < TILEX * 2:
			self.gameState.nextMap("left", self.getPos())
		elif self.rect.right > WIDTH - (TILEX*2):
			self.gameState.nextMap("right", self.getPos())
		elif self.rect.top < 0:
			self.gameState.nextMap("up", self.getPos())
		elif self.rect.bottom > HEIGHT:
			self.gameState.nextMap("down", self.getPos())