aboutsummaryrefslogtreecommitdiff
path: root/lib/python/Screens/PiPSetup.py
blob: af313930078f8818fdd97ce52af465d4bf35929e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
from enigma import *
from Screens.Screen import Screen
from Screens.MessageBox import MessageBox
from Components.ActionMap import NumberActionMap
from Components.Label import Label
from Components.MenuList import MenuList
from Components.GUIComponent import *
from Components.ChoiceList import ChoiceEntryComponent, ChoiceList

import os

# this is not so great.
MAX_X = 720
MAX_Y = 576
MAX_W = MAX_X * 3 / 4
MAX_H = MAX_Y * 3 / 4
MIN_W = MAX_X / 8
MIN_H = MAX_Y / 8

def clip(val, min, max):
	if min <= val <= max:
		return val
	if min <= val:
		return max
	return min

class PiPSetup(Screen):
	def __init__(self, session, pip):
		Screen.__init__(self, session)
		
		self.pip = pip
		
		self.pos = (self.pip.instance.position().x(), self.pip.instance.position().y())
		self.size = self.pip.getSize()

		self.orgpos = self.pos
		self.orgsize = self.size
		
		self.resize = 100

		self["text"] = Label(_("Please use direction keys to move the PiP window.\nPress Bouquet +/- to resize the window.\nPress OK to go back to the TV mode or EXIT to cancel the moving."))

		self["actions"] = NumberActionMap(["PiPSetupActions", "NumberActions"], 
		{
			"ok": self.go,
			"cancel": self.cancel,
			"up": self.up,
			"down": self.down,
			"left": self.left,
			"right": self.right,
			"size+": self.bigger,
			"size-": self.smaller,
			"1": self.keyNumberGlobal,
			"2": self.keyNumberGlobal,
			"3": self.keyNumberGlobal,
			"4": self.keyNumberGlobal,
			"5": self.keyNumberGlobal,
			"6": self.keyNumberGlobal,
			"7": self.keyNumberGlobal,
			"8": self.keyNumberGlobal,
			"9": self.keyNumberGlobal,
			"0": self.keyNumberGlobal
		}, -1)
		
	def go(self):
		self.close()
	
	def cancel(self):
		self.pos = self.orgpos
		self.size = self.orgsize
		self.setPiPPosition()
		self.close()
	
	def setPiPPosition(self):
		self.pip.move(self.pos[0], self.pos[1])
		self.pip.resize(self.size[0], self.size[1])

	def resizePiP(self, resize):
		resize += 100 # resize is in percent, so resize=+20 means: 120%
		
		oldsize = self.size
		w = clip(self.size[0] * resize / 100, MIN_W, MAX_W)
		h = clip(self.size[1] * resize / 100, MIN_H, MAX_H)
		
		# calculate offset from center
		mx = (oldsize[0] - w) / 2
		my = (oldsize[1] - h) / 2
		
		self.size = (w, h)
		# reclip, account for new center
		self.moveRelative(x=mx, y=my)
	
	def moveRelative(self, x=0, y=0):
		self.pos = (clip(self.pos[0] + x, 0, MAX_X - self.size[0]), clip(self.pos[1] + y, 0, MAX_Y - self.size[1]))
		self.setPiPPosition()
	
	def up(self):
		self.moveRelative(y=-32)

	def down(self):
		self.moveRelative(y=+32)
	
	def left(self):
		self.moveRelative(x=-24)
	
	def right(self):
		self.moveRelative(x=+24)
	
	def bigger(self):
		self.resizePiP(+10)
	
	def smaller(self):
		self.resizePiP(-10)
	
	def keyNumberGlobal(self, number):
		
		if number > 0:
			colsize = MAX_X / 3
			rowsize = MAX_Y / 3
			col = (number-1) % 3
			row = (number-1) / 3

			self.size = (180, 135)

			# offset to keep center
			ox = (colsize - self.size[0]) / 2
			oy = (rowsize - self.size[1]) / 2

			self.pos = (col * colsize + ox, row * rowsize + oy)
		else:
			# restore old position
			self.pos = self.orgpos
			self.size = self.orgsize
		# reclip
		self.moveRelative()