def show(self):
     '''Show application view.'''
     # Remove child widgets first.
     utils.containerRemoveAll(self.box)
     self.itemDict.clear()
     
     if self.appNum == 0:
         if (getDefaultLanguage() == "default"):
             paddingX = 10
         else:
             paddingX = 45
         
         notifyBox = gtk.VBox()
         notifyAlign = gtk.Alignment()
         notifyAlign.set(0.5, 0.5, 0.0, 0.0)
         notifyAlign.add(notifyBox)
         self.box.pack_start(notifyAlign)
         
         tipImage = gtk.image_new_from_pixbuf(
             gtk.gdk.pixbuf_new_from_file("../icon/tips/%s/downloadTip.png" % (getDefaultLanguage())))
         tipAlign = gtk.Alignment()
         tipAlign.set_padding(0, 0, paddingX, 0)
         tipAlign.add(tipImage)
         notifyBox.pack_start(tipAlign)
         
         penguinImage = gtk.image_new_from_pixbuf(
             gtk.gdk.pixbuf_new_from_file("../icon/tips/penguin.png"))
         penguinAlign = gtk.Alignment()
         penguinAlign.set_padding(0, 0, 0, paddingX)
         penguinAlign.add(penguinImage)
         notifyBox.pack_start(penguinAlign)
         
         self.box.show_all()
     else:
         # Get application list.
         appList = self.getListFunc(
             (self.pageIndex - 1) * self.defaultRows,
             min(self.pageIndex * self.defaultRows, self.appNum)
             )
         
         # Create application view.
         self.box.pack_start(self.createAppList(appList))
         
         # Create index view.
         indexbar = self.createIndexbar()
         if not indexbar == None:
             self.box.pack_start(indexbar)
         
         # Show all.
         self.box.show_all()
         
         # Request vote data.
         self.fetchVoteCallback(
             PAGE_DOWNLOAD_MANAGE, 
             map (lambda appInfo: utils.getPkgName(appInfo.pkg), appList))
         
     # Scroll ScrolledWindow to top after render.
     utils.scrollToTop(self.scrolledwindow)
 def show(self):
     '''Show application view.'''
     # Remove child widgets first.
     utils.containerRemoveAll(self.box)
     self.itemDict.clear()
     
     if self.appNum == 0:
         if (getDefaultLanguage() == "default"):
             paddingX = 10
         else:
             paddingX = 45
         
         notifyBox = gtk.VBox()
         notifyAlign = gtk.Alignment()
         notifyAlign.set(0.5, 0.5, 0.0, 0.0)
         notifyAlign.add(notifyBox)
         self.box.pack_start(notifyAlign)
         
         tipImage = gtk.image_new_from_pixbuf(
             gtk.gdk.pixbuf_new_from_file("../icon/tips/%s/downloadTip.png" % (getDefaultLanguage())))
         tipAlign = gtk.Alignment()
         tipAlign.set_padding(0, 0, paddingX, 0)
         tipAlign.add(tipImage)
         notifyBox.pack_start(tipAlign)
         
         penguinImage = gtk.image_new_from_pixbuf(
             gtk.gdk.pixbuf_new_from_file("../icon/tips/penguin.png"))
         penguinAlign = gtk.Alignment()
         penguinAlign.set_padding(0, 0, 0, paddingX)
         penguinAlign.add(penguinImage)
         notifyBox.pack_start(penguinAlign)
         
         self.box.show_all()
     else:
         # Get application list.
         appList = self.getListFunc(
             (self.pageIndex - 1) * self.defaultRows,
             min(self.pageIndex * self.defaultRows, self.appNum)
             )
         
         # Create application view.
         self.box.pack_start(self.createAppList(appList))
         
         # Create index view.
         indexbar = self.createIndexbar()
         if not indexbar == None:
             self.box.pack_start(indexbar)
         
         # Show all.
         self.box.show_all()
         
         # Request vote data.
         self.fetchVoteCallback(
             PAGE_DOWNLOAD_MANAGE, 
             map (lambda appInfo: utils.getPkgName(appInfo.pkg), appList))
         
     # Scroll ScrolledWindow to top after render.
     utils.scrollToTop(self.scrolledwindow)
Ejemplo n.º 3
0
def getPkgLongDesc(pkg):
    '''Get package's long description.'''
    pkgPath = "../pkgData/pkgInfo/" + pkg.name
    if os.path.exists(pkgPath):
        longDescDict = evalFile(pkgPath)
        if longDescDict.has_key(getDefaultLanguage()):
            return ((evalFile(pkgPath))[getDefaultLanguage()])["longDesc"]
        else:
            return pkg.candidate.description
    else:
        return pkg.candidate.description
Ejemplo n.º 4
0
def getPkgShortDesc(pkg):
    '''Get package's short description.'''
    pkgPath = "../pkgData/pkgInfo/" + pkg.name
    if os.path.exists(pkgPath):
        shortDescDict = evalFile(pkgPath)
        if shortDescDict.has_key(getDefaultLanguage()):
            return ((evalFile(pkgPath))[getDefaultLanguage()])["shortDesc"]
        else:
            return pkg.candidate.summary
    else:
        return pkg.candidate.summary
Ejemplo n.º 5
0
def getPkgLongDesc(pkg):
    '''Get package's long description.'''
    pkgPath = "../pkgData/pkgInfo/" + pkg.name
    if os.path.exists(pkgPath):
        longDescDict = evalFile(pkgPath)
        if longDescDict.has_key(getDefaultLanguage()):
            return ((evalFile(pkgPath))[getDefaultLanguage()])["longDesc"]
        else:
            return pkg.candidate.description
    else:
        return pkg.candidate.description
Ejemplo n.º 6
0
def getPkgShortDesc(pkg):
    '''Get package's short description.'''
    pkgPath = "../pkgData/pkgInfo/" + pkg.name
    if os.path.exists(pkgPath):
        shortDescDict = evalFile(pkgPath)
        if shortDescDict.has_key(getDefaultLanguage()):
            return ((evalFile(pkgPath))[getDefaultLanguage()])["shortDesc"]
        else:
            return pkg.candidate.summary
    else:
        return pkg.candidate.summary
 def createLogoIcon(self):
     '''Create navigate icon.'''
     eventBox = gtk.EventBox()
     eventBox.set_visible_window(False)
     navBox = gtk.VBox()
     navImage = gtk.image_new_from_pixbuf(gtk.gdk.pixbuf_new_from_file(
             "../icon/logo/%s/logo.png" % (getDefaultLanguage())))
     navBox.pack_start(navImage, False)
     eventBox.add(navBox)
     eventBox.show_all()
     
     return eventBox
Ejemplo n.º 8
0
    def createLogoIcon(self):
        '''Create navigate icon.'''
        eventBox = gtk.EventBox()
        eventBox.set_visible_window(False)
        navBox = gtk.VBox()
        navImage = gtk.image_new_from_pixbuf(
            gtk.gdk.pixbuf_new_from_file("../icon/logo/%s/logo.png" %
                                         (getDefaultLanguage())))
        navBox.pack_start(navImage, False)
        eventBox.add(navBox)
        eventBox.show_all()

        return eventBox
    def show(self, scrollToTop=True):
        '''Show application view.'''
        # Remove child widgets first.
        utils.containerRemoveAll(self.box)
        self.itemDict.clear()

        # If i don't re-connect self.eventbox and self.box,
        # update view will show nothing.
        # I still can't understand why?
        # Maybe this is bug of GtkEventBox?
        utils.containerRemoveAll(self.eventbox)
        self.eventbox.add(self.box)

        if self.appNum == 0:
            if (getDefaultLanguage() == "default"):
                paddingX = 10
            else:
                paddingX = 0

            notifyBox = gtk.VBox()
            notifyAlign = gtk.Alignment()
            notifyAlign.set(0.5, 0.5, 0.0, 0.0)
            notifyAlign.add(notifyBox)
            self.box.pack_start(notifyAlign)

            tipImage = gtk.image_new_from_pixbuf(
                gtk.gdk.pixbuf_new_from_file("../icon/tips/%s/updateTip.png" %
                                             (getDefaultLanguage())))
            tipAlign = gtk.Alignment()
            tipAlign.set_padding(0, 0, paddingX, 0)
            tipAlign.add(tipImage)
            notifyBox.pack_start(tipAlign)

            penguinImage = gtk.image_new_from_pixbuf(
                gtk.gdk.pixbuf_new_from_file("../icon/tips/penguin.png"))
            penguinAlign = gtk.Alignment()
            penguinAlign.set_padding(0, 0, 0, paddingX)
            penguinAlign.add(penguinImage)
            notifyBox.pack_start(penguinAlign)

            self.box.show_all()
        else:
            # Get application list.
            appList = self.getListFunc((self.pageIndex - 1) * self.defaultRows,
                                       min(self.pageIndex * self.defaultRows,
                                           self.appNum))

            # Create application view.
            self.box.pack_start(self.createAppList(appList))

            # Create index view.
            indexbar = self.createIndexbar()
            if not indexbar == None:
                self.box.pack_start(indexbar)

            self.box.show_all()

            # Request vote data.
            self.fetchVoteCallback(
                PAGE_UPGRADE,
                map(lambda appInfo: utils.getPkgName(appInfo.pkg), appList))

        # Scroll ScrolledWindow to top after render.
        if scrollToTop:
            utils.scrollToTop(self.scrolledwindow)
 def initNormalStatus(self):
     '''Init normal status.'''
     pkg = self.appInfo.pkg
         
     # Clean right box first.
     utils.containerRemoveAll(self.appAdditionBox)
     
     # Add application vote information.
     self.appVoteView = VoteView(
         self.appInfo, PAGE_UNINSTALL, 
         self.sendVoteCallback)
     self.appAdditionBox.pack_start(self.appVoteView.eventbox, False, False)
     
     # Add application installed size.
     size = utils.getPkgInstalledSize(pkg)
     
     appSizeLabel = DynamicSimpleLabel(
         self.appAdditionBox,
         utils.formatFileSize(size),
         appTheme.getDynamicColor("appSize"),
         LABEL_FONT_SIZE,
         )
     appSize = appSizeLabel.getLabel()
     
     appSize.set_size_request(self.SIZE_LABEL_WIDTH, -1)
     appSize.set_alignment(1.0, 0.5)
     self.appAdditionBox.pack_start(appSize, False, False, self.APP_RIGHT_PADDING_X)
     
     # Add action button.
     (actionButtonBox, actionButtonAlign) = createActionButton()
     self.appAdditionBox.pack_start(actionButtonAlign, False, False)
     
     if self.confirmUninstall:
         appUninstallLabel = gtk.Label()
         appUninstallLabel.set_markup(
             "<span foreground='%s' size='%s'>%s</span>" % (
                 appTheme.getDynamicColor("uninstallConfirm").getColor(),
                 LABEL_FONT_SIZE, 
                 __("Are you sure uninstall?")))
         actionButtonBox.pack_start(appUninstallLabel, False, False)
         
         appUninstallBox = gtk.HBox()
         appUninstallAlign = gtk.Alignment()
         appUninstallAlign.set(0.5, 0.5, 1.0, 1.0)
         appUninstallAlign.set_padding(ACTION_BUTTON_PADDING_Y, ACTION_BUTTON_PADDING_Y, 0, 0)
         appUninstallAlign.add(appUninstallBox)
         actionButtonBox.pack_start(appUninstallAlign, False, False)
         
         if getDefaultLanguage() == "default":
             buttonName = "uninstall_confirm"
         else:
             buttonName = "uninstall_confirm_cn"
             
         (appConfirmButton, appConfirmAlign) = newActionButton(
             buttonName, 0.0, 0.5, 
             "cell", False, __("Action Uninstall"), BUTTON_FONT_SIZE_SMALL, "buttonFont"
             )
         appConfirmButton.connect("button-release-event", lambda widget, event: self.switchToUninstalling())
         
         (appCancelButton, appCancelAlign) = newActionButton(
             buttonName, 1.0, 0.5, 
             "cell", False, __("Action Cancel"), BUTTON_FONT_SIZE_SMALL, "buttonFont"
             )
         appCancelButton.connect("button-release-event", lambda widget, event: self.switchToNormal(False))
         
         appUninstallBox.pack_start(appConfirmAlign)
         appUninstallBox.pack_start(appCancelAlign)
     else:
         (appUninstallBox, appUninstallAlign) = newActionButton(
             "uninstall", 0.5, 0.5,
             "cell", False, __("Action Uninstall"), BUTTON_FONT_SIZE_SMALL, "buttonFont"
             )
         appUninstallBox.connect("button-release-event", lambda widget, event: self.switchToNormal(True))
         actionButtonBox.pack_start(appUninstallAlign)
Ejemplo n.º 11
0
    def __init__(self, repoCache, switchStatus, downloadQueue, entryDetailCallback, selectCategoryCallback,
                 launchApplicationCallback, updateDataDir):
        '''Init for recommend view.'''
        # Init.
        self.repoCache = repoCache
        self.switchStatus = switchStatus
        self.downloadQueue = downloadQueue
        self.entryDetailCallback = entryDetailCallback
        self.selectCategoryCallback = selectCategoryCallback
        self.launchApplicationCallback = launchApplicationCallback
        self.updateDataDir = updateDataDir
        
        self.box = gtk.VBox()
        self.itemDict = {}
        
        self.index = -1
        self.ticker = 0
        
        # Create container box.
        listLen = 12
        self.pkgRecomments = evalFile(self.updateDataDir + "pkgRecommend/%s/recommendList.txt" % (getDefaultLanguage()))
        boxlist = map (lambda n: gtk.HBox(), range(0, listLen / 2 + listLen % 2))
        for box in boxlist:
            self.box.pack_start(box, False, False)
        
        # Add home recommend list.
        boxIndex = 0
        for (index, itemName) in enumerate([CLASSIFY_NEWS, CLASSIFY_RECOMMEND]):
            appList = self.pkgRecomments[index]
            recommendList = self.createRecommendList(itemName, False, appList)
            box = boxlist[boxIndex / 2]
            boxIndex += 1
            box.pack_start(recommendList, False, False)

        # Add classify recommend list.
        for categoryName in self.repoCache.getCategoryNames():
            (_, (sortRecommendList, sortDownloadList, sortVoteList)) = self.repoCache.categoryDict[categoryName]
            appList = sortRecommendList[0:5]
            recommendList = self.createRecommendList(categoryName, True, appList)
            box = boxlist[boxIndex / 2]
            boxIndex += 1
            box.pack_start(recommendList, False, False)
            
        self.box.show_all()
Ejemplo n.º 12
0
    def initNormalStatus(self):
        '''Init normal status.'''
        pkg = self.appInfo.pkg

        # Clean right box first.
        utils.containerRemoveAll(self.appAdditionBox)

        # Add application vote information.
        self.appVoteView = VoteView(self.appInfo, PAGE_UNINSTALL,
                                    self.sendVoteCallback)
        self.appAdditionBox.pack_start(self.appVoteView.eventbox, False, False)

        # Add application installed size.
        size = utils.getPkgInstalledSize(pkg)

        appSizeLabel = DynamicSimpleLabel(
            self.appAdditionBox,
            utils.formatFileSize(size),
            appTheme.getDynamicColor("appSize"),
            LABEL_FONT_SIZE,
        )
        appSize = appSizeLabel.getLabel()

        appSize.set_size_request(self.SIZE_LABEL_WIDTH, -1)
        appSize.set_alignment(1.0, 0.5)
        self.appAdditionBox.pack_start(appSize, False, False,
                                       self.APP_RIGHT_PADDING_X)

        # Add action button.
        (actionButtonBox, actionButtonAlign) = createActionButton()
        self.appAdditionBox.pack_start(actionButtonAlign, False, False)

        if self.confirmUninstall:
            appUninstallLabel = gtk.Label()
            appUninstallLabel.set_markup(
                "<span foreground='%s' size='%s'>%s</span>" %
                (appTheme.getDynamicColor("uninstallConfirm").getColor(),
                 LABEL_FONT_SIZE, __("Are you sure uninstall?")))
            actionButtonBox.pack_start(appUninstallLabel, False, False)

            appUninstallBox = gtk.HBox()
            appUninstallAlign = gtk.Alignment()
            appUninstallAlign.set(0.5, 0.5, 1.0, 1.0)
            appUninstallAlign.set_padding(ACTION_BUTTON_PADDING_Y,
                                          ACTION_BUTTON_PADDING_Y, 0, 0)
            appUninstallAlign.add(appUninstallBox)
            actionButtonBox.pack_start(appUninstallAlign, False, False)

            if getDefaultLanguage() == "default":
                buttonName = "uninstall_confirm"
            else:
                buttonName = "uninstall_confirm_cn"

            (appConfirmButton, appConfirmAlign) = newActionButton(
                buttonName, 0.0, 0.5, "cell", False, __("Action Uninstall"),
                BUTTON_FONT_SIZE_SMALL, "buttonFont")
            appConfirmButton.connect(
                "button-release-event",
                lambda widget, event: self.switchToUninstalling())

            (appCancelButton, appCancelAlign) = newActionButton(
                buttonName, 1.0, 0.5, "cell", False, __("Action Cancel"),
                BUTTON_FONT_SIZE_SMALL, "buttonFont")
            appCancelButton.connect(
                "button-release-event",
                lambda widget, event: self.switchToNormal(False))

            appUninstallBox.pack_start(appConfirmAlign)
            appUninstallBox.pack_start(appCancelAlign)
        else:
            (appUninstallBox, appUninstallAlign) = newActionButton(
                "uninstall", 0.5, 0.5, "cell", False, __("Action Uninstall"),
                BUTTON_FONT_SIZE_SMALL, "buttonFont")
            appUninstallBox.connect(
                "button-release-event",
                lambda widget, event: self.switchToNormal(True))
            actionButtonBox.pack_start(appUninstallAlign)
Ejemplo n.º 13
0
    def __init__(self, cache, updateDataDir):
        '''Init for repository cache.'''
        # Init.
        self.cache = {}
        self.updateDataDir = updateDataDir
        self.upgradablePkgs = []
        ignorePkgs = evalFile("./ignorePkgs", True)
        if ignorePkgs == None:
            self.ignorePkgs = []
        else:
            self.ignorePkgs = ignorePkgs
        self.uninstallablePkgs = []
        self.categoryDict = sortedDict.SortedDict(CLASSIFY_LIST)

        # Scan category dict.
        whiteList = []
        sortRecommendDir = self.updateDataDir + "pkgClassify/sortByDefault/%s/" % (getDefaultLanguage())
        sortDownloadDir =  self.updateDataDir + "pkgClassify/sortByDownload/"
        sortVoteDir =  self.updateDataDir + "pkgClassify/sortByVote/"
        
        for (categoryType, categoryFile) in CLASSIFY_FILES:
            sortRecommendList = []
            sortDownloadList = []
            sortVoteList = []
            
            # Scan default sort list.
            for line in open(sortRecommendDir + categoryFile).readlines():
                pkgName = line.rstrip("\n")
                if cache.has_key(pkgName) and cache[pkgName].candidate != None:
                    # Append in default sort list.
                    sortRecommendList.append(pkgName)
                    
                    # Add in white list.
                    whiteList.append(pkgName)
                else:
                    print pkgName
                    # print "Haven't found package '%s' in current system (%s). Make sure you use Linux Deepin or add deepin sourcelist." % (pkgName, sortRecommendDir + categoryFile)
                    
            # Scan download sort list.
            for line in open(sortDownloadDir + categoryFile).readlines():
                pkgName = line.rstrip("\n")
                if cache.has_key(pkgName) and cache[pkgName].candidate != None:
                    # Append in download sort list.
                    sortDownloadList.append(pkgName)
                else:
                    print pkgName
                    # print "Haven't found package '%s' in current system (%s). Make sure you use Linux Deepin or add deepin sourcelist." % (pkgName, sortDownloadDir + categoryFile)
                    
            # Scan vote sort list.
            for line in open(sortVoteDir + categoryFile).readlines():
                pkgName = line.rstrip("\n")
                if cache.has_key(pkgName) and cache[pkgName].candidate != None:
                    # Append in vote sort list.
                    sortVoteList.append(pkgName)
                else:
                    print pkgName
                    # print "Haven't found package '%s' in current system (%s). Make sure you use Linux Deepin or add deepin sourcelist." % (pkgName, sortVoteDir + categoryFile)
                    
            # Add sort list in category dict.
            (classifyIcon, _) = self.categoryDict[categoryType]
            self.categoryDict[categoryType] = (classifyIcon, (sortRecommendList, sortDownloadList, sortVoteList))
            
        # Build white list dict.
        self.whiteListDict = dict.fromkeys(whiteList)

        # Scan all packages to store and rank. 
        for pkg in cache:
            if pkg.candidate == None:
                print "Can't find candidate information for %s, skip it." % (pkg.name)
            else:
                # Add AppInfo.
                self.cache[pkg.name] = AppInfo(pkg)
                
                # Add upgradable packages.
                if pkg.is_upgradable and pkg.name not in self.ignorePkgs:
                    self.upgradablePkgs.append(pkg.name)
                    
                # Add uninstall packages.
                # Package must not essential and not library packages.
                if self.isPkgUninstallable(pkg):
                    self.uninstallablePkgs.append(pkg.name)
                    
        # Resort.
        self.upgradablePkgs = self.sortPackages(self.upgradablePkgs)
        self.ignorePkgs = self.sortPackages(self.ignorePkgs)
BUTTON_FONT_SIZE_MEDIUM = 11
BUTTON_FONT_SIZE_LARGE = 12
LABEL_FONT_SIZE = 10 * 1000
LABEL_FONT_MEDIUM_SIZE = 11 * 1000
LABEL_FONT_LARGE_SIZE = 12 * 1000
LABEL_FONT_X_LARGE_SIZE = 13 * 1000
LABEL_FONT_XX_LARGE_SIZE = 15 * 1000
LABEL_FONT_XXX_LARGE_SIZE = 20 * 1000

DOWNLOAD_TIMEOUT = 120  # times
POST_TIMEOUT = 10  # seconds
GET_TIMEOUT = 10  # seconds

ACTION_BUTTON_PADDING_X = 5
ACTION_BUTTON_PADDING_Y = 5
lang = getDefaultLanguage()
if lang == "default":
    ACTION_BUTTON_WIDTH = 140
    APP_BASIC_WIDTH_ADJUST = 120
else:
    ACTION_BUTTON_WIDTH = 100
    APP_BASIC_WIDTH_ADJUST = 0

DEFAULT_WINDOW_WIDTH = 890
DEFAULT_WINDOW_HEIGHT = 631

TOPBAR_PADDING_LEFT = 10
TOPBAR_PADDING_RIGHT = 40
TOPBAR_PADDING_UPDATE_RIGHT = 10
TOPBAR_SEARCH_RIGHT = 30
TOPBAR_SEARCH_ADJUST_RIGHT = 15
    def __init__(self, repoCache, switchStatus, downloadQueue, entryDetailCallback, launchApplicationCallback, updateDataDir):
        '''Init for slide bar.'''
        # Init.
        self.entryDetailCallback = entryDetailCallback
        self.launchApplicationCallback = launchApplicationCallback
        self.padding = 10
        self.imageWidth = 600
        self.imageHeight = 300
        self.maskHeight = 50
        self.times = 10
        self.interval = 300 / self.times
        self.smallImagePaddingY = 10
        self.hoverTimeoutIds = {}
        self.hoverTimeout = 100

        self.repoCache = repoCache
        self.slideDir = updateDataDir + "slide/%s" % (getDefaultLanguage())
        self.infoList = evalFile("%s/index.txt" % (self.slideDir))
        self.itemDict = sortedDict.SortedDict(map(lambda (pkgName, _): (pkgName, None), self.infoList))
        self.initItems(switchStatus, downloadQueue)
        self.sourceIndex = 1
        self.targetIndex = 0
        
        self.sourceImage = self.createSlideImage(self.sourceIndex)
        self.targetImage = self.createSlideImage(self.targetIndex)
        self.maskPixbuf = appTheme.getDynamicPixbuf("recommend/mask.png")
        
        self.stop = True
        self.ticker = self.times
        self.index = 0
        self.alphaInterval = 1
        
        self.align = gtk.Alignment()
        self.align.set(0.5, 0.5, 0.0, 0.0)
        self.align.set_padding(self.padding, self.padding, self.padding, self.padding)
        
        # Add slide label.
        self.labelBox = gtk.VBox()
        for (index, _) in enumerate(self.infoList):
            self.createSlideLabel(index)
        
        # Add slide area.
        self.drawingArea = gtk.EventBox()
        self.drawingArea.set_visible_window(False)
        self.drawingArea.set_size_request(self.imageWidth, self.imageHeight)
        self.drawingArea.connect("expose_event", self.exposeBigArea)
        self.drawingArea.connect(
            "button-press-event",
            lambda w, e: self.entryDetailView())
        setClickableCursor(self.drawingArea)
        self.drawingArea.queue_draw()
        
        self.slideItemBox = gtk.VBox()
        self.slideItemAlign = gtk.Alignment()
        self.slideItemAlign.set(0.0, 1.0, 0.0, 0.0)
        self.slideItemAlign.add(self.slideItemBox)
        self.drawingArea.add(self.slideItemAlign)
        
        self.slideItemBox.pack_start(self.getSlideItem(self.targetIndex).itemFrame)
        
        # Connect widgets.
        self.box = gtk.HBox()
        self.box.pack_start(self.drawingArea, False, False)
        self.box.pack_start(self.labelBox, False, False)
        
        self.align.add(self.box)
Ejemplo n.º 16
0
 def show(self, scrollToTop=True):
     '''Show application view.'''
     # Remove child widgets first.
     utils.containerRemoveAll(self.box)
     self.itemDict.clear()
     
     # If i don't re-connect self.eventbox and self.box,
     # update view will show nothing.
     # I still can't understand why?
     # Maybe this is bug of GtkEventBox?
     utils.containerRemoveAll(self.eventbox)
     self.eventbox.add(self.box)
     
     if self.appNum == 0:
         if (getDefaultLanguage() == "default"):
             paddingX = 10
         else:
             paddingX = 0
         
         notifyBox = gtk.VBox()
         notifyAlign = gtk.Alignment()
         notifyAlign.set(0.5, 0.5, 0.0, 0.0)
         notifyAlign.add(notifyBox)
         self.box.pack_start(notifyAlign)
         
         tipImage = gtk.image_new_from_pixbuf(
             gtk.gdk.pixbuf_new_from_file("../icon/tips/%s/updateTip.png" % (getDefaultLanguage())))
         tipAlign = gtk.Alignment()
         tipAlign.set_padding(0, 0, paddingX, 0)
         tipAlign.add(tipImage)
         notifyBox.pack_start(tipAlign)
         
         penguinImage = gtk.image_new_from_pixbuf(
             gtk.gdk.pixbuf_new_from_file("../icon/tips/penguin.png"))
         penguinAlign = gtk.Alignment()
         penguinAlign.set_padding(0, 0, 0, paddingX)
         penguinAlign.add(penguinImage)
         notifyBox.pack_start(penguinAlign)
         
         self.box.show_all()
     else:
         # Get application list.
         appList = self.getListFunc(
             (self.pageIndex - 1) * self.defaultRows,
             min(self.pageIndex * self.defaultRows, self.appNum)
             )
         
         # Create application view.
         self.box.pack_start(self.createAppList(appList))
         
         # Create index view.
         indexbar = self.createIndexbar()
         if not indexbar == None:
             self.box.pack_start(indexbar)
             
         self.box.show_all()
         
         # Request vote data.
         self.fetchVoteCallback(
             PAGE_UPGRADE, 
             map (lambda appInfo: utils.getPkgName(appInfo.pkg), appList))
         
     # Scroll ScrolledWindow to top after render.
     if scrollToTop:
         utils.scrollToTop(self.scrolledwindow)
Ejemplo n.º 17
0
    def __init__(self, repoCache, switchStatus, downloadQueue,
                 entryDetailCallback, launchApplicationCallback,
                 updateDataDir):
        '''Init for slide bar.'''
        # Init.
        self.entryDetailCallback = entryDetailCallback
        self.launchApplicationCallback = launchApplicationCallback
        self.padding = 10
        self.imageWidth = 600
        self.imageHeight = 300
        self.maskHeight = 50
        self.times = 10
        self.interval = 300 / self.times
        self.smallImagePaddingY = 10
        self.hoverTimeoutIds = {}
        self.hoverTimeout = 100

        self.repoCache = repoCache
        self.slideDir = updateDataDir + "slide/%s" % (getDefaultLanguage())
        self.infoList = evalFile("%s/index.txt" % (self.slideDir))
        self.itemDict = sortedDict.SortedDict(
            map(lambda (pkgName, _): (pkgName, None), self.infoList))
        self.initItems(switchStatus, downloadQueue)
        self.sourceIndex = 1
        self.targetIndex = 0

        self.sourceImage = self.createSlideImage(self.sourceIndex)
        self.targetImage = self.createSlideImage(self.targetIndex)
        self.maskPixbuf = appTheme.getDynamicPixbuf("recommend/mask.png")

        self.stop = True
        self.ticker = self.times
        self.index = 0
        self.alphaInterval = 1

        self.align = gtk.Alignment()
        self.align.set(0.5, 0.5, 0.0, 0.0)
        self.align.set_padding(self.padding, self.padding, self.padding,
                               self.padding)

        # Add slide label.
        self.labelBox = gtk.VBox()
        for (index, _) in enumerate(self.infoList):
            self.createSlideLabel(index)

        # Add slide area.
        self.drawingArea = gtk.EventBox()
        self.drawingArea.set_visible_window(False)
        self.drawingArea.set_size_request(self.imageWidth, self.imageHeight)
        self.drawingArea.connect("expose_event", self.exposeBigArea)
        self.drawingArea.connect("button-press-event",
                                 lambda w, e: self.entryDetailView())
        setClickableCursor(self.drawingArea)
        self.drawingArea.queue_draw()

        self.slideItemBox = gtk.VBox()
        self.slideItemAlign = gtk.Alignment()
        self.slideItemAlign.set(0.0, 1.0, 0.0, 0.0)
        self.slideItemAlign.add(self.slideItemBox)
        self.drawingArea.add(self.slideItemAlign)

        self.slideItemBox.pack_start(
            self.getSlideItem(self.targetIndex).itemFrame)

        # Connect widgets.
        self.box = gtk.HBox()
        self.box.pack_start(self.drawingArea, False, False)
        self.box.pack_start(self.labelBox, False, False)

        self.align.add(self.box)
    def __init__(self, cache, updateDataDir):
        '''Init for repository cache.'''
        # Init.
        self.cache = {}
        self.updateDataDir = updateDataDir
        self.upgradablePkgs = []
        ignorePkgs = evalFile("./ignorePkgs", True)
        if ignorePkgs == None:
            self.ignorePkgs = []
        else:
            self.ignorePkgs = ignorePkgs
        self.uninstallablePkgs = []
        self.categoryDict = sortedDict.SortedDict(CLASSIFY_LIST)

        # Scan category dict.
        whiteList = []
        sortRecommendDir = self.updateDataDir + "pkgClassify/sortByDefault/%s/" % (getDefaultLanguage())
        sortDownloadDir =  self.updateDataDir + "pkgClassify/sortByDownload/"
        sortVoteDir =  self.updateDataDir + "pkgClassify/sortByVote/"
        
        for (categoryType, categoryFile) in CLASSIFY_FILES:
            sortRecommendList = []
            sortDownloadList = []
            sortVoteList = []
            
            # Scan default sort list.
            for line in open(sortRecommendDir + categoryFile).readlines():
                pkgName = line.rstrip("\n")
                if cache.has_key(pkgName) and cache[pkgName].candidate != None:
                    # Append in default sort list.
                    sortRecommendList.append(pkgName)
                    
                    # Add in white list.
                    whiteList.append(pkgName)
                else:
                    print pkgName
                    # print "Haven't found package '%s' in current system (%s). Make sure you use Linux Deepin or add deepin sourcelist." % (pkgName, sortRecommendDir + categoryFile)
                    
            # Scan download sort list.
            for line in open(sortDownloadDir + categoryFile).readlines():
                pkgName = line.rstrip("\n")
                if cache.has_key(pkgName) and cache[pkgName].candidate != None:
                    # Append in download sort list.
                    sortDownloadList.append(pkgName)
                else:
                    print pkgName
                    # print "Haven't found package '%s' in current system (%s). Make sure you use Linux Deepin or add deepin sourcelist." % (pkgName, sortDownloadDir + categoryFile)
                    
            # Scan vote sort list.
            for line in open(sortVoteDir + categoryFile).readlines():
                pkgName = line.rstrip("\n")
                if cache.has_key(pkgName) and cache[pkgName].candidate != None:
                    # Append in vote sort list.
                    sortVoteList.append(pkgName)
                else:
                    print pkgName
                    # print "Haven't found package '%s' in current system (%s). Make sure you use Linux Deepin or add deepin sourcelist." % (pkgName, sortVoteDir + categoryFile)
                    
            # Add sort list in category dict.
            (classifyIcon, _) = self.categoryDict[categoryType]
            self.categoryDict[categoryType] = (classifyIcon, (sortRecommendList, sortDownloadList, sortVoteList))
            
        # Build white list dict.
        self.whiteListDict = dict.fromkeys(whiteList)

        # Scan all packages to store and rank. 
        for pkg in cache:
            if pkg.candidate == None:
                print "Can't find candidate information for %s, skip it." % (pkg.name)
            else:
                # Add AppInfo.
                self.cache[pkg.name] = AppInfo(pkg)
                
                # Add upgradable packages.
                if pkg.is_upgradable and pkg.name not in self.ignorePkgs:
                    self.upgradablePkgs.append(pkg.name)
                    
                # Add uninstall packages.
                # Package must not essential and not library packages.
                if self.isPkgUninstallable(pkg):
                    self.uninstallablePkgs.append(pkg.name)
                    
        # Resort.
        self.upgradablePkgs = self.sortPackages(self.upgradablePkgs)
        self.ignorePkgs = self.sortPackages(self.ignorePkgs)
Ejemplo n.º 19
0
BUTTON_FONT_SIZE_MEDIUM = 11
BUTTON_FONT_SIZE_LARGE = 12
LABEL_FONT_SIZE = 10 * 1000
LABEL_FONT_MEDIUM_SIZE = 11 * 1000
LABEL_FONT_LARGE_SIZE = 12 * 1000
LABEL_FONT_X_LARGE_SIZE = 13 * 1000
LABEL_FONT_XX_LARGE_SIZE = 15 * 1000
LABEL_FONT_XXX_LARGE_SIZE = 20 * 1000

DOWNLOAD_TIMEOUT = 120  # times
POST_TIMEOUT = 10  # seconds
GET_TIMEOUT = 10  # seconds

ACTION_BUTTON_PADDING_X = 5
ACTION_BUTTON_PADDING_Y = 5
lang = getDefaultLanguage()
if lang == "default":
    ACTION_BUTTON_WIDTH = 140
    APP_BASIC_WIDTH_ADJUST = 120
else:
    ACTION_BUTTON_WIDTH = 100
    APP_BASIC_WIDTH_ADJUST = 0

DEFAULT_WINDOW_WIDTH = 890
DEFAULT_WINDOW_HEIGHT = 631

TOPBAR_PADDING_LEFT = 10
TOPBAR_PADDING_RIGHT = 40
TOPBAR_PADDING_UPDATE_RIGHT = 10
TOPBAR_SEARCH_RIGHT = 30
TOPBAR_SEARCH_ADJUST_RIGHT = 15