Пример #1
0
class ZNewPublisherSiteConfirmPage(ZNewPublisherSiteWizardPageBase):
    def __init__(self, model, parent):
        self.blogSiteId = None
        self.blogListProvider = ZBlogCheckboxListContentProvider()
        ZNewPublisherSiteWizardPageBase.__init__(self, model, parent)

    # end __init__()

    def _createWidgets(self):
        self.description1 = wx.StaticText(
            self, wx.ID_ANY,
            _extstr(u"publishersitewizard.Confirm"))  #$NON-NLS-1$
        self.description1.SetFont(getDefaultFontBold())
        self.description2 = wx.StaticText(
            self,
            wx.ID_ANY,
            _extstr(u"publishersitewizard.ConfirmDescription"),
            size=wx.Size(-1, 40))  #$NON-NLS-1$
        self.staticBox = wx.StaticBox(
            self, wx.ID_ANY, _extstr(u"accountblogs.BlogList"))  #$NON-NLS-1$
        self.blogListControl = ZCheckBoxListViewWithButtons(
            self.blogListProvider, self)
        self.mediaUploadLabel = wx.StaticText(
            self, wx.ID_ANY,
            _extstr(
                u"publishersitewizard.MediaUploadMethodLabel"))  #$NON-NLS-1$
        comboValidator = ZNullControlValidator()
        self.mediaUploadCombo = ZValidatingBitmapComboBox(comboValidator,
                                                          self,
                                                          wx.ID_ANY,
                                                          style=wx.CB_READONLY)
        self.mediaUploadCombo.SetToolTipString(
            _extstr(
                u"publishersitewizard.MediaUploadMethodTooltip"))  #$NON-NLS-1$
        self.mediaWizardButton = wx.Button(
            self, wx.ID_ANY,
            _extstr(
                u"publishersitewizard.CreateNewMediaStorage"))  #$NON-NLS-1$

    def _populateMediaSitesList(self, selectedMediaStorageId=None):
        self.mediaUploadCombo.Clear()
        # FIXME (PJ) create a new 're-usable' model which lists given blog site id + available media storages  => maybe as a new control
        if self.blogSiteId:
            siteDef = self._getModel().getPublisherSite(self.blogSiteId)
            if siteDef.getCapabilities().supportsUploadMedia():
                bitmap = siteDef.getIconAsBitmap()
                name = u"Blog Fileupload (via %s)" % siteDef.getName(
                )  #$NON-NLS-1$
                self.mediaUploadCombo.Append(name, siteDef, bitmap)

        mediaStores = []
        mediaStores.extend(self._getModel().getMediaStorages())
        mediaStores.sort(lambda x, y: cmp(x.getName().lower(),
                                          y.getName().lower()))
        for mediaStore in mediaStores:
            mediaSite = self._getModel().getMediaSite(mediaStore)
            if mediaSite.isInternal():
                continue
            name = mediaStore.getName() + u" (" + mediaSite.getDisplayName(
            ) + u")"  #$NON-NLS-1$ #$NON-NLS-2$
            iconPath = mediaSite.getIconPath()
            bitmap = wx.Image(iconPath,
                              getImageType(iconPath)).ConvertToBitmap()
            self.mediaUploadCombo.Append(name, mediaStore, bitmap)
        # select first item
        if self.mediaUploadCombo.GetCount() > 0:
            if selectedMediaStorageId:
                self._selectMediaSite(selectedMediaStorageId)
            else:
                self.mediaUploadCombo.SetSelection(0)
                self.mediaUploadCombo.validate()

    def _bindWidgetEvents(self):
        self.Bind(wx.EVT_BUTTON, self.onMediaWizardButton,
                  self.mediaWizardButton)
        self.Bind(ZEVT_CHECKBOX_LIST_CHANGE, self.onBlogCheckedEvent,
                  self.blogListControl)

    def _layoutWidgets(self):
        staticBoxSizer = wx.StaticBoxSizer(self.staticBox, wx.VERTICAL)
        staticBoxSizer.AddSizer(self.blogListControl, 1, wx.EXPAND | wx.ALL, 5)

        flexGridSizer = wx.FlexGridSizer(1, 2, 5, 5)
        flexGridSizer.AddGrowableCol(1)
        flexGridSizer.Add(self.mediaUploadLabel, 0,
                          wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
                          5)
        flexGridSizer.Add(self.mediaUploadCombo, 0, wx.EXPAND | wx.RIGHT, 5)
        flexGridSizer.Add(wx.StaticText(self, wx.ID_ANY), 0,
                          wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
                          5)
        flexGridSizer.Add(self.mediaWizardButton, 0, wx.ALIGN_RIGHT | wx.RIGHT,
                          5)

        box = wx.BoxSizer(wx.VERTICAL)
        box.Add(self.description1, 0, wx.EXPAND | wx.ALL, 10)
        box.Add(self.description2, 0, wx.EXPAND | wx.ALL, 10)
        box.AddSizer(staticBoxSizer, 1, wx.EXPAND | wx.ALL, 5)
        box.AddSizer(flexGridSizer, 0, wx.EXPAND)
        self.SetAutoLayout(True)
        self.SetSizer(box)

    def getDataProperties(self):
        rval = {}
        return rval

    # end getDataProperties()

    def onMediaWizardButton(self, event):  #@UnusedVariable
        storeId = ZMediaStorageUtil().createNewMediaStorage(self)
        if storeId:
            self._populateMediaSitesList(storeId)

    def onEnter(self, session, eventDirection):
        if eventDirection == ZWizardPage.NEXT:
            oldKey = session.getProperty(
                u"confirm-page.modifykey")  #$NON-NLS-1$
            newKey = session.getProperty(
                u"apiinfo-page.modifykey")  #$NON-NLS-1$
            modified = not oldKey or newKey != oldKey
            idBlogList = session.getProperty(
                u"apiinfo-page.id-bloglist")  #$NON-NLS-1$
            if modified and idBlogList:
                self.blogSiteId = session.getProperty(
                    u"apiinfo-page.siteid")  #$NON-NLS-1$
                self._populateMediaSitesList()
                session.setProperty(u"confirm-page.modifykey",
                                    newKey)  #$NON-NLS-1$
                blogs = []
                for (dataId, blog) in idBlogList:  #@UnusedVariable
                    blogs.append(blog)
                self.blogListProvider.setBlogList(blogs)
                self.blogListControl.checkBoxListView.refreshItems()
                # pre-select all
                self.blogListControl.checkBoxListView.checkAll()

    def onExit(self, session, eventDirection):  #@UnusedVariable
        if eventDirection == ZWizardPage.NEXT:
            blogs = self._getSelectedBlogList()
            session.setProperty(u"confirm-page.selected-blogs",
                                blogs)  #$NON-NLS-1$
            obj = self._getSelectedMediaSite()
            uploadmethod = None
            mediastorageid = None
            if obj is not None and isinstance(obj, ZPublisherSiteDef):
                uploadmethod = u"publisher"  #$NON-NLS-1$
            elif obj is not None:
                uploadmethod = u"mediastorage"  #$NON-NLS-1$
                mediastorageid = obj.getId()
            session.setProperty(u"confirm-page.file-upload-method",
                                uploadmethod)  #$NON-NLS-1$
            session.setProperty(u"confirm-page.file-upload-mediastorage-id",
                                mediastorageid)  #$NON-NLS-1$
        return True

    def _getSelectedMediaSite(self):
        data = None
        idx = self.mediaUploadCombo.GetSelection()
        if idx != -1:
            data = self.mediaUploadCombo.GetClientData(idx)
        return data

    # end _getSelectedMediaSite()

    def _selectMediaSite(self, storeId):
        n = self.mediaUploadCombo.GetCount()
        for idx in range(n):
            data = self.mediaUploadCombo.GetClientData(idx)
            if data and data.getId() == storeId:
                self.mediaUploadCombo.SetSelection(idx)
                self.mediaUploadCombo.validate()
                break

    def _getSelectedBlogList(self):
        rval = self.blogListProvider.getSelectedBlogList()
        return rval

    # end _getSelectedBlogList

    def onBlogCheckedEvent(self, event):  #@UnusedVariable
        if len(self.blogListControl.checkBoxListView.getCheckedItems()) > 0:
            self._fireValidEvent()
        else:
            self._fireInvalidEvent()