1 from Screens.Screen import Screen
2 from Screens.HelpMenu import HelpableScreen
3 from Screens.ChoiceBox import ChoiceBox
4 from Screens.MessageBox import MessageBox
5 from Screens.VirtualKeyBoard import VirtualKeyBoard
6 from Components.ActionMap import ActionMap, HelpableActionMap
7 from Components.ConfigList import ConfigListScreen
8 from Components.Label import Label, MultiColorLabel
9 from Components.Language import language
10 from Components.MenuList import MenuList
11 from Components.Pixmap import Pixmap
12 from Components.Sources.StaticText import StaticText
13 from Components.config import ConfigText, ConfigSelection, ConfigSlider, getConfigListEntry
17 from enigma import fbClass, eRCInput, eTimer, getDesktop
19 from __init__ import _
20 from bookmark import BookmarkManager, BookmarkData, CategoryData
21 from vbipc import VBController
23 strIsEmpty = lambda x: x is None or len(x) == 0
27 self._settingFileName = '%s/home/setting.ini' % vbcfg.APPROOT
34 if not os.path.exists(self._settingFileName):
38 f = open(self._settingFileName)
39 for line in f.readlines():
40 if line.startswith('start='):
41 tmp = line[6:len(line)-1].split()
44 self._type = int(tmp[1])
46 elif line.startswith('keymap='):
47 self._keymap = line[7:len(line)-1]
52 tmpstr.append('start=%s %d\n' % (self._start, self._type))
53 tmpstr.append('keymap=%s\n' % (self._keymap))
54 f = open(self._settingFileName, 'w')
59 self._start = 'http://vuplus.com'
61 self._keymap = 'us-rc'
63 def setData(self, start, types=0, keymap="us-rc"):
73 'keymap':self._keymap,
76 class BrowserPositionSetting:
78 self._positionFileName = '%s/home/position.cfg' % vbcfg.APPROOT
86 if not os.path.exists(self._positionFileName):
90 f = open(self._positionFileName)
95 self._left = int(pos[0])
96 self._width = int(pos[1])
97 self._top = int(pos[2])
98 self._height = int(pos[3])
101 tmpstr = "%d %d %d %d\n" % (self._left, self._width, self._top, self._height)
102 f = open(self._positionFileName, 'w')
106 def getDefault(self):
112 def setPosition(self, params):
113 self._left = params[0]
114 self._width = params[1]
115 self._top = params[2]
116 self._height = params[3]
119 def getPosition(self):
120 return (self._left, self._width, self._top, self._height)
122 class BrowserPositionWindow(Screen, ConfigListScreen):
124 <screen position="0,0" size="%d,%d" title="Browser Position Setup" backgroundColor="#27d8dee2" >
125 <ePixmap pixmap="skin_default/buttons/red.png" position="%d,%d" size="140,40" alphatest="on" />
126 <ePixmap pixmap="skin_default/buttons/green.png" position="%d,%d" size="140,40" alphatest="on" />"
128 <widget source="key_red" render="Label" position="%d,%d" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
129 <widget source="key_green" render="Label" position="%d,%d" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
131 <widget name="config" zPosition="2" position="%d,%d" size="500,200" scrollbarMode="showOnDemand" foregroundColor="#1c1c1c" transparent="1" />
134 def __init__(self, session):
135 w,h = session.desktop.size().width(), session.desktop.size().height()
137 # btn_red btn_green lb_red lb_green config
138 self.skin = self.skin % (w,h, cw-190,ch-110, cw+50,ch-110, cw-190,ch-110, cw+50,ch-110, cw-250,ch-50)
140 Screen.__init__(self,session)
141 self.session = session
142 self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
145 "cancel": self.keyCancel,
146 "red": self.keyCancel,
150 ConfigListScreen.__init__(self, self.list, session = self.session)
152 self["key_red"] = StaticText(_("Cancel"))
153 self["key_green"] = StaticText(_("Save"))
154 self["current"] = StaticText(_(" "))
155 vbcfg.g_position = vbcfg.getPosition()
158 def createSetup(self):
161 params = BrowserPositionSetting().getPosition()
162 vbcfg.setPosition(params)
169 self.dst_left = ConfigSlider(default = left, increment = 5, limits = (0, 720))
170 self.dst_width = ConfigSlider(default = width, increment = 5, limits = (0, 720))
171 self.dst_top = ConfigSlider(default = top, increment = 5, limits = (0, 576))
172 self.dst_height = ConfigSlider(default = height, increment = 5, limits = (0, 576))
174 self.dst_left_entry = getConfigListEntry(_("left"), self.dst_left)
175 self.dst_width_entry = getConfigListEntry(_("width"), self.dst_width)
176 self.dst_top_entry = getConfigListEntry(_("top"), self.dst_top)
177 self.dst_height_entry = getConfigListEntry(_("height"), self.dst_height)
179 self.list.append(self.dst_left_entry)
180 self.list.append(self.dst_width_entry)
181 self.list.append(self.dst_top_entry)
182 self.list.append(self.dst_height_entry)
184 self["config"].list = self.list
185 self["config"].l.setList(self.list)
187 def resetDisplay(self):
188 for entry in self["config"].getList():
189 self["config"].l.invalidateEntry(self["config"].getList().index(entry))
191 def adjustBorder(self):
192 if self["config"].getCurrent() == self.dst_left_entry:
193 if self.dst_left.value + self.dst_width.value >720:
194 self.dst_width.setValue(720-self.dst_left.value)
196 elif self["config"].getCurrent() == self.dst_width_entry:
197 if self.dst_left.value + self.dst_width.value >720:
198 self.dst_left.setValue(720-self.dst_width.value)
200 elif self["config"].getCurrent() == self.dst_top_entry:
201 if self.dst_top.value + self.dst_height.value >576:
202 self.dst_height.setValue(576-self.dst_top.value)
204 elif self["config"].getCurrent() == self.dst_height_entry:
205 if self.dst_top.value + self.dst_height.value >576:
206 self.dst_top.setValue(576-self.dst_height.value)
210 ConfigListScreen.keyLeft(self)
212 params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value))
213 vbcfg.setPosition(params)
216 ConfigListScreen.keyRight(self)
218 params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value))
219 vbcfg.setPosition(params)
222 params = (int(self.dst_left.value), int(self.dst_width.value), int(self.dst_top.value), int(self.dst_height.value))
223 BrowserPositionSetting().setPosition(params)
224 vbcfg.setPosition(vbcfg.g_position)
228 if self["config"].isChanged():
229 self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?"))
231 vbcfg.setPosition(vbcfg.g_position)
234 def cancelConfirm(self,ret):
236 vbcfg.setPosition(vbcfg.g_position)
240 class BrowserPreferenceWindow(ConfigListScreen, Screen):
242 <screen position="center,120" size="600,350" title="Preference">
243 <widget name="url" position="5,0" size="590,100" valign="center" font="Regular;20" />
244 <widget name="config" position="0,100" size="600,200" scrollbarMode="showOnDemand" />
246 <ePixmap pixmap="skin_default/buttons/red.png" position="310,310" size="140,40" alphatest="on" />
247 <ePixmap pixmap="skin_default/buttons/green.png" position="150,310" size="140,40" alphatest="on" />
249 <widget source="key_red" render="Label" position="310,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
250 <widget source="key_green" render="Label" position="150,310" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
253 def __init__(self, session, currentUrl):
254 self.session = session
255 Screen.__init__(self, session)
258 ConfigListScreen.__init__(self, self.menulist)
260 self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", ], {
262 "green" : self.keyGreen,
264 "cancel" : self.keyRed
266 self["key_red"] = StaticText(_("Cancel"))
267 self["key_green"] = StaticText(_("Save"))
268 self["url"] = Label()
270 self._currentPageUrl = currentUrl
271 if self._currentPageUrl is None:
272 self._currentPageUrl = ''
273 self._startPageUrl = None
274 self._keymapType = None
276 self.onLayoutFinish.append(self.layoutFinished)
278 def layoutFinished(self):
279 self.setTitle(_('Preference'))
281 def updateStartPageUrl(self):
282 if self.menuItemStartpage.value == "startpage":
283 self["url"].setText(self._startPageUrl)
284 elif self.menuItemStartpage.value == "current":
285 self["url"].setText(self._currentPageUrl)
286 elif self.menuItemStartpage.value == "direct":
287 self["url"].setText('')
290 url = self["url"].getText()
292 self.session.open(MessageBox, _('Invalid URL!!(Empty)\nPlease, Input to the URL.'), type = MessageBox.TYPE_INFO)
295 if url.find('/usr/local/manual') > 0:
297 self._keymapType = self.menuItemKeyboardLayout.value
298 BrowserSetting().setData(url, mode, self._keymapType)
300 #command_util = getCommandUtil()
301 #command_util.sendCommand('OP_BROWSER_NEED_RELOAD_KEYMAP')
308 def _cb_directInputUrl(data):
311 self["url"].setText(data)
312 if self["config"].l.getCurrentSelectionIndex() == 0 and self.menuItemStartpage.value == "direct":
313 self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://')
316 ConfigListScreen.keyLeft(self)
317 self.updateStartPageUrl()
320 ConfigListScreen.keyRight(self)
321 self.updateStartPageUrl()
323 def getKeymapTypeList(self):
325 for f in os.listdir("%s/keymap" % vbcfg.APPROOT):
326 filesplit = f.split('.')
327 if len(filesplit) < 2:
329 types.append((filesplit[1], filesplit[1]))
333 def makeMenuEntry(self):
335 l.append(("startpage", _("Start Page")))
336 if not strIsEmpty(self._currentPageUrl):
337 l.append(("current", _("Current Page")))
338 l.append(("direct", _("Direct Input")))
339 self.menuItemStartpage = ConfigSelection(default="startpage", choices = l)
340 self.menuEntryStartpage = getConfigListEntry(_("Startpage"), self.menuItemStartpage)
342 kl = self.getKeymapTypeList()
345 d = BrowserSetting().getData()
346 self._startPageUrl = d['start']
347 self._keymapType = d['keymap']
349 except: self._startPageUrl = 'http://vuplus.com'
350 self.updateStartPageUrl()
352 if self._keymapType is None or len(self._keymapType) == 0:
353 self._keymapType = "us-rc"
354 self.menuItemKeyboardLayout = ConfigSelection(default=self._keymapType, choices = kl)
355 self.menuEntryKeyboardLayout = getConfigListEntry(_("Keyboard Layout"), self.menuItemKeyboardLayout)
358 def resetMenuList(self):
360 self.menulist.append(self.menuEntryStartpage)
361 self.menulist.append(self.menuEntryKeyboardLayout)
363 self["config"].list = self.menulist
364 self["config"].l.setList(self.menulist)
366 class BookmarkEditWindow(ConfigListScreen, Screen):
367 CATEGORY,BOOKMARK = 0,1
369 <screen position="center,center" size="600,140" title="Bookmark Edit">
370 <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
372 <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
373 <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
375 <widget source="key_red" render="Label" position="310,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
376 <widget source="key_green" render="Label" position="150,100" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
378 <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="0,100" zPosition="10" size="35,25" transparent="1" alphatest="on" />
382 def __init__(self, session, _mode, _type, _data, _bm):
386 self.mSession = session
387 self.mBookmarkManager = _bm
389 if _data is not None:
390 vbcfg.DEBUG("0x%x" % _data.mId)
392 Screen.__init__(self, session)
395 ConfigListScreen.__init__(self, self.menulist)
397 self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], {
398 "ok" : self.keyGreen,
399 "green" : self.keyGreen,
401 "cancel" : self.keyRed,
404 self["VKeyIcon"] = Pixmap()
405 self["key_red"] = StaticText(_("Cancel"))
406 self["key_green"] = StaticText(_("Save"))
408 self.menuItemTitle = None
409 self.menuItemUrl = None
410 self.menuItemName = None
412 self.menuEntryName = None
413 self.menuEntryTitle = None
414 self.menuEntryUrl = None
416 self.makeConfigList()
417 self.onLayoutFinish.append(self.layoutFinished)
419 def layoutFinished(self):
420 self.setTitle(_('Bookmark') + ' ' + self.mMode)
422 def selectedItem(self):
423 currentPosition = self["config"].getCurrent()
424 if self.mType == BookmarkEditWindow.CATEGORY:
425 return (_("Name"), self.menuItemName)
427 if currentPosition == self.menuEntryTitle:
428 return (_("Title"), self.menuItemTitle)
429 elif currentPosition == self.menuEntryUrl:
430 return (_("Url"), self.menuItemUrl)
433 def showMessageBox(self, text):
434 msg = _("Invalid ") + text + _("!!(Empty)\nPlease, Input to the") + " " + text + "."
435 self.mSession.openWithCallback(self.showVKeyWindow, MessageBox, msg, MessageBox.TYPE_INFO)
438 def showVKeyWindow(self, data=None):
441 selected = self.selectedItem()
442 if selected is not None:
443 itemValue = selected[1].value
444 if strIsEmpty(itemValue):
446 itemTitle = selected[0]
448 self.session.openWithCallback(self.cbVKeyWindow, VirtualKeyBoard, title=itemTitle, text=itemValue)
450 def cbVKeyWindow(self, data=None):
452 selected = self.selectedItem()
453 if selected is not None:
454 selected[1].setValue(data)
457 if self.mType == BookmarkEditWindow.CATEGORY:
458 if self.mMode == _('Add'):
459 categoryName = self.menuItemName.value
460 if strIsEmpty(categoryName):
461 return self.showMessageBox(_("Category Name"))
462 self.mBookmarkManager.addCategory(categoryName)
464 if strIsEmpty(self.menuItemName.value):
465 return self.showMessageBox(_("Category Name"))
466 self.mData.mName = self.menuItemName.value
467 self.mBookmarkManager.updateCategory(self.mData)
469 if self.mMode == _('Add'):
470 bookmarkTitle = self.menuItemTitle.value
471 bookmarkUrl = self.menuItemUrl.value
472 if strIsEmpty(bookmarkTitle):
473 self["config"].setCurrentIndex(0)
474 return self.showMessageBox(_("Bookmark Title"))
475 if strIsEmpty(bookmarkUrl):
476 self["config"].setCurrentIndex(1)
477 return self.showMessageBox(_("Bookmark URL"))
478 self.mBookmarkManager.addBookmark(bookmarkTitle, bookmarkUrl, self.mData.mParent, 0)
480 if strIsEmpty(self.menuItemTitle.value):
481 self["config"].setCurrentIndex(0)
482 return self.showMessageBox(_("Bookmark Title"))
483 if strIsEmpty(self.menuItemUrl.value):
484 self["config"].setCurrentIndex(1)
485 return self.showMessageBox(_("Bookmark URL"))
486 self.mData.mTitle = self.menuItemTitle.value
487 self.mData.mUrl = self.menuItemUrl.value
488 self.mBookmarkManager.updateBookmark(self.mData)
492 if not self.saveData():
500 ConfigListScreen.keyLeft(self)
503 ConfigListScreen.keyRight(self)
505 def makeConfigList(self):
508 if self.mType == BookmarkEditWindow.CATEGORY:
509 self.menuItemName = ConfigText(default=self.mData.mName, visible_width=65, fixed_size=False)
511 self.menuEntryName = getConfigListEntry(_("Name"), self.menuItemName)
513 self.menulist.append(self.menuEntryName)
515 self.menuItemTitle = ConfigText(default=self.mData.mTitle, visible_width=65, fixed_size=False)
516 self.menuItemUrl = ConfigText(default=self.mData.mUrl, visible_width=65, fixed_size=False)
518 self.menuEntryTitle = getConfigListEntry(_("Title"), self.menuItemTitle)
519 self.menuEntryUrl = getConfigListEntry(_("Url"), self.menuItemUrl)
521 self.menulist.append(self.menuEntryTitle)
522 self.menulist.append(self.menuEntryUrl)
524 self["config"].list = self.menulist
525 self["config"].l.setList(self.menulist)
527 class BrowserBookmarkWindow(Screen):
529 <screen name="BrowserBookmarkWindow" position="center,120" size="600,400" title="Bookmark" >
530 <widget name="bookmarklist" position="0,0" size="600,200" zPosition="10" scrollbarMode="showOnDemand" />
532 <ePixmap pixmap="skin_default/buttons/key_0.png" position="556,330" size="35,30" alphatest="on" />
533 <widget source="key_0" render="Label" position="258,330" zPosition="1" size="300,30" font="Regular;20" halign="right" valign="center"/>
535 <ePixmap pixmap="skin_default/buttons/red.png" position="5,360" size="140,40" alphatest="on" />
536 <ePixmap pixmap="skin_default/buttons/green.png" position="155,360" size="140,40" alphatest="on" />
537 <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,360" size="140,40" alphatest="on" />
538 <ePixmap pixmap="skin_default/buttons/blue.png" position="450,360" size="140,40" alphatest="on" />
540 <widget source="key_red" render="Label" position="5,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
541 <widget source="key_green" render="Label" position="155,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
542 <widget source="key_yellow" render="Label" position="305,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
543 <widget source="key_blue" render="Label" position="450,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
547 def __init__(self, _session, _url=None, _title=None):
550 self.mBookmarkManager = BookmarkManager.getInstance()
551 self.mSession = _session
552 Screen.__init__(self, _session)
553 self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions", "NumberActions"], {
555 "cancel": self.keyCancel,
557 "green" : self.keyGreen,
558 "yellow": self.keyYellow,
559 "blue" : self.keyBlue,
560 "0" : self.keyNumber,
563 self["key_red"] = StaticText(_("Exit"))
564 self["key_green"] = StaticText(_("Add"))
565 self["key_yellow"] = StaticText(_("Edit"))
566 self["key_blue"] = StaticText(_("Delete"))
567 self["key_0"] = StaticText(_("Set as Startpage"))
569 self.mBookmarkList = self.setBookmarkList()
570 self["bookmarklist"] = MenuList(self.mBookmarkList)
572 self.onLayoutFinish.append(self.layoutFinished)
574 def layoutFinished(self):
575 self.setTitle(_('Bookmark'))
577 def setBookmarkList(self):
579 #self.mBookmarkManager.dump()
580 cd = self.mBookmarkManager.getBookmarkRoot()
581 for ck in cd.iterkeys():
582 l.append(('# ' + cd[ck].mName, cd[ck]))
583 bd = cd[ck].mBookmarks
584 for bk in bd.iterkeys():
585 l.append((' - ' + bd[bk].mTitle, bd[bk]))
588 def updateBookmarkList(self):
589 self.mBookmarkList = self.setBookmarkList()
590 self["bookmarklist"].setList(self.mBookmarkList)
592 def cbEditWindow(self, ret=False):
595 self.updateBookmarkList()
597 def getParentCategory(self):
598 idx = self["bookmarklist"].getSelectedIndex()
601 data = self.mBookmarkList[idx][0].strip()
603 return self.mBookmarkList[idx][1]
608 def isCategoryItem(self):
610 head = self["bookmarklist"].getCurrent()[0].strip()
617 if self.isCategoryItem(): return
619 data = self["bookmarklist"].getCurrent()[1]
620 if strIsEmpty(data.mUrl):
621 msg = _("Invalid URL. Please check again!!")
622 self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO)
624 def cbSetStartpage(ret=None):
625 if ret is None: return
627 data = self["bookmarklist"].getCurrent()[1]
628 BrowserSetting().setData(data.mUrl, data.mType)
629 msg = _("Do you want to set selected url to the Startpage?")
630 self.mSession.openWithCallback(cbSetStartpage, MessageBox, msg, MessageBox.TYPE_YESNO, default=True)
637 parent = self.getParentCategory()
640 if strIsEmpty(self.mTitle):
642 retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId, 0)
644 msg = _("Current page is already exist.")
645 self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO)
646 self.cbEditWindow(True)
648 parent = self.getParentCategory()
651 b = BookmarkData(0, '', '', parent.mId, 0)
652 self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.BOOKMARK, b, self.mBookmarkManager)
654 c = CategoryData(0, '')
655 self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.CATEGORY, c, self.mBookmarkManager)
656 if strIsEmpty(self.mUrl):
657 l = [(_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)]
658 else: l = [(_('Currentpage(Bookmark)'),1,), (_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)]
659 self.mSession.openWithCallback(cbGreen, ChoiceBox, title=_("Please choose."), list=l)
662 data = self["bookmarklist"].getCurrent()[1]
663 if self.isCategoryItem():
664 self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.CATEGORY, data, self.mBookmarkManager)
665 else: self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.BOOKMARK, data, self.mBookmarkManager)
668 def cbBlue(ret=None):
670 data = self["bookmarklist"].getCurrent()[1]
671 if self.isCategoryItem():
672 self.mBookmarkManager.deleteCategory(data.mId)
673 else: self.mBookmarkManager.deleteBookmark(data.mId)
674 self.updateBookmarkList()
675 if self.isCategoryItem():
676 msg = _("Do you want to delete the category and the bookmarks?")
677 else: msg = _("Do you want to delete the bookmark?")
678 self.mSession.openWithCallback(cbBlue, MessageBox, msg, MessageBox.TYPE_YESNO, default=True)
681 if self.isCategoryItem(): return
683 data = self["bookmarklist"].getCurrent()[1]
684 url = data.mUrl.strip()
686 self.session.open(MessageBox, _("Can't open selected bookmark.\n - URL data is empty!!"), type = MessageBox.TYPE_INFO)
690 lang = language.getLanguage()
691 if os.path.exists(vbcfg.MANUALROOT + '/' + lang):
692 url = vbcfg.MANUALROOT + '/' + lang + '/main.html'
693 self.close((url, mode))
701 class BrowserHelpWindow(Screen, HelpableScreen):
702 MODE_GLOBAL,MODE_KEYBOARD,MODE_MOUSE = 1,2,3
704 <screen name="BrowserHelpWindow" position="center,center" size="600,40" title="Browser Help" >
705 <ePixmap pixmap="skin_default/buttons/red.png" position="5,0" size="140,40" alphatest="on" />
706 <ePixmap pixmap="skin_default/buttons/green.png" position="155,0" size="140,40" alphatest="on" />
707 <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,0" size="140,40" alphatest="on" />
708 <ePixmap pixmap="skin_default/buttons/blue.png" position="450,0" size="140,40" alphatest="on" />
710 <widget source="key_red" render="Label" position="5,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
711 <widget source="key_green" render="Label" position="155,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
712 <widget source="key_yellow" render="Label" position="305,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" foregroundColor="#ffffff" transparent="1" />
713 <widget source="key_blue" render="Label" position="450,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
716 def __init__(self, session):
717 Screen.__init__(self, session)
718 HelpableScreen.__init__(self)
720 self["key_red"] = StaticText(_("Exit"))
721 self["key_green"] = StaticText(_("Global"))
722 self["key_yellow"] = StaticText(_("Mouse"))
723 self["key_blue"] = StaticText(_("Keyboard"))
725 self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions"], {
727 "cancel": self.keyRed,
729 "green" : self.keyGreen,
730 "yellow": self.keyYellow,
731 "blue" : self.keyBlue,
734 self.showHelpTimer = eTimer()
735 self.showHelpTimer.callback.append(self.cbShowHelpTimerClosed)
736 self.showHelpTimer.start(500)
738 self.onLayoutFinish.append(self.layoutFinished)
740 def layoutFinished(self):
741 self.setTitle(_('Browser Help'))
743 def cbShowHelpTimerClosed(self):
744 self.showHelpTimer.stop()
745 self.setHelpModeActions(self.MODE_GLOBAL)
747 def setHelpModeActions(self, _mode=0):
749 if _mode == self.MODE_GLOBAL:
750 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", {
751 "cancel" : (self.keyPass, _("Exit the Browser.")),
753 self["MenuActions"] = HelpableActionMap(self, "MenuActions", {
754 "menu" : (self.keyPass, _("Show the Menu window.")),
756 self["ColorActions"] = HelpableActionMap(self, "ColorActions", {
757 "green" : (self.keyPass, _("Enter Key")),
758 "yellow" : (self.keyPass, _("Show the Virtual keyboard window.")),
759 "blue" : (self.keyPass, _("Backspace Key")),
761 self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", {
762 "info" : (self.keyPass, _("Switch to keyboard/mouse mode.")),
765 elif _mode == self.MODE_MOUSE:
766 self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", {
767 "up" : (self.keyPass, _("It will move the mouse pointer up.")),
768 "down" : (self.keyPass, _("It will move the mouse pointer down.")),
769 "left" : (self.keyPass, _("It will move the mouse pointer left.")),
770 "right" : (self.keyPass, _("It will move the mouse pointer right.")),
772 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", {
773 "ok" : (self.keyPass, _("Left Mouse Button")),
775 self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", {
776 "nextBouquet" : (self.keyPass, _("Right Mouse Button")),
777 "nextService" : (self.keyPass, _("Left Key")),
778 "prevService" : (self.keyPass, _("Right Key")),
780 elif _mode == self.MODE_KEYBOARD:
781 self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", {
782 "up" : (self.keyPass, _("Up Key")),
783 "down" : (self.keyPass, _("Down Key")),
784 "left" : (self.keyPass, _("Left Key")),
785 "right" : (self.keyPass, _("Right Key")),
787 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", {
788 "ok" : (self.keyPass, _("Enter Key")),
790 self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", {
791 "nextBouquet" : (self.keyPass, _("PageUp Key")),
792 "prevBouquet" : (self.keyPass, _("PageDown Key")),
793 "nextService" : (self.keyPass, _("Go to previous page.")),
794 "prevService" : (self.keyPass, _("Go to next page.")),
807 self.setHelpModeActions(self.MODE_GLOBAL)
810 self.setHelpModeActions(self.MODE_MOUSE)
813 self.setHelpModeActions(self.MODE_KEYBOARD)
815 class Browser(Screen):
816 MENU_ITEM_WIDTH = 150
817 MENU_ITEM_HEIGHT = 30
821 # menulist->position->y : MENU_ITEM_HEIGHT+30
822 # menulist->size->x : MENULIST_WIDTH
824 size = getDesktop(0).size()
825 WIDTH = int(size.width())
826 HEIGHT = int(size.height())
828 <screen name="OperaBrowser" position="0,0" size="%(width)d,%(height)d" backgroundColor="transparent" flags="wfNoBorder" title="Opera Browser">
829 <widget name="topArea" zPosition="-1" position="0,0" size="1280,60" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
830 <widget name="menuitemFile" position="30,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
831 <widget name="menuitemTool" position="180,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
832 <widget name="menuitemHelp" position="330,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
833 <widget name="menulist" position="50,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
834 <widget name="submenulist" position="252,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
835 <widget name="bottomArea" position="0,%(bottom_pos_y)d" size="%(bottom_size_x)d,80" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
837 """ % { 'width' :WIDTH,
839 'bottom_pos_y' :HEIGHT-80,
840 'bottom_size_x' :WIDTH }
844 def __init__(self, session, url=None, is_webapp=False):
845 Screen.__init__(self, session)
846 self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], {
847 "cancel" : self.keyCancel
849 ,"left" : self.keyLeft
850 ,"right" : self.keyRight
852 ,"down" : self.keyDown
853 ,"menu" : self.keyMenu
856 self._cb_update_language()
859 self.is_browser_opened = False
860 self.is_show_top = True
861 self.is_show_menu = False
863 self._current_url = None
864 self._current_title = None
866 self["topArea"] = Label()
867 self["bottomArea"] = Label()
869 self["menuitemFile"] = MultiColorLabel()
870 self["menuitemTool"] = MultiColorLabel()
871 self["menuitemHelp"] = MultiColorLabel()
873 self.top_menus = [self["menuitemFile"], self["menuitemTool"], self["menuitemHelp"]]
875 self["menulist"] = MenuList(self.get_menulist_items(self.idx_menu))
876 self["submenulist"] = MenuList(None)
878 self.onLayoutFinish.append(self.layoutFinished)
880 self._close_timer = eTimer()
881 self._close_timer.callback.append(self._cb_stop_browser)
884 self.m_webapp = is_webapp
885 language.addCallback(self._cb_update_language)
887 def layoutFinished(self):
888 self["menuitemFile"].setText(_("File"))
889 self["menuitemTool"].setText(_("Tools"))
890 self["menuitemHelp"].setText(_("Help"))
892 self["menulist"].hide()
893 self["submenulist"].hide()
895 self["bottomArea"].setText(_("Opera Web Browser Plugin v2.0"))
896 self.setTitle(_("BrowserMain"))
898 vbcfg.LOG("Starting Browser")
900 if self.m_url is not None:
903 self._cb_start_browser(self.m_url, 1, 'YOUTUBETV_OPENURL')
905 self._cb_start_browser(self.m_url, 1)
907 def _cb_update_language(self):
908 self.MENULIST_ITEMS = [
909 [(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)],
910 [(_('Bookmark'), None), (_('Preference'), None), (_('Position Setup'), None)],
911 [(_('About'), None), (_('Help'), None)]
913 self.COMMAND_MAP = {}
914 self.COMMAND_MAP[_('Open Startpage')] = self._cmd_OpenStartpage
915 self.COMMAND_MAP[_('Open URL')] = self._cmd_OpenURL
916 self.COMMAND_MAP[_('Start/Stop')] = self._cmd_StartStop
917 self.COMMAND_MAP[_('Exit')] = self._cmd_Exit
918 self.COMMAND_MAP[_('Bookmark')] = self._cmd_Bookmark
919 self.COMMAND_MAP[_('Preference')] = self._cmd_Preference
920 self.COMMAND_MAP[_('Position Setup')] = self._cmd_Position
921 self.COMMAND_MAP[_('About')] = self._cmd_About
922 self.COMMAND_MAP[_('Help')] = self._cmd_Help
923 self.COMMAND_MAP[_('Return')] = self._cmd_Return
925 def _cb_set_title(self, title=None):
926 vbcfg.LOG("page title: %s" % title)
931 def _cb_close_window(self):
932 self._close_timer.start(2000)
934 def _cb_start_browser(self, data=None, mode=0, opcode='BROWSER_OPENURL'):
935 if not vbcfg.g_main.check_browser():
936 if self.m_url is not None:
938 self.session.nav.playService(vbcfg.g_service)
940 vbcfg.LOG("open url: %s %d" % (data, mode))
945 if self._cb_set_title not in vbcfg.g_main.vbhandler.onSetTitleCB:
946 vbcfg.g_main.vbhandler.onSetTitleCB.append(self._cb_set_title)
951 if self._cb_close_window not in vbcfg.g_main.vbhandler.onCloseCB:
952 vbcfg.g_main.vbhandler.onCloseCB.append(self._cb_close_window)
956 vbcfg.g_position = vbcfg.getPosition()
957 fbClass.getInstance().lock()
958 eRCInput.getInstance().lock()
961 ret = VBController.command(opcode, data)
962 self._current_url = data
964 self.is_browser_opened = True
966 self.is_browser_opened = False
967 vbcfg.ERR("Failed to open url: %s" % data)
969 vbcfg.g_main.vbhandler.soft_volume = -1
971 def _cb_stop_browser(self):
972 self._close_timer.stop()
975 if self._cb_set_title in vbcfg.g_main.vbhandler.onSetTitleCB:
976 vbcfg.g_main.vbhandler.onSetTitleCB.remove(self._cb_set_title)
981 if self._cb_close_window in vbcfg.g_main.vbhandler.onCloseCB:
982 vbcfg.g_main.vbhandler.onCloseCB.remove(self._cb_close_window)
988 from enigma import getDesktop, gMainDC
989 desktop_size = getDesktop(0).size()
990 gMainDC.getInstance().setResolution(desktop_size.width(), desktop_size.height())
991 vbcfg.setPosition(vbcfg.g_position)
993 fbClass.getInstance().unlock()
994 eRCInput.getInstance().unlock()
995 self.is_browser_opened = False
997 vbcfg.LOG("Stop Browser")
998 self.setTitle(_("BrowserMain"))
999 if self.m_url is not None:
1002 self.session.nav.playService(vbcfg.g_service)
1007 def _cb_update_bookmark(self, data=None):
1010 if not vbcfg.g_main.check_browser():
1011 message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
1012 self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
1015 self._cb_start_browser(url, mode)
1017 def _cmd_OpenStartpage(self):
1018 if not vbcfg.g_main.check_browser():
1019 message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
1020 self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
1023 #startpage = 'http://vuplus.com'
1025 d = BrowserSetting().getData()
1030 self._cb_start_browser(start, mode)
1032 def _cmd_OpenURL(self):
1033 if not vbcfg.g_main.check_browser():
1034 message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
1035 self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
1037 self.session.openWithCallback(self._cb_start_browser, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://')
1039 def _cmd_StartStop(self):
1040 if vbcfg.g_main is None:
1042 vbcfg.g_main.menu_toggle_browser(self.keyMenu())
1044 def _cmd_Exit(self):
1047 def _cmd_Bookmark(self):
1048 url = self._current_url
1051 title = self._current_title
1054 self.session.openWithCallback(self._cb_update_bookmark, BrowserBookmarkWindow, url, title)
1056 def _cmd_Preference(self):
1057 url = self._current_url
1060 self.session.open(BrowserPreferenceWindow, url)
1062 def _cmd_Position(self):
1063 self.session.open(BrowserPositionWindow)
1065 def _cmd_About(self):
1066 self.session.open(MessageBox, _('Opera Web Browser Plugin v2.0'), type = MessageBox.TYPE_INFO)
1068 def _cmd_Help(self):
1069 self.session.open(BrowserHelpWindow)
1071 def _cmd_Return(self):
1074 def do_command(self, command):
1076 self.COMMAND_MAP[command]()
1077 except Exception, ErrMsg:
1080 def get_menulist_items(self, idx=0):
1081 l = self.MENULIST_ITEMS[idx]
1082 if self.is_browser_opened and idx == 0:
1083 l = [(_("Return"), None)]
1086 def set_menu_item(self):
1087 self["menuitemFile"].setForegroundColorNum(0)
1088 self["menuitemTool"].setForegroundColorNum(0)
1089 self["menuitemHelp"].setForegroundColorNum(0)
1090 self.top_menus[self.idx_menu].setForegroundColorNum(1)
1092 def toggle_top(self):
1093 if self.is_show_top:
1097 self.is_show_top = not self.is_show_top
1099 def toggle_menulist(self):
1100 if self.is_show_menu:
1101 self["menulist"].hide()
1103 self["menulist"].show()
1104 self.is_show_menu = not self.is_show_menu
1106 def toggle_browser(self, url=None, title=None):
1107 self._current_url = url
1113 self._current_title = title
1114 if self._current_url:
1115 vbcfg.DEBUG(self._current_url)
1119 self["menulist"].pageUp()
1123 def keyCancel(self):
1124 if self.is_browser_opened:
1125 fbClass.getInstance().lock()
1126 eRCInput.getInstance().lock()
1129 VBController.command("BROWSER_MENU_CLOSE")
1134 if not self.is_show_top:
1137 if not self.is_show_menu:
1140 if self["menulist"].getCurrent()[1] is None:
1141 self.do_command(self["menulist"].getCurrent()[0])
1146 if self.idx_menu == 0:
1149 self.idx_menu = self.idx_menu - 1
1151 if self.is_show_menu:
1152 self["menulist"].pageUp()
1155 self.set_menu_item()
1158 if self.idx_menu == 2:
1161 self.idx_menu = self.idx_menu + 1
1163 if self.is_show_menu:
1164 self["menulist"].pageUp()
1167 self.set_menu_item()
1170 if self.is_show_menu and self["menulist"].getSelectedIndex() == 0:
1171 self.toggle_menulist()
1173 self["menulist"].up()
1176 if not self.is_show_menu:
1177 self["menulist"].setList(self.get_menulist_items(self.idx_menu))
1178 self["menulist"].resize(self.MENULIST_WIDTH, self.MENULIST_HEIGHT*len(self.get_menulist_items(self.idx_menu))+5)
1179 self["menulist"].move(self.MENU_ITEM_WIDTH*self.idx_menu+50,self.MENU_ITEM_HEIGHT+30)
1180 self.toggle_menulist()
1182 self["menulist"].down()