From 9c73c0b791c33f9519b0d96c1257ab7b1cc677f7 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Fri, 17 Dec 2010 22:33:55 -0500 Subject: [PATCH] New module for poker client window finding on OSX. --- pyfpdb/OSXTables.py | 90 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 pyfpdb/OSXTables.py diff --git a/pyfpdb/OSXTables.py b/pyfpdb/OSXTables.py new file mode 100644 index 00000000..9d03cff7 --- /dev/null +++ b/pyfpdb/OSXTables.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""XWindows specific methods for TableWindows Class. +""" +# Copyright 2008 - 2010, Ray E. Barker + +# 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 + +######################################################################## + +import L10n +_ = L10n.get_translation() + +# Standard Library modules +import re +import os + +# pyGTK modules +import gtk + +# Other Library modules +from Quartz import CoreGraphics + +# FPDB modules +from TableWindow import Table_Window + +class Table(Table_Window): + + def find_table_parameters(self): + +# This is called by __init__(). Find the poker table window of interest, +# given the self.search_string. Then populate self.number, self.title, +# self.window, and self.parent (if required). + + self.number = None + WinList = CoreGraphics.CGWindowListCreate(0,0) + WinListDict = CoreGraphics.CGWindowListCreateDescriptionFromArray(WinList) + + for d in WinListDict: + if re.search(self.search_string, d['kCGWindowName'], re.I): + title = d['kCGWindowName'] + if self.check_bad_words(title): continue + self.number = d['kCGWindowNumber'] + self.title = title + if self.number is None: + return None + + def get_geometry(self): + + WinList = CoreGraphics.CGWindowListCreate(0,0) + WinListDict = CoreGraphics.CGWindowListCreateDescriptionFromArray(WinList) + + for d in WinListDict: + if d['kCGWindowNumber'] == self.number: + return {'x' : d['kCGWindowBounds']['X'], + 'y' : d['kCGWindowBounds']['Y'], + 'width' : d['kCGWindowBounds']['Width'], + 'height' : d['kCGWindowBounds']['Height'] + } + return None + + def get_window_title(self): + WinList = CoreGraphics.CGWindowListCreate(0,0) + WinListDict = CoreGraphics.CGWindowListCreateDescriptionFromArray(WinList) + + for d in WinListDict: + if d['kCGWindowNumber'] == self.number: + return d['kCGWindowName'] + return None + + def topify(self, window): +# The idea here is to call set_transient_for on the HUD window, with the table window +# as the argument. This should keep the HUD window on top of the table window, as if +# the hud window was a dialog belonging to the table. + +# This is the gdkhandle for the HUD window + gdkwindow = gtk.gdk.window_foreign_new(window.number) + gdkwindow.set_transient_for(self.gdkhandle)