本文整理汇总了Python中pyjamas.ui.Grid.Grid.addTableListener方法的典型用法代码示例。如果您正苦于以下问题:Python Grid.addTableListener方法的具体用法?Python Grid.addTableListener怎么用?Python Grid.addTableListener使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyjamas.ui.Grid.Grid
的用法示例。
在下文中一共展示了Grid.addTableListener方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: onModuleLoad
# 需要导入模块: from pyjamas.ui.Grid import Grid [as 别名]
# 或者: from pyjamas.ui.Grid.Grid import addTableListener [as 别名]
class GridEdit:
def onModuleLoad(self):
self.input = TextBox()
self.input.setEnabled(False)
self.input.addKeyboardListener(self)
self.g=Grid()
self.g.resize(5, 5)
self.g.setHTML(0, 0, "<b>Grid Edit</b>")
self.g.setBorderWidth(2)
self.g.setCellPadding(4)
self.g.setCellSpacing(1)
self.g.setWidth("500px")
self.g.setHeight("120px")
self.g.addTableListener(self)
self.initGrid()
RootPanel().add(self.input)
RootPanel().add(self.g)
def onKeyDown(self, sender, keycode, modifiers):
pass
def onKeyUp(self, sender, keycode, modifiers):
pass
def onKeyPress(self, sender, keycode, modifiers):
if keycode == KeyboardListener.KEY_ESCAPE:
self.input.setEnabled(False)
elif keycode == KeyboardListener.KEY_ENTER:
self.input.setEnabled(False)
val = self.input.getText()
self.set_grid_value(self.row, self.col, val)
def onCellClicked(self, sender, row, col):
self.row = row
self.col = col
val = self.values[row][col]
self.input.setText(val)
self.input.setEnabled(True)
self.input.setFocus(True)
def set_grid_value(self, row, col, val):
self.values[row][col] = val
if val == "":
val = " "
self.g.setHTML(row, col, val)
def initGrid(self):
self.values = {}
for y in range(5):
self.values[y] = {}
for x in range(5):
self.values[y][x] = ""
for y in range(5):
for x in range(5):
val = self.values[y][x]
self.set_grid_value(y, x, val)
示例2: drawGrid
# 需要导入模块: from pyjamas.ui.Grid import Grid [as 别名]
# 或者: from pyjamas.ui.Grid.Grid import addTableListener [as 别名]
def drawGrid(self, month, year):
# draw the grid in the middle of the calendar
daysInMonth = self.getDaysInMonth(month, year)
# first day of the month & year
secs = time.mktime((year, month, 1, 0, 0, 0, 0, 0, -1))
struct = time.localtime(secs)
# 0 - sunday for our needs instead 0 = monday in tm_wday
startPos = (struct.tm_wday + 1) % 7
slots = startPos + daysInMonth - 1
rows = int(slots/7) + 1
grid = Grid(rows+1, 7) # extra row for the days in the week
grid.setWidth("100%")
grid.addTableListener(self)
self.middlePanel.setWidget(grid)
#
# put some content into the grid cells
#
for i in range(7):
grid.setText(0, i, self.getDaysOfWeek()[i])
grid.cellFormatter.addStyleName(0, i, "calendar-header")
#
# draw cells which are empty first
#
day =0
pos = 0
while pos < startPos:
grid.setText(1, pos , " ")
grid.cellFormatter.setStyleAttr(1, pos, "background", "#f3f3f3")
grid.cellFormatter.addStyleName(1, pos, "calendar-blank-cell")
pos += 1
# now for days of the month
row = 1
day = 1
col = startPos
while day <= daysInMonth:
if pos % 7 == 0 and day <> 1:
row += 1
col = pos % 7
grid.setText(row, col, str(day))
if self.currentYear == self.todayYear and \
self.currentMonth == self.todayMonth and day == self.todayDay:
grid.cellFormatter.addStyleName(row, col, "calendar-cell-today")
else:
grid.cellFormatter.addStyleName(row, col, "calendar-day-cell")
day += 1
pos += 1
#
# now blank lines on the last row
#
col += 1
while col < 7:
grid.setText(row, col, " ")
grid.cellFormatter.setStyleAttr(row, col, "background", "#f3f3f3")
grid.cellFormatter.addStyleName(row, col, "calendar-blank-cell")
col += 1
return grid
示例3: __init__
# 需要导入模块: from pyjamas.ui.Grid import Grid [as 别名]
# 或者: from pyjamas.ui.Grid.Grid import addTableListener [as 别名]
class Viewer:
def __init__(self, db_url, parent_panel, doc_callback=None, page_size=5):
self.db_url = db_url
self.parent_panel = parent_panel
self.doc_callback = doc_callback
self.page_size = page_size
def onModuleLoad(self):
## Grid setup
self.grid = Grid()
# Note: The resize method args are Rows,Cols (Curses style)
self.grid.resize(1,4)
self.grid.setBorderWidth(1)
self.grid.setHTML(0,0,'#')
self.grid.setHTML(0,1,'ID')
self.grid.setHTML(0,2,'Revision')
self.grid.setHTML(0,3,'Delete')
self.grid.addTableListener(self)
self.parent_panel.add(self.grid)
## Buttons
self.button_panel = HorizontalPanel()
# Prev
self.first_button = Button("<-", self.firstPage)
self.first_button.setEnabled(False)
self.button_panel.add(self.first_button)
self.prev_button = Button("Previous", self.prevPage)
self.prev_button.setEnabled(False)
self.button_panel.add(self.prev_button)
self.next_button = Button("Next", self.nextPage)
self.next_button.setEnabled(False)
self.button_panel.add(self.next_button)
self.parent_panel.add(self.button_panel)
def populate(self, json):
view_obj = JSONParser().decode(json)
view_rows = view_obj['rows']
offset = view_obj['offset']
num_rows = len(view_rows)
self.first_key = view_rows[0]['key']
if offset != 0:
self.first_button.setEnabled(True)
if num_rows > self.page_size:
self.next_key = view_rows[-1:][0]['key']
self.next_button.setEnabled(True)
self.grid.resize(self.page_size+1,4)
else:
self.grid.resize(num_rows+1,4)
for row_num in range(num_rows):
if row_num < self.page_size:
self.grid.setHTML(row_num+1, 0, 1+offset+row_num)
self.grid.setHTML(row_num+1, 1, view_rows[row_num]['key'])
self.grid.setHTML(row_num+1, 2,
view_rows[row_num]['value']['rev'])
self.grid.setHTML(row_num+1, 3, '<b>X O X</b>')
if len(self.prev_keys)>0:
self.prev_button.setEnabled(True)
def onCellClicked(self, sender, row, col):
doc_id = self.grid.getHTML(row, 1)
if col == 3:
doc_rev = self.grid.getHTML(row, 2)
url = self.db_url+doc_id+'?rev='+doc_rev
HTTPRequest().asyncDelete(None, None, url=url,
handler=DeleteHandler(self))
else:
if self.doc_callback is not None:
self.doc_callback(doc_id)
def firstPage(self):
self.loadPage(None)
def nextPage(self):
self.prev_keys.append(self.first_key)
self.loadPage(self.next_key)
def prevPage(self):
self.loadPage(self.prev_keys.pop())
def setView(self, view_path, first_key = None):
self.view_path = view_path
#self.prev_keys = []
#self.next_key = None
self.loadPage(first_key)
def loadPage(self, startkey=None):
limit = int(self.page_size)+1
view_url = self.db_url+self.view_path+'?limit=%d'%limit
if startkey is not None:
view_url += '&startkey="%s"'%startkey
else:
self.prev_keys = []
self.first_button.setEnabled(False)
#.........这里部分代码省略.........
示例4: Photos
# 需要导入模块: from pyjamas.ui.Grid import Grid [as 别名]
# 或者: from pyjamas.ui.Grid.Grid import addTableListener [as 别名]
class Photos(Composite):
def __init__(self):
Composite.__init__(self)
self.albums = []
self.photos = []
self.grid = Grid(4, 4, CellPadding=4, CellSpacing=4)
self.grid.addTableListener(self)
self.drill = 0
self.pos = 0
self.up = Button("Up", self)
self.next = Button("Next", self)
self.prev = Button("Prev", self)
self.timer = Timer(notify=self)
self.userid = "jameskhedley"
self.album_url = "http://picasaweb.google.com/data/feed/base/user/" + self.userid + "?alt=json-in-script&kind=album&hl=en_US&callback=restCb"
self.doRESTQuery(self.album_url, self.timer)
self.vp = VerticalPanel()
self.disclosure = DisclosurePanel("Click for boring technical details.")
self.disclosure.add(HTML('''<p>OK so you want to write client JS to do a RESTful HTTP query from picasa right?
Well you can't because of the Same Origin Policy. Basically this means that
because the domain of the query and the domain of the hosted site are different,
then that could well be a cross-site scripting (XSS) attack. So, the workaround is to
do the call from a script tag so the JSON we get back is part of the document.
But since we don't know what URL to hit yet, once we find out then we have to inject
a new script tag dynamically which the browser will run as soon as we append it.
To be honest I'm not 100% why Google use RESTful services and not JSON-RPC or somesuch,
which would be easier. Well, easier for me.'''))
self.IDPanel = HorizontalPanel()
self.IDPanel.add(Label("Enter google account:"))
self.IDButton = Button("Go", self)
self.IDBox = TextBox()
self.IDBox.setText(self.userid)
self.IDPanel.add(self.IDBox)
self.IDPanel.add(self.IDButton)
self.vp.add(self.IDPanel)
self.vp.add(self.disclosure)
self.vp.add(self.grid)
self.initWidget(self.vp)
def doRESTQuery(self, url, timer):
"""this is a totally different from an RPC call in that we have to
dynamically add script tags to the DOM when we want to query the
REST API. These rely on callbacks in the DOM so we can either add
them dynamically or pre-define them in public/Main.html.
Once we've done that have to wait for the response.
Which means we need to provide a listener for the timer"""
JS("$wnd.receiver = 'wait'")
new_script = DOM.createElement("script")
DOM.setElemAttribute(new_script, "src", url)
DOM.setElemAttribute(new_script, "type","text/javascript")
JS("$wnd.document.body.appendChild(@{{new_script}})")
self.timer.schedule(100)
def onCellClicked(self, sender, row, col):
if self.drill==0:
self.drill += 1
self.vp.clear()
self.grid.clear()
self.vp.add(self.up)
self.vp.add(self.grid)
gridcols = self.grid.getColumnCount()
album = self.albums[row+col+(row*(gridcols-1))]
url = "http://picasaweb.google.com/data/feed/base/user/" + self.userid + "/albumid/" + album["id"] + "?alt=json-in-script&kind=photo&hl=en_US&callback=restCb"
self.doRESTQuery(url, self.timer)
elif self.drill==1:
self.drill += 1
gridcols = self.grid.getColumnCount()
self.pos =row+col+(row*(gridcols-1))
photo = self.photos[self.pos]
self.vp.clear()
self.fullsize = HTML('<img src="' + photo["full"] + '"/>')
hp = HorizontalPanel()
hp.add(self.up)
hp.add(self.prev)
hp.add(self.next)
hp.setSpacing(8)
self.vp.add(hp)
self.vp.add(self.fullsize)
def onClick(self, sender):
if sender == self.IDButton:
self.userid = self.IDBox.getText()
if self.userid == "" or self.userid.isdigit():
return
self.drill = 0
self.album_url = "http://picasaweb.google.com/data/feed/base/user/" + self.userid + "?alt=json-in-script&kind=album&hl=en_US&callback=restCb"
self.grid.clear()
self.doRESTQuery(self.album_url, self.timer)
else:
if self.drill == 2:
if sender == self.up:
self.drill=1
self.vp.clear()
self.vp.add(self.up)
#.........这里部分代码省略.........
示例5: drawGrid
# 需要导入模块: from pyjamas.ui.Grid import Grid [as 别名]
# 或者: from pyjamas.ui.Grid.Grid import addTableListener [as 别名]
def drawGrid(self, month, year):
# draw the grid in the middle of the calendar
self.checkLinks(month, year)
daysInMonth = self.getDaysInMonth(month, year)
# first day of the month & year
secs = time.mktime((year, month, 1, 0, 0, 0, 0, 0, -1))
struct = time.localtime(secs)
startPos = (struct.tm_wday + self.dayoffset) % 7
slots = startPos + daysInMonth - 1
rows = int(slots/7) + 1
grid = Grid(rows+1, 7, # extra row for the days in the week
StyleName="calendar-grid")
grid.setWidth("100%")
grid.addTableListener(self)
self.middlePanel.setWidget(grid)
cf = grid.getCellFormatter()
#
# put some content into the grid cells
#
for i in range(7):
grid.setText(0, i, self.getDaysOfWeek()[i])
cf.addStyleName(0, i, "calendar-header")
#
# draw cells which are empty first
#
day = 0
pos = 0
while pos < startPos:
self._setCell(grid, 1, pos, BLANKCELL, "calendar-blank-cell")
pos += 1
# now for days of the month
row = 1
day = 1
col = startPos
while day <= daysInMonth:
if pos % 7 == 0 and day != 1:
row += 1
col = pos % 7
if not self._indaterange(self.currentYear, self.currentMonth, day):
self._setCell(grid, row, col, BLANKCELL, "calendar-blank-cell")
day += 1
pos += 1
continue
if self.currentYear == self.todayYear and \
self.currentMonth == self.todayMonth and day == self.todayDay:
style = "calendar-cell-today"
else:
style = "calendar-day-cell"
self._setCell(grid, row, col, str(day), style)
day += 1
pos += 1
#
# now blank lines on the last row
#
col += 1
while col < 7:
self._setCell(grid, row, col, BLANKCELL, "calendar-blank-cell")
col += 1
return grid
示例6: InputBox
# 需要导入模块: from pyjamas.ui.Grid import Grid [as 别名]
# 或者: from pyjamas.ui.Grid.Grid import addTableListener [as 别名]
class InputBox(FocusPanel):
_props = [ ("maxLength", "Max Length", "MaxLength", int),
("text", "Text", "Text", None),
("matchPattern", "Match Pattern", "MatchPattern", None),
("cursorStyle", "Cursor Style", "CursorStyle", None),
]
@classmethod
def _getProps(self):
return FocusPanel._getProps() + self._props
def __init__(self, **kwargs):
""" setMatchPattern - defaults to '' to match everything
match pattern examples: '^[0-9]*$' is for digits only
'^[0-9,A-Z]*$' is for digits and uppercase
setMaxLength
setText
OB """
kwargs['MatchPattern'] = kwargs.pop('MatchPattern', '')
cs = kwargs.pop('CursorStyle', "inputbox-cursor")
gs = kwargs.pop('StyleName', 'gwt-inputbox')
ap = AbsolutePanel(StyleName="inputbox")
self.tp = Grid(StyleName=gs, Width="100%", Height="100%",
CellPadding=0, CellSpacing=0)
self.cursor = HTML(StyleName=cs)
ap.add(self.tp)
ap.add(self.cursor, 0, 0)
self.cf = self.tp.getCellFormatter()
FocusPanel.__init__(self, Widget=ap, **kwargs)
self.addTableListener(self)
self.addKeyboardListener(self)
self.addFocusListener(self)
self.word_selected_pos = 0
self.ctimer = Timer(notify=self.cursorFlash)
self.focusset = False
self.cstate = False
self._keypressListeners = []
def addKeypressListener(self, listener):
self._keypressListeners.append(listener)
def removeKeypressListener(self, listener):
self._keypressListeners.remove(listener)
def getMatchPattern(self):
return self.mp
def setMatchPattern(self, mp):
self.mp = mp
self.rexp = re.compile(self.mp)
def addDblTableListener(self, listener):
self.tp.addDblTableListener(listener)
def addTableListener(self, listener):
self.tp.addTableListener(listener)
def _move_cursor(self, col):
""" moves the css-styled cursor
"""
#old style (useful for insert mode - don't delete this line for now!)
#self.cf.setStyleName(0, col, "inputbox-square-word-cursor", highlight)
el = self.cf.getRawElement(0, col+1)
w = self.getWidget()
px = self.tp.getAbsoluteLeft()
py = self.tp.getAbsoluteTop()
width = DOM.getOffsetWidth(el)
px = DOM.getAbsoluteLeft(el) - px
py = DOM.getAbsoluteTop(el) - py
w.setWidgetPosition(self.cursor, px, py)
def _highlight_cursor(self, col, highlight):
""" highlights (or dehighlights) the currently selected cell
"""
#old style (useful for insert mode - don't delete this line for now!)
#self.cf.setStyleName(0, col, "inputbox-square-word-cursor", highlight)
print "_highlight", col, highlight
self._move_cursor(col)
self.cursor.setStyleName("inputbox-square-word-cursor", highlight)
def set_grid_value(self, v, y, x):
if v:
w = ""
else:
w = "0px"
v = v or EMPTY
s = HTML(v, StyleName="inputbox-square")
self.tp.setWidget(y, x, s)
self.cf.setAlignment(y, x, HasAlignment.ALIGN_LEFT,
HasAlignment.ALIGN_MIDDLE)
self.cf.setWidth(y, x, w)
#.........这里部分代码省略.........