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 VBController.command('CONTROL_RELOAD_KEYMAP')
307 def _cb_directInputUrl(data):
310 self["url"].setText(data)
311 if self["config"].l.getCurrentSelectionIndex() == 0 and self.menuItemStartpage.value == "direct":
312 self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://')
315 ConfigListScreen.keyLeft(self)
316 self.updateStartPageUrl()
319 ConfigListScreen.keyRight(self)
320 self.updateStartPageUrl()
322 def getKeymapTypeList(self):
324 for f in os.listdir("%s/keymap" % vbcfg.APPROOT):
325 filesplit = f.split('.')
326 if len(filesplit) < 2:
328 types.append((filesplit[1], filesplit[1]))
332 def makeMenuEntry(self):
334 l.append(("startpage", _("Start Page")))
335 if not strIsEmpty(self._currentPageUrl):
336 l.append(("current", _("Current Page")))
337 l.append(("direct", _("Direct Input")))
338 self.menuItemStartpage = ConfigSelection(default="startpage", choices = l)
339 self.menuEntryStartpage = getConfigListEntry(_("Startpage"), self.menuItemStartpage)
341 kl = self.getKeymapTypeList()
344 d = BrowserSetting().getData()
345 self._startPageUrl = d['start']
346 self._keymapType = d['keymap']
348 except: self._startPageUrl = 'http://vuplus.com'
349 self.updateStartPageUrl()
351 if self._keymapType is None or len(self._keymapType) == 0:
352 self._keymapType = "us-rc"
353 self.menuItemKeyboardLayout = ConfigSelection(default=self._keymapType, choices = kl)
354 self.menuEntryKeyboardLayout = getConfigListEntry(_("Keyboard Layout"), self.menuItemKeyboardLayout)
357 def resetMenuList(self):
359 self.menulist.append(self.menuEntryStartpage)
360 self.menulist.append(self.menuEntryKeyboardLayout)
362 self["config"].list = self.menulist
363 self["config"].l.setList(self.menulist)
365 class BookmarkEditWindow(ConfigListScreen, Screen):
366 CATEGORY,BOOKMARK = 0,1
368 <screen position="center,center" size="600,140" title="Bookmark Edit">
369 <widget name="config" position="0,0" size="600,100" scrollbarMode="showOnDemand" />
371 <ePixmap pixmap="skin_default/buttons/red.png" position="310,100" size="140,40" alphatest="on" />
372 <ePixmap pixmap="skin_default/buttons/green.png" position="150,100" size="140,40" alphatest="on" />
374 <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" />
375 <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" />
377 <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="0,100" zPosition="10" size="35,25" transparent="1" alphatest="on" />
381 def __init__(self, session, _mode, _type, _data, _bm):
385 self.mSession = session
386 self.mBookmarkManager = _bm
388 if _data is not None:
389 vbcfg.DEBUG("0x%x" % _data.mId)
391 Screen.__init__(self, session)
394 ConfigListScreen.__init__(self, self.menulist)
396 self["actions"] = ActionMap(["OkCancelActions", "ColorActions",], {
397 "ok" : self.keyGreen,
398 "green" : self.keyGreen,
400 "cancel" : self.keyRed,
403 self["VKeyIcon"] = Pixmap()
404 self["key_red"] = StaticText(_("Cancel"))
405 self["key_green"] = StaticText(_("Save"))
407 self.menuItemTitle = None
408 self.menuItemUrl = None
409 self.menuItemName = None
411 self.menuEntryName = None
412 self.menuEntryTitle = None
413 self.menuEntryUrl = None
415 self.makeConfigList()
416 self.onLayoutFinish.append(self.layoutFinished)
418 def layoutFinished(self):
419 self.setTitle(_('Bookmark') + ' ' + self.mMode)
421 def selectedItem(self):
422 currentPosition = self["config"].getCurrent()
423 if self.mType == BookmarkEditWindow.CATEGORY:
424 return (_("Name"), self.menuItemName)
426 if currentPosition == self.menuEntryTitle:
427 return (_("Title"), self.menuItemTitle)
428 elif currentPosition == self.menuEntryUrl:
429 return (_("Url"), self.menuItemUrl)
432 def showMessageBox(self, text):
433 msg = _("Invalid ") + text + _("!!(Empty)\nPlease, Input to the") + " " + text + "."
434 self.mSession.openWithCallback(self.showVKeyWindow, MessageBox, msg, MessageBox.TYPE_INFO)
437 def showVKeyWindow(self, data=None):
440 selected = self.selectedItem()
441 if selected is not None:
442 itemValue = selected[1].value
443 if strIsEmpty(itemValue):
445 itemTitle = selected[0]
447 self.session.openWithCallback(self.cbVKeyWindow, VirtualKeyBoard, title=itemTitle, text=itemValue)
449 def cbVKeyWindow(self, data=None):
451 selected = self.selectedItem()
452 if selected is not None:
453 selected[1].setValue(data)
456 if self.mType == BookmarkEditWindow.CATEGORY:
457 if self.mMode == _('Add'):
458 categoryName = self.menuItemName.value
459 if strIsEmpty(categoryName):
460 return self.showMessageBox(_("Category Name"))
461 self.mBookmarkManager.addCategory(categoryName)
463 if strIsEmpty(self.menuItemName.value):
464 return self.showMessageBox(_("Category Name"))
465 self.mData.mName = self.menuItemName.value
466 self.mBookmarkManager.updateCategory(self.mData)
468 if self.mMode == _('Add'):
469 bookmarkTitle = self.menuItemTitle.value
470 bookmarkUrl = self.menuItemUrl.value
471 if strIsEmpty(bookmarkTitle):
472 self["config"].setCurrentIndex(0)
473 return self.showMessageBox(_("Bookmark Title"))
474 if strIsEmpty(bookmarkUrl):
475 self["config"].setCurrentIndex(1)
476 return self.showMessageBox(_("Bookmark URL"))
477 self.mBookmarkManager.addBookmark(bookmarkTitle, bookmarkUrl, self.mData.mParent, 0)
479 if strIsEmpty(self.menuItemTitle.value):
480 self["config"].setCurrentIndex(0)
481 return self.showMessageBox(_("Bookmark Title"))
482 if strIsEmpty(self.menuItemUrl.value):
483 self["config"].setCurrentIndex(1)
484 return self.showMessageBox(_("Bookmark URL"))
485 self.mData.mTitle = self.menuItemTitle.value
486 self.mData.mUrl = self.menuItemUrl.value
487 self.mBookmarkManager.updateBookmark(self.mData)
491 if not self.saveData():
499 ConfigListScreen.keyLeft(self)
502 ConfigListScreen.keyRight(self)
504 def makeConfigList(self):
507 if self.mType == BookmarkEditWindow.CATEGORY:
508 self.menuItemName = ConfigText(default=self.mData.mName, visible_width=65, fixed_size=False)
510 self.menuEntryName = getConfigListEntry(_("Name"), self.menuItemName)
512 self.menulist.append(self.menuEntryName)
514 self.menuItemTitle = ConfigText(default=self.mData.mTitle, visible_width=65, fixed_size=False)
515 self.menuItemUrl = ConfigText(default=self.mData.mUrl, visible_width=65, fixed_size=False)
517 self.menuEntryTitle = getConfigListEntry(_("Title"), self.menuItemTitle)
518 self.menuEntryUrl = getConfigListEntry(_("Url"), self.menuItemUrl)
520 self.menulist.append(self.menuEntryTitle)
521 self.menulist.append(self.menuEntryUrl)
523 self["config"].list = self.menulist
524 self["config"].l.setList(self.menulist)
526 class BrowserBookmarkWindow(Screen):
528 <screen name="BrowserBookmarkWindow" position="center,120" size="600,400" title="Bookmark" >
529 <widget name="bookmarklist" position="0,0" size="600,200" zPosition="10" scrollbarMode="showOnDemand" />
531 <ePixmap pixmap="skin_default/buttons/key_0.png" position="556,330" size="35,30" alphatest="on" />
532 <widget source="key_0" render="Label" position="258,330" zPosition="1" size="300,30" font="Regular;20" halign="right" valign="center"/>
534 <ePixmap pixmap="skin_default/buttons/red.png" position="5,360" size="140,40" alphatest="on" />
535 <ePixmap pixmap="skin_default/buttons/green.png" position="155,360" size="140,40" alphatest="on" />
536 <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,360" size="140,40" alphatest="on" />
537 <ePixmap pixmap="skin_default/buttons/blue.png" position="450,360" size="140,40" alphatest="on" />
539 <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" />
540 <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" />
541 <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" />
542 <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" />
546 def __init__(self, _session, _url=None, _title=None):
549 self.mBookmarkManager = BookmarkManager.getInstance()
550 self.mSession = _session
551 Screen.__init__(self, _session)
552 self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions", "NumberActions"], {
554 "cancel": self.keyCancel,
556 "green" : self.keyGreen,
557 "yellow": self.keyYellow,
558 "blue" : self.keyBlue,
559 "0" : self.keyNumber,
562 self["key_red"] = StaticText(_("Exit"))
563 self["key_green"] = StaticText(_("Add"))
564 self["key_yellow"] = StaticText(_("Edit"))
565 self["key_blue"] = StaticText(_("Delete"))
566 self["key_0"] = StaticText(_("Set as Startpage"))
568 self.mBookmarkList = self.setBookmarkList()
569 self["bookmarklist"] = MenuList(self.mBookmarkList)
571 self.onLayoutFinish.append(self.layoutFinished)
573 def layoutFinished(self):
574 self.setTitle(_('Bookmark'))
576 def setBookmarkList(self):
578 #self.mBookmarkManager.dump()
579 cd = self.mBookmarkManager.getBookmarkRoot()
580 for ck in cd.iterkeys():
581 l.append(('# ' + cd[ck].mName, cd[ck]))
582 bd = cd[ck].mBookmarks
583 for bk in bd.iterkeys():
584 l.append((' - ' + bd[bk].mTitle, bd[bk]))
587 def updateBookmarkList(self):
588 self.mBookmarkList = self.setBookmarkList()
589 self["bookmarklist"].setList(self.mBookmarkList)
591 def cbEditWindow(self, ret=False):
594 self.updateBookmarkList()
596 def getParentCategory(self):
597 idx = self["bookmarklist"].getSelectedIndex()
600 data = self.mBookmarkList[idx][0].strip()
602 return self.mBookmarkList[idx][1]
607 def isCategoryItem(self):
609 head = self["bookmarklist"].getCurrent()[0].strip()
616 if self.isCategoryItem(): return
618 data = self["bookmarklist"].getCurrent()[1]
619 if strIsEmpty(data.mUrl):
620 msg = _("Invalid URL. Please check again!!")
621 self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO)
623 def cbSetStartpage(ret=None):
624 if ret is None: return
626 data = self["bookmarklist"].getCurrent()[1]
627 BrowserSetting().setData(data.mUrl, data.mType)
628 msg = _("Do you want to set selected url to the Startpage?")
629 self.mSession.openWithCallback(cbSetStartpage, MessageBox, msg, MessageBox.TYPE_YESNO, default=True)
636 parent = self.getParentCategory()
639 if strIsEmpty(self.mTitle):
641 retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId, 0)
643 msg = _("Current page is already exist.")
644 self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO)
645 self.cbEditWindow(True)
647 parent = self.getParentCategory()
650 b = BookmarkData(0, '', '', parent.mId, 0)
651 self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.BOOKMARK, b, self.mBookmarkManager)
653 c = CategoryData(0, '')
654 self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.CATEGORY, c, self.mBookmarkManager)
655 if strIsEmpty(self.mUrl):
656 l = [(_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)]
657 else: l = [(_('Currentpage(Bookmark)'),1,), (_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)]
658 self.mSession.openWithCallback(cbGreen, ChoiceBox, title=_("Please choose."), list=l)
661 data = self["bookmarklist"].getCurrent()[1]
662 if self.isCategoryItem():
663 self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.CATEGORY, data, self.mBookmarkManager)
664 else: self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.BOOKMARK, data, self.mBookmarkManager)
667 def cbBlue(ret=None):
669 data = self["bookmarklist"].getCurrent()[1]
670 if self.isCategoryItem():
671 self.mBookmarkManager.deleteCategory(data.mId)
672 else: self.mBookmarkManager.deleteBookmark(data.mId)
673 self.updateBookmarkList()
674 if self.isCategoryItem():
675 msg = _("Do you want to delete the category and the bookmarks?")
676 else: msg = _("Do you want to delete the bookmark?")
677 self.mSession.openWithCallback(cbBlue, MessageBox, msg, MessageBox.TYPE_YESNO, default=True)
680 if self.isCategoryItem(): return
682 data = self["bookmarklist"].getCurrent()[1]
683 url = data.mUrl.strip()
685 self.session.open(MessageBox, _("Can't open selected bookmark.\n - URL data is empty!!"), type = MessageBox.TYPE_INFO)
689 lang = language.getLanguage()
690 if os.path.exists(vbcfg.MANUALROOT + '/' + lang):
691 url = vbcfg.MANUALROOT + '/' + lang + '/main.html'
692 self.close((url, mode))
700 class BrowserHelpWindow(Screen, HelpableScreen):
701 MODE_GLOBAL,MODE_KEYBOARD,MODE_MOUSE = 1,2,3
703 <screen name="BrowserHelpWindow" position="center,center" size="600,40" title="Browser Help" >
704 <ePixmap pixmap="skin_default/buttons/red.png" position="5,0" size="140,40" alphatest="on" />
705 <ePixmap pixmap="skin_default/buttons/green.png" position="155,0" size="140,40" alphatest="on" />
706 <ePixmap pixmap="skin_default/buttons/yellow.png" position="305,0" size="140,40" alphatest="on" />
707 <ePixmap pixmap="skin_default/buttons/blue.png" position="450,0" size="140,40" alphatest="on" />
709 <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" />
710 <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" />
711 <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" />
712 <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" />
715 def __init__(self, session):
716 Screen.__init__(self, session)
717 HelpableScreen.__init__(self)
719 self["key_red"] = StaticText(_("Exit"))
720 self["key_green"] = StaticText(_("Global"))
721 self["key_yellow"] = StaticText(_("Mouse"))
722 self["key_blue"] = StaticText(_("Keyboard"))
724 self["actions"] = ActionMap(["DirectionActions", "OkCancelActions","ColorActions"], {
726 "cancel": self.keyRed,
728 "green" : self.keyGreen,
729 "yellow": self.keyYellow,
730 "blue" : self.keyBlue,
733 self.showHelpTimer = eTimer()
734 self.showHelpTimer.callback.append(self.cbShowHelpTimerClosed)
735 self.showHelpTimer.start(500)
737 self.onLayoutFinish.append(self.layoutFinished)
739 def layoutFinished(self):
740 self.setTitle(_('Browser Help'))
742 def cbShowHelpTimerClosed(self):
743 self.showHelpTimer.stop()
744 self.setHelpModeActions(self.MODE_GLOBAL)
746 def setHelpModeActions(self, _mode=0):
748 if _mode == self.MODE_GLOBAL:
749 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", {
750 "cancel" : (self.keyPass, _("Exit the Browser.")),
752 self["MenuActions"] = HelpableActionMap(self, "MenuActions", {
753 "menu" : (self.keyPass, _("Show the Menu window.")),
755 self["ColorActions"] = HelpableActionMap(self, "ColorActions", {
756 "green" : (self.keyPass, _("Enter Key")),
757 "yellow" : (self.keyPass, _("Show the Virtual keyboard window.")),
758 "blue" : (self.keyPass, _("Backspace Key")),
760 self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", {
761 "info" : (self.keyPass, _("Switch to keyboard/mouse mode.")),
764 elif _mode == self.MODE_MOUSE:
765 self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", {
766 "up" : (self.keyPass, _("It will move the mouse pointer up.")),
767 "down" : (self.keyPass, _("It will move the mouse pointer down.")),
768 "left" : (self.keyPass, _("It will move the mouse pointer left.")),
769 "right" : (self.keyPass, _("It will move the mouse pointer right.")),
771 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", {
772 "ok" : (self.keyPass, _("Left Mouse Button")),
774 self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", {
775 "nextBouquet" : (self.keyPass, _("Right Mouse Button")),
776 "nextService" : (self.keyPass, _("Left Key")),
777 "prevService" : (self.keyPass, _("Right Key")),
779 elif _mode == self.MODE_KEYBOARD:
780 self["DirectionActions"] = HelpableActionMap(self, "DirectionActions", {
781 "up" : (self.keyPass, _("Up Key")),
782 "down" : (self.keyPass, _("Down Key")),
783 "left" : (self.keyPass, _("Left Key")),
784 "right" : (self.keyPass, _("Right Key")),
786 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", {
787 "ok" : (self.keyPass, _("Enter Key")),
789 self["EPGSelectActions"] = HelpableActionMap(self, "EPGSelectActions", {
790 "nextBouquet" : (self.keyPass, _("PageUp Key")),
791 "prevBouquet" : (self.keyPass, _("PageDown Key")),
792 "nextService" : (self.keyPass, _("Go to previous page.")),
793 "prevService" : (self.keyPass, _("Go to next page.")),
806 self.setHelpModeActions(self.MODE_GLOBAL)
809 self.setHelpModeActions(self.MODE_MOUSE)
812 self.setHelpModeActions(self.MODE_KEYBOARD)
814 class Browser(Screen):
815 MENU_ITEM_WIDTH = 150
816 MENU_ITEM_HEIGHT = 30
820 # menulist->position->y : MENU_ITEM_HEIGHT+30
821 # menulist->size->x : MENULIST_WIDTH
823 size = getDesktop(0).size()
824 WIDTH = int(size.width())
825 HEIGHT = int(size.height())
827 <screen name="OperaBrowser" position="0,0" size="%(width)d,%(height)d" backgroundColor="transparent" flags="wfNoBorder" title="Opera Browser">
828 <widget name="topArea" zPosition="-1" position="0,0" size="1280,60" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
829 <widget name="menuitemFile" position="30,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
830 <widget name="menuitemTool" position="180,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
831 <widget name="menuitemHelp" position="330,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
832 <widget name="menulist" position="50,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
833 <widget name="submenulist" position="252,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
834 <widget name="bottomArea" position="0,%(bottom_pos_y)d" size="%(bottom_size_x)d,80" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
836 """ % { 'width' :WIDTH,
838 'bottom_pos_y' :HEIGHT-80,
839 'bottom_size_x' :WIDTH }
843 def __init__(self, session, url=None, is_webapp=False):
844 Screen.__init__(self, session)
845 self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], {
846 "cancel" : self.keyCancel
848 ,"left" : self.keyLeft
849 ,"right" : self.keyRight
851 ,"down" : self.keyDown
852 ,"menu" : self.keyMenu
855 self._cb_update_language()
858 self.is_browser_opened = False
859 self.is_show_top = True
860 self.is_show_menu = False
862 self._current_url = None
863 self._current_title = None
865 self["topArea"] = Label()
866 self["bottomArea"] = Label()
868 self["menuitemFile"] = MultiColorLabel()
869 self["menuitemTool"] = MultiColorLabel()
870 self["menuitemHelp"] = MultiColorLabel()
872 self.top_menus = [self["menuitemFile"], self["menuitemTool"], self["menuitemHelp"]]
874 self["menulist"] = MenuList(self.get_menulist_items(self.idx_menu))
875 self["submenulist"] = MenuList(None)
877 self.onLayoutFinish.append(self.layoutFinished)
879 self._close_timer = eTimer()
880 self._close_timer.callback.append(self._cb_stop_browser)
883 self.m_webapp = is_webapp
884 language.addCallback(self._cb_update_language)
886 def layoutFinished(self):
887 self["menuitemFile"].setText(_("File"))
888 self["menuitemTool"].setText(_("Tools"))
889 self["menuitemHelp"].setText(_("Help"))
891 self["menulist"].hide()
892 self["submenulist"].hide()
894 self["bottomArea"].setText(_("Opera Web Browser Plugin v2.0"))
895 self.setTitle(_("BrowserMain"))
897 vbcfg.LOG("Starting Browser")
899 if self.m_url is not None:
902 self._cb_start_browser(self.m_url, 1, 'YOUTUBETV_OPENURL')
904 self._cb_start_browser(self.m_url, 1)
906 def _cb_update_language(self):
907 self.MENULIST_ITEMS = [
908 [(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)],
909 [(_('Bookmark'), None), (_('Preference'), None), (_('Position Setup'), None)],
910 [(_('About'), None), (_('Help'), None)]
912 self.COMMAND_MAP = {}
913 self.COMMAND_MAP[_('Open Startpage')] = self._cmd_OpenStartpage
914 self.COMMAND_MAP[_('Open URL')] = self._cmd_OpenURL
915 self.COMMAND_MAP[_('Start/Stop')] = self._cmd_StartStop
916 self.COMMAND_MAP[_('Exit')] = self._cmd_Exit
917 self.COMMAND_MAP[_('Bookmark')] = self._cmd_Bookmark
918 self.COMMAND_MAP[_('Preference')] = self._cmd_Preference
919 self.COMMAND_MAP[_('Position Setup')] = self._cmd_Position
920 self.COMMAND_MAP[_('About')] = self._cmd_About
921 self.COMMAND_MAP[_('Help')] = self._cmd_Help
922 self.COMMAND_MAP[_('Return')] = self._cmd_Return
924 def _cb_set_title(self, title=None):
925 vbcfg.LOG("page title: %s" % title)
930 def _cb_close_window(self):
931 self._close_timer.start(1000)
933 def _cb_start_browser(self, data=None, mode=0, opcode='BROWSER_OPENURL'):
934 if not vbcfg.g_main.check_browser():
935 if self.m_url is not None:
937 self.session.nav.playService(vbcfg.g_service)
939 vbcfg.LOG("open url: %s %d" % (data, mode))
944 if self._cb_set_title not in vbcfg.g_main.vbhandler.onSetTitleCB:
945 vbcfg.g_main.vbhandler.onSetTitleCB.append(self._cb_set_title)
950 if self._cb_close_window not in vbcfg.g_main.vbhandler.onCloseCB:
951 vbcfg.g_main.vbhandler.onCloseCB.append(self._cb_close_window)
955 vbcfg.g_position = vbcfg.getPosition()
956 fbClass.getInstance().lock()
957 eRCInput.getInstance().lock()
960 ret = VBController.command(opcode, data)
961 self._current_url = data
963 self.is_browser_opened = True
965 self.is_browser_opened = False
966 vbcfg.ERR("Failed to open url: %s" % data)
968 vbcfg.g_main.vbhandler.soft_volume = -1
970 def _cb_stop_browser(self):
971 self._close_timer.stop()
974 if self._cb_set_title in vbcfg.g_main.vbhandler.onSetTitleCB:
975 vbcfg.g_main.vbhandler.onSetTitleCB.remove(self._cb_set_title)
980 if self._cb_close_window in vbcfg.g_main.vbhandler.onCloseCB:
981 vbcfg.g_main.vbhandler.onCloseCB.remove(self._cb_close_window)
987 from enigma import gMainDC
988 gMainDC.getInstance().setResolution(self.WIDTH, self.HEIGHT)
989 vbcfg.setPosition(vbcfg.g_position)
991 fbClass.getInstance().unlock()
992 eRCInput.getInstance().unlock()
993 getDesktop(0).paint()
994 self.is_browser_opened = False
996 vbcfg.LOG("Stop Browser")
997 self.setTitle(_("BrowserMain"))
998 if self.m_url is not None:
1001 self.session.nav.playService(vbcfg.g_service)
1006 def _cb_update_bookmark(self, data=None):
1009 if not vbcfg.g_main.check_browser():
1010 message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
1011 self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
1014 self._cb_start_browser(url, mode)
1016 def _cmd_OpenStartpage(self):
1017 if not vbcfg.g_main.check_browser():
1018 message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
1019 self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
1022 #startpage = 'http://vuplus.com'
1024 d = BrowserSetting().getData()
1029 self._cb_start_browser(start, mode)
1031 def _cmd_OpenURL(self):
1032 if not vbcfg.g_main.check_browser():
1033 message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
1034 self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
1036 self.session.openWithCallback(self._cb_start_browser, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://')
1038 def _cmd_StartStop(self):
1039 if vbcfg.g_main is None:
1041 vbcfg.g_main.menu_toggle_browser(self.keyMenu())
1043 def _cmd_Exit(self):
1046 def _cmd_Bookmark(self):
1047 url = self._current_url
1050 title = self._current_title
1053 self.session.openWithCallback(self._cb_update_bookmark, BrowserBookmarkWindow, url, title)
1055 def _cmd_Preference(self):
1056 url = self._current_url
1059 self.session.open(BrowserPreferenceWindow, url)
1061 def _cmd_Position(self):
1062 self.session.open(BrowserPositionWindow)
1064 def _cmd_About(self):
1065 self.session.open(MessageBox, _('Opera Web Browser Plugin v2.0'), type = MessageBox.TYPE_INFO)
1067 def _cmd_Help(self):
1068 self.session.open(BrowserHelpWindow)
1070 def _cmd_Return(self):
1073 def do_command(self, command):
1075 self.COMMAND_MAP[command]()
1076 except Exception, ErrMsg:
1079 def get_menulist_items(self, idx=0):
1080 l = self.MENULIST_ITEMS[idx]
1081 if self.is_browser_opened and idx == 0:
1082 l = [(_("Return"), None)]
1085 def set_menu_item(self):
1086 self["menuitemFile"].setForegroundColorNum(0)
1087 self["menuitemTool"].setForegroundColorNum(0)
1088 self["menuitemHelp"].setForegroundColorNum(0)
1089 self.top_menus[self.idx_menu].setForegroundColorNum(1)
1091 def toggle_top(self):
1092 if self.is_show_top:
1096 self.is_show_top = not self.is_show_top
1098 def toggle_menulist(self):
1099 if self.is_show_menu:
1100 self["menulist"].hide()
1102 self["menulist"].show()
1103 self.is_show_menu = not self.is_show_menu
1105 def toggle_browser(self, url=None, title=None):
1106 self._current_url = url
1112 self._current_title = title
1113 if self._current_url:
1114 vbcfg.DEBUG(self._current_url)
1118 self["menulist"].pageUp()
1122 def keyCancel(self):
1123 if self.is_browser_opened:
1124 fbClass.getInstance().lock()
1125 eRCInput.getInstance().lock()
1128 VBController.command("BROWSER_MENU_CLOSE")
1133 if not self.is_show_top:
1136 if not self.is_show_menu:
1139 if self["menulist"].getCurrent()[1] is None:
1140 self.do_command(self["menulist"].getCurrent()[0])
1145 if self.idx_menu == 0:
1148 self.idx_menu = self.idx_menu - 1
1150 if self.is_show_menu:
1151 self["menulist"].pageUp()
1154 self.set_menu_item()
1157 if self.idx_menu == 2:
1160 self.idx_menu = self.idx_menu + 1
1162 if self.is_show_menu:
1163 self["menulist"].pageUp()
1166 self.set_menu_item()
1169 if self.is_show_menu and self["menulist"].getSelectedIndex() == 0:
1170 self.toggle_menulist()
1172 self["menulist"].up()
1175 if not self.is_show_menu:
1176 self["menulist"].setList(self.get_menulist_items(self.idx_menu))
1177 self["menulist"].resize(self.MENULIST_WIDTH, self.MENULIST_HEIGHT*len(self.get_menulist_items(self.idx_menu))+5)
1178 self["menulist"].move(self.MENU_ITEM_WIDTH*self.idx_menu+50,self.MENU_ITEM_HEIGHT+30)
1179 self.toggle_menulist()
1181 self["menulist"].down()