blob: 2d1533e1f9e70913aa0f3421b79bb3cef28aadd9 [file] [log] [blame]
# -*- coding: utf-8 -*-
'''
Copyright (C) 2012-2014 Diego Torres Milano
Created on oct 30, 2014
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@author: Diego Torres Milano
@author: Ahmed Kasem
'''
__version__ = '11.5.9'
import sys, os
import Tkinter, tkFileDialog, ttk
from com.dtmilano.android.culebron import Operation, Unit, Color
class Key:
GOOGLE_NOW='KEYCODE_ASSIST'
PERIOD='KEYCODE_PERIOD'
GO='KEYCODE_ENTER'
class Layout:
BUTTON_WIDTH=13
BUTTONS_NUMBER=9
class ControlPanel(Tkinter.Toplevel):
def __init__(self, culebron, printOperation, **kwargs):
self.culebron = culebron
self.printOperation = printOperation
self.parent = culebron.window
self.childWindow = Tkinter.Toplevel(self.parent)
self.notebook = ttk.Notebook(self.childWindow)
self.notebook.pack(fill=Tkinter.BOTH, padx=2, pady=3)
self.keycodeTab = ttk.Frame(self.notebook)
self.keyboardTab = ttk.Frame(self.notebook)
self.notebook.add(self.keycodeTab, text='KEYCODE')
self.notebook.add(self.keyboardTab, text='KEYBOARD')
self.childWindow.title('Control Panel')
self.childWindow.resizable(width=Tkinter.FALSE, height=Tkinter.FALSE)
self.childWindow.printOperation = printOperation
self.childWindow.grid()
self.childWindow.column = self.childWindow.row = 0
self.createKeycodeTab()
self.createKeyboardTab()
def createKeycodeTab(self):
''' KEYCODE '''
self.keycodeList = [
'KEYCODE_HOME', 'KEYCODE_DPAD_UP', 'KEYCODE_BACK', 'KEYCODE_SEARCH', 'KEYCODE_CHANNEL_UP', 'KEYCODE_TV',
'KEYCODE_MUSIC', 'KEYCODE_EXPLORER', 'KEYCODE_CAMERA', 'KEYCODE_POWER', 'KEYCODE_DPAD_LEFT','KEYCODE_DPAD_DOWN',
'KEYCODE_DPAD_RIGHT', 'KEYCODE_PAGE_UP', 'KEYCODE_CHANNEL_DOWN', 'KEYCODE_VOLUME_UP', 'KEYCODE_MEDIA_PLAY',
'KEYCODE_CONTACTS', 'KEYCODE_ZOOM_IN', 'SNAPSHOPT', 'KEYCODE_MENU', 'KEYCODE_DPAD_CENTER', 'KEYCODE_ENTER',
'KEYCODE_PAGE_DOWN', 'KEYCODE_BRIGHTNESS_DOWN', 'KEYCODE_VOLUME_DOWN', 'KEYCODE_MEDIA_PAUSE', 'KEYCODE_BOOKMARK',
'KEYCODE_ZOOM_OUT', 'REFRESH', 'KEYCODE_APP_SWITCH', 'KEYCODE_GOOGLE_NOW', 'KEYCODE_CALL', 'KEYCODE_ESCAPE',
'KEYCODE_BRIGHTNESS_UP', 'KEYCODE_VOLUME_MUTE', 'KEYCODE_MEDIA_STOP', 'KEYCODE_CALCULATOR', 'KEYCODE_SETTINGS', 'QUIT'
]
for keycode in self.keycodeList:
self.keycode = ControlPanelButton(self.keycodeTab, self.culebron, self.printOperation, value=keycode, text=keycode[8:],
width=Layout.BUTTON_WIDTH, bg=Color.DARK_GRAY, fg=Color.LIGHT_GRAY,
highlightbackground=Color.DARK_GRAY)
if keycode == 'REFRESH':
self.keycode.configure(fg=Color.BLUE, bg=Color.DARK_GRAY, text=keycode, command=self.keycode.refreshScreen)
self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
elif keycode == 'SNAPSHOPT':
self.keycode.configure(fg=Color.BLUE, bg=Color.DARK_GRAY, text=keycode, command=self.keycode.takeSnapshot)
self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
elif keycode == 'QUIT':
self.keycode.configure(fg=Color.BLUE, bg=Color.DARK_GRAY, text=keycode, command=self.childWindow.destroy)
self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
else:
self.keycode.configure(command=self.keycode.command)
self.keycode.grid(column=self.childWindow.column, row=self.childWindow.row)
self.tabLayout()
def createKeyboardTab(self):
''' KEYBOARD '''
self.keyboardList = [
'KEYCODE_1', 'KEYCODE_2', 'KEYCODE_3', 'KEYCODE_4', 'KEYCODE_5', 'KEYCODE_6', 'KEYCODE_7', 'KEYCODE_8', 'KEYCODE_9', 'KEYCODE_0',
'KEYCODE_Q', 'KEYCODE_W', 'KEYCODE_E', 'KEYCODE_R', 'KEYCODE_T', 'KEYCODE_Y', 'KEYCODE_U', 'KEYCODE_I', 'KEYCODE_O', 'KEYCODE_P',
'KEYCODE_A', 'KEYCODE_S', 'KEYCODE_D', 'KEYCODE_F', 'KEYCODE_G', 'KEYCODE_H', 'KEYCODE_J', 'KEYCODE_K', 'KEYCODE_L',
'KEYCODE_DEL', 'KEYCODE_Z', 'KEYCODE_X', 'KEYCODE_C', 'KEYCODE_V', 'KEYCODE_B', 'KEYCODE_N', 'KEYCODE_M',
'KEYCODE_.', 'KEYCODE_SPACE', 'KEYCODE_GO'
]
for keyboard in self.keyboardList:
self.keyboard = ControlPanelButton(self.keyboardTab, self.culebron, self.printOperation, value=keyboard, text=keyboard[8:],
width=Layout.BUTTON_WIDTH, bg=Color.DARK_GRAY, fg=Color.LIGHT_GRAY,
highlightbackground=Color.DARK_GRAY)
self.keyboard.configure(command=self.keyboard.command)
self.keyboard.grid(column=self.childWindow.column, row=self.childWindow.row)
self.tabLayout()
def tabLayout(self):
''' For all tabs, specify the number of buttons in a row '''
self.childWindow.column += 1
if self.childWindow.column > Layout.BUTTONS_NUMBER:
self.childWindow.column = 0
self.childWindow.row += 1
class ControlPanelButton(Tkinter.Button):
def __init__(self, parent, culebron, printOperation, value=None, **kwargs):
Tkinter.Button.__init__(self, parent, kwargs)
self.culebron = culebron
self.printOperation = printOperation
self.value = value
self.device = culebron.device
def command(self):
key = self.value
if key == 'KEYCODE_GOOGLE_NOW':
self.device.press(Key.GOOGLE_NOW)
self.printOperation(None, Operation.PRESS, Key.GOOGLE_NOW)
elif key == 'KEYCODE_.':
self.device.press(Key.PERIOD)
self.printOperation(None, Operation.PRESS, Key.PERIOD)
elif key == 'KEYCODE_GO':
self.device.press(Key.GO)
self.printOperation(None, Operation.PRESS, Key.GO)
else:
self.device.press(key)
self.printOperation(None, Operation.PRESS, key)
def refreshScreen(self):
self.culebron.refresh()
def takeSnapshot(self):
# No need to retake snapshot as it is already shown
self.culebron.saveSnapshot()