class ZBlogConfigPopup(wx.combo.ComboPopup): def __init__(self, combo, blog): self.combo = combo self.blog = blog self.catListCtrl = None self.pdColor = getDefaultPopdownDialogBackgroundColor() wx.combo.ComboPopup.__init__(self) # end __init__() def Init(self): pass # end Init() def Create(self, parent): self.parent = parent self._createWidgets() self._layoutWidgets() self._bindWidgetEvents() # end Create() def GetControl(self): return self.panel # end GetControl() def GetStringValue(self): return _extstr(u"blogconfig.Configure") #$NON-NLS-1$ # end GetStringValue() def OnPopup(self): userPrefs = getApplicationModel().getUserProfile().getPreferences() tabId = userPrefs.getUserPreferenceInt(IZAppUserPrefsKeys.BLOGPUB_CONFIG_POPUP + u".tab-id", 0) #$NON-NLS-1$ if tabId >= 0 and tabId < self.notebook.GetPageCount(): self.notebook.SetSelection(tabId) # end OnPopup() def OnDismiss(self): userPrefs = getApplicationModel().getUserProfile().getPreferences() tabId = self.notebook.GetSelection() userPrefs.setUserPreference(IZAppUserPrefsKeys.BLOGPUB_CONFIG_POPUP + u".tab-id", tabId) #$NON-NLS-1$ # end OnDismiss() def SetStringValue(self, value): #@UnusedVariable pass # end SetStringValue() def _createWidgets(self): self.panel = wx.Panel(self.parent, wx.ID_ANY, style = wx.SIMPLE_BORDER) self.panel.SetBackgroundColour(self.pdColor) self.notebook = fnb.FlatNotebook(self.panel, wx.ID_ANY, style = fnb.FNB_BOTTOM | fnb.FNB_NO_NAV_BUTTONS | fnb.FNB_NO_X_BUTTON | fnb.FNB_NODRAG) self.notebook.SetBackgroundColour(self.pdColor) self.notebook.SetActiveTabColour(self.pdColor) self.notebook.AddPage(self._createCategoriesPage(), _extstr(u"blogconfig.Categories"), False, -1) #$NON-NLS-1$ self.notebook.AddPage(self._createCommonPage(), _extstr(u"blogconfig.General"), True, -1) #$NON-NLS-1$ self.notebook.AddPage(self._createPingPage(), _extstr(u"blogconfig.WeblogPing"), False, -1) #$NON-NLS-1$ self.notebook.AddPage(self._createTagsPage(), _extstr(u"blogconfig.TagSites"), False, -1) #$NON-NLS-1$ self.notebook.AddPage(self._createTrackbackPage(), _extstr(u"blogconfig.Trackbacks"), False, -1) #$NON-NLS-1$ # end _createWidgets() def _createCommonPage(self): self.commonPanel = ZTransparentPanel(self.notebook, wx.ID_ANY) self.commonCtrls = ZPubMetaDataView(self.commonPanel) return self.commonPanel # end _createCommonPage() def _createCategoriesPage(self): self.categoriesPanel = ZSmartTransparentPanel(self.notebook, wx.ID_ANY) self.catListProvider = ZCategoryListContentProvider() self.catListCtrl = ZCategoryMultiSelectListView(self.categoriesPanel, self.catListProvider) return self.categoriesPanel # end _createCategoriesPage() def _createPingPage(self): self.pingPanel = ZSmartTransparentPanel(self.notebook, wx.ID_ANY) self.pingListProvider = ZPingListContentProvider() self.pingListCtrl = ZCheckBoxListViewWithButtons(self.pingListProvider, self.pingPanel) return self.pingPanel # end _createPingPage() def _createTrackbackPage(self): self.trackbackPanel = ZSmartTransparentPanel(self.notebook, wx.ID_ANY) self.trackbackListProvider = ZTrackbackListContentProvider() self.tracbackListView = ZTrackbackUrlsView(self.trackbackPanel, self.trackbackListProvider) return self.trackbackPanel # end _createTrackbackPage() def _createTagsPage(self): self.tagspacePanel = ZSmartTransparentPanel(self.notebook, wx.ID_ANY) self.tagspaceListProvider = ZTagspaceListContentProvider() self.tagspaceListCtrl = ZTagspaceListView(self.tagspacePanel, self.tagspaceListProvider) return self.tagspacePanel # end _createTagsPage() def _layoutWidgets(self): self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.notebook, 1, wx.EXPAND | wx.ALL, 0) self._layoutCommonPage() self._layoutPingPage() self._layoutTagsPage() self._layoutTrackbackPage() self.panel.SetSizer(self.sizer) self.panel.SetAutoLayout(True) self.panel.Layout() # end _layoutWidgets() def _layoutCommonPage(self): spaceSizer = wx.BoxSizer(wx.VERTICAL) spaceSizer.Add(self.commonCtrls, 1, wx.EXPAND | wx.ALL, 5) self.commonPanel.SetSizer(spaceSizer) self.commonPanel.SetAutoLayout(True) self.commonPanel.Layout() # end _layoutCommonPage() def _layoutCategoriesPage(self): # 'Categories' section sbSizer = wx.StaticBoxSizer(wx.StaticBox(self.categoriesPanel, wx.ID_ANY, _extstr(u"blogconfig.Categories")), wx.HORIZONTAL) #$NON-NLS-1$ sbSizer.Add(self.catListCtrl, 1, wx.EXPAND | wx.ALL, 3) spaceSizer = wx.BoxSizer(wx.VERTICAL) spaceSizer.AddSizer(sbSizer, 1, wx.EXPAND | wx.ALL, 5) self.categoriesPanel.SetSizer(spaceSizer) self.categoriesPanel.SetAutoLayout(True) self.categoriesPanel.Layout() # end _layoutCategoriesPage() def _layoutPingPage(self): # 'Weblog Ping' section sbSizer = wx.StaticBoxSizer(wx.StaticBox(self.pingPanel, wx.ID_ANY, _extstr(u"blogconfig.WeblogPing")), wx.HORIZONTAL) #$NON-NLS-1$ sbSizer.Add(self.pingListCtrl, 1, wx.EXPAND | wx.ALL, 3) spaceSizer = wx.BoxSizer(wx.VERTICAL) spaceSizer.AddSizer(sbSizer, 1, wx.EXPAND | wx.ALL, 5) self.pingPanel.SetSizer(spaceSizer) self.pingPanel.SetAutoLayout(True) self.pingPanel.Layout() # end _layoutPingPage() def _layoutTagsPage(self): # 'Tagging section sbSizer = wx.StaticBoxSizer(wx.StaticBox(self.tagspacePanel, wx.ID_ANY, _extstr(u"blogconfig.TagSites")), wx.HORIZONTAL) #$NON-NLS-1$ sbSizer.Add(self.tagspaceListCtrl, 1, wx.EXPAND | wx.ALL, 3) spaceSizer = wx.BoxSizer(wx.VERTICAL) spaceSizer.AddSizer(sbSizer, 1, wx.EXPAND | wx.ALL, 5) self.tagspacePanel.SetSizer(spaceSizer) self.tagspacePanel.SetAutoLayout(True) self.tagspacePanel.Layout() # end _layoutTagsPage() def _layoutTrackbackPage(self): # 'Trackback section sbSizer = wx.StaticBoxSizer(wx.StaticBox(self.trackbackPanel, wx.ID_ANY, _extstr(u"blogconfig.Trackbacks")), wx.HORIZONTAL) #$NON-NLS-1$ sbSizer.Add(self.tracbackListView, 1, wx.EXPAND | wx.ALL, 3) spaceSizer = wx.BoxSizer(wx.VERTICAL) spaceSizer.AddSizer(sbSizer, 1, wx.EXPAND | wx.ALL, 5) self.trackbackPanel.SetSizer(spaceSizer) self.trackbackPanel.SetAutoLayout(True) self.trackbackPanel.Layout() # end _layoutTrackbackPage() def _bindWidgetEvents(self): # Events that will cause a 'publishing change' event self.commonPanel.Bind(wx.EVT_CHECKBOX, self.onPublishingChange) self.commonPanel.Bind(ZEVT_DATE_CHANGE, self.onPublishingChange) self.pingPanel.Bind(ZEVT_CHECKBOX_LIST_CHANGE, self.onPublishingChange) self.tagspacePanel.Bind(ZEVT_CHECKBOX_LIST_CHANGE, self.onPublishingChange) self.trackbackPanel.Bind(ZEVT_CONTENT_MODIFIED, self.onPublishingChange) self.categoriesPanel.Bind(ZEVT_CHECKBOX_LIST_CHANGE, self.onPublishingChange) # end _bindWidgetEvents() def _createAndLayoutCategoriesControl(self): for child in self.categoriesPanel.GetChildren(): self.categoriesPanel.RemoveChild(child) if self.catListCtrl: self.catListCtrl.Show(False) self.catListCtrl.Destroy() self.catListCtrl = None if self.catListProvider.isMultiselect(): self.catListCtrl = ZCategoryMultiSelectListView(self.categoriesPanel, self.catListProvider) else: self.catListCtrl = ZCategorySingleSelectListView(self.categoriesPanel, self.catListProvider) self._layoutCategoriesPage() self.categoriesPanel.GetParent().Layout() self.categoriesPanel.GetParent().Refresh() # end _createAndLayoutCategoriesControl() def setBlog(self, blog): self.blog = blog if not blog: return self.catListProvider.setBlog(blog) self._createAndLayoutCategoriesControl() self.catListCtrl.refresh() self.commonCtrls.enableDraftCheckbox(self._blogSupportsDraft(blog)) # end setBlog() def _blogSupportsDraft(self, blog): return isCapabilitySupportedByBlog(IZBlogApiCapabilityConstants.DRAFT_POSTS, blog) # end _blogSupportsDraft() def setPubMetaData(self, pubMetaData): if pubMetaData: self._populateWidgets(pubMetaData) # end setPubMetaData() def getPubMetaData(self): pubMetaData = ZPubMetaData() self.commonCtrls.updatePubMetaData(pubMetaData) # categories categories = self.catListProvider.getSelectedCategories() pubMetaData.setCategories( categories ) # weblog ping list pingSites = self.pingListProvider.getSelectedPingSites() pubMetaData.setPingServices(pingSites) # tagspaces tagspaceUrls = self.tagspaceListProvider.getSelectedTagSpaceUrls() pubMetaData.setTagspaceUrls( tagspaceUrls ) # trackbacks trackbacks = self.trackbackListProvider.getTrackbacks() pubMetaData.setTrackbacks(trackbacks) return pubMetaData # end getPubMetaData() def _populateWidgets(self, pubMetaData): self.commonCtrls.setPubMetaData(pubMetaData) self.catListProvider.setSelectedCategories( pubMetaData.getCategories() ) self.catListCtrl.refresh() self.pingListProvider.setSelectedPingSites( pubMetaData.getPingServices()) self.pingListCtrl.refresh() self.tagspaceListProvider.setSelectedTagSpaceUrls( pubMetaData.getTagspaceUrls() ) self.tagspaceListCtrl.refresh() self.trackbackListProvider.setTrackbacks( pubMetaData.getTrackbacks() ) self.tracbackListView.refresh() # end _populateWidgets() def getPreferredHeight(self): return self.notebook.GetBestSizeTuple()[1] # end getPreferredHeight() def onOverridePubTime(self, event): self.dateCtrl.Enable(event.IsChecked()) self.commonPanel.Layout() event.Skip() # end onOverridePubTime() def onPublishingChange(self, event): #@UnusedVariable firePublishingChangeEvent(self.combo) event.Skip()
class ZStandardPerspective(IZPerspective): def __init__(self): self.currentViewSelection = None self.panel = None self.splitterWindow = None self.navView = None self.ctxView = None self.sizer = None # end __init__() def destroy(self): self._saveLayout() self.navView.destroy() self.ctxView.destroy() # end destroy() def createUIPanel(self, parent): self.panel = ZTransparentPanel(parent, wx.ID_ANY) self.splitterWindow = ZSplitterWindow(self.panel) self._createToolBar(self.panel) self._createNavigatorView(self.splitterWindow) self._createContextInfoView(self.splitterWindow) self._doSplit() self._bindViewEvents() self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.toolBar, 0, wx.EXPAND) self.sizer.Add(self.toolBarStaticLine, 0, wx.EXPAND) self.sizer.Add(self.splitterWindow, 1, wx.EXPAND | wx.ALL, 5) self.panel.SetAutoLayout(True) self.panel.SetSizer(self.sizer) self.panel.Layout() self._restoreLayout() return self.panel # end createUI() def _doSplit(self): self.splitterWindow.SplitVertically(self.navView, self.ctxView) self.splitterWindow.SetMinimumPaneSize(100) self.splitterWindow.SetSashSize(8) self.splitterWindow.SetSashGravity(0.0) # end _doSplit() def _createToolBar(self, parent): self.toolBarModel = self._createToolBarModel() self.toolBarContext = ZStandardPerspectiveToolBarActionContext(parent, self.currentViewSelection) contentProvider = ZModelBasedToolBarContentProvider(self.toolBarModel, self.toolBarContext) eventHandler = ZModelBasedToolBarEventHandler(self.toolBarModel, self.toolBarContext) self.toolBar = ZPersistentToolBar(self._getUserPrefsKey() + u".toolbar", contentProvider, eventHandler, parent, ZToolBar.STYLE_SHOW_TEXT) #$NON-NLS-1$ self.toolBarStaticLine = wx.StaticLine(parent, wx.ID_ANY) # end _createToolBar() def _createToolBarModel(self): model = ZPluginToolBarModel(IZBlogAppToolBarIds.ZID_STANDARD_PERSPECTIVE_TOOLBAR) model.setDefaultToolSize(24) # 'Write' Tool toolId = model.addItemWithAction(_extstr(u"standard.Write"), 1, ZWriteToolBarAction()) #$NON-NLS-1$ model.addToolBitmap(toolId, 24, getToolbarBitmap(24, u"file", u"write")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolBitmap(toolId, 32, getToolbarBitmap(32, u"file", u"write")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolDisabledBitmap(toolId, 24, getToolbarBitmap(24, u"file", u"write_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.addToolDisabledBitmap(toolId, 32, getToolbarBitmap(32, u"file", u"write_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.setToolDescription(toolId, _extstr(u"standard.Author_some_new_content_")) #$NON-NLS-1$ # 'New Account' Tool toolId = model.addItemWithAction(_extstr(u"standard.AddAccount"), 3, ZNewAccountToolBarAction()) #$NON-NLS-1$ model.addToolBitmap(toolId, 24, getToolbarBitmap(24, u"file", u"addAccount")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolBitmap(toolId, 32, getToolbarBitmap(32, u"file", u"addAccount")) #$NON-NLS-2$ #$NON-NLS-1$ model.setToolDescription(toolId, _extstr(u"standard.AddAccountDescriton")) #$NON-NLS-1$ # 'New Storage' Tool toolId = model.addItemWithAction(_extstr(u"standard.AddStorage"), 3, ZNewMediaStorageToolBarAction()) #$NON-NLS-1$ model.addToolBitmap(toolId, 24, getToolbarBitmap(24, u"file", u"addStorage")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolBitmap(toolId, 32, getToolbarBitmap(32, u"file", u"addStorage")) #$NON-NLS-2$ #$NON-NLS-1$ model.setToolDescription(toolId, _extstr(u"standard.AddStorageDescription")) #$NON-NLS-1$ model.addSeparator(10) # 'Publish' Tool toolId = model.addItemWithAction(_extstr(u"standard.Publish"), 15, ZPublishToolBarAction()) #$NON-NLS-2$ #$NON-NLS-3$ #$NON-NLS-1$ model.addToolBitmap(toolId, 24, getToolbarBitmap(24, u"api", u"publish")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolBitmap(toolId, 32, getToolbarBitmap(32, u"api", u"publish")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolDisabledBitmap(toolId, 24, getToolbarBitmap(24, u"api", u"publish_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.addToolDisabledBitmap(toolId, 32, getToolbarBitmap(32, u"api", u"publish_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.setToolDescription(toolId, _extstr(u"standard.Publish_some_content_")) #$NON-NLS-1$ # 'Download' Tool toolId = model.addDropDownItemWithAction(_extstr(u"standard.Download"), 20, ZDownloadToolBarAction()) #$NON-NLS-2$ #$NON-NLS-3$ #$NON-NLS-1$ model.addToolBitmap(toolId, 24, getToolbarBitmap(24, u"api", u"download")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolBitmap(toolId, 32, getToolbarBitmap(32, u"api", u"download")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolDisabledBitmap(toolId, 24, getToolbarBitmap(24, u"api", u"download_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.addToolDisabledBitmap(toolId, 32, getToolbarBitmap(32, u"api", u"download_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.setToolDescription(toolId, _extstr(u"standard.Download_content_")) #$NON-NLS-1$ # 'View (online)' Tool toolId = model.addItemWithAction(_extstr(u"standard.ViewOnline"), 25, ZViewOnlineToolBarAction()) #$NON-NLS-1$ model.addToolBitmap(toolId, 24, getToolbarBitmap(24, u"api", u"viewOnline")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolBitmap(toolId, 32, getToolbarBitmap(32, u"api", u"viewOnline")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolDisabledBitmap(toolId, 24, getToolbarBitmap(24, u"api", u"viewOnline_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.addToolDisabledBitmap(toolId, 32, getToolbarBitmap(32, u"api", u"viewOnline_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.setToolDescription(toolId, _extstr(u"standard.ViewOnlineDescription")) #$NON-NLS-1$ model.addSeparator(50) # 'Delete' Tool toolId = model.addItemWithAction(_extstr(u"standard.Delete"), 55, ZDeleteToolBarAction()) #$NON-NLS-2$ #$NON-NLS-3$ #$NON-NLS-1$ model.addToolBitmap(toolId, 24, getToolbarBitmap(24, u"file", u"delete")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolBitmap(toolId, 32, getToolbarBitmap(32, u"file", u"delete")) #$NON-NLS-2$ #$NON-NLS-1$ model.addToolDisabledBitmap(toolId, 24, getToolbarBitmap(24, u"file", u"delete_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.addToolDisabledBitmap(toolId, 32, getToolbarBitmap(32, u"file", u"delete_disabled")) #$NON-NLS-1$ #$NON-NLS-2$ model.setToolDescription(toolId, _extstr(u"standard.DeleteDescription")) #$NON-NLS-1$ return model # end _createToolBarModel() def _createContextInfoView(self, parent): self.ctxView = ZContextInfoView(parent) # end _createContextInfoView() def _createNavigatorView(self, parent): self.navView = ZNavigatorView(parent) # end _createNavigatorView() def _bindViewEvents(self): self.toolBar.Bind(ZEVT_TOOLBAR_RESIZE, self.onToolBarResize, self.toolBar) ZEVT_VIEW_SELECTION_CHANGED(self.navView, self.onViewSelectionChanged) # end _bindViewEvents() def onToolBarResize(self, event): self.panel.Layout() self.panel.Refresh() event.Skip() # end onToolBarResize() def onViewSelectionChanged(self, event): self.toolBarContext.setViewSelection(event.getSelection()) self.toolBar.refresh() event.Skip() # end onViewSelectionChanged() def _saveLayout(self): if self.panel.IsShown(): key = self._getUserPrefsKey() + u".sash-width" #$NON-NLS-1$ userPrefs = getApplicationModel().getUserProfile().getPreferences() userPrefs.setUserPreference(key, self.splitterWindow.GetSashPosition()) # end _saveLayout() def _restoreLayout(self): key = self._getUserPrefsKey() + u".sash-width" #$NON-NLS-1$ userPrefs = getApplicationModel().getUserProfile().getPreferences() sashPos = userPrefs.getUserPreferenceInt(key, 200) self.splitterWindow.SetSashPosition(sashPos) # end _restoreLayout() def _getUserPrefsKey(self): return IZBlogAppUserPrefsKeys.STANDARD_PERSPECTIVE_LAYOUT