Statistics
| Branch: | Revision:

root / python / hope.py

History | View | Annotate | Download (33.5 KB)

1
#!usr/bin/python  
2
"""HOPE
3
Developed on the Kavi kit.
4
STATUS  : Working
5
FEATURES: Font and background with all the widgets included
6
COMMENTS: Frame has appeared with bgcolor and font settings
7
          * Level1 - Alphabet triple buttons Added
8
          * Level2 - Alapabet buttons and Back button are Added
9
            Level3 - Text boxes  are added
10
                   - MORE and BACK buttons Added
11
                   - DONE and ERASE buttons are Added
12
            LevelF - Addition of the text Box used to read out the sentence
13

14
          * Timer is intiated
15
          * Methods included : 1] on_timer() # defines the focus action
16
                               2] on_close () # defines exit action
17
          * Scaning of the alphabet Triples is done
18
          * When a button in level one is clicked the values in the aplhabet
19
            buttons in level 2 change
20
          * Scanings of LEVEL2 buttons[Alphabet,back,done and erase] is done.
21
          * Actions performed when level2 buttons are clicked is defined
22
          * Erase - erases the text in the read out textbox and returns to level three
23
          * Undo - Clears the text in spell mode and word mode textboxes
24
                   and returns to level one
25
          * Back - Returns focus to level one
26
          * #    - Copies the spell mode text to the readout box and goes to
27
                   levelone after focussing done and erase buttons
28

29
            Spell mode function
30
            Spellmode andWord mode logic Added
31
            Templete mode is added
32
          * Done action is added
33
          * Automatic Button Resize
34
          * Skips scanning blank textboxes
35
          * Text to Speech
36
                -espeak is used[Note:Windows users need to install espeak and copy the espeak
37
                 exe to system32 folder
38
                -Male and Female Voices are available and are set in the launch_box
39
           
40
"""
41
##Import Necessary Modules
42
try:
43
    import wx
44
    import time
45
    import subprocess
46
    import pickle
47
    import sched
48
    import os
49
    import platform
50
    from operator import itemgetter
51
except ImportError:
52
    raise ImportError,"Please check whether all necessary modules are installed"
53

    
54
#*******************************************************************************#
55

    
56
## Main class Definition
57

    
58
class Class_Frame(wx.Frame):
59
    global SPEED,BG_COLOR,path,GENDER,wav_path
60
    path = "../Hope/"
61
    wav_path = "../Voices/"
62
    scan_L1 = -1
63
    scan_L2 = -1
64
    scan_L3 = -1
65
    Level = 1
66
    clr = ""
67
    label_prt = ''
68
    BG_COLOR = '#C0C0C0'
69
    btn_color = '#f0f8ff'#wx.WHITE
70
    focus_color = '#fffacd'#(255,192,203)
71
    sm_color = (173,234,234)#blue
72
    sm1_color = (250,128,114)#salmon
73
    sm_word = ''#spell mode
74
    sm_prev = ''
75
    word_prev = ''
76
    word = ''
77
    refresh_word = ''
78
    temp =0
79
    n = 1 #word mode
80
    wm_flag = 0
81
    done = 1
82
    erase = 0
83
    loop = 0
84
    no_of_wm_txtbx = 4
85
    Lvl = {"Level_1":1,"Level_2":2,"Level_3":3}
86
    temp_button = ["TEMP","UNDO","EXIT"]
87
    Alp_tri_dict =  {0:"ABC",1:"DEF",2:"GHI",3:"JKL",4:"MNO",5:"PQR",6:"STU",7:"VWX",8:"YZ#",9:"123"}
88
    
89
    speed_dict = {1:1000,2:1500,3:2000}
90
    gender_dict = {1:'Female',2:'Male'}
91
    config_file = open("../launch/configuration.pkl", 'rb')
92
    config_settin = pickle.load(config_file)
93
    config_file.close()
94
    SPEED = speed_dict[config_settin['SPEED']]
95
    GENDER = gender_dict[config_settin['GENDER']]
96
    def __init__(self, parent, id, title): #initalisation method
97
        #frame method with frame parameters passed
98
        wx.Frame.__init__(self, parent, id, title, size=(1024, 600)) 
99
        self.panel = wx.Panel(self, -1) # creates frame panel
100
        self.panel.SetBackgroundColour(BG_COLOR)   #Panel Backgnd color 
101
        #font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)   
102
        font = wx.Font(16, wx.ROMAN, wx.NORMAL, wx.BOLD)
103
        font.SetPointSize(18)   # font size settings
104
        if platform.machine()=='armv7l':
105
          #  subprocess.call(['./gpio.sh','133','low'])
106
                os.system("sudo i2cset -y 2 0x4d 0x45 >/dev/null")
107
                        
108
                os.system("sudo i2cset -y 2 0x4d 0x65 >/dev/null")
109
                os.system("sudo i2cset -y 2 0x4d 0x89 >/dev/null")
110
################################################################################
111
        
112
                #"""     WIDGETS INCLUSION       """#
113
        
114
################################################################################
115

    
116
###   Main BOX - Vbox     ###
117

    
118
        vbox = wx.BoxSizer(wx.VERTICAL)#boxsizer for placement of widgets
119

    
120
        vbox.Add((-1, 10))#spacing
121
        
122
############################    LEVEL ONE    ##################################
123

    
124
        
125
        Level1 = wx.BoxSizer(wx.HORIZONTAL)#panel for buttons of alphabet triples
126
        gs1 = wx.GridSizer(1, len(self.Alp_tri_dict), 1, 1)  #gridsizer for the alphabet triple buttons
127
        self.b = []
128
        for j in xrange(len(self.Alp_tri_dict)): #loop to add the buttons to the grid and to set the font
129
            self.b.append(wx.Button(self.panel,-1, self.Alp_tri_dict[j],size=(15,75)))#button creation
130
            gs1.Add(self.b[j], 0, wx.EXPAND)
131
            self.b[j].SetFont(font)
132
            self.b[j].SetBackgroundColour(self.btn_color)
133
            self.b[j].Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
134
        Level1.Add(gs1, 1,wx.EXPAND ) # Add the grid to level one
135
        vbox.Add(Level1, 0,wx.TOP|wx.ALIGN_CENTER|wx.EXPAND , 10) # Add level one to the panel
136

    
137
########################        LEVEL TWO       ###############################
138

    
139
        vbox.Add((-1, 20))
140

    
141
        Level2 = wx.BoxSizer(wx.HORIZONTAL)#Boxsizer for buttons of alphabets , text boxes ,More,back,DONE,Erase
142
        
143
###  Alphabet buttons and Back Button inclusion
144
        Alpt = wx.BoxSizer(wx.VERTICAL) #Vertical sizer for the alphabet buttons
145
        self.b11 = wx.Button(self.panel, -1,'Back',size=(100,50))#BUTTON CREATION
146
        self.b12 = wx.Button(self.panel, -1, 'A')
147
        self.b13 = wx.Button(self.panel, -1, 'B')
148
        self.b14 = wx.Button(self.panel, -1, 'C')
149
        self.alp = [self.b11,self.b12,self.b13,self.b14]    #button list
150
        Alpt_gs = wx.GridSizer(4, 1, 3, 3)  #Alphabet button grid
151
        #Alpt_gs.AddSpacer(2)
152
        for j in xrange(4): #loop to add the buttons to the grid and to set the font
153
            Alpt_gs.Add(self.alp[j], 0, wx.EXPAND)
154
            self.alp[j].SetFont(font)
155
            self.alp[j].SetBackgroundColour(self.btn_color) # colour settings
156
            self.alp[j].Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
157
        Alpt.Add(Alpt_gs, 1, wx.LEFT)   #Add alphabet grid to box
158
        Level2.Add(Alpt, 1, wx.EXPAND)  #Add alphabet box to the Level2 boxsizer
159
    
160
###  Text Boxes buttons inclusion
161

    
162
        text_col = wx.BoxSizer(wx.VERTICAL) # Vertical sizer for text boxes
163
        self.txt_bx1 = wx.TextCtrl(self.panel, -1,size=(600,15),style = wx.TE_LEFT) #text box for spell mode
164
        self.txt_bx1.SetBackgroundColour(self.sm_color)#SET colour of the spell mode text box
165
        text_col.Add(self.txt_bx1, 1,wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT) #Add spell text box to textbox sizer
166
        #self.txt_bx2.SetSize((200,200))
167
        text_col.AddSpacer(5)#for spacing between text boxes
168
        self.txt_bx2 = wx.TextCtrl(self.panel, -1,size=(600,15),style=wx.TE_LEFT) #text box for word mode
169
        text_col.Add(self.txt_bx2, 1,wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT ) #Add word text box to textbox sizer
170
        text_col.AddSpacer(5)#for spacing between text boxes
171
        self.txt_bx3 = wx.TextCtrl(self.panel, -1,size=(600,15),style = wx.TE_LEFT)
172
        text_col.Add(self.txt_bx3, 1,wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT )
173
        text_col.AddSpacer(5)#for spacing between text boxes
174
        self.txt_bx4 = wx.TextCtrl(self.panel, -1,size=(600,15),style = wx.TE_LEFT)
175
        text_col.Add(self.txt_bx4, 1,wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT)
176
        text_col.AddSpacer(5)#for spacing between text boxes
177
        self.txt_bx5 = wx.TextCtrl(self.panel, -1,size=(600,15))
178
        text_col.Add(self.txt_bx5, 1,wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT)
179
       #text_col.AddSpacer(5)#for spacing between text boxes
180
        self.txt_bx1.SetFont(font)
181
        self.txt_bx2.SetFont(font)
182
        self.txt_bx3.SetFont(font)
183
        self.txt_bx4.SetFont(font)
184
        self.txt_bx5.SetFont(font)
185
### INCLUSION of MORE and ERASE buttons
186
        
187
        More_bck= wx.BoxSizer(wx.HORIZONTAL) #sizer to add more and back buttons
188
        More_bck_gs = wx.GridSizer(1, 2, 1, 1)  #grid to add the buttons
189
        #MORE and BACK button Creation
190
        self.b15 = wx.Button(self.panel, -1, 'MORE',size=(120,40))
191
        self.b16 = wx.Button(self.panel, -1, 'BACK',size=(120,40))
192
        More_bck_gs.AddMany( [(self.b15, 0, wx.EXPAND),
193
            (self.b16, 0,wx.EXPAND )])  #Addition of button to the grid
194
        #Font and color settings of the buttons
195
        self.b15.SetFont(font)
196
        self.b16.SetFont(font)
197
        self.b15.SetBackgroundColour(self.btn_color)
198
        self.b16.SetBackgroundColour(self.btn_color)
199
        self.b15.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
200
        self.b16.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
201
        More_bck.Add(More_bck_gs, 1,wx.CENTER| wx.TOP) # Add the grid to the sizerwx.LEFT | wx.RIGHT|
202
        text_col.AddSpacer(5)
203
        text_col.Add(More_bck, 1,wx.EXPAND |wx.ALIGN_CENTER)    #Add the more_bck sizer to the text_col sizer
204
        
205
        Level2.Add(text_col, 1, wx.CENTER|wx.EXPAND) #Add text_col sizer to the level2 sizer
206

    
207
### INCLUSION of DONE and ERASE buttons
208
        Done_Ers = wx.BoxSizer(wx.VERTICAL) #sizer to add DONE and ERASE buttons
209
        Done_Ers_gs = wx.GridSizer(2, 1, 1, 1)  #Grid to add the buttons
210
        # Creation of DONE and ERASE buttons
211
        self.b17 = wx.Button(self.panel, -1, 'DONE',size=(100,40)) #
212
        self.b18 = wx.Button(self.panel, -1, 'ERASE',size=(100,40))
213
        Done_Ers_gs.AddSpacer(10)
214
        # Addition of DONE and ERASE buttons to Done_Ers Grid
215
        Done_Ers_gs.AddMany( [(self.b17, 0,wx.EXPAND),#wx.ALIGN_CENTER_VERTICAL
216
            (self.b18, 0, wx.EXPAND)])#, wx.EXPAND
217
        Done_Ers_gs.AddSpacer(20)
218
        #Font settings of DONE and ERASE buttons
219
        self.b17.SetFont(font)
220
        self.b18.SetFont(font)
221
        self.b17.SetBackgroundColour(self.btn_color)
222
        self.b18.SetBackgroundColour(self.btn_color)
223
        self.b17.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
224
        self.b18.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
225
        #Addition of Done_Ers Grid to Done_Ers Sizer
226
        Done_Ers.Add(Done_Ers_gs, 1, wx.ALIGN_RIGHT | wx.RIGHT)
227
        #Addition of Done_Ers Sizer to Level2 sizer
228
        Level2.Add(Done_Ers, 1,wx.EXPAND)
229

    
230
        vbox.Add(Level2, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, 10) #Add level2 boxsizer to main box
231

    
232
                
233
######################   LEVELF READOUT TEXT BOX     ###########################
234

    
235

    
236
###INCLUSION of the Readout Textbox
237
        
238
        vbox.Add((-1, 30))#spacing bottom
239
        LevelF = wx.BoxSizer(wx.HORIZONTAL) # boxer to include the text box
240
        self.senttxt_bx = wx.TextCtrl(self.panel, -1) #Text Box Creation
241
        self.senttxt_bx.SetFont(font)
242
        LevelF.Add(self.senttxt_bx, 1,wx.EXPAND | wx.LEFT | wx.RIGHT  )#Addition of the text box to the sizer
243
        vbox.Add(LevelF, 0, wx.ALIGN_CENTER | wx.EXPAND | wx.LEFT | wx.RIGHT, 10)#Add the sizer to the Main box
244
        vbox.Add((-1, 10))  #spacing
245
        
246

    
247
#################      FOR PROPER DISPLAY OF WIDGETS       #############
248
        
249
        self.panel.SetSizer(vbox)   # to display the elements in the frame
250

    
251
        # Bind the button click to the action that is to happenwx.EVT_LEFT_DOWN|
252
        self.panel.Bind(wx.EVT_LEFT_DOWN, self.action)
253
        self.Bind(wx.EVT_BUTTON, self.action)
254
        self.alp = [self.b11,self.b12,self.b13,self.b14,self.b17,self.b18]
255
        self.txt = [self.txt_bx1,self.txt_bx2,self.txt_bx3,self.txt_bx4,self.txt_bx5,self.b15,self.b16]
256
        for loop in range(0,self.no_of_wm_txtbx+1):
257
            self.txt[loop].Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
258

    
259

    
260
                #"""     TIMER INCLUSION        """#
261

    
262

    
263
        TIMER_ID = 100  # pick a number to set timer id
264
        wx.EVT_TIMER(self.panel, TIMER_ID, self.on_timer)  # call the on_timer function
265
        self.timer = wx.Timer(self.panel, TIMER_ID)  # message will be sent to the panel
266
        self.timer.Start(SPEED)  # x100 milliseconds
267

    
268

    
269

    
270
                #"""     DISPLAY THE FRAME       """#
271

    
272

    
273

    
274
        self.Centre()   ##frame opened at the center of the screen
275
        self.Show(True) ##Displays the screen
276
        
277
#******************************************************************************#
278

    
279
###Method to stop the timer and exit HOPE###
280
        
281
    def on_close(self,event):
282
        self.timer.Stop()
283
        frame.Destroy()
284
    def OnKeyDown(self, event):
285
        keycode = event.GetKeyCode()
286
        #print keycode
287
        #if keycode == wx.WXK_SPACE or keycode == 65 or keycode == 66:
288
        self.action(event)
289
    def exit_hope(self):
290
        self.timer.Stop()
291
        self.Destroy()
292
        
293
#******************************************************************************#
294

    
295
### Method to set the focus automatically using timer
296

    
297
    def on_timer(self,event):
298
        
299
        if self.Level == self.Lvl["Level_1"]:
300
            # Reset the erase button colour special case!!After a word is selected.
301
            self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)
302
            self.b[self.scan_L1].SetBackgroundColour(self.btn_color) # Reset the button colour
303
            self.scan_L1 = (self.scan_L1 + 1) % len(self.Alp_tri_dict)
304
            self.b[self.scan_L1].SetBackgroundColour(self.focus_color)# Coloured Highlight of the focused button 
305
            self.b[self.scan_L1].SetFocus() # to set focus on the alphabet triples
306
            sound = self.b[self.scan_L1].GetLabel()
307
            if sound == 'YZ#':
308
                self.read_aloud("Y Z space")
309
            elif sound == '123':
310
                self.read_aloud("Template")
311
            elif sound == 'DEF':
312
                self.read_aloud("D E F")
313
            elif sound == 'GHI':
314
                self.read_aloud("G H I")
315
            elif sound == 'MNO':
316
                self.read_aloud("M N O")
317
            elif sound == 'STU':
318
                self.read_aloud("S T U")
319
            else :
320
                self.read_aloud(sound)
321

    
322
        elif self.Level == self.Lvl["Level_2"]:#focus the individual alphabets
323
                        
324
            self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)# Reset the button colour
325
            self.scan_L2 = (self.scan_L2 + 1) % 6
326
            self.alp[self.scan_L2].SetBackgroundColour(self.focus_color)# Coloured Highlight of the focused button 
327
            self.alp[self.scan_L2].SetFocus()# to set focus on the alphabet
328
            if  (self.scan_L2 ==5)&(self.label_prt == '#'): 
329
                    self.label_prt = ''
330
                    #Goback to level one
331
                    self.Level = self.Lvl["Level_1"]
332
                    #Start scaning the button one of level one
333
                    self.scan_L1 = -1
334
            if  (self.scan_L2 ==5)&(self.label_prt != '#'):
335
                    self.Level = self.Lvl["Level_2"]
336
                    self.scan_L2 = -1
337
                        
338
            if  (self.scan_L2 ==0)&(self.wm_flag == 1):
339
                    self.wm_flag = 0 #reset Flag
340
                    self.Clr_txt_bx()
341
            
342
            sound = self.alp[self.scan_L2].GetLabel()
343
            if sound == 'TEMP':
344
                self.read_aloud("Template")
345
            elif sound == '#':
346
                self.read_aloud("Space")
347
            else :
348
                 self.read_aloud(sound)
349

    
350
        elif self.Level == self.Lvl["Level_3"]:#focus on the textboxes ,more and back buttons
351
            self.erase = 0
352
            #reset Erase button color
353
            self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)
354
            if self.scan_L3 == 0:  # Spell mode text box default color is set to blue 
355
                 color = self.sm_color
356
            else :
357
                 color = self.btn_color
358
            self.txt[self.scan_L3].SetBackgroundColour(color)# Reset the button colour  
359
            if self.scan_L3 ==4:
360
                self.txt[self.scan_L3].SetValue(self.refresh_word)
361
            self.scan_L3 = (self.scan_L3 + 1)%len(self.txt)
362
            if (self.temp==1)&(self.scan_L3==0):
363
                self.txt[self.scan_L3].SetBackgroundColour(self.sm_color)# Reset the button 
364
                self.scan_L3 = (self.scan_L3 + 1)%len(self.txt)
365
            if self.scan_L3<=4:
366
                sound = self.txt[self.scan_L3].GetValue()
367
                self.refresh_word = sound
368
            else:
369
                sound = self.txt[self.scan_L3].GetLabel()
370
            refresh = 1
371
            while sound == '': # condition to skip empty text boxes
372
                self.refresh_word = self.txt[self.scan_L3-1].GetValue()
373
                if refresh == 1 and self.scan_L3>1:
374
                        self.txt[self.scan_L3-1].SetValue(self.refresh_word)
375
                        refresh = 0
376
                self.scan_L3 = (self.scan_L3 + 1)%len(self.txt)
377
                if self.scan_L3<=4:
378
                        sound = self.txt[self.scan_L3].GetValue()
379
                else:
380
                        sound = self.txt[self.scan_L3].GetLabel()
381

    
382
            self.txt[self.scan_L3].SetBackgroundColour(self.focus_color)# Coloured Highlight of the focused button 
383
            self.txt[self.scan_L3].SetFocus()# to set focus on the alphabet
384
            self.read_aloud(sound)
385
    def read_aloud(self,sound): 
386
        resume_time = self.timer.GetInterval()
387
        self.timer.Stop()
388
        #subprocess.call(['./playit.sh',GENDER,sound ])
389
        if os.path.isfile(wav_path+GENDER+'/'+sound+'.wav'):
390
            if platform.machine()=='armv7l':
391
                play_temp = wav_path+GENDER+'/'+sound+'.wav'
392
                subprocess.call(['aplay',play_temp])
393
            else:
394
                play = wx.Sound(wav_path+GENDER+'/'+sound+'.wav')
395
                play.Play()
396
        else :
397
                
398
                fname = wav_path+GENDER+"/input.txt"
399
                myfile = open(fname, "w")
400
                myfile.write(sound)
401
                myfile.close()
402
                fpath =sound+".wav"
403
                
404
                if GENDER == "Male":
405
                        os.chdir('../Voices/Male/')
406
                        subprocess.call(['espeak','-f','input.txt', '-ven+m3','-w',fpath ])
407
                else:
408
                        os.chdir('../Voices/Female/')
409
                        subprocess.call(['espeak','-f','input.txt', '-ven+f3','-w',fpath ])
410
                if platform.machine()=='armv7l':
411
                     subprocess.call(['aplay',fpath])
412
                else:
413
                     play = wx.Sound(fpath)
414
                     play.Play()
415
                os.chdir('../')
416
                os.chdir('../launch')
417
        self.timer.Start(resume_time)   
418

    
419
    def Clr_txt_bx(self):
420
        self.sm_word = self.clr   
421
        self.refresh_word=self.clr     
422
        # Clear the Spell mode & Word mode text box
423
        for j in xrange(self.no_of_wm_txtbx+1):
424
            self.txt[j].SetValue(self.clr)            
425
            
426
#******************************************************************************#
427
    def action(self,event):
428
##        print "Action Level:",self.Level
429
        if self.Level == self.Lvl["Level_1"]: # IF level one assign alphabet values to buttons in level two
430
            self.Level = self.Lvl["Level_2"] # A click will take the focus to level two
431
            self.temp = 0
432
            if (self.b[self.scan_L1] == self.b[-1]): # Check for last button to set as Templete/Undo button
433
                self.label1 = self.temp_button
434
            else:
435
                # Get The ALPLABET TRIPLES and split them to individual alphabets
436
                self.label1 = self.b[self.scan_L1].GetLabel()
437
            # Set the individual alphabets to the buttons in level2
438
            self.b12.SetLabel(self.label1[0])
439
            self.b13.SetLabel(self.label1[1])
440
            self.b14.SetLabel(self.label1[2])
441
            #Reset the clicked button Colour
442
            self.b[self.scan_L1].SetBackgroundColour(self.btn_color)
443
            self.scan_L2 = -1
444
 
445
        elif self.Level == self.Lvl["Level_2"]: # IF level Two
446
            #self.erase =1
447
            # Get the label value of the selected button
448
            self.label = self.alp[self.scan_L2].GetLabel()
449
            if (self.label1!= self.temp_button)&(len(self.sm_word)==0):
450
                File = path+self.label1 + ".txt"
451
                self.Fname = open(File,'r')
452
                self.file_list = self.Fname.readlines()
453
                self.Fname.close()
454
            if (self.label1 == self.temp_button):
455
                self.Fname = open(path+'temp.txt','r')
456
                self.file_list = self.Fname.readlines()
457
                self.Fname.close() 
458
            if (self.label == 'Back'):
459
                self.temp = 0
460
                self.Level = self.Lvl["Level_1"] #Goback to level one
461
                #Start scaning the button one of level one
462
                self.scan_L1=self.scan_L1 -3
463
            elif (self.label == '#'): # copy the spell mode text to the readout text box
464
                self.spell = self.txt_bx1.GetValue()
465
                self.word_prev = self.word # used to erase the last added word
466
                self.word +=self.spell #append the new word to the sentence
467
                self.word += ' '# add space
468
                self.senttxt_bx.SetValue(self.word)
469
                self.Clr_txt_bx()
470
                self.label_prt = '#'
471
                self.temp = 0
472
                # Reset color highlight of the # button
473
                self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)
474
                  
475
            elif (self.label == 'UNDO'):
476
                self.Clr_txt_bx()
477
                # Reset color highlight of the undo button
478
                self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)
479
                # Goback to level one
480
                self.Level = self.Lvl["Level_1"]
481
                # Start scaning the button one of level one
482
                self.scan_L1 = -1
483
            elif (self.label == 'TEMP'):
484
                self.word_list = self.file_list
485
                self.wlist=[]
486
                self.word_list = []
487
                for i in range(0,len(self.file_list)):
488
                        self.wlist.append(str(self.file_list[i][:-1]).split(','))
489
                        self.wlist[i][1] = int(self.wlist[i][1])
490
                self.wlist.sort(key=itemgetter(1),reverse=True)
491
                for i in range(0,len(self.file_list)):
492
                    self.word_list.append(self.wlist[i][0]) 
493
                for i in range(1,self.no_of_wm_txtbx+1):
494
                    self.txt[i].SetValue(self.word_list[i][:])#
495
                # Reset color highlight of the TEMP button
496
                self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)
497
                self.temp = 1 #template mode
498
                self.scan_L3 = 0
499
                self.txt[self.scan_L3].SetBackgroundColour(self.sm_color)
500
                self.Level = self.Lvl["Level_3"] #goto level 3
501

    
502
            elif self.label == 'ERASE':
503
                self.senttxt_bx.SetValue(self.word_prev)
504
                self.word = self.word_prev
505
                self.sm_word = self.clr
506
                self.temp = 0
507
                self.wm_flag = 0 #reset Flag
508
                #Start scaning the button one of level one
509
                self.scan_L1 = -1  #changed from -1 to 0[starts from wm txt box] so no use
510
                self.Level = self.Lvl["Level_3"]
511
            elif self.label == 'EXIT':
512
                #self.timer.Stop()
513
                #self.Destroy()
514
                self.exit_hope()
515
            elif self.label == 'DONE':# done button clicked
516
                if self.done ==1: # for first click to stop the scanning
517
                    self.scan_L2 = 4 # Retain the highlight at Done button
518
                    # Highlight the DONE button colour to different color than usual
519
                    self.alp[self.scan_L2].SetBackgroundColour(self.sm_color)
520
                    self.txt[0].SetBackgroundColour(self.sm_color)
521
                    if platform.machine()=='armv7l':
522
                        #subprocess.call(['./gpio.sh','133','high' ])
523
                        os.system("sudo i2cset -y 2 0x4d 0x4d >/dev/null")
524
                        os.system("sudo i2cset -y 2 0x4d 0x6d >/dev/null")
525
                        os.system("sudo i2cset -y 2 0x4d 0x87 >/dev/null")
526
                    self.read_aloud(self.word[:-1])
527
                    if platform.machine()=='armv7l':
528
                        #subprocess.call(['./gpio.sh','133','low' ])
529

    
530
                        os.system("sudo i2cset -y 2 0x4d 0x45 >/dev/null")
531
                        os.system("sudo i2cset -y 2 0x4d 0x65 >/dev/null")
532
                        os.system("sudo i2cset -y 2 0x4d 0x89 >/dev/null")
533

    
534
                    self.timer.Stop()# stopping the timer stops the scanning
535
                    self.wm_flag = 0 #reset Flag
536
                    self.word = self.word[:-1]+'\n'
537
                    str_word = str(self.word)
538
                    if self.word != '\n':
539
                        if len(str_word.rsplit())>1:
540
                                self.read_sent = open(path+'temp.txt','a+')
541
                        else:
542
                                i = 0
543
                                while(self.Alp_tri_dict[i].find(self.word[0])==-1):
544
                                        i = i+1
545
                                self.read_sent = open(path+self.Alp_tri_dict[i]+'.txt','a+')
546
                        guess =[]
547
                        guess_list= self.read_sent.readlines()
548
                        for i in range(0,len(guess_list)):
549
                                guess.append(str(guess_list[i][:-1]).split(','))
550
                                #self.wlist[i][0] = (self.wlist[i][1])
551
                        match = 0
552
                        for i in range(0,len(guess)):
553
                            if guess[i][0] == self.word[:-1]:
554
                                match =1
555
                                #print "match", self.word[:-1],guess[i][0]
556
                                break
557
                            else:
558
                                match = 0
559
                        if match == 0:
560
                                self.read_sent.writelines(self.word[:-1]+','+'1'+'\n')
561
                        self.read_sent.close()
562
                    self.Clr_txt_bx()
563
                    self.done *= -1 # invert the logic for second click
564
                else :
565
                    if platform.machine()=='armV7l':
566
                        #subprocess.call(['./gpio.sh','133','low'])
567

    
568
                        os.system("sudo i2cset -y 2 0x4d 0x45 >/dev/null")
569
                        os.system("sudo i2cset -y 2 0x4d 0x65 >/dev/null")
570
                        os.system("sudo i2cset -y 2 0x4d 0x89 >/dev/null")
571

    
572

    
573
                    self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)#Reset the Done button to the normal color
574
                    self.scan_L1 = -1 # set the scanning button as the first button in the level
575
                    self.Level = self.Lvl["Level_1"] # Set the active level as one
576
                    self.senttxt_bx.SetValue(self.clr)
577
                    self.sm_prev = self.clr
578
                    self.word = self.clr
579
                    self.label_prt = self.clr#loop in LEVEL_2
580
                    self.timer.Start(SPEED) # Resume the Scanning
581
                    self.done *= -1  # invert the logic for the next click
582
           
583
            else:
584
                self.temp = 0
585
                # Reset color highlight of the alphabet button
586
                self.alp[self.scan_L2].SetBackgroundColour(self.btn_color)
587
                # Copy the clicked alphabet button label to the spell mode textbox
588
                self.sm_prev = self.sm_word # copy the text to a variable incase to print previous data if back is pressed
589
                self.sm_word += self.label
590
                self.txt_bx1.SetValue(self.sm_word)
591
                if self.label1!= self.temp_button:
592
                    self.Update_words()                       
593
                #Set LEVEL as three and reset scan to scan the first element 
594
                self.scan_L3 = -1
595
                self.Level = self.Lvl["Level_3"]
596
        elif self.Level == self.Lvl["Level_3"]:
597
            
598
            # Get the label value of the selected button
599
            self.label_3 = self.txt[self.scan_L3].GetLabel()
600
            if (self.txt[self.scan_L3] == self.txt_bx1):
601
                #  color highlight of the spell mode button
602
                self.txt[self.scan_L3].SetBackgroundColour(self.sm1_color)
603
                #Set LEVEL as one and reset scan to scan the first element 
604
                self.scan_L1 = -1
605
                self.scan_L2 = -1
606
                self.Level = self.Lvl["Level_1"]
607
            elif self.label_3 == 'BACK':
608
                # Erase the last include alphabet
609
                self.sm_word = self.sm_prev
610
                self.txt_bx1.SetValue(self.sm_prev)
611
                self.Update_words()
612
                # Reset color highlight of the BACK button
613
                self.txt[self.scan_L3].SetBackgroundColour(self.btn_color)
614
                #Set LEVEL as one and reset scan to scan the first element 
615
                self.scan_L2 = -1
616
                self.Level = self.Lvl["Level_2"]
617
            elif self.label_3 == 'MORE':
618
                self.n += 1
619
                i = 1
620
                W = len(self.word_list)
621
                if W>=((self.n-1)*self.no_of_wm_txtbx ):
622
                    self.display = W-((self.n-1)*self.no_of_wm_txtbx)
623
                    while ((self.display>0)& (i<=self.no_of_wm_txtbx)):
624
                        self.txt[i].SetValue(self.word_list[(i+((self.n-1)*(self.no_of_wm_txtbx)))-1][:])#-1
625
                        i = i+1
626
                        self.display = self.display-1
627
                        if i<(self.no_of_wm_txtbx+1):
628
                            self.loop = 1
629
                        else: self.loop = 0
630
                    if ((self.display<self.no_of_wm_txtbx)&(self.display>=0)&(self.loop==1)):
631
                        for i in range(i,self.no_of_wm_txtbx+1):
632
                            self.txt[i].SetValue(self.clr)
633
                            self.loop = 0
634
                            self.n = 0
635
                    if (self.display <=0):
636
                        self.n = 0
637
                        self.loop = 0
638

    
639
            else :
640
                self.wm_word = self.txt[self.scan_L3].GetValue()
641
                str_wm_word = str(self.wm_word)
642
                if len(str_wm_word.rsplit())>1:
643
                        Fwrite = open(path+'temp.txt','r')
644
                else:
645
                        i = 0
646
                        while(self.Alp_tri_dict[i].find(self.wm_word[0])==-1):
647
                                i = i+1
648
                                #print self.Alp_tri_dict[i]+'.txt'
649
                        Fwrite = open(path+self.Alp_tri_dict[i]+'.txt','r')
650
                flist = Fwrite.readlines()
651
                Fwrite.close()
652
                if len(str_wm_word.rsplit())>1:
653
                        Fwrite = open(path+'temp.txt','w')
654
                else:
655
                        i = 0
656
                        while(self.Alp_tri_dict[i].find(self.wm_word[0])==-1):
657
                                i = i+1
658
                                #print self.Alp_tri_dict[i]+'.txt'
659
                        Fwrite = open(path+self.Alp_tri_dict[i]+'.txt','w')
660
                wordlist=[]
661
                wlist=[]
662
                for i in range(0,len(flist)):
663
                        wlist.append(str(flist[i][:-1]).split(','))
664
                        wlist[i][1] = int(wlist[i][1])
665
                wlist.sort(key=itemgetter(1),reverse=True)
666
                for i in range(0,len(flist)):
667
                        wordlist.append(wlist[i][0])
668
                match = 0
669
                for i in range(0,len(flist)):
670
                        if wlist[i][0] == self.wm_word:
671
                                wlist[i][1] = str((wlist[i][1])+1)
672
                        Fwrite.writelines((wlist[i][0])+','+str(wlist[i][1])+'\n')
673
                self.word_prev = self.word # used to erase the last added word
674
                self.word += self.wm_word # append a new word to the sentence 
675
                self.word += ' ' # add space
676
                self.senttxt_bx.SetValue(self.word)
677
                # Reset color highlight of the # button
678
                self.txt[self.scan_L3].SetBackgroundColour(self.btn_color)
679
                self.txt[self.scan_L3].SetValue(self.refresh_word)#refresh after the word is selected
680
                self.scan_L2 = 3 #goto done button
681
                self.Level = self.Lvl["Level_2"] #done is in level 2
682
                self.wm_flag = 1
683

    
684
    def Update_words(self):
685
        self.n = 1
686
        #self.word_list = self.file_list 
687
        search_word = self.sm_word
688
        #print self.sm_word
689
        self.wlist=[]
690
        self.word_list = []
691
        for i in range(0,len(self.file_list)):
692
                self.wlist.append(str(self.file_list[i][:-1]).split(','))
693
                self.wlist[i][1] = int(self.wlist[i][1])
694
        self.wlist.sort(key=itemgetter(1),reverse=True)
695
        for i in range(0,len(self.file_list)):
696
                self.word_list.append(self.wlist[i][0])
697
        update_list = []
698
        #print len(self.word_list) , len(search_word)
699
        for letter in range(0,len(search_word)):
700
            for word in range(0,len(self.word_list)): 
701
                if len(self.word_list[word])>letter:
702
                        if search_word[letter] == self.word_list[word][letter]:
703
                                update_list.append(self.word_list[word])
704
            self.word_list = update_list
705
            #print len(update_list)
706
            update_list = []
707
        self.k=1
708
        while ((self.k<=len(self.word_list))& (self.k<=self.no_of_wm_txtbx)&(len(search_word)!=0)):
709
            self.txt[self.k].SetValue(self.word_list[self.k-1][:])#-1
710
            self.k = self.k+1
711
        if self.k<self.no_of_wm_txtbx:
712
            for i in range(self.k,self.no_of_wm_txtbx+1):
713
               self.txt[i].SetValue(self.clr) 
714

    
715
## Main Loop:
716

    
717
if __name__ == "__main__":
718
    app = wx.App()
719
    Class_Frame(None, -1, 'HOPE')   ##main class
720
    app.MainLoop()
Redmine Appliance - Powered by TurnKey Linux