def __init__(self): super(CssLayoutsExample, self).__init__() self.setMargin(True) # Note, that this code example may not be self explanatory without # checking out the related CSS file in the sampler theme. panel = Panel('Panel') panel.setStyleName('floatedpanel') panel.setWidth('30%') panel.setHeight('370px') panel.addComponent( Label('This panel is 30% wide ' + 'and 370px high (defined on the server side) ' + 'and floated right (with custom css). ' + 'Try resizing the browser window to see ' + 'how the black boxes (floated left) ' + 'behave. Every third of them has colored text ' + 'to demonstrate the dynamic css injection.')) bottomCenter = Label( 'I\'m a 3 inches wide footer at the bottom of the layout') bottomCenter.setSizeUndefined() # disable 100% default width bottomCenter.setStyleName('footer') cssLayout = MyCssLayout() cssLayout.setWidth('100%') cssLayout.addComponent(panel) for _ in range(15): # add black labels that float left cssLayout.addComponent(Brick()) cssLayout.addComponent(bottomCenter) self.addComponent(cssLayout)
def __init__(self): super(CssLayoutsExample, self).__init__() self.setMargin(True) # Note, that this code example may not be self explanatory without # checking out the related CSS file in the sampler theme. panel = Panel('Panel') panel.setStyleName('floatedpanel') panel.setWidth('30%') panel.setHeight('370px') panel.addComponent(Label('This panel is 30% wide ' + 'and 370px high (defined on the server side) ' + 'and floated right (with custom css). ' + 'Try resizing the browser window to see ' + 'how the black boxes (floated left) ' + 'behave. Every third of them has colored text ' + 'to demonstrate the dynamic css injection.')) bottomCenter = Label( 'I\'m a 3 inches wide footer at the bottom of the layout') bottomCenter.setSizeUndefined() # disable 100% default width bottomCenter.setStyleName('footer') cssLayout = MyCssLayout() cssLayout.setWidth('100%') cssLayout.addComponent(panel) for _ in range(15): # add black labels that float left cssLayout.addComponent(Brick()) cssLayout.addComponent(bottomCenter) self.addComponent(cssLayout)
def setFeatureContainer(self, c): self._grid.removeAllComponents() features = c.getItemIds() rootSet = CssLayout() rootTitle = None highlightRow = CssLayout() highlightRow.setStyleName('highlight-row') sampleCount = 0 for f in features: if isinstance(f, FeatureSet): if c.isRoot(f): if rootTitle is not None: rootTitle.setValue(('<em>' + str(sampleCount) + ' samples</em>' + rootTitle.getValue())) sampleCount = 0 desc = f.getDescription() try: idx = desc.index(".") except ValueError: idx = -1 rootTitle = Label("<h2>" + f.getName() + "</h2><span>" + desc[:idx + 1] + "</span>", Label.CONTENT_XHTML) rootTitle.setSizeUndefined() if f.getRelatedFeatures() is not None: rootTitle.setValue('<em>' + len(f.getRelatedFeatures()) + ' samples</em>' + rootTitle.getValue()) rootSet = CssLayout() rootSet.setStyleName('root') rootTitle.setStyleName('root-section') self._grid.addComponent(rootTitle) self._grid.addComponent(rootSet) else: sampleCount += 1 resId = '75-' + f.getIconName() res = self._app.getSampleIcon(resId) if rootSet.getParent() is None: # This sample is directly inside a non root feature # set, we present these with higher priority if rootTitle is None: parent = self._app._allFeatures.getParent(f) rootTitle = Label("<h2>" + parent.getName() + "</h2>", Label.CONTENT_XHTML) rootTitle.setStyleName('root-section highlights-title') rootTitle.setSizeUndefined() self._grid.addComponent(rootTitle) if parent.getDescription() is not None: desc = Label(parent.getDescription(), Label.CONTENT_XHTML) desc.setStyleName('highlights-description') desc.setSizeUndefined() self._grid.addComponent(desc) # Two samples per row if sampleCount % 2 == 1: highlightRow = CssLayout() highlightRow.setStyleName('highlight-row') self._grid.addComponent(highlightRow) l = CssLayout() l.setStyleName('highlight') er = ExternalResource('#' + f.getFragmentName()) sample = ActiveLink(f.getName(), er) sample.setIcon(res) # if f.getSinceVersion().isNew(): # sample.addStyleName('new') l.addComponent(sample) if (f.getDescription() is not None and f.getDescription() != ''): d = f.getDescription() desc = Label(d[:d.index(".") + 1], Label.CONTENT_XHTML) desc.setSizeUndefined() l.addComponent(desc) highlightRow.addComponent(l) else: sample = ActiveLink(f.getName(), ExternalResource('#' + f.getFragmentName())) sample.setStyleName(BaseTheme.BUTTON_LINK) sample.addStyleName('screenshot') if (f.getDescription() is not None and f.getDescription() != ''): desc = f.getDescription() try: idx = desc.index('.') except ValueError: idx = -1 sample.setDescription(desc[:idx + 1]) # if f.getSinceVersion().isNew(): # sample.addStyleName('new') sample.setIcon(res) rootSet.addComponent(sample) if rootTitle is not None: rootTitle.setValue('<em>' + str(sampleCount) + ' samples</em>' + rootTitle.getValue())
class FeatureView(HorizontalLayout): _MSG_SHOW_SRC = 'View Source' def __init__(self): super(FeatureView, self).__init__() self._right = None self._left = None self._controls = None self._title = Label("", Label.CONTENT_XHTML) self._showSrc = None self._exampleCache = dict() self._currentFeature = None self._srcWindow = None self.setWidth('100%') self.setMargin(True) self.setSpacing(True) self.setStyleName('sample-view') self._left = VerticalLayout() self._left.setWidth('100%') self._left.setSpacing(True) self._left.setMargin(False) self.addComponent(self._left) self.setExpandRatio(self._left, 1) rightLayout = VerticalLayout() self._right = Panel(rightLayout) rightLayout.setMargin(True, False, False, False) self._right.setStyleName(Reindeer.PANEL_LIGHT) self._right.addStyleName('feature-info') self._right.setWidth('319px') self.addComponent(self._right) self._controls = HorizontalLayout() self._controls.setWidth('100%') self._controls.setStyleName('feature-controls') self._title.setStyleName('title') self._controls.addComponent(self._title) self._controls.setExpandRatio(self._title, 1) resetExample = NativeButton('Reset', ResetListener(self)) resetExample.setStyleName(BaseTheme.BUTTON_LINK) resetExample.addStyleName('reset') resetExample.setDescription('Reset Sample') self._controls.addComponent(resetExample) self._showSrc = ActiveLink() self._showSrc.setDescription( 'Right / middle / ctrl / shift -click for browser window/tab') self._showSrc.addListener(ShowSrcListener(self), ILinkActivatedListener) self._showSrc.setCaption(self._MSG_SHOW_SRC) self._showSrc.addStyleName('showcode') self._showSrc.setTargetBorder(Link.TARGET_BORDER_NONE) self._controls.addComponent(self._showSrc) def showSource(self, source): if self._srcWindow is None: self._srcWindow = Window('Python source') self._srcWindow.getContent().setSizeUndefined() self._srcWindow.setWidth('70%') self._srcWindow.setHeight('60%') self._srcWindow.setPositionX(100) self._srcWindow.setPositionY(100) self._srcWindow.removeAllComponents() self._srcWindow.addComponent(CodeLabel(source)) if self._srcWindow.getParent() is None: self.getWindow().addWindow(self._srcWindow) def resetExample(self): if self._currentFeature is not None: w = self.getWindow() w.removeSubwindows() f = self._currentFeature self._currentFeature = None if f in self._exampleCache: del self._exampleCache[f] self.setFeature(f) def setFeature(self, feature): from muntjac.demo.sampler.SamplerApplication import SamplerApplication if feature != self._currentFeature: self._currentFeature = feature self._right.removeAllComponents() self._left.removeAllComponents() self._left.addComponent(self._controls) self._title.setValue('<span>' + feature.getName() + '</span>') # if feature.getSinceVersion().isNew(): # self._title.addStyleName('new') # else: # self._title.removeStyleName('new') self._left.addComponent(self.getExampleFor(feature)) self._right.setCaption('Description and Resources') # Do not show parent description if it's directly inside the root alll = SamplerApplication.getAllFeatures() parent = alll.getParent(feature) isRoot = alll.getParent(parent) is None desc = parent.getDescription() hasParentDesc = False if parent is not None and not isRoot: parentLabel = Label(parent.getDescription()) if desc is not None and desc != '': parentLabel.setContentMode(Label.CONTENT_XHTML) self._right.addComponent(parentLabel) hasParentDesc = True desc = feature.getDescription() if desc is not None and desc != '': # Sample description uses additional decorations if a parent # description is found l = Label( ("<div class=\"outer-deco\"><div class=\"deco\">" "<span class=\"deco\"></span>") + desc + "</div></div>", Label.CONTENT_XHTML) self._right.addComponent(l) if hasParentDesc: l.setStyleName('sample-description') else: l.setStyleName('description') # open src in new window -link self._showSrc.setTargetName(self._currentFeature.getFragmentName()) er = ExternalResource(self.getApplication().getURL() + 'src/' + self._currentFeature.getFragmentName()) self._showSrc.setResource(er) resources = feature.getRelatedResources() if resources is not None: res = VerticalLayout() self.caption = Label("<span>Additional Resources</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') res.addComponent(self.caption) res.setMargin(False, False, True, False) for r in resources: l = Link(r.getName(), r) l.setIcon(ThemeResource('../runo/icons/16/note.png')) res.addComponent(l) self._right.addComponent(res) apis = feature.getRelatedAPI() if apis is not None: api = VerticalLayout() self.caption = Label("<span>API Documentation</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') api.addComponent(self.caption) api.setMargin(False, False, True, False) for r in apis: l = Link(r.getName(), r) ic = ThemeResource('../runo/icons/16/document-txt.png') l.setIcon(ic) api.addComponent(l) self._right.addComponent(api) features = feature.getRelatedFeatures() if features is not None: rel = VerticalLayout() self.caption = Label("<span>Related Samples</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') rel.addComponent(self.caption) rel.setMargin(False, False, True, False) for c in features: f = SamplerApplication.getFeatureFor(c) if f is not None: er = ExternalResource(self.getApplication().getURL() + '#' + f.getFragmentName()) al = ActiveLink(f.getName(), er) if isinstance(f, FeatureSet): ic = ThemeResource('../sampler/icons/category.gif') else: ic = ThemeResource('../sampler/icons/sample.png') al.setIcon(ic) al.addListener(LinkListener(self, f), ILinkActivatedListener) rel.addComponent(al) self._right.addComponent(rel) def getExampleFor(self, f): ex = self._exampleCache.get(f) if ex is None: ex = f.getExample() self._exampleCache[f] = ex return ex
def setFeature(self, feature): from muntjac.demo.sampler.SamplerApplication import SamplerApplication if feature != self._currentFeature: self._currentFeature = feature self._right.removeAllComponents() self._left.removeAllComponents() self._left.addComponent(self._controls) self._title.setValue('<span>' + feature.getName() + '</span>') # if feature.getSinceVersion().isNew(): # self._title.addStyleName('new') # else: # self._title.removeStyleName('new') self._left.addComponent(self.getExampleFor(feature)) self._right.setCaption('Description and Resources') # Do not show parent description if it's directly inside the root alll = SamplerApplication.getAllFeatures() parent = alll.getParent(feature) isRoot = alll.getParent(parent) is None desc = parent.getDescription() hasParentDesc = False if parent is not None and not isRoot: parentLabel = Label(parent.getDescription()) if desc is not None and desc != '': parentLabel.setContentMode(Label.CONTENT_XHTML) self._right.addComponent(parentLabel) hasParentDesc = True desc = feature.getDescription() if desc is not None and desc != '': # Sample description uses additional decorations if a parent # description is found l = Label( ("<div class=\"outer-deco\"><div class=\"deco\">" "<span class=\"deco\"></span>") + desc + "</div></div>", Label.CONTENT_XHTML) self._right.addComponent(l) if hasParentDesc: l.setStyleName('sample-description') else: l.setStyleName('description') # open src in new window -link self._showSrc.setTargetName(self._currentFeature.getFragmentName()) er = ExternalResource(self.getApplication().getURL() + 'src/' + self._currentFeature.getFragmentName()) self._showSrc.setResource(er) resources = feature.getRelatedResources() if resources is not None: res = VerticalLayout() self.caption = Label("<span>Additional Resources</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') res.addComponent(self.caption) res.setMargin(False, False, True, False) for r in resources: l = Link(r.getName(), r) l.setIcon(ThemeResource('../runo/icons/16/note.png')) res.addComponent(l) self._right.addComponent(res) apis = feature.getRelatedAPI() if apis is not None: api = VerticalLayout() self.caption = Label("<span>API Documentation</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') api.addComponent(self.caption) api.setMargin(False, False, True, False) for r in apis: l = Link(r.getName(), r) ic = ThemeResource('../runo/icons/16/document-txt.png') l.setIcon(ic) api.addComponent(l) self._right.addComponent(api) features = feature.getRelatedFeatures() if features is not None: rel = VerticalLayout() self.caption = Label("<span>Related Samples</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') rel.addComponent(self.caption) rel.setMargin(False, False, True, False) for c in features: f = SamplerApplication.getFeatureFor(c) if f is not None: er = ExternalResource(self.getApplication().getURL() + '#' + f.getFragmentName()) al = ActiveLink(f.getName(), er) if isinstance(f, FeatureSet): ic = ThemeResource('../sampler/icons/category.gif') else: ic = ThemeResource('../sampler/icons/sample.png') al.setIcon(ic) al.addListener(LinkListener(self, f), ILinkActivatedListener) rel.addComponent(al) self._right.addComponent(rel)
def __init__(self): super(SplitPanelPositioningExample, self).__init__() self.setStyleName('split-panel-positioning-example') self.setSpacing(True) controls = HorizontalLayout() controls.setSpacing(True) self.addComponent(controls) self._verticalSplitPanel = VerticalSplitPanel() self._verticalSplitPanel.setSplitPosition(100, ISizeable.UNITS_PIXELS) self._verticalSplitPanel.setLocked(True) self._verticalSplitPanel.setHeight('450px') self._verticalSplitPanel.setWidth('100%') self.addComponent(self._verticalSplitPanel) # Add some content to the top topArea = Label() topArea.setStyleName('top-area') topArea.addStyleName('measured-from-top') topArea.setSizeFull() self._verticalSplitPanel.addComponent(topArea) # Add a horizontal split panel in the bottom area self._horizontalSplitPanel = HorizontalSplitPanel() self._horizontalSplitPanel.setSplitPosition(30, ISizeable.UNITS_PERCENTAGE) self._horizontalSplitPanel.setSizeFull() self._horizontalSplitPanel.setLocked(True) self._verticalSplitPanel.addComponent(self._horizontalSplitPanel) # Add some content to the left and right sides of the vertical layout leftArea = Label() leftArea.setStyleName('left-area') leftArea.addStyleName('measured-from-left') leftArea.setSizeFull() self._horizontalSplitPanel.addComponent(leftArea) rightArea = Label() rightArea.setStyleName('right-area') rightArea.setSizeFull() self._horizontalSplitPanel.addComponent(rightArea) # Allow user to set the splitter positioning self._measurePositionFromLeft = OptionGroup('Horizontal split position', ['30% from left', '30% from right']) self._measurePositionFromLeft.setValue('30% from left') self._measurePositionFromLeft.setImmediate(True) l = LeftRightListener(self, leftArea, rightArea) self._measurePositionFromLeft.addListener(l, IValueChangeListener) controls.addComponent(self._measurePositionFromLeft) controls.setComponentAlignment(self._measurePositionFromLeft, Alignment.MIDDLE_CENTER) self._measurePositionFromTop = OptionGroup('Vertical split position', ['100px from top', '100px from bottom']) self._measurePositionFromTop.setValue('100px from top') self._measurePositionFromTop.setImmediate(True) l = TopBottomListener(self, leftArea, rightArea, topArea) self._measurePositionFromTop.addListener(l, IValueChangeListener) controls.addComponent(self._measurePositionFromTop) controls.setComponentAlignment(self._measurePositionFromTop, Alignment.MIDDLE_CENTER)
class FeatureView(HorizontalLayout): _MSG_SHOW_SRC = 'View Source' def __init__(self): super(FeatureView, self).__init__() self._right = None self._left = None self._controls = None self._title = Label("", Label.CONTENT_XHTML) self._showSrc = None self._exampleCache = dict() self._currentFeature = None self._srcWindow = None self.setWidth('100%') self.setMargin(True) self.setSpacing(True) self.setStyleName('sample-view') self._left = VerticalLayout() self._left.setWidth('100%') self._left.setSpacing(True) self._left.setMargin(False) self.addComponent(self._left) self.setExpandRatio(self._left, 1) rightLayout = VerticalLayout() self._right = Panel(rightLayout) rightLayout.setMargin(True, False, False, False) self._right.setStyleName(Reindeer.PANEL_LIGHT) self._right.addStyleName('feature-info') self._right.setWidth('319px') self.addComponent(self._right) self._controls = HorizontalLayout() self._controls.setWidth('100%') self._controls.setStyleName('feature-controls') self._title.setStyleName('title') self._controls.addComponent(self._title) self._controls.setExpandRatio(self._title, 1) resetExample = NativeButton('Reset', ResetListener(self)) resetExample.setStyleName(BaseTheme.BUTTON_LINK) resetExample.addStyleName('reset') resetExample.setDescription('Reset Sample') self._controls.addComponent(resetExample) self._showSrc = ActiveLink() self._showSrc.setDescription('Right / middle / ctrl / shift -click for browser window/tab') self._showSrc.addListener(ShowSrcListener(self), ILinkActivatedListener) self._showSrc.setCaption(self._MSG_SHOW_SRC) self._showSrc.addStyleName('showcode') self._showSrc.setTargetBorder(Link.TARGET_BORDER_NONE) self._controls.addComponent(self._showSrc) def showSource(self, source): if self._srcWindow is None: self._srcWindow = Window('Python source') self._srcWindow.getContent().setSizeUndefined() self._srcWindow.setWidth('70%') self._srcWindow.setHeight('60%') self._srcWindow.setPositionX(100) self._srcWindow.setPositionY(100) self._srcWindow.removeAllComponents() self._srcWindow.addComponent( CodeLabel(source) ) if self._srcWindow.getParent() is None: self.getWindow().addWindow(self._srcWindow) def resetExample(self): if self._currentFeature is not None: w = self.getWindow() w.removeSubwindows() f = self._currentFeature self._currentFeature = None if f in self._exampleCache: del self._exampleCache[f] self.setFeature(f) def setFeature(self, feature): from muntjac.demo.sampler.SamplerApplication import SamplerApplication if feature != self._currentFeature: self._currentFeature = feature self._right.removeAllComponents() self._left.removeAllComponents() self._left.addComponent(self._controls) self._title.setValue('<span>' + feature.getName() + '</span>') if feature.getSinceVersion().isNew(): self._title.addStyleName('new') else: self._title.removeStyleName('new') self._left.addComponent(self.getExampleFor(feature)) self._right.setCaption('Description and Resources') # Do not show parent description if it's directly inside the root alll = SamplerApplication.getAllFeatures() parent = alll.getParent(feature) isRoot = alll.getParent(parent) is None desc = parent.getDescription() hasParentDesc = False if parent is not None and not isRoot: parentLabel = Label(parent.getDescription()) if desc is not None and desc != '': parentLabel.setContentMode(Label.CONTENT_XHTML) self._right.addComponent(parentLabel) hasParentDesc = True desc = feature.getDescription() if desc is not None and desc != '': # Sample description uses additional decorations if a parent # description is found l = Label(("<div class=\"outer-deco\"><div class=\"deco\">" "<span class=\"deco\"></span>") + desc + "</div></div>", Label.CONTENT_XHTML) self._right.addComponent(l) if hasParentDesc: l.setStyleName('sample-description') else: l.setStyleName('description') # open src in new window -link self._showSrc.setTargetName(self._currentFeature.getFragmentName()) er = ExternalResource(self.getApplication().getURL() + 'src/' + self._currentFeature.getFragmentName()) self._showSrc.setResource(er) resources = feature.getRelatedResources() if resources is not None: res = VerticalLayout() self.caption = Label("<span>Additional Resources</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') res.addComponent(self.caption) res.setMargin(False, False, True, False) for r in resources: l = Link(r.getName(), r) l.setIcon( ThemeResource('../runo/icons/16/note.png') ) res.addComponent(l) self._right.addComponent(res) apis = feature.getRelatedAPI() if apis is not None: api = VerticalLayout() self.caption = Label("<span>API Documentation</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') api.addComponent(self.caption) api.setMargin(False, False, True, False) for r in apis: l = Link(r.getName(), r) ic = ThemeResource('../runo/icons/16/document-txt.png') l.setIcon(ic) api.addComponent(l) self._right.addComponent(api) features = feature.getRelatedFeatures() if features is not None: rel = VerticalLayout() self.caption = Label("<span>Related Samples</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') rel.addComponent(self.caption) rel.setMargin(False, False, True, False) for c in features: f = SamplerApplication.getFeatureFor(c) if f is not None: er = ExternalResource(self.getApplication().getURL() + '#' + f.getFragmentName()) al = ActiveLink(f.getName(), er) if isinstance(f, FeatureSet): ic = ThemeResource('../sampler/icons/category.gif') else: ic = ThemeResource('../sampler/icons/sample.png') al.setIcon(ic) al.addListener(LinkListener(self, f), ILinkActivatedListener) rel.addComponent(al) self._right.addComponent(rel) def getExampleFor(self, f): ex = self._exampleCache.get(f) if ex is None: ex = f.getExample() self._exampleCache[f] = ex return ex
def setFeature(self, feature): from muntjac.demo.sampler.SamplerApplication import SamplerApplication if feature != self._currentFeature: self._currentFeature = feature self._right.removeAllComponents() self._left.removeAllComponents() self._left.addComponent(self._controls) self._title.setValue('<span>' + feature.getName() + '</span>') if feature.getSinceVersion().isNew(): self._title.addStyleName('new') else: self._title.removeStyleName('new') self._left.addComponent(self.getExampleFor(feature)) self._right.setCaption('Description and Resources') # Do not show parent description if it's directly inside the root alll = SamplerApplication.getAllFeatures() parent = alll.getParent(feature) isRoot = alll.getParent(parent) is None desc = parent.getDescription() hasParentDesc = False if parent is not None and not isRoot: parentLabel = Label(parent.getDescription()) if desc is not None and desc != '': parentLabel.setContentMode(Label.CONTENT_XHTML) self._right.addComponent(parentLabel) hasParentDesc = True desc = feature.getDescription() if desc is not None and desc != '': # Sample description uses additional decorations if a parent # description is found l = Label(("<div class=\"outer-deco\"><div class=\"deco\">" "<span class=\"deco\"></span>") + desc + "</div></div>", Label.CONTENT_XHTML) self._right.addComponent(l) if hasParentDesc: l.setStyleName('sample-description') else: l.setStyleName('description') # open src in new window -link self._showSrc.setTargetName(self._currentFeature.getFragmentName()) er = ExternalResource(self.getApplication().getURL() + 'src/' + self._currentFeature.getFragmentName()) self._showSrc.setResource(er) resources = feature.getRelatedResources() if resources is not None: res = VerticalLayout() self.caption = Label("<span>Additional Resources</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') res.addComponent(self.caption) res.setMargin(False, False, True, False) for r in resources: l = Link(r.getName(), r) l.setIcon( ThemeResource('../runo/icons/16/note.png') ) res.addComponent(l) self._right.addComponent(res) apis = feature.getRelatedAPI() if apis is not None: api = VerticalLayout() self.caption = Label("<span>API Documentation</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') api.addComponent(self.caption) api.setMargin(False, False, True, False) for r in apis: l = Link(r.getName(), r) ic = ThemeResource('../runo/icons/16/document-txt.png') l.setIcon(ic) api.addComponent(l) self._right.addComponent(api) features = feature.getRelatedFeatures() if features is not None: rel = VerticalLayout() self.caption = Label("<span>Related Samples</span>", Label.CONTENT_XHTML) self.caption.setStyleName('section') self.caption.setWidth('100%') rel.addComponent(self.caption) rel.setMargin(False, False, True, False) for c in features: f = SamplerApplication.getFeatureFor(c) if f is not None: er = ExternalResource(self.getApplication().getURL() + '#' + f.getFragmentName()) al = ActiveLink(f.getName(), er) if isinstance(f, FeatureSet): ic = ThemeResource('../sampler/icons/category.gif') else: ic = ThemeResource('../sampler/icons/sample.png') al.setIcon(ic) al.addListener(LinkListener(self, f), ILinkActivatedListener) rel.addComponent(al) self._right.addComponent(rel)
def setFeatureContainer(self, c): self._grid.removeAllComponents() features = c.getItemIds() rootSet = CssLayout() rootTitle = None highlightRow = CssLayout() highlightRow.setStyleName('highlight-row') sampleCount = 0 for f in features: if isinstance(f, FeatureSet): if c.isRoot(f): if rootTitle is not None: rootTitle.setValue( ('<em>' + str(sampleCount) + ' samples</em>' + rootTitle.getValue())) sampleCount = 0 desc = f.getDescription() try: idx = desc.index(".") except ValueError: idx = -1 rootTitle = Label( "<h2>" + f.getName() + "</h2><span>" + desc[:idx + 1] + "</span>", Label.CONTENT_XHTML) rootTitle.setSizeUndefined() if f.getRelatedFeatures() is not None: rootTitle.setValue('<em>' + len(f.getRelatedFeatures()) + ' samples</em>' + rootTitle.getValue()) rootSet = CssLayout() rootSet.setStyleName('root') rootTitle.setStyleName('root-section') self._grid.addComponent(rootTitle) self._grid.addComponent(rootSet) else: sampleCount += 1 resId = '75-' + f.getIconName() res = self._app.getSampleIcon(resId) if rootSet.getParent() is None: # This sample is directly inside a non root feature # set, we present these with higher priority if rootTitle is None: parent = self._app._allFeatures.getParent(f) rootTitle = Label("<h2>" + parent.getName() + "</h2>", Label.CONTENT_XHTML) rootTitle.setStyleName('root-section highlights-title') rootTitle.setSizeUndefined() self._grid.addComponent(rootTitle) if parent.getDescription() is not None: desc = Label(parent.getDescription(), Label.CONTENT_XHTML) desc.setStyleName('highlights-description') desc.setSizeUndefined() self._grid.addComponent(desc) # Two samples per row if sampleCount % 2 == 1: highlightRow = CssLayout() highlightRow.setStyleName('highlight-row') self._grid.addComponent(highlightRow) l = CssLayout() l.setStyleName('highlight') er = ExternalResource('#' + f.getFragmentName()) sample = ActiveLink(f.getName(), er) sample.setIcon(res) # if f.getSinceVersion().isNew(): # sample.addStyleName('new') l.addComponent(sample) if (f.getDescription() is not None and f.getDescription() != ''): d = f.getDescription() desc = Label(d[:d.index(".") + 1], Label.CONTENT_XHTML) desc.setSizeUndefined() l.addComponent(desc) highlightRow.addComponent(l) else: sample = ActiveLink( f.getName(), ExternalResource('#' + f.getFragmentName())) sample.setStyleName(BaseTheme.BUTTON_LINK) sample.addStyleName('screenshot') if (f.getDescription() is not None and f.getDescription() != ''): desc = f.getDescription() try: idx = desc.index('.') except ValueError: idx = -1 sample.setDescription(desc[:idx + 1]) # if f.getSinceVersion().isNew(): # sample.addStyleName('new') sample.setIcon(res) rootSet.addComponent(sample) if rootTitle is not None: rootTitle.setValue('<em>' + str(sampleCount) + ' samples</em>' + rootTitle.getValue())