source: remote_control/puzzlebox_brainstorms_client_interface_qt.py @ 65

Last change on this file since 65 was 65, checked in by sc, 11 years ago

puzzlebox_brainstorms_client_interface_qt.py:

  • initial checkin

qt4_form.ui:

  • initial checkin

qt4_form.py:

  • initial checkin

qt3_form.ui:

  • initial checkin

build.sh:

  • initial checkin

puzzlebox_logo.jpg:

  • initial checkin
File size: 11.1 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# Puzzlebox - Brainstorms - Client Interface
5#
6# Copyright Puzzlebox Productions, LLC (2010)
7#
8# This code is released under the GNU Pulic License (GPL) version 2
9# For more information please refer to http://www.gnu.org/copyleft/gpl.html
10#
11# Last Update: 2010.06.10
12#
13#####################################################################
14
15import os, sys
16
17from PyQt4.QtCore import Qt, SIGNAL
18from PyQt4.QtGui import *
19
20sys.path.append(os.path.join(os.getcwd(), "interface"))
21from qt4_form import Ui_Form
22
23import pygame
24#import pygame.font
25import pygame.image
26import pygame.locals
27
28from twisted.internet import reactor, protocol, defer
29
30import puzzlebox_brainstorms_configuration as configuration
31import puzzlebox_brainstorms_client as client
32import puzzlebox_brainstorms_client_interface_component as component
33import puzzlebox_brainstorms_client_interface_button as interface_button
34#import puzzlebox_logger
35
36#####################################################################
37# Globals
38#####################################################################
39
40DEBUG = 1
41
42FLIP = 1
43
44DISCRETE_CONTROL_COMMANDS = configuration.DISCRETE_CONTROL_COMMANDS
45
46SERVER_HOST = configuration.SERVER_HOST
47SERVER_PORT = configuration.SERVER_PORT
48
49DISPLAY_WINDOW_X_COORDINATE = configuration.DISPLAY_WINDOW_X_COORDINATE
50DISPLAY_WINDOW_Y_COORDINATE = configuration.DISPLAY_WINDOW_Y_COORDINATE
51DISPLAY_WINDOW_X_DIMENSION = configuration.DISPLAY_WINDOW_X_DIMENSION
52DISPLAY_WINDOW_Y_DIMENSION = configuration.DISPLAY_WINDOW_Y_DIMENSION
53
54WINDOW_BACKGROUND_COLOR = configuration.WINDOW_BACKGROUND_COLOR
55
56IMAGE_DIRECTORY = configuration.IMAGE_DIRECTORY
57
58BUTTON_LAYOUT = configuration.BUTTON_LAYOUT
59
60#####################################################################
61# Classes
62#####################################################################
63
64class puzzlebox_brainstorms_client_interface( \
65         component.puzzlebox_brainstorms_client_interface_component, \
66         client.puzzlebox_brainstorms_client):
67       
68        def __init__(self, log, \
69                     display_window_x_coordinate, \
70                     display_window_y_coordinate, \
71                     display_window_x_dimension, \
72                     display_window_y_dimension, \
73                     window_background_color, \
74                     DEBUG=DEBUG):
75       
76                self.log = log
77                self.DEBUG = DEBUG
78               
79                self.display_window_x_coordinate = display_window_x_coordinate
80                self.display_window_y_coordinate = display_window_y_coordinate
81                self.display_window_x_dimension = display_window_x_dimension
82                self.display_window_y_dimension = display_window_y_dimension
83                self.window_background_color = window_background_color
84               
85                self.server_host = configuration.SERVER_HOST
86                self.server_port = configuration.SERVER_PORT
87                self.max_connection_attempts = configuration.MAX_CONNECTION_ATTEMPTS
88               
89                if (os.name == "nt") or (os.name == "dos"):
90                        self.operating_system = "windows"
91                else:
92                        self.operating_system = os.name
93               
94                self.pygame = pygame
95                self.screen = None
96                self.FLIP = FLIP
97                self.DISCRETE_CONTROL_COMMANDS = DISCRETE_CONTROL_COMMANDS
98                self.image_directory = IMAGE_DIRECTORY
99               
100                self.initialize_pygame()
101               
102                self.pygame.FLIP = self.FLIP
103               
104                self.buttons = {}
105                self.match_key_index = {}
106               
107                self.initialize_buttons(BUTTON_LAYOUT)
108               
109                self.update_display()
110       
111       
112        #####################################################################
113       
114        def initialize_pygame(self):
115               
116                if (self.operating_system != "windows"):
117                        os.environ['SDL_VIDEO_WINDOW_POS'] = \
118                           "%i,%i" % (self.display_window_x_coordinate, \
119                                      self.display_window_y_coordinate)
120               
121                self.pygame.init()
122               
123                if (self.FLIP):
124                       
125                        self.screen = self.pygame.display.set_mode((self.display_window_x_dimension, \
126                                                                    self.display_window_y_dimension), \
127                                                                   pygame.HWSURFACE|pygame.DOUBLEBUF)
128               
129                else:
130                       
131                        self.screen = self.pygame.display.set_mode((self.display_window_x_dimension, \
132                                                                    self.display_window_y_dimension), \
133                                                                   pygame.HWSURFACE)
134               
135               
136                if (self.DEBUG >= 2):
137                        print "Display Driver:",
138                        print pygame.display.get_driver()
139                        print
140                        print "Display Info:"
141                        print pygame.display.Info()
142                        #print
143                        #print "Windows System Info:"
144                        #print pygame.display.get_wm_info()
145                        #print
146                        #print "Get Flags:",
147                        #print pygame.display.screen.get_flags()
148               
149               
150                #self.pygame.mouse.set_visible(0)
151                self.pygame.mouse.set_visible(1)
152               
153                self.pygame.display.set_caption('Puzzlebox Brainstorms - Client Interface')
154               
155                # Set Background
156                self.background = pygame.Surface(self.screen.get_size())
157                #self.background.set_alpha(0)
158                self.draw_background()
159       
160       
161        ##################################################################
162
163        def draw_background(self):
164               
165                self.background.fill(self.window_background_color)
166               
167                self.screen.blit(self.background, (0,0))
168       
169       
170        #####################################################################
171       
172        def initialize_buttons(self, button_layout):
173               
174                self.buttons = {}
175                self.match_key_index = {}
176               
177                for each in button_layout.keys():
178                       
179                        button = button_layout[each]
180                       
181                        if ((button['button_image'] != None) and \
182                            (button['button_image'] != '.') and \
183                            (button['button_image'] != '..') and \
184                            (os.path.exists(os.path.join(self.image_directory, button['button_image'])))):
185                               
186                                button_image_path = \
187                                   os.path.join(self.image_directory, button['button_image'])
188                       
189                        else:
190                                if self.DEBUG:
191                                        print "Error: Button image does not exist:"
192                                        print "   %s" % os.path.join(self.image_directory, button['button_image'])
193                                continue
194                       
195                       
196                        if ((button['activated_image'] != None) and \
197                            (button['activated_image'] != '.') and \
198                            (button['activated_image'] != '..') and \
199                            (os.path.exists(os.path.join(self.image_directory, button['activated_image'])))):
200                               
201                                activated_image_path = \
202                                   os.path.join(self.image_directory, button['activated_image'])
203                       
204                        else:
205                                if self.DEBUG:
206                                        print "Error: Activated button image does not exist:"
207                                        print "   %s" % os.path.join(self.image_directory, button['activated_image'])
208                                continue
209                       
210                       
211                        for match in button['match_keys']:
212                                self.match_key_index[match] = button['command']
213                       
214                       
215                        new_button = \
216                           interface_button.puzzlebox_brainstorms_client_interface_button( \
217                                   self.pygame, \
218                                   self.screen, \
219                                   button_image_path, \
220                                   activated_image_path, \
221                                   button['image_x'], \
222                                   button['image_y'], \
223                                   button['command'], \
224                                   button['match_keys'], \
225                                   self.DEBUG)
226                       
227                       
228                        self.buttons[ button['command'] ] = new_button
229       
230       
231        ##################################################################
232       
233        def update_button(self, command, activated):
234               
235                self.buttons[command].activated=activated
236                self.buttons[command].display()
237                self.update_display()
238       
239       
240        ##################################################################
241       
242        def process_mouse_click(self, position, mouse_button):
243               
244                if (mouse_button == 1):
245                        # first mouse button clicked
246                       
247                        postion_rect = self.pygame.Rect(position, (1,1) )
248                       
249                        for each in self.buttons.keys():
250                               
251                                if self.buttons[each].check_collision(postion_rect):
252                                       
253                                        command = self.buttons[each].command
254                                        self.update_button(command, activated=True)
255                                        self.send_command(command)
256       
257       
258        ##################################################################
259       
260        def process_mouse_release(self, position, mouse_button):
261               
262                if (mouse_button == 1):
263                        # first mouse button released
264                       
265                        postion_rect = self.pygame.Rect(position, (1,1) )
266                       
267                        for each in self.buttons.keys():
268                               
269                                if self.buttons[each].check_collision(postion_rect):
270                                       
271                                        command = self.buttons[each].command
272                                        self.update_button(command, activated=False)
273       
274       
275        ##################################################################
276       
277        def release_all_buttons(self):
278               
279                for each in self.buttons.keys():
280                               
281                                command = self.buttons[each].command
282                                self.update_button(command, activated=False)
283       
284       
285        ##################################################################
286       
287        def check_events(self):
288               
289                for event in self.pygame.event.get():
290                       
291                        if (event.type is self.pygame.locals.QUIT):
292                                reactor.stop()
293                       
294                       
295                        elif (event.type == self.pygame.locals.KEYDOWN):
296                               
297                                if 'key' in event.dict.keys():
298                                       
299                                        key_pressed = event.dict['key']
300                                       
301                                        if (key_pressed == self.pygame.K_ESCAPE):
302                                                reactor.stop()
303                                       
304                                       
305                                        elif (key_pressed in self.match_key_index.keys()):
306                                               
307                                                # keypress matches recognized key
308                                                command = self.match_key_index[key_pressed]
309                                                self.update_button(command, activated=True)
310                                                self.send_command(command)
311                       
312                       
313                        elif (event.type == self.pygame.locals.KEYUP):
314                               
315                                if 'key' in event.dict.keys():
316                                       
317                                        key_pressed = event.dict['key']
318                                       
319                                        if (key_pressed in self.match_key_index.keys()):
320                                               
321                                                # keypress matches recognized key
322                                                command = self.match_key_index[key_pressed]
323                                                self.update_button(command, activated=False)
324                       
325                       
326                        elif (event.type == self.pygame.locals.MOUSEBUTTONDOWN):
327                               
328                                position = event.pos
329                                mouse_button = event.button
330                               
331                                self.process_mouse_click(position, mouse_button)
332                       
333                       
334                        elif (event.type == self.pygame.locals.MOUSEBUTTONUP):
335                               
336                                # We release all activated buttons when a mouse button is
337                                # released because its possible the user may have pressed
338                                # the mouse button down while hovering over one button on
339                                # the screen, then dragged the pointer while still holding
340                                # down the mouse button, finally releasing it over another
341                                # button on the screen.
342                               
343                                mouse_button = event.button
344                               
345                                if (mouse_button == 1):
346                                        # First mouse button released
347                                        self.release_all_buttons()
348                       
349                       
350                        else:
351                               
352                                if self.DEBUG > 2:
353                                        print "Unrecognized event:",
354                                        print event
355               
356               
357                # Sleep timer provides approximately 33.3 fps
358                reactor.callLater(0.03, self.check_events)
359
360
361#####################################################################
362
363class puzzlebox_brainstorms_client_interface_qt(QWidget, Ui_Form):
364       
365        def __init__(self, parent = None):
366               
367                QWidget.__init__(self, parent)
368                self.setupUi(self)
369               
370                self.connect(self.pushButtonBluetoothConnect, \
371                             SIGNAL("clicked()"), \
372                             self.test)
373               
374               
375        def test(self):
376               
377                print "nice."
378               
379                self.spinBoxConcentrationThreshold.setValue(50)
380                self.spinBoxConcentrationThreshold.update()
381               
382                print dir(self.progressBarConcentration)
383               
384                self.progressBarConcentration.setValue(50)
385
386
387#####################################################################
388# Functions
389#####################################################################
390
391#####################################################################
392# Main
393#####################################################################
394
395if __name__ == '__main__':
396       
397        app = QApplication(sys.argv)
398       
399        f = puzzlebox_brainstorms_client_interface_qt()
400        f.show()
401       
402        #print dir(app)
403        #app.setMainWidget(f)
404        app.exec_()
405       
406        #window.show()
407       
408        #sys.exit(app_.exec_())
409       
410        #f = Ui_Form()
411       
412        #print dir(f)
413       
414        #f.setupUi(self)
415       
416        #f.show()
417        #app.setMainWidget(f)
418        #app.exec_loop()
419
420
Note: See TracBrowser for help on using the repository browser.