[hbbtv/browser] added italian translation.
[vuplus_dvbapp] / lib / python / Plugins / Extensions / HbbTV / plugin.py
index 8bdbaf8..868f86a 100644 (file)
@@ -28,6 +28,8 @@ from bookmark import BookmarkManager, BookmarkData, CategoryData
 
 import os, struct, threading, stat, select, time, socket, select
 
+from __init__ import _
+
 strIsEmpty = lambda x: x is None or len(x) == 0
 
 HBBTVAPP_PATH = "/usr/local/hbb-browser"
@@ -55,8 +57,43 @@ class GlobalValues:
 
        need_restart = False
        plugin_browser = None
+
+       resX = 0
+       resY = 0
+       def UpdateInfoBar(self):
+               if self.resX == 1024 and self.resY == 720:
+                       return
+               try:
+                       infobar = InfoBar.instance
+                       if infobar._InfoBarShowHide__state != 3:
+                               return
+                       infobar.doTimerHide()
+                       infobar.serviceStarted()
+               except: pass
+       
 __gval__ = GlobalValues()
 
+def setDefaultResolution(x, y):
+       global __gval__
+       __gval__.resX = x
+       __gval__.resY = y
+
+def setResolution(xres, yres):
+       global __gval__
+       if __gval__.resX == 1280 and __gval__.resY == 720:
+               return
+       from enigma import gMainDC
+       gMainDC.getInstance().setResolution(xres, yres)
+
+def restoreResolution():
+       global __gval__
+       setResolution(1280, 720)
+       setResolution(__gval__.resX, __gval__.resY)
+
+       if __gval__.resX == 1280 and __gval__.resY == 720:
+               return
+       __gval__.UpdateInfoBar()
+
 def setPluginBrowser(browser=None):
        global __gval__
        __gval__.plugin_browser = browser
@@ -214,6 +251,7 @@ class OpCodeSet:
                        ,"OP_BROWSER_VKBD_PASTE_MOUSE"  : 0x030D
                        ,"OP_BROWSER_MENU_REQ"          : 0x030E
                        ,"OP_BROWSER_MENU_RES"          : 0x030F
+                       ,"OP_BROWSER_NEED_RELOAD_KEYMAP": 0x0313
                        ,"OP_DVBAPP_VOL_UP"             : 0x0401
                        ,"OP_DVBAPP_VOL_DOWN"           : 0x0402
                        ,"OP_SYSTEM_OUT_OF_MEMORY"      : 0x0501
@@ -249,6 +287,7 @@ class OpCodeSet:
                        ,0x030D : "OP_BROWSER_VKBD_PASTE_MOUSE"
                        ,0x030E : "OP_BROWSER_MENU_REQ"
                        ,0x030F : "OP_BROWSER_MENU_RES"
+                       ,0x0313 : "OP_BROWSER_NEED_RELOAD_KEYMAP"
                        ,0x0401 : "OP_DVBAPP_VOL_UP"
                        ,0x0402 : "OP_DVBAPP_VOL_DOWN"
                        ,0x0501 : "OP_SYSTEM_OUT_OF_MEMORY"
@@ -348,9 +387,12 @@ class StreamServer:
 class ServerFactory:
        def doListenUnixTCP(self, name, handler):
                def destroy(name):
-                       if os.path.exists(name):
-                               os.unlink(name)
-                               print "Removed ", name
+                       import os
+                       try:
+                               if os.path.exists(name):
+                                       os.unlink(name)
+                                       print "Removed ", name
+                       except: pass
                destroy(name)
 
                params = SocketParams()
@@ -521,12 +563,11 @@ class HandlerHbbTV(Handler):
                tsid = dataItems[1]
                if not _g_helper.doChangeChannel(sid, tsid):
                        return (0, "NOK")
-
-
                return (0, "OK")
 
        def _cb_handleBrowserMenuReq(self, opcode, data):
                self._handle_dump(self._cb_handleBrowserMenuReq, opcode, data)
+               restoreResolution()
                fbClass.getInstance().unlock()
                eRCInput.getInstance().unlock()
                browser = getPluginBrowser()
@@ -570,10 +611,12 @@ class HandlerHbbTV(Handler):
        def _cb_virtualKeyboardClosed(self, data=None):
                fbClass.getInstance().lock()
                eRCInput.getInstance().lock()
+               setResolution(1280, 720)
                command_util = getCommandUtil()
                command_util.sendCommand('OP_BROWSER_VKBD_RES', data)
        def _cb_handleShowVirtualKeyboard(self, opcode, data):
                self._handle_dump(self._cb_handleShowVirtualKeyboard, opcode, data)
+               restoreResolution()
                fbClass.getInstance().unlock()
                eRCInput.getInstance().unlock()
                if data == 0 or strIsEmpty(data):
@@ -670,7 +713,7 @@ class HandlerHbbTV(Handler):
                return (channel_list_size, struct.pack('!IIII', sid, onid, tsid, namelen) + name)
 
        def _cb_handleSetPageTitle(self, opcode, data):
-               self._handle_dump(self._cb_handleCloseHbbTVBrowser, opcode, data)
+               self._handle_dump(self._cb_handleSetPageTitle, opcode, data)
                if data.startswith('file://') or data.startswith('http://'):
                        return "OK"
                if self._on_set_title_cb is not None:
@@ -705,6 +748,8 @@ class HandlerHbbTV(Handler):
                if before_service is not None:
                        self._session.nav.playService(before_service)
                        self._vod_uri = None
+
+               restoreResolution()
                return (0, "OK")
 
        def _cb_handleVODPlayerURI(self, opcode, data):
@@ -780,6 +825,7 @@ class HbbTVWindow(Screen, InfoBarNotifications):
                """
        def __init__(self, session, url=None, cbf=None, useAIT=False, profile=0):
                self._session = session
+               setResolution(1280, 720)
                fbClass.getInstance().lock()
                eRCInput.getInstance().lock()
 
@@ -850,9 +896,13 @@ class HbbTVWindow(Screen, InfoBarNotifications):
                        print ErrMsg
 
        def _serviceEOF(self):
+               (position,length) = self.getVodPlayTime()
+               self._ssm.setStatus(length, length, 1)
+               print "service EOF"
                self._currentServicePositionTimer.stop()
 
        def _layoutFinished(self):
+               self.setTitle(_('HbbTV Plugin'))
                command_util = getCommandUtil()
                profile = self._profile
                (sid, onid, tsid, name, orgid) = getChannelInfos()
@@ -884,6 +934,7 @@ class HbbTVWindow(Screen, InfoBarNotifications):
                        if self._cb_closed_func is not None:
                                self._cb_closed_func()
                except: pass
+               restoreResolution()
                fbClass.getInstance().unlock()
                eRCInput.getInstance().unlock()
                self.close()
@@ -910,12 +961,12 @@ class HbbTVHelper(Screen):
                __gval__.command_server = ServerFactory().doListenUnixTCP('/tmp/.sock.hbbtv.url', __gval__.hbbtv_handelr)
 
                self._urls = None
-               #self._stop_opera()
-               #self._start_opera()
-               self._restart_opera()
 
                Screen.__init__(self, session)
                self._session = session
+
+               self._restart_opera()
+
                self._timer_infobar = eTimer()
                self._timer_infobar.callback.append(self._cb_registrate_infobar)
                self._timer_infobar.start(1000)
@@ -930,6 +981,8 @@ class HbbTVHelper(Screen):
                        _g_ssm_ = SimpleSharedMemory()
                        _g_ssm_.doConnect()
 
+               self._callbackStartStop = None
+
        def _cb_registrate_infobar(self):
                if InfoBar.instance:
                        self._timer_infobar.stop()
@@ -965,8 +1018,8 @@ class HbbTVHelper(Screen):
 
        def _cb_hbbtv_activated(self, title=None, url=None):
                if not self._is_browser_running():
-                       message = "HbbTV Browser was not running.\nPlease running browser before start HbbTV Application."
-                       self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
+                       message = _("HbbTV Browser was not running.\nPlease running browser before start HbbTV Application.")
+                       self._session.open(MessageBox, message, MessageBox.TYPE_INFO)
                        return
                service = self._session.nav.getCurrentlyPlayingServiceReference()
                setBeforeService(service)
@@ -1006,6 +1059,7 @@ class HbbTVHelper(Screen):
                        global HBBTVAPP_PATH
                        start_command = '%s/launcher start'%(HBBTVAPP_PATH)
                        os.system(start_command)
+               return True
 
        def _stop_opera(self):
                global HBBTVAPP_PATH
@@ -1016,6 +1070,7 @@ class HbbTVHelper(Screen):
                global HBBTVAPP_PATH
                try:    os.system('%s/launcher restart'%(HBBTVAPP_PATH))
                except: pass
+               return True
 
        def getStartHbbTVUrl(self):
                url, self._urls, self._profile = None, None, 0
@@ -1037,7 +1092,7 @@ class HbbTVHelper(Screen):
                if self.getStartHbbTVUrl():
                        for x in self._urls:
                                applications.append((x[1], x))
-               else: applications.append(("No detected HbbTV applications.", None))
+               else: applications.append((_("No detected HbbTV applications."), None))
                self._session.openWithCallback(self._application_selected, ChoiceBox, title=_("Please choose an HbbTV application."), list=applications)
 
        def _application_selected(self, selected):
@@ -1046,18 +1101,21 @@ class HbbTVHelper(Screen):
                        self._cb_hbbtv_activated(selected[1][1], selected[1][2])
                except Exception, ErrMsg: print ErrMsg
 
-       def showBrowserConfigBox(self):
+       def showBrowserConfigBox(self, callback=None):
                start_stop_mode = []
+               self._callbackStartStop = callback
                if self._is_browser_running():
-                       start_stop_mode.append(('Stop',None))
-               else:   start_stop_mode.append(('Start',None))
+                       start_stop_mode.append((_('Stop'),'Stop'))
+               else:   start_stop_mode.append((_('Start'),'Start'))
                self._session.openWithCallback(self._browser_config_selected, ChoiceBox, title=_("Please choose one."), list=start_stop_mode)
 
        def _browser_config_selected(self, selected):
                if selected is None:
                        return
+               if self._callbackStartStop is not None:
+                       self._callbackStartStop()
                try:
-                       mode = selected[0]
+                       mode = selected[1]
                        if mode == 'Start':
                                if not self._is_browser_running():
                                        self._start_opera()
@@ -1108,6 +1166,7 @@ class OperaBrowserSetting:
                self._settingFileName = '/usr/local/hbb-browser/home/setting.ini'
                self._start = None
                self._type  = None
+               self._keymap = None
                self._read()
        def _read(self):
                f = open(self._settingFileName)
@@ -1118,26 +1177,31 @@ class OperaBrowserSetting:
                                if len(tmp) > 1:
                                        self._type = int(tmp[1])
                                else:   self._type = 0
+                       elif line.startswith('keymap='):
+                               self._keymap = line[7:len(line)-1]
                f.close()
        def _write(self):
                tmpstr = []
                tmpstr.append('start=%s %d\n' % (self._start, self._type))
+               tmpstr.append('keymap=%s\n' % (self._keymap))
                f = open(self._settingFileName, 'w')
                f.writelines(tmpstr)
                f.close()
-       def setData(self, start, types=0):
+       def setData(self, start, types=0, keymap="us-rc"):
                self._start = start
                self._type = types
+               self._keymap = keymap
                self._write()
        def getData(self):
                return {
                        'start':self._start,
                        'type':self._type,
+                       'keymap':self._keymap,
                }
 
 class OperaBrowserPreferenceWindow(ConfigListScreen, Screen):
        skin=   """
-               <screen position="center,center" size="600,350" title="Preference">
+               <screen position="center,120" size="600,350" title="Preference">
                        <widget name="url" position="5,0" size="590,100" valign="center" font="Regular;20" />
                        <widget name="config" position="0,100" size="600,200" scrollbarMode="showOnDemand" />
 
@@ -1169,17 +1233,12 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen):
                if self._currentPageUrl is None:
                        self._currentPageUrl = ''
                self._startPageUrl   = None
-
+               self._keymapType = None
                self.makeMenuEntry()
                self.onLayoutFinish.append(self.layoutFinished)
 
        def layoutFinished(self):
-               try:
-                       d = OperaBrowserSetting().getData()
-                       self._startPageUrl = d['start']
-                       #d['type']
-               except: self._startPageUrl = 'http://vuplus.com'
-               self.updateStartPageUrl()
+               self.setTitle(_('Preference'))
 
        def updateStartPageUrl(self):
                if self.menuItemStartpage.value == "startpage":
@@ -1192,12 +1251,15 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen):
        def keyGreen(self):
                url = self["url"].getText()
                if strIsEmpty(url):
-                       self.session.open(MessageBox, 'Invalid URL!!(Empty)\nPlease, Input to the URL.', type = MessageBox.TYPE_INFO)
+                       self.session.open(MessageBox, _('Invalid URL!!(Empty)\nPlease, Input to the URL.'), type = MessageBox.TYPE_INFO)
                        return
                mode = 0
                if url.find('/usr/local/manual') > 0:
                        mode = 1
-               OperaBrowserSetting().setData(url, mode)
+               self._keymapType = self.menuItemKeyboardLayout.value
+               OperaBrowserSetting().setData(url, mode, self._keymapType)
+               command_util = getCommandUtil()
+               command_util.sendCommand('OP_BROWSER_NEED_RELOAD_KEYMAP')
                self.close()
 
        def keyRed(self):
@@ -1209,7 +1271,7 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen):
                                return
                        self["url"].setText(data)
                if self.menuItemStartpage.value == "direct":
-                       self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=("Please enter URL here"), text='http://')
+                       self.session.openWithCallback(_cb_directInputUrl, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://')
 
        def keyLeft(self):
                ConfigListScreen.keyLeft(self)
@@ -1219,6 +1281,16 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen):
                ConfigListScreen.keyRight(self)
                self.updateStartPageUrl()
 
+       def getKeymapTypeList(self):
+               types = []
+               for f in os.listdir("/usr/local/hbb-browser/keymap"):
+                       filesplit = f.split('.')
+                       if len(filesplit) < 2:
+                               continue
+                       types.append((filesplit[1], filesplit[1]))
+               types.sort()
+               return types
+
        def makeMenuEntry(self):
                l = []
                l.append(("startpage", _("Start Page")))
@@ -1227,11 +1299,27 @@ class OperaBrowserPreferenceWindow(ConfigListScreen, Screen):
                l.append(("direct", _("Direct Input")))
                self.menuItemStartpage  = ConfigSelection(default="startpage", choices = l)
                self.menuEntryStartpage = getConfigListEntry(_("Startpage"), self.menuItemStartpage)
+
+               kl = self.getKeymapTypeList()
+
+               try:
+                       d = OperaBrowserSetting().getData()
+                       self._startPageUrl = d['start']
+                       self._keymapType = d['keymap']
+                       #d['type']
+               except: self._startPageUrl = 'http://vuplus.com'
+               self.updateStartPageUrl()
+
+               if self._keymapType is None or len(self._keymapType) == 0:
+                       self._keymapType = "us-rc"
+               self.menuItemKeyboardLayout = ConfigSelection(default=self._keymapType, choices = kl)
+               self.menuEntryKeyboardLayout = getConfigListEntry(_("Keyboard Layout"), self.menuItemKeyboardLayout)
                self.resetMenuList()
 
        def resetMenuList(self):
                self.menulist = []
                self.menulist.append(self.menuEntryStartpage)
+               self.menulist.append(self.menuEntryKeyboardLayout)
 
                self["config"].list = self.menulist
                self["config"].l.setList(self.menulist)
@@ -1290,21 +1378,21 @@ class BookmarkEditWindow(ConfigListScreen, Screen):
                self.onLayoutFinish.append(self.layoutFinished)
 
        def layoutFinished(self):
-               self.setTitle('Bookmark ' + self.mMode)
+               self.setTitle(_('Bookmark') + ' ' + self.mMode)
 
        def selectedItem(self):
                currentPosition = self["config"].getCurrent()
                if self.mType == BookmarkEditWindow.CATEGORY:
-                       return ("Name", self.menuItemName)
+                       return (_("Name"), self.menuItemName)
                else:
                        if currentPosition == self.menuEntryTitle:
-                               return ("Title", self.menuItemTitle)
+                               return (_("Title"), self.menuItemTitle)
                        elif currentPosition == self.menuEntryUrl:
-                               return ("Url", self.menuItemUrl)
+                               return (_("Url"), self.menuItemUrl)
                return None
 
        def showMessageBox(self, text):
-               msg = "Invalid " + text + "!!(Empty)\nPlease, Input to the " + text + "."
+               msg = _("Invalid ") + text + _("!!(Empty)\nPlease, Input to the ") + text + "."
                self.mSession.openWithCallback(self.showVKeyWindow, MessageBox, msg, MessageBox.TYPE_INFO)
                return False
 
@@ -1328,34 +1416,34 @@ class BookmarkEditWindow(ConfigListScreen, Screen):
 
        def saveData(self):
                if self.mType == BookmarkEditWindow.CATEGORY:
-                       if self.mMode == 'Add':
+                       if self.mMode == _('Add'):
                                categoryName = self.menuItemName.value
                                if strIsEmpty(categoryName):
-                                       return self.showMessageBox("Category Name")
+                                       return self.showMessageBox(_("Category Name"))
                                self.mBookmarkManager.addCategory(categoryName)
                        else:
                                if strIsEmpty(self.menuItemName.value):
-                                       return self.showMessageBox("Category Name")
+                                       return self.showMessageBox(_("Category Name"))
                                self.mData.mName = self.menuItemName.value
                                self.mBookmarkManager.updateCategory(self.mData)
                else:
-                       if self.mMode == 'Add':
+                       if self.mMode == _('Add'):
                                bookmarkTitle = self.menuItemTitle.value
                                bookmarkUrl   = self.menuItemUrl.value
                                if strIsEmpty(bookmarkTitle):
                                        self["config"].setCurrentIndex(0)
-                                       return self.showMessageBox("Bookmark Title")
+                                       return self.showMessageBox(_("Bookmark Title"))
                                if strIsEmpty(bookmarkUrl):
                                        self["config"].setCurrentIndex(1)
-                                       return self.showMessageBox("Bookmark URL")
+                                       return self.showMessageBox(_("Bookmark URL"))
                                self.mBookmarkManager.addBookmark(bookmarkTitle, bookmarkUrl, self.mData.mParent, 0)
                        else:
                                if strIsEmpty(self.menuItemTitle.value):
                                        self["config"].setCurrentIndex(0)
-                                       return self.showMessageBox("Bookmark Title")
+                                       return self.showMessageBox(_("Bookmark Title"))
                                if strIsEmpty(self.menuItemUrl.value):
                                        self["config"].setCurrentIndex(1)
-                                       return self.showMessageBox("Bookmark URL")
+                                       return self.showMessageBox(_("Bookmark URL"))
                                self.mData.mTitle = self.menuItemTitle.value
                                self.mData.mUrl   = self.menuItemUrl.value
                                self.mBookmarkManager.updateBookmark(self.mData)
@@ -1395,7 +1483,7 @@ class BookmarkEditWindow(ConfigListScreen, Screen):
 
 class OperaBrowserBookmarkWindow(Screen):
        skin =  """
-               <screen name="HbbTVBrowserBookmarkWindow" position="center,center" size="600,400" title="Bookmark" >
+               <screen name="HbbTVBrowserBookmarkWindow" position="center,120" size="600,400" title="Bookmark" >
                        <widget name="bookmarklist" position="0,0" size="600,200" zPosition="10" scrollbarMode="showOnDemand" />
 
                        <ePixmap pixmap="skin_default/buttons/key_0.png" position="556,330" size="35,30" alphatest="on" />
@@ -1438,6 +1526,11 @@ class OperaBrowserBookmarkWindow(Screen):
                self.mBookmarkList = self.setBookmarkList()
                self["bookmarklist"] = MenuList(self.mBookmarkList)
 
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.setTitle(_('Bookmark'))
+
        def setBookmarkList(self):
                l = []
                #self.mBookmarkManager.dump()
@@ -1475,7 +1568,7 @@ class OperaBrowserBookmarkWindow(Screen):
        def keyNumber(self):
                data = self["bookmarklist"].getCurrent()[1]
                if strIsEmpty(data.mUrl):
-                       msg = "Invalid URL. Please check again!!"
+                       msg = _("Invalid URL. Please check again!!")
                        self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO)
                        return
                def cbSetStartpage(ret=None):
@@ -1483,7 +1576,7 @@ class OperaBrowserBookmarkWindow(Screen):
                        if ret:
                                data = self["bookmarklist"].getCurrent()[1]
                                OperaBrowserSetting().setData(data.mUrl, data.mType)
-               msg = "Do you want to set selected url to the Startpage?"
+               msg = _("Do you want to set selected url to the Startpage?")
                self.mSession.openWithCallback(cbSetStartpage, MessageBox, msg, MessageBox.TYPE_YESNO, default=True)
 
        def keyGreen(self):
@@ -1498,7 +1591,7 @@ class OperaBrowserBookmarkWindow(Screen):
                                        return
                                retAdd = self.mBookmarkManager.addBookmark(self.mTitle, self.mUrl, parent.mId, 0)
                                if not retAdd:
-                                       msg = "Current page is already exist."
+                                       msg = _("Current page is already exist.")
                                        self.mSession.open(MessageBox, msg, MessageBox.TYPE_INFO)
                                self.cbEditWindow(True)
                        elif data[1] == 2:
@@ -1506,19 +1599,19 @@ class OperaBrowserBookmarkWindow(Screen):
                                if parent is None:
                                        return
                                b = BookmarkData(0, '', '', parent.mId, 0)
-                               self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Add', BookmarkEditWindow.BOOKMARK, b, self.mBookmarkManager)
+                               self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.BOOKMARK, b, self.mBookmarkManager)
                        elif data[1] == 3:
                                c = CategoryData(0, '')
-                               self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Add', BookmarkEditWindow.CATEGORY, c, self.mBookmarkManager)
+                               self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Add'), BookmarkEditWindow.CATEGORY, c, self.mBookmarkManager)
                if strIsEmpty(self.mUrl):
-                       l = [('Direct Input(Bookmark)',2,), ('Direct Input(Category)',3,)]
-               else:   l = [('Currentpage(Bookmark)',1,), ('Direct Input(Bookmark)',2,), ('Direct Input(Category)',3,)]
+                       l = [(_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)]
+               else:   l = [(_('Currentpage(Bookmark)'),1,), (_('Direct Input(Bookmark)'),2,), (_('Direct Input(Category)'),3,)]
                self.mSession.openWithCallback(cbGreen, ChoiceBox, title=_("Please choose."), list=l)
        def keyYellow(self):
                data = self["bookmarklist"].getCurrent()[1]
                if self.isCategoryItem():
-                       self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Edit', BookmarkEditWindow.CATEGORY, data, self.mBookmarkManager)
-               else:   self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, 'Edit', BookmarkEditWindow.BOOKMARK, data, self.mBookmarkManager)
+                       self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.CATEGORY, data, self.mBookmarkManager)
+               else:   self.mSession.openWithCallback(self.cbEditWindow, BookmarkEditWindow, _('Edit'), BookmarkEditWindow.BOOKMARK, data, self.mBookmarkManager)
        def keyBlue(self):
                def cbBlue(ret=None):
                        if not ret: return
@@ -1528,8 +1621,8 @@ class OperaBrowserBookmarkWindow(Screen):
                        else:   self.mBookmarkManager.deleteBookmark(data.mId)
                        self.updateBookmarkList()
                if self.isCategoryItem():
-                       msg = "Do you want to delete the category and the bookmarks?"
-               else:   msg = "Do you want to delete the bookmark?"
+                       msg = _("Do you want to delete the category and the bookmarks?")
+               else:   msg = _("Do you want to delete the bookmark?")
                self.mSession.openWithCallback(cbBlue, MessageBox, msg, MessageBox.TYPE_YESNO, default=True)
        def keyOK(self):
                if self.isCategoryItem(): return
@@ -1537,7 +1630,7 @@ class OperaBrowserBookmarkWindow(Screen):
                data = self["bookmarklist"].getCurrent()[1]
                url = data.mUrl.strip()
                if len(url) == 0:
-                       self.session.open(MessageBox, "Can't open selected bookmark.\n   - URL data is empty!!", type = MessageBox.TYPE_INFO)
+                       self.session.open(MessageBox, _("Can't open selected bookmark.\n   - URL data is empty!!"), type = MessageBox.TYPE_INFO)
                        return
                mode = data.mType
                if mode:
@@ -1552,7 +1645,6 @@ class OperaBrowserBookmarkWindow(Screen):
        def keyCancel(self):
                self.close()
 
-
 class BrowserHelpWindow(Screen, HelpableScreen):
        MODE_GLOBAL,MODE_KEYBOARD,MODE_MOUSE = 1,2,3
         skin = """
@@ -1590,6 +1682,11 @@ class BrowserHelpWindow(Screen, HelpableScreen):
                self.showHelpTimer.callback.append(self.cbShowHelpTimerClosed)
                self.showHelpTimer.start(500)
 
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.setTitle(_('Browser Help'))
+
        def cbShowHelpTimerClosed(self):
                self.showHelpTimer.stop()
                self.setHelpModeActions(self.MODE_GLOBAL)
@@ -1666,22 +1763,26 @@ class OperaBrowser(Screen):
        SUBMENULIST_HEIGHT  = 25
        SUBMENULIST_NEXT    = 2
 
+       # menulist->position->y : MENUBAR_ITEM_HEIGHT+30
+       # menulist->size->x     : SUBMENULIST_WIDTH
+       # submenulist->position->x : SUBMENULIST_WIDTH+50+SUBMENULIST_NEXT
+       # submenulist->position->y : MENUBAR_ITEM_HEIGHT+30
+       # submenulist->size->x  : SUBMENULIST_WIDTH
        skin =  """
-               <screen name="Opera Browser" position="0,0" size="1280,720" backgroundColor="transparent" flags="wfNoBorder" title="Opera Browser">
+               <screen name="OperaBrowser" position="0,0" size="1280,720" backgroundColor="transparent" flags="wfNoBorder" title="Opera Browser">
                        <widget name="topArea" zPosition="-1" position="0,0" size="1280,60" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
                        <widget name="menuitemFile" position="30,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
                        <widget name="menuitemTool" position="180,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
                        <widget name="menuitemHelp" position="330,20" size="150,30" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" foregroundColors="#9f1313,#a08500" />
-                       <widget name="menulist" position="50,%d" size="%d,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
-                       <widget name="submenulist" position="%d,%d" size="%d,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
+                       <widget name="menulist" position="50,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
+                       <widget name="submenulist" position="252,60" size="200,150" backgroundColor="#000000" zPosition="10" scrollbarMode="showOnDemand" />
                        <widget name="bottomArea" position="0,640" size="1280,80" font="Regular;20" valign="center" halign="center" backgroundColor="#000000" />
-               </screen>
-               """ % (MENUBAR_ITEM_HEIGHT+30, SUBMENULIST_WIDTH, SUBMENULIST_WIDTH+50+SUBMENULIST_NEXT, MENUBAR_ITEM_HEIGHT+30, SUBMENULIST_WIDTH)# modify menu
+               </screen>
+               """
 
-       MENUITEMS_LIST =[[('Open Startpage', None), ('Open URL', None), ('Start/Stop',None), ('Exit', None)],
-                        [('Bookmark', None), ('Preference', None)],
-                        [('About', None), ('Help', None)]]
-       def __init__(self, session):
+       COMMAND_MAP = {}
+       MENUITEMS_LIST =[]
+       def __init__(self, session, url=None):
                Screen.__init__(self, session)
                self["actions"] = ActionMap(["DirectionActions", "MenuActions", "OkCancelActions"], {
                         "cancel"      : self.keyCancel
@@ -1693,6 +1794,8 @@ class OperaBrowser(Screen):
                        ,"menu"        : self.keyMenu
                }, -2)
 
+               self.UpdateLanguageCB()
+
                self._terminatedBrowser = True
                self._enableKeyEvent = True
                self._currentPageUrl = None
@@ -1721,23 +1824,47 @@ class OperaBrowser(Screen):
                self._onCloseTimer = eTimer()
                self._onCloseTimer.callback.append(self._cb_onClose)
 
+               self.paramUrl = url
+               language.addCallback(self.UpdateLanguageCB)
+
+       def UpdateLanguageCB(self):
+               # modify menu
+               self.MENUITEMS_LIST = [
+                       [(_('Open Startpage'), None), (_('Open URL'), None), (_('Start/Stop'),None), (_('Exit'), None)],
+                       [(_('Bookmark'), None), (_('Preference'), None)],
+                       [(_('About'), None), (_('Help'), None)]]
+               self.COMMAND_MAP = {}
+               self.COMMAND_MAP[_('Exit')] = self._cmd_on_Exit
+               self.COMMAND_MAP[_('Help')] = self._cmd_on_Help
+               self.COMMAND_MAP[_('About')] = self._cmd_on_About
+               self.COMMAND_MAP[_('Open URL')] = self._cmd_on_OpenUrl
+               self.COMMAND_MAP[_('Start/Stop')] = self._cmd_on_StartStop
+               self.COMMAND_MAP[_('Bookmark')] = self._cmd_on_Bookmark
+               self.COMMAND_MAP[_('Preference')] = self._cmd_on_Preference
+               self.COMMAND_MAP[_('Return')] = self._cmd_on_ReturnToBrowser
+               self.COMMAND_MAP[_('Open Startpage')] = self._cmd_on_OpenStartpage
+
        def enableRCMouse(self, mode): #mode=[0|1]|[False|True]
                rcmouse_path = "/proc/stb/fp/mouse"
                if os.path.exists(rcmouse_path):
                        os.system("echo %d > %s" % (mode, rcmouse_path))
 
        def layoutFinished(self):
-               self["menuitemFile"].setText("File")# modify menu
-               self["menuitemTool"].setText("Tools")
-               self["menuitemHelp"].setText("Help")
+               self["menuitemFile"].setText(_("File"))# modify menu
+               self["menuitemTool"].setText(_("Tools"))
+               self["menuitemHelp"].setText(_("Help"))
 
                self["menulist"].hide()
                self["submenulist"].hide()
 
-               self["bottomArea"].setText("Opera Web Browser Plugin v1.0")
-               self.setTitle("BrowserMain")
+               self["bottomArea"].setText(_("Opera Web Browser Plugin v1.0"))
+               self.setTitle(_("BrowserMain"))
                self.selectMenuitem()
 
+               if self.paramUrl is not None:
+                       self.keyMenu()
+                       self.cbUrlText(self.paramUrl, 1)
+
        def selectMenuitem(self):
                tmp = [self["menuitemFile"], self["menuitemTool"], self["menuitemHelp"]]# modify menu
                self["menuitemFile"].setForegroundColorNum(0)
@@ -1754,7 +1881,7 @@ class OperaBrowser(Screen):
        def setListOnView(self):
                l = self.MENUITEMS_LIST[self.menubarCurrentIndex]
                if not self._terminatedBrowser and self.menubarCurrentIndex == 0: # running
-                       l = [('Return', None)]
+                       l = [(_('Return'), None)]
                self.lvMenuItems = l #self.MENUITEMS_LIST[self.menubarCurrentIndex]     
                return self.lvMenuItems
 
@@ -1803,18 +1930,23 @@ class OperaBrowser(Screen):
                        if self._on_setPageTitle in command_server.onSetPageTitleCB:
                                command_server.onSetPageTitleCB.remove(self._on_setPageTitle)
                except Exception, ErrMsg: pass
-               self._on_setPageTitle('Opera Browser')
+               self._on_setPageTitle(_('Opera Browser'))
                self.enableRCMouse(False)
                self.toggleMainScreen()
+               restoreResolution()
                fbClass.getInstance().unlock()
                eRCInput.getInstance().unlock()
                self._terminatedBrowser = True
                self._enableKeyEvent = True
                #if not self.toggleListViewFlag:
                #       self.keyDown()
+
                self._currentPageUrl = ''
-               self.keyRight()
-               self.keyLeft()
+               if self.paramUrl is not None:
+                       self.keyCancel()
+               else:
+                       self.keyRight()
+                       self.keyLeft()
 
        def _on_setPageTitle(self, title=None):
                print "Title :",title
@@ -1823,6 +1955,9 @@ class OperaBrowser(Screen):
                self.setTitle(title)
 
        def cbUrlText(self, data=None, mode=0):
+               global _g_helper
+               if not _g_helper._is_browser_running():
+                       return
                print "Inputed Url :", data, mode
                if strIsEmpty(data):
                        return
@@ -1834,8 +1969,12 @@ class OperaBrowser(Screen):
                        command_server.onHbbTVCloseCB.append(self._on_close_window)
                self.toggleMainScreen()
                self.enableRCMouse(True)
+
                fbClass.getInstance().lock()
                eRCInput.getInstance().lock()
+
+               setResolution(1280, 720)
+
                command_util = getCommandUtil()
                command_util.sendCommand('OP_BROWSER_OPEN_URL', data, mode)
                self._terminatedBrowser = False
@@ -1848,24 +1987,32 @@ class OperaBrowser(Screen):
                if data is None:
                        return
                (url, mode) = data
+               global _g_helper
+               if not _g_helper._is_browser_running():
+                       message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
+                       self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
+                       return
                self.cbUrlText(url, mode)
 
        def _cmd_on_OpenUrl(self):
                global _g_helper
                if not _g_helper._is_browser_running():
-                       message = "Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu."
+                       message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
                        self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
                        return
-               self.session.openWithCallback(self.cbUrlText, VirtualKeyBoard, title=("Please enter URL here"), text='http://')
+               self.session.openWithCallback(self.cbUrlText, VirtualKeyBoard, title=(_("Please enter URL here")), text='http://')
        def _cmd_on_About(self):
-               self.session.open(MessageBox, 'Opera Web Browser Plugin v1.0', type = MessageBox.TYPE_INFO)
+               self.session.open(MessageBox, _('Opera Web Browser Plugin v1.0'), type = MessageBox.TYPE_INFO)
        def _cmd_on_Exit(self):
                self.close()
+       def _cb_cmdOnStartSTop(self):
+               self.keyMenu()
        def _cmd_on_StartStop(self):
                global _g_helper
                if _g_helper is None: 
                        return
-               _g_helper.showBrowserConfigBox()
+               _g_helper.showBrowserConfigBox(self._cb_cmdOnStartSTop)
+
        def _cmd_on_Bookmark(self):
                url = self._currentPageUrl
                if url is None:
@@ -1882,7 +2029,7 @@ class OperaBrowser(Screen):
        def _cmd_on_OpenStartpage(self):
                global _g_helper
                if not _g_helper._is_browser_running():
-                       message = "Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu."
+                       message = _("Opera Browser was not running.\nPlease running browser using [File]>[Start/Stop] menu.")
                        self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
                        return
                mode = 0
@@ -1900,22 +2047,14 @@ class OperaBrowser(Screen):
                self.session.open(BrowserHelpWindow)
 
        def doCommand(self, command):
-               cmd_map = {# modify menu
-                        'Exit'         :self._cmd_on_Exit
-                       ,'Help'         :self._cmd_on_Help
-                       ,'About'        :self._cmd_on_About
-                       ,'Open URL'     :self._cmd_on_OpenUrl
-                       ,'Start/Stop'   :self._cmd_on_StartStop
-                       ,'Bookmark'     :self._cmd_on_Bookmark
-                       ,'Preference'   :self._cmd_on_Preference
-                       ,'Return'       :self._cmd_on_ReturnToBrowser
-                       ,'Open Startpage' :self._cmd_on_OpenStartpage
-               }
                try:
-                       cmd_map[command]()
+                       self.COMMAND_MAP[command]()
                except Exception, ErrMsg: print ErrMsg
 
        def keyOK(self):
+               if not self.toggleMainScreenFlag:
+                       self.keyMenu()
+                       return
                if not self.toggleListViewFlag:
                        self.keyDown()
                        return
@@ -1999,6 +2138,7 @@ class OperaBrowser(Screen):
                        #self._session.openWithCallback(self._cb_virtualKeyboardClosed, VirtualKeyBoard, title=("Please enter URL here"), text="")
                        fbClass.getInstance().lock()
                        eRCInput.getInstance().lock()
+                       setResolution(1280, 720)
                        if self.toggleListViewFlag:
                                self.toggleMainScreen()
                        self._currentPageUrl   = None
@@ -2027,20 +2167,57 @@ class OperaBrowser(Screen):
                self.currentListView.pageUp()
                self.keyUp()
 
-
-
 def auto_start_main(reason, **kwargs):
        if reason:
                command_server = getCommandServer()
                command_server.stop()
 
+from  Screens.HelpMenu import HelpableScreen
 def session_start_main(session, reason, **kwargs):
        fbClass.getInstance().unlock()
        eRCInput.getInstance().unlock()
+
+       from enigma import getDesktop
+       desktopSize = getDesktop(0).size()
+       setDefaultResolution(desktopSize.width(), desktopSize.height())
+
        global _g_helper
        _g_helper = session.open(HbbTVHelper)
 
+       HelpableScreen.__init__ = HelpableScreen__init__
+       HelpableScreen.session = session
+
+def HelpableScreen__init__(self):
+       if isinstance(self, HelpableScreen):
+               HelpableScreen.showManual = showManual
+
+               self["helpActions"] = ActionMap(["HelpbuttonActions"], {
+                       "help_b" : self.showHelp,
+                       "help_l" : self.showManual, 
+               }, -2)
+
 _g_clearBrowserDataTimer = eTimer()
+def showManual(self):
+       if not os.path.exists('/usr/local/manual'):
+               return
+
+       url = 'file:///usr/local/manual/main.html'
+       lang = language.getLanguage()
+       if lang == 'ru_RU' and os.path.exists('/usr/local/manual/ru_RU'):
+               url = 'file:///usr/local/manual/ru_RU/main.html'
+       elif lang == 'de_DE' and os.path.exists('/usr/local/manual/de_DE'):
+               url = 'file:///usr/local/manual/de_DE/main.html'
+
+       def _do_clean():
+               _g_clearBrowserDataTimer.stop()
+               try:    _g_clearBrowserDataTimer.callback.remove(_do_clean)
+               except: pass
+               setPluginBrowser(None)
+       def clearBrowserData():
+               _g_clearBrowserDataTimer.callback.append(_do_clean)
+               _g_clearBrowserDataTimer.start(50)
+       setPluginBrowser(self.session.openWithCallback(clearBrowserData, OperaBrowser, url))
+
 def plugin_start_main(session, **kwargs):
        #session.open(OperaBrowser)
        def _do_clean():
@@ -2066,11 +2243,12 @@ def plugin_extension_browser_config(session, **kwargs):
        _g_helper.showBrowserConfigBox()
 
 def Plugins(path, **kwargs):
-       return  [
-               PluginDescriptor(where=PluginDescriptor.WHERE_AUTOSTART, fnc=auto_start_main),
-               PluginDescriptor(where=PluginDescriptor.WHERE_SESSIONSTART, needsRestart=True, fnc=session_start_main, weight=-10),
-               PluginDescriptor(name="HbbTV Applications", where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_start_application),
-               PluginDescriptor(name="Browser Start/Stop", where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_browser_config),
-               PluginDescriptor(name="Opera Web Browser", description="start opera web browser", where=PluginDescriptor.WHERE_PLUGINMENU, needsRestart=True, fnc=plugin_start_main),
-               ]
+       l = []
+       l.append(PluginDescriptor(where=PluginDescriptor.WHERE_AUTOSTART, fnc=auto_start_main))
+       l.append(PluginDescriptor(where=PluginDescriptor.WHERE_SESSIONSTART, needsRestart=True, fnc=session_start_main, weight=-10))
+       l.append(PluginDescriptor(name=_("HbbTV Applications"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_start_application))
+       l.append(PluginDescriptor(name=_("Browser Start/Stop"), where=PluginDescriptor.WHERE_EXTENSIONSMENU, needsRestart=True, fnc=plugin_extension_browser_config))
+       l.append(PluginDescriptor(name=_("Opera Web Browser"), description=_("start opera web browser"), where=PluginDescriptor.WHERE_PLUGINMENU, needsRestart=True, fnc=plugin_start_main))
+
+       return l