def newPositioner(self, context): # Use two widgets so that setPixelSize() consistently affects dimensions outer = SimplePanel() outer.addStyleName(CSS_DRAGDROP_POSITIONER) # place off screen for border calculation RootPanel.get().add(outer, -500, -500) # Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid outer.setWidget(self.DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT) width = 0 height = 0 if isinstance(self.dropTarget,HorizontalPanel): for widget in context.selectedWidgets: width += widget.getOffsetWidth() height = Math.max(height, widget.getOffsetHeight()) else: for widget in context.selectedWidgets: width = Math.max(width, widget.getOffsetWidth()) height += widget.getOffsetHeight() inner = SimplePanel() inner.setPixelSize( width - DOMUtil.getHorizontalBorders(outer), height - DOMUtil.getVerticalBorders(outer)) outer.setWidget(inner) return outer
class Param(object): def __init__(self, container, kind, group, draw=True): self.container = container self.kind = kind self.group = group self.panel = SimplePanel(StyleName='aur-search-advanced-param') self.isInverted = False # assigned by parent, visual use only self.op = None if draw: self.draw() def draw(self): paramPanel = HorizontalPanel(Width='100%', VerticalAlignment='middle') options = self.drawOptions() label = Label(self.kind['item'], StyleName='aur-search-advanced-param-title') delSelf = Image(url='/ico/cross.png', Title='Delete this parameter') delSelf.addStyleName('aur-search-advanced-delete') if self.kind['allowsInverse']: invertSelf = Image(url='/ico/exclamation.png', Title='Invert this parameter') invertSelf.addClickListener(getattr(self, 'invertSelf')) else: invertSelf = Image(url='/ico/bullet_white.png', StyleName='aur-search-advanced-placeholder') self.container.add(self.panel) self.panel.setWidget(paramPanel) paramPanel.add(delSelf) paramPanel.add(label) paramPanel.add(options) paramPanel.add(invertSelf) paramPanel.setCellWidth(delSelf, '1px') paramPanel.setCellWidth(options, '1px') paramPanel.setCellWidth(invertSelf, '1px') delSelf.addClickListener(getattr(self, 'delSelf')) def drawOptions(self): widget = self.kind['widget']() if isinstance(widget, ListBox): for x in self.kind['params']: widget.addItem(x[0], x[1]) elif isinstance(widget, TextBox): pass elif isinstance(widget, CheckBox): if self.kind['params'][0]: widget.setChecked(True) elif isinstance(widget, DateField): pass return widget def delSelf(self, sender): self.group.delParam(self) def invertSelf(self, sender): if self.isInverted: self.isInverted = False self.panel.removeStyleName('aur-search-advanced-param-inverted') self.op.setText(self.group.operator) else: self.isInverted = True self.panel.addStyleName('aur-search-advanced-param-inverted') self.op.setText(self.group.operator + ' not')
def _gridCancelLink(self): bh4 = Hyperlink(self.cancel) bh4.addClickListener(getattr(self, 'onCancel')) b2 = SimplePanel() b2.add(bh4) b2.addStyleName("calendar-cancel") self.vp.add(b2)
def _gridCancelLink(self): bh4 = Hyperlink(self.cancel) bh4.addClickListener(getattr(self, 'onCancel')) b2 = SimplePanel() b2.add(bh4) b2.addStyleName("calendar-cancel") self.vp.add(b2)
def makePositioner(self, reference): outer = SimplePanel() # Use two widgets so that setPixelSize() consistently affects dimensions outer.addStyleName(CSS_DRAGDROP_POSITIONER) outer.getElement().getStyle().setProperty("margin", "0px") RootPanel.get().add(outer, -500, -500) # place off screen for border calculation outer.setWidget(DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT) # Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid inner = SimplePanel() inner.getElement().getStyle().setProperty("margin", "0px") inner.getElement().getStyle().setProperty("border", "none") offsetWidth = reference.getOffsetWidth() - DOMUtil.getHorizontalBorders(outer) offsetHeight = reference.getOffsetHeight() - DOMUtil.getVerticalBorders(outer) inner.setPixelSize(offsetWidth, offsetHeight) outer.setWidget(inner) return outer
def newPositioner(self, context): # Use two widgets so that setPixelSize() consistently affects dimensions # excluding positioner border in quirks and strict modes SimplePanel outer = SimplePanel() outer.addStyleName(CSS_DRAGDROP_POSITIONER) # place off screen for border calculation RootPanel.get().add(outer, -500, -500) # Ensure IE quirks mode returns valid outer.offsetHeight, and thus valid # DOMUtil.getVerticalBorders(outer) outer.setWidget(DUMMY_LABEL_IE_QUIRKS_MODE_OFFSET_HEIGHT) int width = 0 int height = 0 if dropTarget instanceof HorizontalPanel: for Iterator iterator = context.selectedWidgets.iterator(); iterator.hasNext();:
* provide their own drag proxies. * * @param context the current drag context * @return a drag proxy """ def newDragProxy(self, context): AbsolutePanel container = AbsolutePanel() DOM.setStyleAttribute(container.getElement(), "overflow", "visible") WidgetArea draggableArea = WidgetArea(context.draggable, None) for Iterator iterator = context.selectedWidgets.iterator(); iterator.hasNext();: Widget widget = (Widget) iterator.next() WidgetArea widgetArea = WidgetArea(widget, None) Widget proxy = SimplePanel() proxy.setPixelSize(widget.getOffsetWidth(), widget.getOffsetHeight()) proxy.addStyleName(PRIVATE_CSS_PROXY) container.add(proxy, widgetArea.getLeft() - draggableArea.getLeft(), widgetArea.getTop() - draggableArea.getTop()) return container """* * Restore the selected widgets to their original location. * @see #saveSelectedWidgetsLocationAndStyle() * @see #restoreSelectedWidgetsStyle() """ def restoreSelectedWidgetsLocation(self): for Iterator iterator = context.selectedWidgets.iterator(); iterator.hasNext();: Widget widget = (Widget) iterator.next()
def drawFull(self, month, year): # should be called only once when we draw the calendar for # the first time self.vp = VerticalPanel() self.vp.setSpacing(2) self.vp.addStyleName("calendarbox calendar-module calendar") self.setWidget(self.vp) self.setVisible(False) # mth = int(month) yr = int(year) tp = HorizontalPanel() tp.addStyleName("calendar-top-panel") tp.setSpacing(5) h1 = Hyperlink('<<') h1.addClickListener(getattr(self, 'onPreviousYear')) h2 = Hyperlink('<') h2.addClickListener(getattr(self, 'onPreviousMonth')) h4 = Hyperlink('>') h4.addClickListener(getattr(self, 'onNextMonth')) h5 = Hyperlink('>>') h5.addClickListener(getattr(self, 'onNextYear')) tp.add(h1) tp.add(h2) # titlePanel can be changed, whenever we draw, so keep the reference txt = "<b>" txt += self.getMonthsOfYear()[mth-1] + " " + str(yr) txt += "</b>" self.titlePanel = SimplePanel() self.titlePanel.setWidget(HTML(txt)) self.titlePanel.setStyleName("calendar-center") tp.add(self.titlePanel) tp.add(h4) tp.add(h5) tvp = VerticalPanel() tvp.setSpacing(10) tvp.add(tp) self.vp.add(tvp) # done with top panel self.middlePanel = SimplePanel() grid = self.drawGrid(mth, yr) self.middlePanel.setWidget(grid) self.vp.add(self.middlePanel) self.defaultGrid = grid # # some links & handlers # bh1 = Hyperlink(self.yesterday) bh1.addClickListener(getattr(self, 'onYesterday')) bh2 = Hyperlink(self.today) bh2.addClickListener(getattr(self, 'onToday')) bh3 = Hyperlink(self.tomorrow) bh3.addClickListener(getattr(self, 'onTomorrow')) bh4 = Hyperlink(self.cancel) bh4.addClickListener(getattr(self, 'onCancel')) # # add code to test another way of doing the layout # b = HorizontalPanel() b.add(bh1) b.add(bh2) b.add(bh3) b.addStyleName("calendar-shortcuts") self.vp.add(b) b2 = SimplePanel() b2.add(bh4) b2.addStyleName("calendar-cancel") self.vp.add(b2) self.setVisible(True) return
def drawFull(self, month, year): # should be called only once when we draw the calendar for # the first time self.vp = VerticalPanel() self.vp.setSpacing(0) self.vp.setPadding(0) self.vp.addStyleName("calendarbox calendar-module calendar") self.setWidget(self.vp) self.setVisible(False) # mth = int(month) yr = int(year) tp = HorizontalPanel(Width="100%") tp.addStyleName("calendar-top-panel") tp.setSpacing(0) tp.setPadding(0) self.h1 = None self.h2 = None self.h4 = None self.h5 = None if self.backyear: self.h1 = self.bkls(self.backyear, StyleName="calendar-arrows") self.h1.addClickListener(getattr(self, 'onPreviousYear')) tp.add(self.h1) tp.setCellHorizontalAlignment(self.h1, "left") if self.backmonth: self.h2 = self.bkls(self.backmonth, StyleName="calendar-arrows") self.h2.addClickListener(getattr(self, 'onPreviousMonth')) tp.add(self.h2) tp.setCellHorizontalAlignment(self.h2, "left") # titlePanel can be changed, whenever we draw, so keep the reference txt = "<b>" txt += self.getMonthsOfYear()[mth-1] + " " + str(yr) txt += "</b>" self.titlePanel = SimplePanel() self.titlePanel.setWidget(HTML(txt)) self.titlePanel.setStyleName("calendar-center") tp.add(self.titlePanel) tp.setCellHorizontalAlignment(self.titlePanel, "center") tp.setCellWidth(self.titlePanel, "100%") if self.fwdmonth: self.h4 = self.bkls(self.fwdmonth, StyleName="calendar-arrows") self.h4.addClickListener(getattr(self, 'onNextMonth')) tp.add(self.h4) tp.setCellHorizontalAlignment(self.h4, "right") tp.setCellWidth(self.h4, "100%") self.h4.setWidth("100%") if self.fwdyear: self.h5 = self.bkls(self.fwdyear, StyleName="calendar-arrows") self.h5.addClickListener(getattr(self, 'onNextYear')) tp.add(self.h5) tp.setCellHorizontalAlignment(self.h5, "right") tvp = VerticalPanel(Width="100%") tvp.setSpacing(2) tvp.add(tp) self.vp.add(tvp) # done with top panel self.middlePanel = SimplePanel() grid = self.drawGrid(mth, yr) self.middlePanel.setWidget(grid) self.vp.add(self.middlePanel) self.defaultGrid = grid if self.addbuttons: # # some links & handlers # bh1 = Hyperlink(self.yesterday) bh1.addClickListener(getattr(self, 'onYesterday')) bh2 = Hyperlink(self.today) bh2.addClickListener(getattr(self, 'onToday')) bh3 = Hyperlink(self.tomorrow) bh3.addClickListener(getattr(self, 'onTomorrow')) bh4 = Hyperlink(self.cancel) bh4.addClickListener(getattr(self, 'onCancel')) # # add code to test another way of doing the layout # b = HorizontalPanel() b.add(bh1) b.add(bh2) b.add(bh3) b.addStyleName("calendar-shortcuts") self.vp.add(b) b2 = SimplePanel() b2.add(bh4) b2.addStyleName("calendar-cancel") self.vp.add(b2) self.checkLinks(mth, yr) self.setVisible(True)
class ParamGroup(object): def __init__(self, container, kind, parent=None, level=0, draw=True, title=None): self.container = container self.kind = kind self.parent = parent self.level = level self.title = title self.panel = SimplePanel(StyleName='aur-search-advanced-group') if level % 2 == 0: self.panel.addStyleName('aur-search-advanced-group-nested') self.childPanel = VerticalPanel(StyleName='aur-search-advanced-group-list', Width='100%') self.paramPanel = VerticalPanel(StyleName='aur-search-advanced-param-list', Width='100%') self.listPanel = VerticalPanel(StyleName='aur-search-advanced-list-boundary', Width='100%', Visible=False) self.paramChooser = ListBox() self.children = [] self.parameters = [] self.isInverted = False self.operator = 'and' # assigned by parent, visual use only self.op = None if parent else Label('and') if draw: self.draw() def draw(self): cont = VerticalPanel(Width='100%') header = HorizontalPanel(Width='100%', VerticalAlignment='middle', StyleName='aur-search-advanced-group-header') params = self.paramChooser addParam = Image(url='/ico/tick.png', Title='Add parameter to this group') addGroup = Image(url='/ico/table_add.png', Title='Nest group within this group') addGroupFull = Image(url='/ico/table_lightning.png', Title='Nest group within this group; all parameters') invertSelf = Image(url='/ico/exclamation.png', Title='Invert this parameter group') self.container.add(self.panel) self.panel.setWidget(cont) cont.add(header) if self.parent: d = Image(url='/ico/cross.png', Title='Delete this parameter group') d.addStyleName('aur-search-advanced-delete') header.add(d) header.setCellWidth(d, '1px') d.addClickListener(getattr(self, 'delSelf')) if self.title: t = Label(self.title, StyleName='aur-search-advanced-group-header-title') header.add(t) header.setCellWidth(t, '1px') header.add(params) header.add(addParam) header.add(addGroup) header.add(addGroupFull) header.add(invertSelf) header.setCellWidth(params, '1px') header.setCellWidth(addGroup, '1px') header.setCellWidth(addGroupFull, '1px') header.setCellWidth(invertSelf, '1px') for x in self.kind: params.addItem(x['item'], x['index']) cont.add(self.listPanel) self.listPanel.add(self.paramPanel) self.listPanel.add(self.childPanel) addParam.addClickListener(getattr(self, 'addParam')) addGroup.addClickListener(getattr(self, 'addGroup')) addGroupFull.addClickListener(getattr(self, 'addGroupFull')) invertSelf.addClickListener(getattr(self, 'invertSelf')) def addGroup(self, sender): self.listPanel.setVisible(True) op = Label(self.operator, Title='Invert group operator', StyleName='aur-search-advanced-group-op', Visible=False) op.addClickListener(getattr(self, 'invertOperator')) if len(self.children) > 0 or len(self.parameters) > 0: op.setVisible(True) self.childPanel.add(op) self.childPanel.setCellHorizontalAlignment(op, 'right') g = ParamGroup(self.childPanel, self.kind, self, self.level+1) g.op = op self.children.append(g) def addGroupFull(self, sender): # this is a little hacky, but it's so fast you don't see it self.addGroup(None) group = self.children[len(self.children)-1] for x in range(group.paramChooser.getItemCount()): group.paramChooser.setSelectedIndex(x) group.addParam(None) group.paramChooser.setSelectedIndex(0) def addParam(self, sender): self.listPanel.setVisible(True) op = Label(self.operator, Title='Invert group operator', StyleName='aur-search-advanced-param-op', Visible=False) op.addClickListener(getattr(self, 'invertOperator')) if len(self.parameters) > 0: op.setVisible(True) self.paramPanel.add(op) self.paramPanel.setCellHorizontalAlignment(op, 'right') k = self.kind[self.paramChooser.getSelectedValues()[0]] p = Param(self.paramPanel, k, self) p.op = op self.parameters.append(p) if len(self.children) > 0: self.children[0].op.setVisible(True) def addParamFull(self, sender): # this is a little hacky, but it's so fast you don't see it old = self.paramChooser.getSelectedIndex() for x in range(self.paramChooser.getItemCount()): self.paramChooser.setSelectedIndex(x) self.addParam(None) self.paramChooser.setSelectedIndex(old) def delGroup(self, child): self.children.remove(child) self.childPanel.remove(child.op) self.childPanel.remove(child.panel) lp = len(self.parameters) lc = len(self.children) if lp == 0 and lc > 0: self.children[0].op.setVisible(False) if lp == 0 and lc == 0: self.listPanel.setVisible(False) def delParam(self, param): self.parameters.remove(param) self.paramPanel.remove(param.op) self.paramPanel.remove(param.panel) lp = len(self.parameters) lc = len(self.children) if lp > 0: self.parameters[0].op.setVisible(False) if lp == 0 and lc > 0: self.children[0].op.setVisible(False) if lp == 0 and lc == 0: self.listPanel.setVisible(False) def delSelf(self, sender): self.parent.delGroup(self) def invertSelf(self, sender): if self.isInverted: self.isInverted = False self.panel.removeStyleName('aur-search-advanced-group-inverted') self.op.setText(self.operator) else: self.isInverted = True self.panel.addStyleName('aur-search-advanced-group-inverted') self.op.setText(self.operator + ' not') def invertOperator(self, sender): self.operator = 'or' if self.operator == 'and' else 'and' for x in self.parameters: suffix = ' not' if x.isInverted else '' x.op.setText(self.operator + suffix) for x in self.children: suffix = ' not' if x.isInverted else '' x.op.setText(self.operator + suffix)